Mercurial > projects > dang
diff parser/Parser.d @ 140:927ae00bd9d2
Added support for extern keyword. Being ignored atm though. Also changed ast/Module, so that you can get a list of only vars, functions or structs.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Sun, 20 Jul 2008 23:23:56 +0200 |
parents | 2be29b296081 |
children | d76cc5cad4fc |
line wrap: on
line diff
--- a/parser/Parser.d Fri Jul 11 21:47:57 2008 +0200 +++ b/parser/Parser.d Sun Jul 20 23:23:56 2008 +0200 @@ -117,6 +117,10 @@ case Tok.Auto: a.setAuto; break; + case Tok.Extern: + Extern e = parseLinkageType; + a.setExtern(e); + break; } if(sco) { @@ -196,6 +200,45 @@ .fatal(ExitLevel.Parser); } + Extern parseLinkageType() + { + Extern e = Extern.D; + if(lexer.peek(1).type != Tok.OpenParentheses) + return e; + + lexer.next; lexer.next; + + Token t = require(Tok.Identifier); + + switch(sm.getText(t.asRange)) + { + case "C": + if (lexer.peek(0).type == Tok.Plus && + lexer.peek(1).type == Tok.Plus) + e = Extern.CPlusPlus; + else + e = Extern.C; + break; + case "D": + break; + case "Windows": + e = Extern.Windows; + break; + case "Pascal": + e = Extern.Pascal; + break; + case "System": + e = Extern.System; + break; + default: + messages.report(UnexpectedLinkType, t.location); + } + + require(Tok.CloseParentheses); + + return e; + } + /** Parse a series of imports belonging to a single import token. */