shithub: mc

Download patch

ref: af63c8fc4082fca2b5148cb55a6870ac926660e4
parent: a2644d1d980e0f1c5439dce7764f0d051cf4cc41
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Jan 6 19:10:17 EST 2019

Change indexed array literal syntax.

--- a/doc/lang.txt
+++ b/doc/lang.txt
@@ -998,7 +998,7 @@
                 tuplit:     "(" tuplelts ")"
 
                 structelts: ("." ident "=" expr)+
-                arrayelts:  (expr ":" expr | expr)*
+                arrayelts:  ("." "[" expr "]" "=" expr | expr)*
                 tupelts:    expr ("," expr)* [","]
 
             Sequence literals are used to initialize either a structure
@@ -1026,7 +1026,7 @@
 
             An unindexed initializer sequence is simply a comma separated
             list of values. An indexed initializer sequence contains a
-            '#number=value' comma separated sequence, which indicates the
+            '.[index]=value' comma separated sequence, which indicates the
             index of the array into which the value is inserted. A named
             initializer sequence contains a comma separated list of
             '.name=value' pairs.
@@ -1039,7 +1039,7 @@
                 [.a = 42, .b="str"]
 
             Example: Array literal:
-                [1,2,3], [2:3, 1:2, 0:1], []
+                [1,2,3], [.[2] = 3, .[1] = 2, .[0] = 1], []
 
             Example: Tuple literals:
                 (1,), (1,'b',"three")
--- a/lib/crypto/x25519.myr
+++ b/lib/crypto/x25519.myr
@@ -477,14 +477,14 @@
  *   q: a point of the curve (short form)
  */
 const cmult = {resultx, resultz, n, q
-	var a : felem[19] = [0:0, 18:0]
-	var b : felem[19] = [0:1, 18:0]
-	var c : felem[19] = [0:1, 18:0]
-	var d : felem[19] = [0:0, 18:0]
-	var e : felem[19] = [0:0, 18:0]
-	var f : felem[19] = [0:1, 18:0]
-	var g : felem[19] = [0:0, 18:0]
-	var h : felem[19] = [0:1, 18:0]
+	var a : felem[19] = [.[0] = 0, .[18] = 0]
+	var b : felem[19] = [.[0] = 1, .[18] = 0]
+	var c : felem[19] = [.[0] = 1, .[18] = 0]
+	var d : felem[19] = [.[0] = 0, .[18] = 0]
+	var e : felem[19] = [.[0] = 0, .[18] = 0]
+	var f : felem[19] = [.[0] = 1, .[18] = 0]
+	var g : felem[19] = [.[0] = 0, .[18] = 0]
+	var h : felem[19] = [.[0] = 1, .[18] = 0]
 	var nqpqx = a[:]
 	var nqpqz = b[:]
 	var nqx = c[:]
--- a/parse/gram.y
+++ b/parse/gram.y
@@ -963,8 +963,8 @@
 	;
 
 arrayelt: expr optendlns {$$ = $1;}
-	| expr Tcolon expr optendlns {
-		$$ = mkidxinit($2->loc, $1, $3);
+	| Tdot Tosqbrac expr Tcsqbrac Tasn expr optendlns {
+		$$ = mkidxinit($1->loc, $3, $6);
 	}
 	;
 
--- a/test/arraylit.myr
+++ b/test/arraylit.myr
@@ -2,6 +2,10 @@
 
 /* checks we can make indexed array literals. exits with 3. */
 const main = {
-	var a = [0: 1, 2: 3, 1: 2]
+	var a = [
+		.[0] = 1, 
+		.[2] = 3,
+		.[1] = 2,
+	]
 	std.exit(a[2])
 }