| 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 dart_backend; | 5 part of dart_backend; |
| 6 | 6 |
| 7 // TODO(ahe): This class is simply wrong. This backend should use | 7 // TODO(ahe): This class is simply wrong. This backend should use |
| 8 // elements when it can, not AST nodes. Perhaps a [Map<Element, | 8 // elements when it can, not AST nodes. Perhaps a [Map<Element, |
| 9 // TreeElements>] is what is needed. | 9 // TreeElements>] is what is needed. |
| 10 class ElementAst { | 10 class ElementAst { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 Map<ClassNode, List<Node>> get memberNodes => outputter.output.memberNodes; | 35 Map<ClassNode, List<Node>> get memberNodes => outputter.output.memberNodes; |
| 36 | 36 |
| 37 ConstantSystem get constantSystem { | 37 ConstantSystem get constantSystem { |
| 38 return constantCompilerTask.constantCompiler.constantSystem; | 38 return constantCompilerTask.constantCompiler.constantSystem; |
| 39 } | 39 } |
| 40 | 40 |
| 41 BackendConstantEnvironment get constants => constantCompilerTask; | 41 BackendConstantEnvironment get constants => constantCompilerTask; |
| 42 | 42 |
| 43 DartConstantTask constantCompilerTask; | 43 DartConstantTask constantCompilerTask; |
| 44 | 44 |
| 45 DartResolutionCallbacks resolutionCallbacks; | 45 DartImpactTransformer impactTransformer; |
| 46 | 46 |
| 47 final Set<ClassElement> usedTypeLiterals = new Set<ClassElement>(); | 47 final Set<ClassElement> usedTypeLiterals = new Set<ClassElement>(); |
| 48 | 48 |
| 49 /// The set of visible platform classes that are implemented by instantiated | 49 /// The set of visible platform classes that are implemented by instantiated |
| 50 /// user classes. | 50 /// user classes. |
| 51 final Set<ClassElement> _userImplementedPlatformClasses = | 51 final Set<ClassElement> _userImplementedPlatformClasses = |
| 52 new Set<ClassElement>(); | 52 new Set<ClassElement>(); |
| 53 | 53 |
| 54 bool enableCodegenWithErrorsIfSupported(Spannable node) { | 54 bool enableCodegenWithErrorsIfSupported(Spannable node) { |
| 55 reporter.reportHintMessage( | 55 reporter.reportHintMessage( |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 DartBackend(Compiler compiler, List<String> strips, {bool multiFile}) | 106 DartBackend(Compiler compiler, List<String> strips, {bool multiFile}) |
| 107 : tasks = <CompilerTask>[], | 107 : tasks = <CompilerTask>[], |
| 108 stripAsserts = strips.indexOf('asserts') != -1, | 108 stripAsserts = strips.indexOf('asserts') != -1, |
| 109 constantCompilerTask = new DartConstantTask(compiler), | 109 constantCompilerTask = new DartConstantTask(compiler), |
| 110 outputter = new DartOutputter( | 110 outputter = new DartOutputter( |
| 111 compiler.reporter, compiler.outputProvider, | 111 compiler.reporter, compiler.outputProvider, |
| 112 forceStripTypes: strips.indexOf('types') != -1, | 112 forceStripTypes: strips.indexOf('types') != -1, |
| 113 multiFile: multiFile, | 113 multiFile: multiFile, |
| 114 enableMinification: compiler.enableMinification), | 114 enableMinification: compiler.enableMinification), |
| 115 super(compiler) { | 115 super(compiler) { |
| 116 resolutionCallbacks = new DartResolutionCallbacks(this); | 116 impactTransformer = new DartImpactTransformer(this); |
| 117 } | 117 } |
| 118 | 118 |
| 119 | 119 |
| 120 DiagnosticReporter get reporter => compiler.reporter; | 120 DiagnosticReporter get reporter => compiler.reporter; |
| 121 | 121 |
| 122 Resolution get resolution => compiler.resolution; | 122 Resolution get resolution => compiler.resolution; |
| 123 | 123 |
| 124 bool classNeedsRti(ClassElement cls) => false; | 124 bool classNeedsRti(ClassElement cls) => false; |
| 125 bool methodNeedsRti(FunctionElement function) => false; | 125 bool methodNeedsRti(FunctionElement function) => false; |
| 126 | 126 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 139 // we don't trust the resolution to always get these included. | 139 // we don't trust the resolution to always get these included. |
| 140 world.registerInvocation(new UniverseSelector(Selectors.toString_, null)); | 140 world.registerInvocation(new UniverseSelector(Selectors.toString_, null)); |
| 141 world.registerInvokedGetter( | 141 world.registerInvokedGetter( |
| 142 new UniverseSelector(Selectors.hashCode_, null)); | 142 new UniverseSelector(Selectors.hashCode_, null)); |
| 143 world.registerInvocation( | 143 world.registerInvocation( |
| 144 new UniverseSelector(new Selector.binaryOperator('=='), null)); | 144 new UniverseSelector(new Selector.binaryOperator('=='), null)); |
| 145 world.registerInvocation( | 145 world.registerInvocation( |
| 146 new UniverseSelector(Selectors.compareTo, null)); | 146 new UniverseSelector(Selectors.compareTo, null)); |
| 147 } | 147 } |
| 148 | 148 |
| 149 WorldImpact codegen(CodegenWorkItem work) => const WorldImpact(); | 149 WorldImpact codegen(CodegenWorkItem work) { |
| 150 return const WorldImpact(); |
| 151 } |
| 150 | 152 |
| 151 /** | 153 /** |
| 152 * Tells whether we should output given element. Corelib classes like | 154 * Tells whether we should output given element. Corelib classes like |
| 153 * Object should not be in the resulting code. | 155 * Object should not be in the resulting code. |
| 154 */ | 156 */ |
| 155 @override | 157 @override |
| 156 bool shouldOutput(Element element) { | 158 bool shouldOutput(Element element) { |
| 157 return (!element.library.isPlatformLibrary && | 159 return (!element.library.isPlatformLibrary && |
| 158 !element.isSynthesized && | 160 !element.isSynthesized && |
| 159 element is! AbstractFieldElement) | 161 element is! AbstractFieldElement) |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 | 350 |
| 349 @override | 351 @override |
| 350 bool enableDeferredLoadingIfSupported(Spannable node, Registry registry) { | 352 bool enableDeferredLoadingIfSupported(Spannable node, Registry registry) { |
| 351 // TODO(sigurdm): Implement deferred loading for dart2dart. | 353 // TODO(sigurdm): Implement deferred loading for dart2dart. |
| 352 reporter.reportWarningMessage( | 354 reporter.reportWarningMessage( |
| 353 node, MessageKind.DEFERRED_LIBRARY_DART_2_DART); | 355 node, MessageKind.DEFERRED_LIBRARY_DART_2_DART); |
| 354 return false; | 356 return false; |
| 355 } | 357 } |
| 356 } | 358 } |
| 357 | 359 |
| 358 class DartResolutionCallbacks extends ResolutionCallbacks { | 360 class DartImpactTransformer extends ImpactTransformer { |
| 359 final DartBackend backend; | 361 final DartBackend backend; |
| 360 | 362 |
| 361 DartResolutionCallbacks(this.backend); | 363 DartImpactTransformer(this.backend); |
| 362 | 364 |
| 363 @override | 365 @override |
| 364 WorldImpact transformImpact(ResolutionImpact worldImpact) { | 366 WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) { |
| 365 TransformedWorldImpact transformed = | 367 TransformedWorldImpact transformed = |
| 366 new TransformedWorldImpact(worldImpact); | 368 new TransformedWorldImpact(worldImpact); |
| 367 for (DartType typeLiteral in worldImpact.typeLiterals) { | 369 for (DartType typeLiteral in worldImpact.typeLiterals) { |
| 368 if (typeLiteral.isInterfaceType) { | 370 if (typeLiteral.isInterfaceType) { |
| 369 backend.usedTypeLiterals.add(typeLiteral.element); | 371 backend.usedTypeLiterals.add(typeLiteral.element); |
| 370 } | 372 } |
| 371 } | 373 } |
| 372 for (InterfaceType instantiatedType in worldImpact.instantiatedTypes) { | 374 for (InterfaceType instantiatedType in worldImpact.instantiatedTypes) { |
| 373 // TODO(johnniwinther): Remove this when dependency tracking is done on | 375 // TODO(johnniwinther): Remove this when dependency tracking is done on |
| 374 // the world impact itself. | 376 // the world impact itself. |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 } | 558 } |
| 557 | 559 |
| 558 // TODO(johnniwinther): Remove this when values are computed from the | 560 // TODO(johnniwinther): Remove this when values are computed from the |
| 559 // expressions. | 561 // expressions. |
| 560 @override | 562 @override |
| 561 void copyConstantValues(DartConstantTask task) { | 563 void copyConstantValues(DartConstantTask task) { |
| 562 constantCompiler.constantValueMap.addAll( | 564 constantCompiler.constantValueMap.addAll( |
| 563 task.constantCompiler.constantValueMap); | 565 task.constantCompiler.constantValueMap); |
| 564 } | 566 } |
| 565 } | 567 } |
| OLD | NEW |