annotate src/dil/semantic/Module.d @ 810:525ee3f848d9

Added modules cmd.Compile and dil.ModuleManager. Added options -I, -release and -unittest to the compile command. Tidied main.d up a bit. Renamed start() methods of SemanticPass1 and 2 to run(). Moved function findModuleFilePath() to class ModuleManager. Added msg CouldntLoadModule. Corrected two others. Added member semanticPass to class Module. Implemented visit(ImportDeclaration) in SemanticPass1.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 11 Mar 2008 02:48:01 +0100
parents bcb74c9b895c
children 49e32b5bc161
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
1 /++
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
3 License: GPL3
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
4 +/
593
2848ce3becf5 Moved dil.Module to dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 592
diff changeset
5 module dil.semantic.Module;
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
6
580
fa6d3c52757d Moved SyntaxTree.d to new package 'ast'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 579
diff changeset
7 import dil.ast.Node;
585
05c375fb2d5c Moved dil.Declarations to dil.ast.Declarations.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
8 import dil.ast.Declarations;
578
c769bc239006 Moved Parser.d to new package 'parser'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 576
diff changeset
9 import dil.parser.Parser;
576
0df647660e76 Moved Lexer.d to new package 'lexer'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
10 import dil.lexer.Lexer;
589
de365ddcfbd4 Moved dil.Symbol to dil.semantic.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 585
diff changeset
11 import dil.semantic.Symbol;
590
641041912670 Moved dil.Symbols to dil.semantic.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 589
diff changeset
12 import dil.semantic.Symbols;
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
13 import dil.Information;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
14 import dil.SourceText;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
15 import common;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
16
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
17 import tango.io.FilePath;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
18 import tango.io.FileConst;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
19
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
20 alias FileConst.PathSeparatorChar dirSep;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
21
777
9f61e8af55d5 Added module dil.Compilation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 773
diff changeset
22 /// Represents a semantic D module and a source file.
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 532
diff changeset
23 class Module : ScopeSymbol
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
24 {
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
25 SourceText sourceText; /// The source file of this module.
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
26 string moduleFQN; /// Fully qualified name of the module. E.g.: dil.ast.Node
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
27 string packageName; /// E.g.: dil.ast
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
28 string moduleName; /// E.g.: Node
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
29
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
30 CompoundDeclaration root; /// The root of the parse tree.
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
31 ImportDeclaration[] imports; /// ImportDeclarations found in this file.
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
32 ModuleDeclaration moduleDecl; /// The optional ModuleDeclaration in this file.
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
33 Parser parser; /// The parser used to parse this file.
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
34
810
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
35 /// Indicates which passes have been run on this module.
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
36 ///
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
37 /// 0 = no pass$(BR)
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
38 /// 1 = semantic pass 1$(BR)
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
39 /// 2 = semantic pass 2
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
40 uint semanticPass;
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
41 Module[] modules; /// The imported modules.
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
42
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
43 InfoManager infoMan; /// Collects error messages.
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
44
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
45 this()
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
46 {
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 680
diff changeset
47 super(SYM.Module, null, null);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
48 }
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
49
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
50 /// Constructs a Module object.
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
51 /// Params:
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
52 /// filePath = file path to the source text; loaded in the constructor.
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
53 /// infoMan = used for collecting error messages.
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
54 this(string filePath, InfoManager infoMan = null)
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
55 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
56 this();
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
57 this.sourceText = new SourceText(filePath);
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
58 this.infoMan = infoMan;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
59 this.sourceText.load(infoMan);
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
60 }
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
61
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
62 /// Returns the file path of the source text.
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
63 string filePath()
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
64 {
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
65 return sourceText.filePath;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
66 }
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
67
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
68 /// Returns the file extension: "d" or "di".
773
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
69 string fileExtension()
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
70 {
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
71 foreach_reverse(i, c; filePath)
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
72 if (c == '.')
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
73 return filePath[i+1..$];
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
74 return "";
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
75 }
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
76
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
77 /// Sets the parser to be used for parsing the source text.
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
78 void setParser(Parser parser)
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
79 {
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
80 this.parser = parser;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
81 }
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
82
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
83 /// Parses the module.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
84 /// Throws:
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
85 /// An Exception if the there's no ModuleDeclaration and
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
86 /// the file name is an invalid or reserved D identifier.
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
87 void parse()
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
88 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
89 if (this.parser is null)
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
90 this.parser = new Parser(sourceText, infoMan);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
91
368
2adf808343d6 - Renamed method start() to init() in Parser.
aziz
parents: 367
diff changeset
92 this.root = parser.start();
719
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
93 this.imports = parser.imports;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
94
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
95 if (root.children.length)
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
96 { // moduleDecl will be null if first node isn't a ModuleDeclaration.
673
64fec49651cf Renamed VariableDeclaration to VariablesDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 649
diff changeset
97 this.moduleDecl = root.children[0].Is!(ModuleDeclaration);
719
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
98 if (this.moduleDecl)
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
99 this.setFQN(moduleDecl.getFQN());
719
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
100 }
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
101
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
102 if (!this.moduleFQN.length)
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
103 { // Take base name of file path as module name.
719
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
104 auto str = (new FilePath(filePath)).name();
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
105 if (Lexer.isReservedIdentifier(str))
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
106 throw new Exception("'"~str~"' is not a valid module name; it's a reserved or invalid D identifier.");
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
107 this.moduleFQN = this.moduleName = str;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
108 }
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
109 }
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
110
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
111 /// Returns the first token of the module's source text.
758
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
112 Token* firstToken()
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
113 {
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
114 return parser.lexer.firstToken();
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
115 }
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
116
563
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
117 /// Returns true if there are errors in the source file.
515
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
118 bool hasErrors()
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
119 {
619
933cd8d24467 Renamed Parser.lx to Parser.lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 593
diff changeset
120 return parser.errors.length || parser.lexer.errors.length;
515
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
121 }
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
122
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
123 /// Returns a list of import paths.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
124 /// E.g.: ["dil/ast/Node", "dil/semantic/Module"]
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
125 string[] getImportPaths()
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
126 {
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
127 string[] result;
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
128 foreach (import_; imports)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
129 result ~= import_.getModuleFQNs(dirSep);
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
130 return result;
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
131 }
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
132
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
133 /// Returns the fully qualified name of this module.
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
134 /// E.g.: dil.ast.Node
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
135 string getFQN()
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
136 {
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
137 return moduleFQN;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
138 }
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
139
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
140 /// Set's the module's FQN.
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
141 void setFQN(string moduleFQN)
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
142 {
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
143 uint i = moduleFQN.length;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
144 if (i != 0) // Don't decrement if string has zero length.
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
145 i--;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
146 // Find last dot.
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
147 for (; i != 0 && moduleFQN[i] != '.'; i--)
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
148 {}
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
149 this.moduleFQN = moduleFQN;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
150 this.packageName = moduleFQN[0..i];
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
151 this.moduleName = moduleFQN[(i == 0 ? 0 : i+1) .. $];
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
152 }
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
153
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
154 /// Returns the module's FQN with slashes instead of dots.
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
155 /// E.g.: dil/ast/Node
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
156 string getFQNPath()
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
157 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
158 string FQNPath = moduleFQN.dup;
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
159 foreach (i, c; FQNPath)
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
160 if (c == '.')
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
161 FQNPath[i] = dirSep;
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
162 return FQNPath;
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
163 }
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
164 }