Skip to content

Commit

Permalink
Decompose Decl into FuncDeclaration and VarDeclarations
Browse files Browse the repository at this point in the history
FuncDeclarator is a dup of Declarator, and FuncDeclaratorSuffix is a dup of DeclaratorSuffix

And we need to keep function type aliasing with the old style syntax.
  • Loading branch information
9rnsr committed Sep 23, 2014
1 parent e362a54 commit 29b6d03
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 6 deletions.
25 changes: 22 additions & 3 deletions declaration.dd
Expand Up @@ -4,17 +4,35 @@ $(SPEC_S Declarations,

$(GRAMMAR
$(GNAME Declaration):
$(GLINK FuncDeclaration)
$(GLINK VarDeclarations)
$(GLINK AliasDeclaration)
$(GLINK2 struct, AggregateDeclaration)
$(GLINK2 enum, EnumDeclaration)
$(GLINK2 module, ImportDeclaration)
$(GLINK Decl)
)

$(GRAMMAR
$(GNAME Decl):
$(GNAME FuncDeclaration):
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK FuncDeclarator) $(GLINK2 function, FunctionBody)

$(GNAME FuncDeclarator):
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator) $(D $(RPAREN)) $(GLINK FuncDeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK FuncDeclaratorSuffixes)$(OPT)

$(GNAME FuncDeclaratorSuffixes):
$(GLINK FuncDeclaratorSuffix)
$(GLINK FuncDeclaratorSuffix) $(I FuncDeclaratorSuffixes)

$(GNAME FuncDeclaratorSuffix):
$(D [ ])
$(D [) $(VEXPRESSION) $(D ])
$(D [) $(GLINK Type) $(D ])
$(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT)
$(GLINK2 template, TemplateParameters) $(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT) $(GLINK2 template, Constraint)$(OPT)

$(GNAME VarDeclarations):
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarators) $(D ;)
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarator) $(GLINK2 function, FunctionBody)
$(GLINK AutoDeclaration)

$(GNAME Declarators):
Expand Down Expand Up @@ -344,6 +362,7 @@ $(H3 $(LNAME2 alias, Alias Declarations))
$(GRAMMAR
$(GNAME AliasDeclaration):
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarators)
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK FuncDeclarator)
$(D alias) $(I AliasDeclarationX) $(D ;)

$(GNAME AliasDeclarationX):
Expand Down
25 changes: 22 additions & 3 deletions grammar.dd
Expand Up @@ -975,16 +975,18 @@ $(H3 $(LNAME2 declaration, Declaration))

$(GRAMMAR
$(GNAME Declaration):
$(GLINK FuncDeclaration)
$(GLINK VarDeclarations)
$(GLINK AliasDeclaration)
$(GLINK AggregateDeclaration)
$(GLINK EnumDeclaration)
$(GLINK ImportDeclaration)
$(GLINK Decl)
)

$(GRAMMAR
$(GNAME AliasDeclaration):
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarator)
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK FuncDeclarator)
$(D alias) $(I AliasDeclarationX) $(D ;)

$(GNAME AliasDeclarationX):
Expand All @@ -1002,9 +1004,26 @@ $(GNAME AutoDeclarationX):
)

$(GRAMMAR
$(GNAME Decl):
$(GNAME FuncDeclaration):
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK FuncDeclarator) $(GLINK FunctionBody)

$(GNAME FuncDeclarator):
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator) $(D $(RPAREN)) $(GLINK FuncDeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK FuncDeclaratorSuffixes)$(OPT)

$(GNAME FuncDeclaratorSuffixes):
$(GLINK FuncDeclaratorSuffix)
$(GLINK FuncDeclaratorSuffix) $(I FuncDeclaratorSuffixes)

$(GNAME FuncDeclaratorSuffix):
$(D [ ])
$(D [) $(VEXPRESSION) $(D ])
$(D [) $(GLINK Type) $(D ])
$(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT)
$(GLINK TemplateParameters) $(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT) $(GLINK Constraint)$(OPT)

$(GNAME VarDeclarations):
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarators) $(D ;)
$(GLINK StorageClasses)$(OPT) $(GLINK BasicType) $(GLINK Declarator) $(GLINK FunctionBody)
$(GLINK AutoDeclaration)

$(GNAME Declarators):
Expand Down

0 comments on commit 29b6d03

Please sign in to comment.