shithub: mc

Download patch

ref: e73472e0a7547ca2d9204f6019d9068fec4bd5b8
parent: e91825e9e811a55a5d7fb72505f56cd0f32b4b4f
author: Ori Bernstein <[email protected]>
date: Mon Jun 25 16:31:07 EDT 2012

Allow nullary union constructors.

--- a/parse/gram.y
+++ b/parse/gram.y
@@ -327,8 +327,10 @@
         ;
 
 unionelt
-        : Tident type Tendln
-            {$$ = mkdecl($1->line, mkname($1->line, $1->str), $2);}
+        : Ttick Tident type Tendln
+            {$$ = mkdecl($2->line, mkname($2->line, $2->str), $3);}
+        | Ttick Tident Tendln
+            {$$ = mkdecl($2->line, mkname($2->line, $2->str), NULL);}
         | visdef Tendln
             {$$ = NULL;}
         | Tendln
@@ -402,6 +404,8 @@
 unioncons
         : Ttick Tident addexpr
             {$$ = mkexpr($1->line, Ocons, $2, $3, NULL);}
+        | Ttick Tident
+            {$$ = mkexpr($1->line, Ocons, $2, NULL);}
         | addexpr
         ;
 
--- /dev/null
+++ b/test/union.myr
@@ -1,0 +1,10 @@
+type u = union
+	`Some int
+	`None
+;;
+
+const main = {
+	var v : u
+
+	v = `None
+}