[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