From 79ecd142488e0a26b47ce47fede6c5aacfcbc226 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Mon, 23 Jan 2012 15:34:56 -0800 Subject: [PATCH] fix Issue 3838 - PrimaryExpression rule doesn't permit module scope template instances --- expression.dd | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/expression.dd b/expression.dd index 1814492187..af8b01ec78 100644 --- a/expression.dd +++ b/expression.dd @@ -708,7 +708,7 @@ $(GNAME UnaryExpression): $(B +) $(I UnaryExpression) $(B !) $(I UnaryExpression) $(GLINK ComplementExpression) - $(B $(LPAREN)) $(GLINK2 declaration, Type) $(B $(RPAREN) .) $(I Identifier) + $(B $(LPAREN)) $(GLINK2 declaration, Type) $(B $(RPAREN) .) $(IDENTIFIER) $(GLINK NewExpression) $(GLINK DeleteExpression) $(GLINK CastExpression) @@ -1015,7 +1015,7 @@ $(GNAME PowExpression): $(GRAMMAR $(GNAME PostfixExpression): $(GLINK PrimaryExpression) - $(I PostfixExpression) $(B .) $(I Identifier) + $(I PostfixExpression) $(B .) $(IDENTIFIER) $(I PostfixExpression) $(B .) $(GLINK2 template, TemplateInstance) $(I PostfixExpression) $(B .) $(GLINK NewExpression) $(I PostfixExpression) $(B ++) @@ -1104,9 +1104,10 @@ $(GNAME SliceExpression): $(GRAMMAR $(GNAME PrimaryExpression): - $(I Identifier) - $(B .)$(I Identifier) + $(IDENTIFIER) + $(B .)$(IDENTIFIER) $(GLINK2 template, TemplateInstance) + $(B .)$(GLINK2 template, TemplateInstance) $(LINK2 #this, $(B this)) $(LINK2 #super, $(B super)) $(LINK2 #null, $(B null)) @@ -1126,7 +1127,7 @@ $(V2 $(B __FILE__) $(GLINK AssertExpression) $(GLINK MixinExpression) $(GLINK ImportExpression) - $(DDSUBLINK declaration, BasicTypeX, $(I BasicType)) $(B .) $(I Identifier) + $(DDSUBLINK declaration, BasicTypeX, $(I BasicType)) $(B .) $(IDENTIFIER) $(GLINK2 declaration, Typeof) $(GLINK TypeidExpression) $(GLINK IsExpression) @@ -1136,7 +1137,7 @@ $(V2 $(GLINK2 traits, TraitsExpression))

.Identifier

- $(I Identifier) is looked up at module scope, rather than the current + $(IDENTIFIER) is looked up at module scope, rather than the current lexically nested scope.

$(LNAME2 this, this)

@@ -1359,7 +1360,7 @@ $(GNAME ValueExpression): $(GRAMMAR $(GNAME Lambda): - $(I Identifier) $(B =>) $(GLINK AssignExpression) + $(IDENTIFIER) $(B =>) $(GLINK AssignExpression) $(GLINK ParameterAttributes) $(B =>) $(GLINK AssignExpression) ) @@ -1367,7 +1368,7 @@ $(GNAME Lambda): The first form is equivalent to: ) --- -delegate ( $(I Identifier) ) { return $(I AssignExpression); } +delegate ( $(IDENTIFIER) ) { return $(I AssignExpression); } --- $(P And the second:) @@ -1646,11 +1647,11 @@ $(GNAME IsExpression): $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(B $(RPAREN)) $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(B :) $(GLINK TypeSpecialization) $(B $(RPAREN)) $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(B ==) $(GLINK TypeSpecialization) $(B $(RPAREN)) - $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(I Identifier) $(B $(RPAREN)) - $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(I Identifier) $(B :) $(GLINK TypeSpecialization) $(B $(RPAREN)) - $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(I Identifier) $(B ==) $(GLINK TypeSpecialization) $(B $(RPAREN)) - $(V2 $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(I Identifier) $(B :) $(GLINK TypeSpecialization) $(B ,) $(GLINK2 template, TemplateParameterList) $(B $(RPAREN)) - $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(I Identifier) $(B ==) $(GLINK TypeSpecialization) $(B ,) $(GLINK2 template, TemplateParameterList) $(B $(RPAREN)) + $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(IDENTIFIER) $(B $(RPAREN)) + $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(IDENTIFIER) $(B :) $(GLINK TypeSpecialization) $(B $(RPAREN)) + $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(IDENTIFIER) $(B ==) $(GLINK TypeSpecialization) $(B $(RPAREN)) + $(V2 $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(IDENTIFIER) $(B :) $(GLINK TypeSpecialization) $(B ,) $(GLINK2 template, TemplateParameterList) $(B $(RPAREN)) + $(B is $(LPAREN)) $(GLINK2 declaration, Type) $(IDENTIFIER) $(B ==) $(GLINK TypeSpecialization) $(B ,) $(GLINK2 template, TemplateParameterList) $(B $(RPAREN)) ) $(GNAME TypeSpecialization): @@ -1684,8 +1685,8 @@ $(V2 $(B const) If it is not semantically correct, the condition is not satisfied.

- $(I Identifier) is declared to be an alias of the resulting - type if the condition is satisfied. The $(I Identifier) forms + $(IDENTIFIER) is declared to be an alias of the resulting + type if the condition is satisfied. The $(IDENTIFIER) forms can only be used if the $(I IsExpression) appears in a $(GLINK2 version, StaticIfCondition).

@@ -2013,6 +2014,7 @@ void main() { Macros: TITLE=Expressions WIKI=Expression + IDENTIFIER=$(GLINK2 lex, Identifier) CATEGORY_SPEC=$0 FOO=