annotate src/dil/semantic/Module.d @ 815:615c1386b18d

Added code to class Package.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Wed, 12 Mar 2008 19:11:30 +0100
parents 49e32b5bc161
children e6fb7ed87d3a
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;
815
615c1386b18d Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 814
diff changeset
11 import dil.lexer.IdTable;
589
de365ddcfbd4 Moved dil.Symbol to dil.semantic.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 585
diff changeset
12 import dil.semantic.Symbol;
590
641041912670 Moved dil.Symbols to dil.semantic.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 589
diff changeset
13 import dil.semantic.Symbols;
814
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
14 import dil.Location;
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
15 import dil.Messages;
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
16 import dil.Information;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
17 import dil.SourceText;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
18 import common;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
19
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
20 import tango.io.FilePath;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
21 import tango.io.FileConst;
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
22
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
23 alias FileConst.PathSeparatorChar dirSep;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
24
777
9f61e8af55d5 Added module dil.Compilation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 773
diff changeset
25 /// 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
26 class Module : ScopeSymbol
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
27 {
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
28 SourceText sourceText; /// The source file of this module.
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
29 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
30 string packageName; /// E.g.: dil.ast
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
31 string moduleName; /// E.g.: Node
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
32
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
33 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
34 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
35 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
36 Parser parser; /// The parser used to parse this file.
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
37
810
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
38 /// 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
39 ///
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
40 /// 0 = no pass$(BR)
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
41 /// 1 = semantic pass 1$(BR)
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
42 /// 2 = semantic pass 2
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
43 uint semanticPass;
525ee3f848d9 Added modules cmd.Compile and dil.ModuleManager.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 806
diff changeset
44 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
45
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
46 InfoManager infoMan; /// Collects error messages.
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
47
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
48 this()
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
49 {
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 680
diff changeset
50 super(SYM.Module, null, null);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
51 }
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
52
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
53 /// 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
54 /// Params:
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
55 /// 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
56 /// 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
57 this(string filePath, InfoManager infoMan = null)
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
58 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
59 this();
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
60 this.sourceText = new SourceText(filePath);
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
61 this.infoMan = infoMan;
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
62 this.sourceText.load(infoMan);
520
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
63 }
f203c5248d0b Added 'compile' command.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 516
diff changeset
64
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
65 /// 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
66 string filePath()
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
67 {
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
68 return sourceText.filePath;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
69 }
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
70
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
71 /// Returns the file extension: "d" or "di".
773
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
72 string fileExtension()
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
73 {
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
74 foreach_reverse(i, c; filePath)
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
75 if (c == '.')
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
76 return filePath[i+1..$];
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
77 return "";
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
78 }
6dbbb403fc58 Improved the DDocEmitter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 764
diff changeset
79
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
80 /// 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
81 void setParser(Parser parser)
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
82 {
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
83 this.parser = parser;
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
84 }
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
85
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
86 /// Parses the module.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
87 /// Throws:
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
88 /// An Exception if the there's no ModuleDeclaration and
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
89 /// the file name is an invalid or reserved D identifier.
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
90 void parse()
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
91 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
92 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
93 this.parser = new Parser(sourceText, infoMan);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
94
368
2adf808343d6 - Renamed method start() to init() in Parser.
aziz
parents: 367
diff changeset
95 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
96 this.imports = parser.imports;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
97
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
98 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
99 { // 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
100 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
101 if (this.moduleDecl)
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
102 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
103 }
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
104
8f8c9ab3f3ba Fixed code that finds out a modules FQN.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 698
diff changeset
105 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
106 { // 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
107 auto str = (new FilePath(filePath)).name();
814
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
108 if (!Lexer.isValidUnreservedIdentifier(str))
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
109 {
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
110 auto location = parser.lexer.firstToken().getErrorLocation();
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
111 auto msg = Format(MSG.InvalidModuleName, str);
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
112 infoMan ~= new LexerError(location, msg);
815
615c1386b18d Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 814
diff changeset
113 str = "__module_name";
814
49e32b5bc161 Added isValidUnreservedIdentifier() to Lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 810
diff changeset
114 }
755
90668b83ae5e Introduced new module dil.SourceText and class SourceText.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 719
diff changeset
115 this.moduleFQN = this.moduleName = str;
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
116 }
815
615c1386b18d Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 814
diff changeset
117 // Set the symbol name.
615c1386b18d Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 814
diff changeset
118 this.name = IdTable.lookup(this.moduleName);
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
119 }
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
120
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
121 /// 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
122 Token* firstToken()
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
123 {
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
124 return parser.lexer.firstToken();
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
125 }
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 755
diff changeset
126
563
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
127 /// 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
128 bool hasErrors()
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
129 {
619
933cd8d24467 Renamed Parser.lx to Parser.lexer.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 593
diff changeset
130 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
131 }
7cb97346bc6f Using class Module in SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 510
diff changeset
132
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
133 /// Returns a list of import paths.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
134 /// 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
135 string[] getImportPaths()
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
136 {
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
137 string[] result;
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
138 foreach (import_; imports)
391
33b566df6af4 Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 370
diff changeset
139 result ~= import_.getModuleFQNs(dirSep);
366
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
140 return result;
dcbd3bf9bf74 - Added command importgraph/igraph to main.d.
aziz
parents: 365
diff changeset
141 }
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
142
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
143 /// 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
144 /// 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
145 string getFQN()
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
146 {
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
147 return moduleFQN;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
148 }
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
149
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
150 /// Set's the module's FQN.
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
151 void setFQN(string moduleFQN)
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
152 {
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
153 uint i = moduleFQN.length;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
154 if (i != 0) // Don't decrement if string has zero length.
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
155 i--;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
156 // Find last dot.
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
157 for (; i != 0 && moduleFQN[i] != '.'; i--)
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
158 {}
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
159 this.moduleFQN = moduleFQN;
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
160 this.packageName = moduleFQN[0..i];
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
161 this.moduleName = moduleFQN[(i == 0 ? 0 : i+1) .. $];
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
162 }
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
163
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 777
diff changeset
164 /// 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
165 /// E.g.: dil/ast/Node
370
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
166 string getFQNPath()
ae4afb66768f - Renamed findModule() to findModulePath().
aziz
parents: 368
diff changeset
167 {
698
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
168 string FQNPath = moduleFQN.dup;
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
169 foreach (i, c; FQNPath)
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
170 if (c == '.')
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
171 FQNPath[i] = dirSep;
1564e41f454e Revised modules cmd.ImportGraph and dil.semantic.Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
172 return FQNPath;
367
dda55fae37de - ImportGraph.execute() can parse all modules depending on the imports of the root module.
aziz
parents: 366
diff changeset
173 }
364
1059295c2727 - Every command module has an execute method now.
aziz
parents:
diff changeset
174 }