| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart2js; | 5 part of dart2js; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * If true, print a warning for each method that was resolved, but not | 8 * If true, print a warning for each method that was resolved, but not |
| 9 * compiled. | 9 * compiled. |
| 10 */ | 10 */ |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 ParserTask parser; | 188 ParserTask parser; |
| 189 PatchParserTask patchParser; | 189 PatchParserTask patchParser; |
| 190 LibraryLoader libraryLoader; | 190 LibraryLoader libraryLoader; |
| 191 TreeValidatorTask validator; | 191 TreeValidatorTask validator; |
| 192 ResolverTask resolver; | 192 ResolverTask resolver; |
| 193 closureMapping.ClosureTask closureToClassMapper; | 193 closureMapping.ClosureTask closureToClassMapper; |
| 194 TypeCheckerTask checker; | 194 TypeCheckerTask checker; |
| 195 ti.TypesTask typesTask; | 195 ti.TypesTask typesTask; |
| 196 Backend backend; | 196 Backend backend; |
| 197 ConstantHandler constantHandler; | 197 ConstantHandler constantHandler; |
| 198 ConstantHandler metadataHandler; |
| 198 EnqueueTask enqueuer; | 199 EnqueueTask enqueuer; |
| 199 CompilerTask fileReadingTask; | 200 CompilerTask fileReadingTask; |
| 200 | 201 |
| 201 static const SourceString MAIN = const SourceString('main'); | 202 static const SourceString MAIN = const SourceString('main'); |
| 202 static const SourceString CALL_OPERATOR_NAME = const SourceString('call'); | 203 static const SourceString CALL_OPERATOR_NAME = const SourceString('call'); |
| 203 static const SourceString NO_SUCH_METHOD = const SourceString('noSuchMethod'); | 204 static const SourceString NO_SUCH_METHOD = const SourceString('noSuchMethod'); |
| 204 static const int NO_SUCH_METHOD_ARG_COUNT = 1; | 205 static const int NO_SUCH_METHOD_ARG_COUNT = 1; |
| 205 static const SourceString INVOKE_ON = const SourceString('invokeOn'); | 206 static const SourceString INVOKE_ON = const SourceString('invokeOn'); |
| 206 static const SourceString RUNTIME_TYPE = const SourceString('runtimeType'); | 207 static const SourceString RUNTIME_TYPE = const SourceString('runtimeType'); |
| 207 static const SourceString START_ROOT_ISOLATE = | 208 static const SourceString START_ROOT_ISOLATE = |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 parser = new ParserTask(this), | 257 parser = new ParserTask(this), |
| 257 patchParser = new PatchParserTask(this), | 258 patchParser = new PatchParserTask(this), |
| 258 resolver = new ResolverTask(this), | 259 resolver = new ResolverTask(this), |
| 259 closureToClassMapper = new closureMapping.ClosureTask(this), | 260 closureToClassMapper = new closureMapping.ClosureTask(this), |
| 260 checker = new TypeCheckerTask(this), | 261 checker = new TypeCheckerTask(this), |
| 261 typesTask = new ti.TypesTask(this, enableConcreteTypeInference), | 262 typesTask = new ti.TypesTask(this, enableConcreteTypeInference), |
| 262 constantHandler = new ConstantHandler(this, backend.constantSystem), | 263 constantHandler = new ConstantHandler(this, backend.constantSystem), |
| 263 enqueuer = new EnqueueTask(this)]; | 264 enqueuer = new EnqueueTask(this)]; |
| 264 | 265 |
| 265 tasks.addAll(backend.tasks); | 266 tasks.addAll(backend.tasks); |
| 267 metadataHandler = new ConstantHandler(this, backend.constantSystem); |
| 266 } | 268 } |
| 267 | 269 |
| 268 Universe get resolverWorld => enqueuer.resolution.universe; | 270 Universe get resolverWorld => enqueuer.resolution.universe; |
| 269 Universe get codegenWorld => enqueuer.codegen.universe; | 271 Universe get codegenWorld => enqueuer.codegen.universe; |
| 270 | 272 |
| 271 int getNextFreeClassId() => nextFreeClassId++; | 273 int getNextFreeClassId() => nextFreeClassId++; |
| 272 | 274 |
| 273 void ensure(bool condition) { | 275 void ensure(bool condition) { |
| 274 if (!condition) cancel('failed assertion in leg'); | 276 if (!condition) cancel('failed assertion in leg'); |
| 275 } | 277 } |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 withCurrentElement(element, | 732 withCurrentElement(element, |
| 731 () => resolver.resolveTypedef(element)); | 733 () => resolver.resolveTypedef(element)); |
| 732 } | 734 } |
| 733 | 735 |
| 734 FunctionType computeFunctionType(Element element, | 736 FunctionType computeFunctionType(Element element, |
| 735 FunctionSignature signature) { | 737 FunctionSignature signature) { |
| 736 return withCurrentElement(element, | 738 return withCurrentElement(element, |
| 737 () => resolver.computeFunctionType(element, signature)); | 739 () => resolver.computeFunctionType(element, signature)); |
| 738 } | 740 } |
| 739 | 741 |
| 740 bool isLazilyInitialized(VariableElement element) { | |
| 741 Constant initialValue = compileVariable(element); | |
| 742 return initialValue == null; | |
| 743 } | |
| 744 | |
| 745 /** | |
| 746 * Compiles compile-time constants. Never returns [:null:]. | |
| 747 * If the initial value is not a compile-time constants reports an error. | |
| 748 */ | |
| 749 Constant compileConstant(VariableElement element) { | |
| 750 return withCurrentElement(element, () { | |
| 751 return constantHandler.compileConstant(element); | |
| 752 }); | |
| 753 } | |
| 754 | |
| 755 Constant compileVariable(VariableElement element) { | |
| 756 return withCurrentElement(element, () { | |
| 757 return constantHandler.compileVariable(element); | |
| 758 }); | |
| 759 } | |
| 760 | |
| 761 reportWarning(Node node, var message) { | 742 reportWarning(Node node, var message) { |
| 762 if (message is TypeWarning) { | 743 if (message is TypeWarning) { |
| 763 // TODO(ahe): Don't supress these warning when the type checker | 744 // TODO(ahe): Don't supress these warning when the type checker |
| 764 // is more complete. | 745 // is more complete. |
| 765 if (identical(message.message.kind, MessageKind.NOT_ASSIGNABLE)) return; | 746 if (identical(message.message.kind, MessageKind.NOT_ASSIGNABLE)) return; |
| 766 if (identical(message.message.kind, MessageKind.MISSING_RETURN)) return; | 747 if (identical(message.message.kind, MessageKind.MISSING_RETURN)) return; |
| 767 if (identical(message.message.kind, MessageKind.MAYBE_MISSING_RETURN)) ret
urn; | 748 if (identical(message.message.kind, MessageKind.MAYBE_MISSING_RETURN)) ret
urn; |
| 768 if (identical(message.message.kind, MessageKind.ADDITIONAL_ARGUMENT)) retu
rn; | 749 if (identical(message.message.kind, MessageKind.ADDITIONAL_ARGUMENT)) retu
rn; |
| 769 if (identical(message.message.kind, MessageKind.METHOD_NOT_FOUND)) return; | 750 if (identical(message.message.kind, MessageKind.METHOD_NOT_FOUND)) return; |
| 770 } | 751 } |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 959 // TODO(johnniwinther): Use [spannable] and [message] to provide better | 940 // TODO(johnniwinther): Use [spannable] and [message] to provide better |
| 960 // information on assertion errors. | 941 // information on assertion errors. |
| 961 if (condition is Function){ | 942 if (condition is Function){ |
| 962 condition = condition(); | 943 condition = condition(); |
| 963 } | 944 } |
| 964 if (spannable == null || !condition) { | 945 if (spannable == null || !condition) { |
| 965 throw new SpannableAssertionFailure(spannable, message); | 946 throw new SpannableAssertionFailure(spannable, message); |
| 966 } | 947 } |
| 967 return true; | 948 return true; |
| 968 } | 949 } |
| OLD | NEW |