[svn] r6133: nemerle/trunk/ncc: parsing/MainParser.n parsing/PreParser.n testsuite/negative/tyenf.n testsu...

nazgul svnadmin at nemerle.org
Sun Feb 19 14:10:13 CET 2006


Log:
Some special cases for null/empty values in parsing... I don't know where does some of the nulls coming from, but this seems to be working

Author: nazgul
Date: Sun Feb 19 14:09:50 2006
New Revision: 6133

Modified:
   nemerle/trunk/ncc/parsing/MainParser.n
   nemerle/trunk/ncc/parsing/PreParser.n
   nemerle/trunk/ncc/testsuite/negative/tyenf.n
   nemerle/trunk/ncc/testsuite/positive/printf.n

Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n	(original)
+++ nemerle/trunk/ncc/parsing/MainParser.n	Sun Feb 19 14:09:50 2006
@@ -121,7 +121,7 @@
       ParseExpr (env, lexer, allow_empty)
     }
 
-    /** Parse given string as expression, given context in which this
+    /** Parse expression given lexer producing its content and context in which this
         expression is situated.
      */
     public static ParseExpr ([NotNull] env : GlobalEnv,
@@ -132,8 +132,11 @@
       def tokens = preparser.PreParse ();
       def parser = MainParser (env);
 
-      if (allow_empty && tokens.Child == null)
+      if (tokens.Child == null)
+        if (allow_empty)
         null
+        else 
+          Message.FatalError ("expression without content is not allowed here");
       else {
         if (tokens.Child.Next == null)
           parser.push_stream ((tokens.Child :> Token.LooseGroup).Child);
@@ -247,9 +250,9 @@
     peek_sibling_token () : Token {
       if (stream != null) stream
       else {
-        def next_group = streams_stack.Peek ().Next;
-        if (next_group != null)
-          (next_group :> Token.LooseGroup).Child
+        def str = streams_stack.Peek ();
+        if (str != null && str.Next != null)
+          (str.Next :> Token.LooseGroup).Child
         else
           Token.EndOfGroup (last_tok.Location)
       }

Modified: nemerle/trunk/ncc/parsing/PreParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/PreParser.n	(original)
+++ nemerle/trunk/ncc/parsing/PreParser.n	Sun Feb 19 14:09:50 2006
@@ -456,7 +456,7 @@
           indention_based_copy ().ParseTopLevel ()
       }
     }
-    
+    [Nemerle.Assertions.Ensures (value != null)]
     public PreParse () : Token.BracesGroup {
       try {
         def top = parse_brace_group (Location.Default);

Modified: nemerle/trunk/ncc/testsuite/negative/tyenf.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/negative/tyenf.n	(original)
+++ nemerle/trunk/ncc/testsuite/negative/tyenf.n	Sun Feb 19 14:09:50 2006
@@ -23,7 +23,7 @@
 
     _ = $ "$(foo"; // E: runaway .* in format string
     _ = $ "$(foo +)"; // E: parse error near operator
+    _ = $ "$()"; // E: expression without content
     _ = $ ""; // OK
-    _ = $ "$()"; // OK
   }
 }

Modified: nemerle/trunk/ncc/testsuite/positive/printf.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/printf.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/printf.n	Sun Feb 19 14:09:50 2006
@@ -28,6 +28,11 @@
   
   f () : int { ++uid; uid }
   
+  public bug620 () : void {   
+      _ = $"$(def _f_1(){})";
+    _ = $"$(def _f_2(){}; ())";
+  }
+  
   public Main () : void {
     System.Console.WriteLine ("Core type unification test.");
     System.Console.WriteLine ("{0} {1} {2}", "I can see", 120, "devils dancing on the wall.");



More information about the svn mailing list