From bf2531b188a672f497b7220afce15f39b63d9e63 Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Tue, 29 Apr 2014 15:46:00 -0700 Subject: [PATCH] Support DIP61 --- build.bat | 2 +- build.sh | 1 + std/d/ast.d | 4 +++- std/d/parser.d | 7 ++++++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/build.bat b/build.bat index c1f853c..56decbb 100644 --- a/build.bat +++ b/build.bat @@ -1 +1 @@ -dmd main.d stats.d imports.d highlighter.d ctags.d astprinter.d formatter.d outliner.d std/allocator.d std/lexer.d std/d/ast.d std/d/parser.d std/d/lexer.d analysis/base.d analysis/del.d analysis/enumarrayliteral.d analysis/constructors.d analysis/ifelsesame.d analysis/fish.d analysis/numbers.d analysis/objectconst.d analysis/package.d analysis/pokemon.d analysis/range.d analysis/run.d analysis/style.d -ofdscanner.exe -O -release -noboundscheck -inline +dmd main.d stats.d imports.d highlighter.d ctags.d astprinter.d formatter.d outliner.d std/allocator.d std/lexer.d std/d/ast.d std/d/parser.d std/d/lexer.d analysis/base.d analysis/del.d analysis/enumarrayliteral.d analysis/constructors.d analysis/ifelsesame.d analysis/fish.d analysis/numbers.d analysis/objectconst.d analysis/package.d analysis/pokemon.d analysis/range.d analysis/run.d analysis/style.d -ofdscanner.exe -version=DIP61 -O -release -noboundscheck -inline diff --git a/build.sh b/build.sh index 64d1fdb..08548b7 100755 --- a/build.sh +++ b/build.sh @@ -10,6 +10,7 @@ dmd\ std/*.d\ std/d/*.d\ analysis/*.d\ + -version=DIP61\ -ofdscanner\ -m64 -g\ -O -release diff --git a/std/d/ast.d b/std/d/ast.d index a44b473..02c2134 100644 --- a/std/d/ast.d +++ b/std/d/ast.d @@ -1873,10 +1873,12 @@ final class LinkageAttribute : ASTNode public: override void accept(ASTVisitor visitor) const { - mixin (visitIfNotNull!(identifier)); + version (DIP61) mixin (visitIfNotNull!(identifier, identifierChain)); + else mixin (visitIfNotNull!(identifier)); } /** */ Token identifier; /** */ bool hasPlusPlus; + version (DIP61) /** */ IdentifierChain identifierChain; mixin OpEquals; } diff --git a/std/d/parser.d b/std/d/parser.d index 13aa955..25cc416 100644 --- a/std/d/parser.d +++ b/std/d/parser.d @@ -3398,7 +3398,7 @@ invariant() foo(); * Parses a LinkageAttribute * * $(GRAMMAR $(RULEDEF linkageAttribute): - * $(LITERAL 'extern') $(LITERAL '$(LPAREN)') $(LITERAL Identifier) $(LITERAL '++')? $(LITERAL '$(RPAREN)') + * $(LITERAL 'extern') $(LITERAL '$(LPAREN)') $(LITERAL Identifier) ($(LITERAL '++') ($(LITERAL ',') $(RULE identifierChain))?)? $(LITERAL '$(RPAREN)') * ;) */ LinkageAttribute parseLinkageAttribute() @@ -3414,6 +3414,11 @@ invariant() foo(); { advance(); node.hasPlusPlus = true; + version(DIP61) if (currentIs(tok!",")) + { + advance(); + node.identifierChain = parseIdentifierChain(); + } } expect(tok!")"); return node;