[svn] r7375: nemerle/trunk/ncc: parsing/MainParser.n testsuite/positive/function-from-tuple.n

nazgul svnadmin at nemerle.org
Sun Feb 4 11:39:34 CET 2007


Log:
Allow ommiting parenthesis in lambda expressions

Author: nazgul
Date: Sun Feb  4 11:39:32 2007
New Revision: 7375

Modified:
   nemerle/trunk/ncc/parsing/MainParser.n
   nemerle/trunk/ncc/testsuite/positive/function-from-tuple.n

Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n	(original)
+++ nemerle/trunk/ncc/parsing/MainParser.n	Sun Feb  4 11:39:32 2007
@@ -1430,7 +1430,7 @@
     {
       when (name == null) name = get_splicable_id ();
       def tyvars = parse_tyvars ();      
-      def parms = parse_parameters (allow_patterns);
+      def parms = parse_parameters (allow_patterns = allow_patterns);
       def ret_type = parse_return_type (true);
       def typarms = parse_where_constraints (tyvars);
 
@@ -1492,7 +1492,7 @@
     }
 
     /// parameters of (a:foo,b,c) or [a,b:foo,c] kind
-    parse_parameters (allow_patterns = false) : list [Fun_parm] {
+    parse_parameters (allow_patterns = false, allow_omit = false) : list [Fun_parm] {
       def group = get_token ();
       match (group) {
         | Token.RoundGroup (null) | Token.SquareGroup (null) => []
@@ -1507,7 +1507,12 @@
                          
             | _ => pop_stream (); TokenMap (group, fun () { parse_parameter (allow_patterns) });
           }
-        | _ => Error (group, "expecting function parameters"); []
+        | _ => 
+          if (allow_omit) 
+            push_back ()
+          else
+            Error (group, "expecting function parameters"); 
+          []
       }
     }
 
@@ -1525,9 +1530,10 @@
                           | TokenStoppers.Equal | TokenStoppers.Where)
           }
 
-        | _ when allow_inference => PExpr.Wildcard (last_tok.Location)
-        | t => Error (t, "expecting `:' and type specifier for class member");
-          PExpr.Wildcard (last_tok.Location)
+        | t => 
+          unless (allow_inference)
+            Error (t, "expecting `:' and type specifier for class member");
+          PExpr.Wildcard (if (last_tok != null) last_tok.Location else t.Location)
       };
     }
        
@@ -2058,7 +2064,7 @@
 
           | Token.Keyword ("fun") =>
             def tyvars = parse_tyvars ();      
-            def parms = parse_parameters (allow_patterns = true);
+            def parms = parse_parameters (allow_patterns = true, allow_omit = true);
             def ret_type = parse_return_type (true);
             def typarms = parse_where_constraints (tyvars);
 

Modified: nemerle/trunk/ncc/testsuite/positive/function-from-tuple.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/function-from-tuple.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/function-from-tuple.n	Sun Feb  4 11:39:32 2007
@@ -60,6 +60,13 @@
 C2().getT()(4,2);
 D2().getT()(4,2);
 
+mutable water = 1;
+def fire = fun { System.Console.WriteLine (water) };
+water = 2;
+fire ();
+water = 4;
+fire ();
+
 
 /*
 BEGIN-OUTPUT
@@ -67,5 +74,7 @@
 4093
 (4, 2)
 (4, 2)
+2
+4
 END-OUTPUT
 */



More information about the svn mailing list