Changeset 1203
- Timestamp:
- 07/04/08 22:14:03 (6 months ago)
- Files:
-
- trunk/descent.core/src/descent/core/CompletionProposal.java (modified) (1 diff)
- trunk/descent.core/src/descent/core/dom/CompilationUnitResolver.java (modified) (4 diffs)
- trunk/descent.core/src/descent/core/dom/DefaultBindingResolver.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java (modified) (18 diffs)
- trunk/descent.core/src/descent/internal/codeassist/SelectionEngine.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/StructLiteral.java (added)
- trunk/descent.core/src/descent/internal/codeassist/complete/CompletionOnTypeIdentifier.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/lookup/ILazy.java (added)
- trunk/descent.core/src/descent/internal/compiler/lookup/LazyClassDeclaration.java (added)
- trunk/descent.core/src/descent/internal/compiler/lookup/LazyInterfaceDeclaration.java (added)
- trunk/descent.core/src/descent/internal/compiler/lookup/LazyModule.java (added)
- trunk/descent.core/src/descent/internal/compiler/lookup/LazyStructDeclaration.java (added)
- trunk/descent.core/src/descent/internal/compiler/lookup/ModuleBuilder.java (modified) (29 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/ASTDmdNode.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/AggregateDeclaration.java (modified) (8 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/AliasDeclaration.java (modified) (8 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/CallExp.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/ClassDeclaration.java (modified) (16 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/DebugCondition.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/DebugSymbol.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/DotVarExp.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/Dsymbol.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/EnumDeclaration.java (modified) (6 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/FuncDeclaration.java (modified) (10 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/Import.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/InterfaceDeclaration.java (modified) (9 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/Module.java (modified) (16 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/NewExp.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/Param.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/Parser.java (modified) (7 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/ScopeDsymbol.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/SemanticContext.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/SemanticMixin.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/StructDeclaration.java (modified) (5 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/StructInitializer.java (modified) (7 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TemplateDeclaration.java (modified) (7 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TemplateInstance.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TemplateMixin.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/TypeEnum.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/TypeStruct.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/UnionDeclaration.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/VarDeclaration.java (modified) (9 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/VarExp.java (modified) (1 diff)
- trunk/descent.core/src/descent/internal/compiler/parser/VersionCondition.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/compiler/parser/VersionSymbol.java (modified) (2 diffs)
- trunk/descent.core/src/descent/internal/core/CompilationUnitElementInfo.java (modified) (3 diffs)
- trunk/descent.core/src/descent/internal/core/CompilationUnitStructureRequestor.java (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/descent.core/src/descent/core/CompletionProposal.java
r1192 r1203 1714 1714 } 1715 1715 1716 func.consumeRestStructure();1717 1718 1716 TypeFunction tf = (TypeFunction) func.type; 1719 1717 trunk/descent.core/src/descent/core/dom/CompilationUnitResolver.java
r1198 r1203 11 11 package descent.core.dom; 12 12 13 import java.util.List;14 13 import java.util.Map; 15 14 … … 45 44 46 45 private final static boolean RESOLVE = true; 47 private final static boolean STATS = true;46 private final static boolean STATS = false; 48 47 49 48 public static class ParseResult { … … 359 358 module.semantic(context); 360 359 } catch (Throwable t) { 361 Util.log(t );360 Util.log(t, "In module " + module.moduleName + ": " + t.getClass().getName() + ":" + t.getMessage()); 362 361 } 363 362 … … 400 399 } 401 400 402 private static void addIdentifiers(HashtableOfCharArrayAndObject hash, List<char[]>list) {401 private static void addIdentifiers(HashtableOfCharArrayAndObject hash, HashtableOfCharArrayAndObject list) { 403 402 for(char[] key : hash.keys()) { 404 403 if (key != null) { 405 list. add(key);404 list.put(key, CompilationUnitResolver.class); 406 405 } 407 406 } trunk/descent.core/src/descent/core/dom/DefaultBindingResolver.java
r1201 r1203 560 560 if (id.resolvedSymbol != null) { 561 561 Dsymbol sym = id.resolvedSymbol; 562 563 if (sym instanceof AliasDeclaration) { 564 AliasDeclaration alias = (AliasDeclaration) sym; 565 if (alias.isImportAlias) { 566 sym = alias.aliassym; 567 } 568 } 569 562 570 IBinding binding = resolveDsymbol(sym); 563 571 if (binding != null) { … … 798 806 799 807 if (binding != null) { 800 if ("@5tango3sys5win325Types=6HANDLE".equals(binding)) {801 System.out.println(123456);802 }803 808 bindingTables.bindingKeysToBindings.put(key, binding); 804 809 } trunk/descent.core/src/descent/internal/codeassist/CompletionEngine.java
r1201 r1203 337 337 } 338 338 339 long time = System.currentTimeMillis();339 // long time = System.currentTimeMillis(); 340 340 341 341 this.requestor.beginReporting(); … … 434 434 this.requestor.endReporting(); 435 435 436 time = System.currentTimeMillis() - time;437 System.out.println("Completion took " + time + " milliseconds to complete.");436 // time = System.currentTimeMillis() - time; 437 // System.out.println("Completion took " + time + " milliseconds to complete."); 438 438 } 439 439 } … … 720 720 721 721 node.semantic(Scope.createGlobal(node.mod, semanticContext), semanticContext); 722 node.mod.consumeRestStructure();723 node.mod.consumeRest();724 722 725 723 if (node.mod != null) { … … 1084 1082 } 1085 1083 } else if (node.ident != null) { 1084 isCompletingTypeIdentifier = false; 1086 1085 completeIdentDot(node.ident); 1087 1086 } … … 1097 1096 if (sym instanceof ClassDeclaration) { 1098 1097 ClassDeclaration cd = (ClassDeclaration) sym; 1098 cd = cd.unlazy(semanticContext); 1099 1099 1100 Declaration func = cd.ctor; 1100 1101 … … 1127 1128 } 1128 1129 } else if (sym instanceof StructDeclaration) { 1129 suggestMembers(((StructDeclaration) sym).members, onlyStatics, 0, new HashtableOfCharArrayAndObject(), INCLUDE_OPCALL); 1130 } 1131 } 1132 1130 StructDeclaration struct = ((StructDeclaration) sym).unlazy(semanticContext); 1131 suggestMembers(struct.members, onlyStatics, 0, new HashtableOfCharArrayAndObject(), INCLUDE_OPCALL); 1132 } 1133 } 1134 1133 1135 private void completeExpStatement(CompletionOnExpStatement node) throws JavaModelException { 1134 1136 doSemantic(); … … 1543 1545 } else if (sd.members != null && !sd.members.isEmpty()) { 1544 1546 // If the members are from a Module, don't restrict to "static" symbols 1547 if (sd instanceof Module) { 1548 sd = ((Module) sd).unlazy(semanticContext); 1549 } 1550 1545 1551 suggestMembers(sd.members, sd instanceof Module ? false : onlyStatics, 0, new HashtableOfCharArrayAndObject(), includes); 1546 1552 } 1547 1553 } 1548 1554 1549 1555 private Dsymbol getScopeSymbol(Scope scope) { 1550 1556 if (scope.scopesym == null || scope.scopesym.members == null … … 1593 1599 if (se.sds instanceof Module) { 1594 1600 currentName = computePrefixAndSourceRange(ident); 1595 suggestMembers(((Module) se.sds).members, false /* not only statics */, 1601 suggestMembers((((Module) se.sds)).unlazy(semanticContext).members, 1602 false /* not only statics */, 1596 1603 new HashtableOfCharArrayAndObject(), INCLUDE_ALL); 1597 1604 } else if (se.sds instanceof Package) { … … 1642 1649 } 1643 1650 } 1644 1651 1645 1652 private void completePackage(Package sds, char[] name, IdentifierExp ident) { 1646 1653 Stack<char[]> pieces = new Stack<char[]>(); … … 1870 1877 1871 1878 private void completeTypeClassRecursively(TypeClass type, boolean onlyStatics, HashtableOfCharArrayAndObject funcSignatures) { 1872 ClassDeclaration decl = type.sym ;1879 ClassDeclaration decl = type.sym == null ? null : type.sym.unlazy(semanticContext); 1873 1880 if (decl == null) { 1874 1881 return; … … 1894 1901 1895 1902 private void completeTypeStruct(TypeStruct type, boolean onlyStatics) { 1896 StructDeclaration decl = type.sym ;1903 StructDeclaration decl = type.sym == null ? null : type.sym.unlazy(semanticContext); 1897 1904 if (decl == null) { 1898 1905 return; … … 2020 2027 } 2021 2028 2022 // The member may not have it's semantic pass done2023 member.consumeRestStructure();2024 member.consumeRest();2025 2026 2029 if (member instanceof Import /* && member.getModule() == module */) { 2027 2030 Import imp = ((Import) member); … … 2037 2040 if (!suggestedModules.containsKey(fqn)) { 2038 2041 suggestedModules.put(fqn, this); 2042 2043 mod = mod.unlazy(semanticContext); 2039 2044 2040 2045 suggestMembers(mod.members, false, funcSignatures, includes & (~INCLUDE_IMPORTS)); … … 2227 2232 if (parser.inNewExp) { 2228 2233 if (type instanceof TypeClass) { 2229 ClassDeclaration cd = ((TypeClass) type).sym ;2234 ClassDeclaration cd = ((TypeClass) type).sym.unlazy(semanticContext); 2230 2235 if (cd.isClassDeclaration() != null && cd.isInterfaceDeclaration() == null) { 2231 2236 // If it's abstract, skip … … 2291 2296 if (isType) { 2292 2297 if (currentName.length == 0 || match(currentName, ident)) { 2293 if (member.getSignature() == null) {2294 member.consumeRest();2295 member.getSignature();2296 }2297 2298 2298 char[] sigChars = member.getSignature().toCharArray(); 2299 2299 … … 2539 2539 // opCall 2540 2540 case ASTDmdNode.TYPE_STRUCT: { 2541 StructDeclaration sym = ((TypeStruct) type).sym; 2542 sym.consumeRestStructure(); 2543 sym.consumeRest(); 2541 StructDeclaration sym = (((TypeStruct) type).sym).unlazy(semanticContext); 2544 2542 currentName = ident; 2545 2543 suggestMembers(sym.members, onlyStatics, new HashtableOfCharArrayAndObject(), INCLUDE_OPCALL); … … 2547 2545 } 2548 2546 case ASTDmdNode.TYPE_CLASS: { 2549 ClassDeclaration sym = ((TypeClass) type).sym; 2550 sym.consumeRestStructure(); 2551 sym.consumeRest(); 2547 ClassDeclaration sym = (((TypeClass) type).sym).unlazy(semanticContext); 2552 2548 currentName = ident; 2553 2549 suggestMembers(sym.members, onlyStatics, new HashtableOfCharArrayAndObject(), INCLUDE_OPCALL); … … 3426 3422 3427 3423 private boolean isFunctionSignature(char[] signature) { 3428 return signature.length > 0 && signature[0] == Signature.C_D_LINKAGE || signature[0] == Signature.C_C_LINKAGE ||3424 return signature.length > 0 && (signature[0] == Signature.C_D_LINKAGE || signature[0] == Signature.C_C_LINKAGE || 3429 3425 signature[0] == Signature.C_CPP_LINKAGE || signature[0] == Signature.C_PASCAL_LINKAGE || 3430 signature[0] == Signature.C_WINDOWS_LINKAGE ;3426 signature[0] == Signature.C_WINDOWS_LINKAGE); 3431 3427 } 3432 3428 trunk/descent.core/src/descent/internal/codeassist/SelectionEngine.java
r1200 r1203 331 331 sym = node.templateInstance.tempdecl; 332 332 } 333 333 334 334 if (sym != null) { 335 335 // See if this symbols was created at compile-time 336 336 while (sym.creator != null) { 337 337 sym = sym.creator; 338 } 339 340 if (sym instanceof AliasDeclaration) { 341 AliasDeclaration alias = (AliasDeclaration) sym; 342 if (alias.isImportAlias) { 343 sym = alias.aliassym; 344 } 338 345 } 339 346 trunk/descent.core/src/descent/internal/codeassist/complete/CompletionOnTypeIdentifier.java
r1131 r1203 45 45 this.scope = ScopeCopy.copy(sc, context); 46 46 } 47 48 @Override 49 public void addIdent(IdentifierExp ident) { 50 51 } 47 52 48 53 } trunk/descent.core/src/descent/internal/codeassist/complete/CompletionParser.java
r1201 r1203 14 14 import descent.internal.compiler.parser.CaseStatement; 15 15 import descent.internal.compiler.parser.Chars; 16 import descent.internal.compiler.parser.ClassDeclaration;17 16 import descent.internal.compiler.parser.CompoundStatement; 18 17 import descent.internal.compiler.parser.ContinueStatement; … … 482 481 } else if (token.ptr <= cursorLocation && cursorLocation <= token.ptr + token.sourceLen) { 483 482 pivot = token; 483 } else if (e.start + e.length < cursorLocation && cursorLocation < id.start) { 484 assistNode = new CompletionOnDotIdExp(loc, e, new IdentifierExp(CharOperation.NO_CHAR)); 485 return (DotIdExp) assistNode; 484 486 } else { 485 487 return super.newDotIdExp(loc, e, id); … … 490 492 return (DotIdExp) assistNode; 491 493 } else { 492 completionTokenStart = pivot.ptr; 493 completionTokenEnd = pivot.ptr + pivot.sourceLen; 494 completionToken = CharOperation.subarray(input, completionTokenStart, cursorLocation); 494 if (pivot.value == TOK.TOKdot) { 495 completionTokenStart = pivot.ptr + pivot.sourceLen; 496 completionTokenEnd = pivot.ptr + pivot.sourceLen; 497 completionToken = CharOperation.subarray(input, completionTokenStart, cursorLocation); 498 } else { 499 completionTokenStart = pivot.ptr; 500 completionTokenEnd = pivot.ptr + pivot.sourceLen; 501 completionToken = CharOperation.subarray(input, completionTokenStart, cursorLocation); 502 } 495 503 496 504 assistNode = new CompletionOnDotIdExp(loc, e, id); trunk/descent.core/src/descent/internal/compiler/lookup/ModuleBuilder.java
r1201 r1203 1 1 package descent.internal.compiler.lookup; 2 3 import java.util.ArrayList; 4 import java.util.List; 2 5 3 6 import descent.core.Flags; … … 12 15 import descent.core.IMethod; 13 16 import descent.core.IPackageDeclaration; 17 import descent.core.IParent; 18 import descent.core.ISourceRange; 14 19 import descent.core.ISourceReference; 15 20 import descent.core.ITemplated; … … 18 23 import descent.core.JavaModelException; 19 24 import descent.internal.compiler.parser.ASTNodeEncoder; 20 import descent.internal.compiler.parser.AggregateDeclaration;21 25 import descent.internal.compiler.parser.AliasDeclaration; 22 26 import descent.internal.compiler.parser.AlignDeclaration; … … 56 60 import descent.internal.compiler.parser.ProtDeclaration; 57 61 import descent.internal.compiler.parser.STC; 62 import descent.internal.compiler.parser.SemanticContext; 58 63 import descent.internal.compiler.parser.StaticIfCondition; 59 64 import descent.internal.compiler.parser.StaticIfDeclaration; … … 83 88 public class ModuleBuilder { 84 89 85 /* 86 * One ring to rule them all. 87 */ 88 private final static boolean LAZY = true; 89 90 /* 91 * Whether to make surface Module semantic. 92 */ 93 public boolean LAZY_MODULES = true; 94 95 /* 96 * Whether to make surface ClassDeclaration semantic lazy. 97 */ 98 private final static boolean LAZY_CLASSES = LAZY & true; 99 100 /* 101 * Whether to make surface InterfaceDeclaration semantic lazy. 102 */ 103 private final static boolean LAZY_INTERFACES = LAZY & true; 104 105 /* 106 * Whether to make surface StructDeclaration semantic lazy. 107 */ 108 private final static boolean LAZY_STRUCTS = LAZY & true; 109 110 /* 111 * Whether to make surface UnionDeclaration semantic lazy. 112 */ 113 private final static boolean LAZY_UNIONS = LAZY & true; 114 115 /* 116 * Whether to make surface AliasDeclaration semantic lazy. 117 */ 118 private final static boolean LAZY_ALIASES = LAZY & true; 119 120 /* 121 * Whether to make surface EnumDeclaration semantic lazy. 122 */ 123 private final static boolean LAZY_ENUMS = LAZY & true; 124 125 /* 126 * Whether to make surface TemplateDeclaration semantic lazy. 127 */ 128 private final static boolean LAZY_TEMPLATES = LAZY & true; 129 130 /* 131 * Whether to make surface FuncDeclaration semantic lazy. 132 */ 133 private final static boolean LAZY_FUNCTIONS = LAZY & true; 134 135 /* 136 * Whether to make surface VarDeclaration semantic lazy. 137 * Currently doesn't work. 138 */ 139 public boolean LAZY_VARS = LAZY & false; 90 public boolean LAZY = true; 140 91 141 92 /* … … 167 118 HashtableOfCharArrayAndObject versions = new HashtableOfCharArrayAndObject(); 168 119 HashtableOfCharArrayAndObject debugs = new HashtableOfCharArrayAndObject(); 169 boolean surface = true;170 120 } 171 121 … … 181 131 this.config = config; 182 132 this.encoder = encoder; 183 184 // switch(config.semanticAnalysisLevel) {185 // case 0: // None186 // LAZY_MODULES = LAZY & true;187 // LAZY_VARS = LAZY & true;188 // break;189 // case 1: // Some190 // case 2: // All191 // LAZY_MODULES = false;192 // LAZY_VARS = false;193 // break;194 // }195 133 } 196 134 … … 201 139 */ 202 140 public Module build(final ICompilationUnit unit) { 203 long time = System.currentTimeMillis(); 141 CompilationUnitElementInfo info = null; 142 try { 143 info = (CompilationUnitElementInfo) ((CompilationUnit) unit).getElementInfo(); 144 } catch (JavaModelException e) { 145 Util.log(e); 146 } 147 148 String moduleName = unit.getFullyQualifiedName(); 149 150 final Module module; 151 if (!LAZY || "object".equals(moduleName) || (info != null && info.hasTopLevelCompileTimeDifficulties())) { 152 module = new Module(unit.getElementName(), new IdentifierExp(unit.getModuleName().toCharArray())); 153 assignMembers(unit, moduleName, module); 154 } else { 155 module = new LazyModule(unit.getElementName(), new IdentifierExp(unit.getModuleName().toCharArray()), this, info.getTopLevelIdentifiers(), info.getLastImportLocation()); 156 module.moduleName = moduleName; 157 } 158 module.setJavaElement(unit); 159 160 assignPackageDeclaration(unit, module); 161 162 return module; 163 } 164 165 public Module buildNonLazyModule(ICompilationUnit unit) { 166 String moduleName = unit.getFullyQualifiedName(); 204 167 205 168 final Module module = new Module(unit.getElementName(), new IdentifierExp(unit.getModuleName().toCharArray())); 169 assignMembers(unit, moduleName, module); 206 170 module.setJavaElement(unit); 207 module.moduleName = unit.getFullyQualifiedName(); 208 209 // if (LAZY_MODULES) { 210 // module.setJavaElement(unit); 211 // module.rest = new SemanticRest(new Runnable() { 212 // public void run() { 213 // try { 214 // IPackageDeclaration[] packageDeclarations = unit.getPackageDeclarations(); 215 // if (packageDeclarations.length == 1) { 216 // String elementName = packageDeclarations[0].getElementName(); 217 // Identifiers packages = new Identifiers(); 218 // IdentifierExp name = splitName(elementName, packages); 219 // module.md = new ModuleDeclaration(packages, name); 220 // } 221 // 222 // State state = new State(); 223 // 224 // module.members = new Dsymbols(); 225 //// fill(module, module.members, unit.getChildren(), state); 226 // 227 // state.surface = false; 228 // } catch (JavaModelException e) { 229 // Util.log(e); 230 // } 231 // } 232 // }); 233 // module.rest.skipScopeCheck = true; 234 // } else { 235 171 172 assignPackageDeclaration(unit, module); 173 174 return module; 175 } 176 177 private void assignMembers(ICompilationUnit unit, String moduleName, final Module module) { 178 try { 179 State state = new State(); 180 module.moduleName = moduleName; 181 module.members = new Dsymbols(); 182 fill(module, module.members, unit.getChildren(), state); 183 } catch (JavaModelException e) { 184 Util.log(e); 185 } 186 } 187 188 private void assignPackageDeclaration(ICompilationUnit unit, final Module module) { 236 189 IPackageDeclaration[] packageDeclarations; 237 190 try { … … 246 199 Util.log(e); 247 200 } 248 249 CompilationUnitElementInfo info = null;250 try {251 info = (CompilationUnitElementInfo) ((CompilationUnit) unit).getElementInfo();252 } catch (JavaModelException e) {253 Util.log(e);254 }255 256 if (!LAZY_MODULES || "object".equals(module.moduleName) || (info != null && info.hasTopLevelCompileTimeDifficulties())) {257 try {258 State state = new State();259 260 module.members = new Dsymbols();261 fill(module, module.members, unit.getChildren(), state);262 263 state.surface = false;264 } catch (JavaModelException e) {265 Util.log(e);266 }267 } else {268 module.builder = this;269 }270 271 // }272 //273 time = System.currentTimeMillis() - time;274 // if (time > 10) {275 // System.out.println("ModuleBuilder#build(" + module.moduleName + ") = " + time);276 // }277 278 return module;279 201 } 280 202 … … 298 220 case IJavaElement.FIELD: 299 221 IField field = (IField) elem; 300 fillField(module, members, field , state);222 fillField(module, members, field); 301 223 break; 302 224 case IJavaElement.TYPE: … … 306 228 case IJavaElement.METHOD: 307 229 IMethod method = (IMethod) elem; 308 fillMethod(module, members, method , state.surface);230 fillMethod(module, members, method); 309 231 break; 310 232 case IJavaElement.INITIALIZER: … … 337 259 char[] nameC = name.toCharArray(); 338 260 try { 339 long value = Long.parseLong(name); 340 341 if (state.versions.containsKey(nameC)) { 261 long value = Long.parseLong(name); 262 if ((state != null && state.versions.containsKey(nameC))) { 342 263 buildConditional(module, members, cond, state, nameC, value, false /* not debug */); 343 264 } else { 344 if (config.isVersionEnabled(value) ) {265 if (config.isVersionEnabled(value) || value >= module.versionlevel) { 345 266 fill(module, members, cond.getThenChildren(), state); 346 267 } else { … … 349 270 } 350 271 } catch(NumberFormatException e) { 351 if ( state.versions.containsKey(nameC)) {272 if ((state != null && state.versions.containsKey(nameC))) { 352 273 buildConditional(module, members, cond, state, nameC, 0, false /* not debug */); 353 274 } else { 354 if (config.isVersionEnabled(name.toCharArray()) ) {275 if (config.isVersionEnabled(name.toCharArray()) || (module.versionids != null && module.versionids.containsKey(nameC))) { 355 276 fill(module, members, cond.getThenChildren(), state); 356 277 } else { … … 364 285 try { 365 286 long value = Long.parseLong(name); 366 if (state .debugs.containsKey(nameC)) {287 if (state != null && state.debugs.containsKey(nameC)) { 367 288 buildConditional(module, members, cond, state, nameC, value, true /* debug */); 368 289 } else { 369 if (config.isDebugEnabled(value) ) {290 if (config.isDebugEnabled(value) || value >= module.debuglevel) { 370 291 fill(module, members, cond.getThenChildren(), state); 371 292 } else { … … 374 295 } 375 296 } catch(NumberFormatException e) { 376 if (state .debugs.containsKey(nameC)) {297 if (state != null && state.debugs.containsKey(nameC)) { 377 298 buildConditional(module, members, cond, state, nameC, 0, true /* debug */); 378 299 } else { 379 if (config.isDebugEnabled(name.toCharArray()) ) {300 if (config.isDebugEnabled(name.toCharArray()) || (module.debugids != null && module.debugids.containsKey(nameC))) { 380 301 fill(module, members, cond.getThenChildren(), state); 381 302 } else { … … 410 331 private void fillInitializer(Module module, Dsymbols members, IInitializer init, 411 332 State state) throws JavaModelException { 412 boolean surface = state.surface;413 state.surface = false;414 415 333 if (init.isAlign()) { 416 334 Dsymbols sub = new Dsymbols(); … … 420 338 members.add(member); 421 339 } else if (init.isDebugAssignment()) { 422 char[] ident = init.getElementName().toCharArray(); 423 424 state.debugs.put(ident, this); 425 426 Version version = new Version(getLoc(module, init), ident); 427 try { 428 long level = Long.parseLong(init.getElementName()); 429 DebugSymbol member = new DebugSymbol(getLoc(module, init), level, version); 430 members.add(member); 431 } catch(NumberFormatException e) { 432 DebugSymbol member = new DebugSymbol(getLoc(module, init), new IdentifierExp(ident), version); 433 members.add(member); 434 } 340 fillDebugAssignment(module, members, init, state); 435 341 } else if (init.isVersionAssignment()) { 436 char[] ident = init.getElementName().toCharArray(); 437 438 state.versions.put(ident, this); 439 440 Version version = new Version(getLoc(module, init), ident); 441 try { 442 long level = Long.parseLong(init.getElementName()); 443 VersionSymbol member = new VersionSymbol(getLoc(module, init), level, version); 444 members.add(member); 445 } catch(NumberFormatException e) { 446 VersionSymbol member = new VersionSymbol(getLoc(module, init), new IdentifierExp(ident), version); 447 members.add(member); 448 } 342 fillVersionAssignment(module, members, init, state); 449 343 } else if (init.isMixin()) { 450 344 Expression exp = encoder.decodeExpression(init.getElementName().toCharArray()); … … 453 347 members.add(member); 454 348 } else if (init.isExtern()) { 455 // Also try to lazily initialize things inside:456 // extern(C) {457 // // ...458 // }459 if (surface) {460 state.surface = surface;461 }462 463 349 Dsymbols symbols = new Dsymbols(); 464 350 fill(module, symbols, init.getChildren(), state); … … 467 353 members.add(wrap(member, init)); 468 354 } 469 470 state.surface = surface; 471 } 472 473 private void fillMethod(Module module, Dsymbols members, final IMethod method, boolean surface) throws JavaModelException { 355 } 356 357 public DebugSymbol fillDebugAssignment(Module module, Dsymbols members, IInitializer init, State state) { 358 char[] ident = init.getElementName().toCharArray(); 359 360 if (state != null) { 361 state.debugs.put(ident, this); 362 } 363 364 Version version = new Version(getLoc(module, init), ident); 365 DebugSymbol member; 366 try { 367 long level = Long.parseLong(init.getElementName()); 368 member = new DebugSymbol(getLoc(module, init), level, version); 369 } catch(NumberFormatException e) { 370 member = new DebugSymbol(getLoc(module, init), new IdentifierExp(ident), version); 371 } 372 members.add(member); 373 return member; 374 } 375 376 public VersionSymbol fillVersionAssignment(Module module, Dsymbols members, IInitializer init, State state) { 377 char[] ident = init.getElementName().toCharArray(); 378 379 if (state != null) { 380 state.versions.put(ident, this); 381 } 382 383 Version version = new Version(getLoc(module, init), ident); 384 VersionSymbol member; 385 try { 386 long level = Long.parseLong(init.getElementName()); 387 member = new VersionSymbol(getLoc(module, init), level, version); 388 } catch(NumberFormatException e) { 389 member = new VersionSymbol(getLoc(module, init), new IdentifierExp(ident), version); 390 } 391 members.add(member); 392 return member; 393 } 394 395 private void fillMethod(Module module, Dsymbols members, final IMethod method) throws JavaModelException { 474 396 if (method.isConstructor()) { 475 397 CtorDeclaration member = new CtorDeclaration(getLoc(module, method), getArguments(method), getVarargs(method)); … … 489 411 members.add(wrap(member, method)); 490 412 } else { 491 final FuncDeclaration member; 492 if (LAZY_FUNCTIONS && surface && module.builder == null) { 493 member = new FuncDeclaration(getLoc(module, method), getIdent(method), getStorageClass(method), null); 494 member.rest = new SemanticRest(new Runnable() { 495 public void run() { 496 try { 497 member.type = member.sourceType = getType(method); 498 } catch (JavaModelException e) { 499 Util.log(e); 500 } 501 } 502 }); 503 } else { 504 member = new FuncDeclaration(getLoc(module, method), getIdent(method), getStorageClass(method), getType(method)); 505 } 506 413 FuncDeclaration member = new FuncDeclaration(getLoc(module, method), getIdent(method), getStorageClass(method), getType(method)); 507 414 member.setJavaElement(method); 508 members.add(wrapWithTemplate(module, member, method , surface));415 members.add(wrapWithTemplate(module, member, method)); 509 416 } 510 417 } … … 512 419 public void fillType(final Module module, Dsymbols members, final IType type, 513 420 final State state) throws JavaModelException { 514 boolean surface = state.surface;515 state.surface = false;516 517 421 if (type.isClass()) { 518 final ClassDeclaration member; 519 520 if (LAZY_CLASSES && surface && module.builder == null) { 521 member = new ClassDeclaration(getLoc(module, type), getIdent(type)); 522 member.rest = new SemanticRest(new Runnable() { 523 public void run() { 524 try { 525 member.baseclasses = getBaseClasses(type); 526 if (member.baseclasses != null) {
