[svn] r6097: nemerle/trunk/ncc/parsing: MainParser-Extensions.n
MainParser.n
malekith
svnadmin at nemerle.org
Mon Jan 30 15:27:47 CET 2006
Log:
Make macro syntax extension keywords hygienic for their scope (parm, method, whatever).
Author: malekith
Date: Mon Jan 30 15:27:46 2006
New Revision: 6097
Modified:
nemerle/trunk/ncc/parsing/MainParser-Extensions.n
nemerle/trunk/ncc/parsing/MainParser.n
Modified: nemerle/trunk/ncc/parsing/MainParser-Extensions.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser-Extensions.n (original)
+++ nemerle/trunk/ncc/parsing/MainParser-Extensions.n Mon Jan 30 15:27:46 2006
@@ -234,7 +234,7 @@
match (peek_token ()) {
| Token.Keyword (k) as tok =>
match (env.SyntaxKeywords.Find (k)) {
- | Some (ext) =>
+ | Some (ext) when ext.Target %&& target =>
shift ();
def (end, parms) = parse_grammar_rule (ext, TokenStoppers.None, target);
@@ -258,7 +258,7 @@
}
extensions ()
- | None => ()
+ | _ => ()
}
| _ => ()
}
Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n (original)
+++ nemerle/trunk/ncc/parsing/MainParser.n Mon Jan 30 15:27:46 2006
@@ -645,7 +645,7 @@
mutable customs = get_customs ();
def mods = Modifiers (get_modifiers (), []);
- parse_top_extensions (mods, MacroTargets.All);
+ parse_top_extensions (mods, MacroTargets.All & ~MacroTargets.Parameter);
def tok = peek_token ();
def result =
@@ -1567,14 +1567,14 @@
| Token.Keyword (str)
| Token.Operator (str) when str != "$" =>
match (env.SyntaxKeywords.Find (str)) {
- | Some (syntax_definition) =>
+ | Some (syntax_definition) when syntax_definition.Target %&& ((1 << 15) :> MacroTargets) =>
shift ();
_expr_stack = parse_syntax_definition (syntax_definition, stop) :: _expr_stack;
// after raw expression we are in postfix context
_op_context = OpContext.Postfix;
loop ()
- | None =>
+ | _ =>
def info =
match (str) {
| "-" => OperatorInfo.UnMinus
@@ -2075,9 +2075,9 @@
// here the expression syntax extensions are triggered, by first keyword
// when it has some syntax definition attached
match (env.SyntaxKeywords.Find (k)) {
- | None => fatal_error (tok, "unexpected keyword in expression context");
- | Some (syntax_definition) =>
+ | Some (syntax_definition) when syntax_definition.Target %&& ((1 << 15) :> MacroTargets) =>
parse_syntax_definition (syntax_definition, stop)
+ | _ => fatal_error (tok, "unexpected keyword in expression context");
}
| _ => fatal_error (tok, "expecting expression");
More information about the svn
mailing list