Mercurial > projects > dil
diff trunk/src/Parser.d @ 305:df237b3b5f09
- Added class Declarations.
- Changed many methods to return Declarations instead of Declaration[]. Changed members of classes accordingly.
author | aziz |
---|---|
date | Tue, 14 Aug 2007 12:18:01 +0000 |
parents | fc7b9a3a99d4 |
children | fa0b6f32c1ae |
line wrap: on
line diff
--- a/trunk/src/Parser.d Tue Aug 14 11:03:04 2007 +0000 +++ b/trunk/src/Parser.d Tue Aug 14 12:18:01 2007 +0000 @@ -107,9 +107,9 @@ + Declaration parsing methods + ++++++++++++++++++++++++++++++/ - Declaration[] parseModule() + Declarations parseModule() { - Declaration[] decls; + auto decls = new Declarations; if (token.type == T.Module) { @@ -127,9 +127,9 @@ return decls; } - Declaration[] parseDeclarationDefinitions() + Declarations parseDeclarationDefinitions() { - Declaration[] decls; + auto decls = new Declarations; while (token.type != T.EOF) decls ~= parseDeclarationDefinition(); return decls; @@ -140,9 +140,9 @@ { } { DeclDefs } */ - Declaration[] parseDeclarationDefinitionsBlock() + Declarations parseDeclarationDefinitionsBlock() { - Declaration[] decls; + auto decls = new Declarations; require(T.LBrace); while (token.type != T.RBrace && token.type != T.EOF) decls ~= parseDeclarationDefinition(); @@ -307,23 +307,25 @@ { DeclDefs } DeclDef */ - Declaration[] parseDeclarationsBlock() + Declaration parseDeclarationsBlock() { - Declaration[] decls; + Declaration d; switch (token.type) { case T.LBrace: - decls = parseDeclarationDefinitionsBlock(); + d = parseDeclarationDefinitionsBlock(); break; case T.Colon: nT(); + auto decls = new Declarations; while (token.type != T.RBrace && token.type != T.EOF) decls ~= parseDeclarationDefinition(); + d = decls; break; default: - decls ~= parseDeclarationDefinition(); + d = parseDeclarationDefinition(); } - return decls; + return d; } Declaration parseDeclaration(StorageClass stc = StorageClass.None) @@ -548,7 +550,7 @@ stc |= tmp; } - Declaration[] parse() + Declaration parse() { Declaration decl; switch (token.type) @@ -644,11 +646,11 @@ decl = parseDeclaration(stc); break; default: - return parseDeclarationsBlock(); + decl = parseDeclarationsBlock(); } - return [decl]; + return decl; } - return parse()[0]; + return parse(); } Token* parseAlignAttribute() @@ -694,7 +696,7 @@ nT(); Token* ident; Expression[] args; - Declaration[] decls; + Declaration decls; require(T.LParen); ident = requireId(); @@ -894,7 +896,7 @@ Token* className; TemplateParameters tparams; BaseClass[] bases; - Declaration[] decls; + Declarations decls; bool hasBody; nT(); // Skip class keyword. @@ -969,7 +971,7 @@ Token* name; TemplateParameters tparams; BaseClass[] bases; - Declaration[] decls; + Declarations decls; bool hasBody; nT(); // Skip interface keyword. @@ -1008,7 +1010,7 @@ Token* name; TemplateParameters tparams; - Declaration[] decls; + Declarations decls; bool hasBody; nT(); // Skip struct or union keyword. @@ -1116,7 +1118,7 @@ // debug = Identifier ; Token* cond; // debug ( Integer ) // debug ( Identifier ) - Declaration[] decls, elseDecls; + Declaration decls, elseDecls; void parseIdentOrInt(ref Token* tok) { @@ -1175,7 +1177,7 @@ // version = Identifier ; Token* cond; // version ( Integer ) // version ( Identifier ) - Declaration[] decls, elseDecls; + Declaration decls, elseDecls; void parseIdentOrInt(ref Token* tok) { @@ -1230,7 +1232,7 @@ nT(); // Skip if keyword. Expression condition; - Declaration[] ifDecls, elseDecls; + Declaration ifDecls, elseDecls; require(T.LParen); condition = parseAssignExpression(); @@ -1526,7 +1528,7 @@ structDecl = parseAggregateDeclaration(); else expected(T.Struct); - d = new AlignDeclaration(size, structDecl ? [structDecl] : null); + d = new AlignDeclaration(size, structDecl ? structDecl : new Declarations); goto case_DeclarationStatement; /+ Not applicable for statements. // T.Private,