Mercurial > projects > dil
diff trunk/src/dil/Parser.d @ 364:1059295c2727
- Every command module has an execute method now.
- Added module cmd.ImportGraph.
- Renamed ModuleName to ModuleFQN.
- Added module dil.Module.
- Added member 'imports' to class Parser.
author | aziz |
---|---|
date | Fri, 31 Aug 2007 00:53:00 +0000 |
parents | 511c14950cac |
children | dcbd3bf9bf74 |
line wrap: on
line diff
--- a/trunk/src/dil/Parser.d Thu Aug 30 12:02:04 2007 +0000 +++ b/trunk/src/dil/Parser.d Fri Aug 31 00:53:00 2007 +0000 @@ -24,6 +24,8 @@ Information[] errors; + ImportDeclaration[] imports; + this(char[] srcText, string fileName) { lx = new Lexer(srcText, fileName); @@ -119,14 +121,14 @@ if (token.type == T.Module) { auto begin = token; - ModuleName moduleName; + ModuleFQN moduleFQN; do { nT(); - moduleName ~= requireId(); + moduleFQN ~= requireId(); } while (token.type == T.Dot) require(T.Semicolon); - decls ~= set(new ModuleDeclaration(moduleName), begin); + decls ~= set(new ModuleDeclaration(moduleFQN), begin); } decls ~= parseDeclarationDefinitions(); return decls; @@ -220,6 +222,8 @@ break; case T.Import: decl = parseImportDeclaration(); + assert(decl && decl.kind == NodeKind.ImportDeclaration); + imports ~= cast(ImportDeclaration)cast(void*)decl; break; case T.Enum: decl = parseEnumDeclaration(); @@ -781,7 +785,7 @@ nT(); } - ModuleName[] moduleNames; + ModuleFQN[] moduleFQNs; Token*[] moduleAliases; Token*[] bindNames; Token*[] bindAliases; @@ -789,7 +793,7 @@ nT(); // Skip import keyword. while (1) { - ModuleName moduleName; + ModuleFQN moduleFQN; Token* moduleAlias; moduleAlias = requireId(); @@ -798,11 +802,11 @@ if (token.type == T.Assign) { nT(); - moduleName ~= requireId(); + moduleFQN ~= requireId(); } else // import Identifier [^=] { - moduleName ~= moduleAlias; + moduleFQN ~= moduleAlias; moduleAlias = null; } @@ -810,11 +814,11 @@ while (token.type == T.Dot) { nT(); - moduleName ~= requireId(); + moduleFQN ~= requireId(); } // Push identifiers. - moduleNames ~= moduleName; + moduleFQNs ~= moduleFQN; moduleAliases ~= moduleAlias; if (token.type == T.Colon) @@ -853,7 +857,7 @@ require(T.Semicolon); - return new ImportDeclaration(moduleNames, moduleAliases, bindNames, bindAliases); + return new ImportDeclaration(moduleFQNs, moduleAliases, bindNames, bindAliases); } Declaration parseEnumDeclaration()