| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library code_generator_dependencies; | 5 library code_generator_dependencies; |
| 6 | 6 |
| 7 import '../js_backend.dart'; | 7 import '../js_backend.dart'; |
| 8 import '../../common/registry.dart' show | 8 import '../../common/registry.dart' show |
| 9 Registry; | 9 Registry; |
| 10 import '../../common/codegen.dart' show |
| 11 CodegenRegistry; |
| 10 import '../../compiler.dart' show | 12 import '../../compiler.dart' show |
| 11 Compiler; | 13 Compiler; |
| 12 import '../../constants/values.dart'; | 14 import '../../constants/values.dart'; |
| 13 import '../../dart_types.dart' show | 15 import '../../dart_types.dart' show |
| 14 DartType, | 16 DartType, |
| 15 TypeVariableType, | 17 TypeVariableType, |
| 16 InterfaceType; | 18 InterfaceType; |
| 17 import '../../diagnostics/diagnostic_listener.dart' show | 19 import '../../diagnostics/diagnostic_listener.dart' show |
| 18 DiagnosticReporter; | 20 DiagnosticReporter; |
| 19 import '../../diagnostics/spannable.dart' show | 21 import '../../diagnostics/spannable.dart' show |
| 20 CURRENT_ELEMENT_SPANNABLE; | 22 CURRENT_ELEMENT_SPANNABLE; |
| 21 import '../../enqueue.dart' show | 23 import '../../enqueue.dart' show |
| 22 CodegenEnqueuer; | 24 CodegenEnqueuer; |
| 23 import '../../elements/elements.dart'; | 25 import '../../elements/elements.dart'; |
| 24 import '../../js_emitter/js_emitter.dart'; | 26 import '../../js_emitter/js_emitter.dart'; |
| 25 import '../../js/js.dart' as js; | 27 import '../../js/js.dart' as js; |
| 28 import '../../native/native.dart' show NativeBehavior; |
| 26 import '../../universe/selector.dart' show | 29 import '../../universe/selector.dart' show |
| 27 Selector; | 30 Selector; |
| 28 import '../../world.dart' show | 31 import '../../world.dart' show |
| 29 ClassWorld; | 32 ClassWorld; |
| 30 | 33 |
| 31 | 34 |
| 32 /// Encapsulates the dependencies of the function-compiler to the compiler, | 35 /// Encapsulates the dependencies of the function-compiler to the compiler, |
| 33 /// backend and emitter. | 36 /// backend and emitter. |
| 34 // TODO(sigurdm): Should be refactored when we have a better feeling for the | 37 // TODO(sigurdm): Should be refactored when we have a better feeling for the |
| 35 // interface. | 38 // interface. |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 } | 128 } |
| 126 | 129 |
| 127 bool isInterceptorClass(ClassElement element) { | 130 bool isInterceptorClass(ClassElement element) { |
| 128 return element.isSubclassOf(_backend.jsInterceptorClass); | 131 return element.isSubclassOf(_backend.jsInterceptorClass); |
| 129 } | 132 } |
| 130 | 133 |
| 131 Set<ClassElement> getInterceptedClassesOn(Selector selector) { | 134 Set<ClassElement> getInterceptedClassesOn(Selector selector) { |
| 132 return _backend.getInterceptedClassesOn(selector.name); | 135 return _backend.getInterceptedClassesOn(selector.name); |
| 133 } | 136 } |
| 134 | 137 |
| 138 Set<ClassElement> get interceptedClasses { |
| 139 return _backend.interceptedClasses; |
| 140 } |
| 141 |
| 135 void registerSpecializedGetInterceptor(Set<ClassElement> classes) { | 142 void registerSpecializedGetInterceptor(Set<ClassElement> classes) { |
| 136 _backend.registerSpecializedGetInterceptor(classes); | 143 _backend.registerSpecializedGetInterceptor(classes); |
| 137 } | 144 } |
| 138 | 145 |
| 139 js.Expression constructorAccess(ClassElement element) { | 146 js.Expression constructorAccess(ClassElement element) { |
| 140 return _backend.emitter.constructorAccess(element); | 147 return _backend.emitter.constructorAccess(element); |
| 141 } | 148 } |
| 142 | 149 |
| 143 js.Name instanceFieldPropertyName(Element field) { | 150 js.Name instanceFieldPropertyName(Element field) { |
| 144 return _namer.instanceFieldPropertyName(field); | 151 return _namer.instanceFieldPropertyName(field); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 ClassWorld classWorld = _compiler.world; | 234 ClassWorld classWorld = _compiler.world; |
| 228 if (classWorld.isUsedAsMixin(cls)) return true; | 235 if (classWorld.isUsedAsMixin(cls)) return true; |
| 229 | 236 |
| 230 Iterable<ClassElement> subclasses = _compiler.world.strictSubclassesOf(cls); | 237 Iterable<ClassElement> subclasses = _compiler.world.strictSubclassesOf(cls); |
| 231 return subclasses.any((ClassElement subclass) { | 238 return subclasses.any((ClassElement subclass) { |
| 232 return !_backend.rti.isTrivialSubstitution(subclass, cls); | 239 return !_backend.rti.isTrivialSubstitution(subclass, cls); |
| 233 }); | 240 }); |
| 234 } | 241 } |
| 235 | 242 |
| 236 js.Expression generateTypeRepresentation(DartType dartType, | 243 js.Expression generateTypeRepresentation(DartType dartType, |
| 237 List<js.Expression> arguments) { | 244 List<js.Expression> arguments, |
| 245 CodegenRegistry registry) { |
| 238 int variableIndex = 0; | 246 int variableIndex = 0; |
| 239 js.Expression representation = _backend.rti.getTypeRepresentation( | 247 js.Expression representation = _backend.rti.getTypeRepresentation( |
| 240 dartType, | 248 dartType, |
| 241 (_) => arguments[variableIndex++]); | 249 (_) => arguments[variableIndex++]); |
| 242 assert(variableIndex == arguments.length); | 250 assert(variableIndex == arguments.length); |
| 251 // Representation contains JavaScript Arrays. |
| 252 registry.registerInstantiatedClass(_backend.jsArrayClass); |
| 243 return representation; | 253 return representation; |
| 244 } | 254 } |
| 245 | 255 |
| 246 void registerIsCheck(DartType type, Registry registry) { | 256 void registerIsCheck(DartType type, Registry registry) { |
| 247 _enqueuer.registerIsCheck(type); | 257 _enqueuer.registerIsCheck(type); |
| 248 _backend.registerIsCheckForCodegen(type, _enqueuer, registry); | 258 _backend.registerIsCheckForCodegen(type, _enqueuer, registry); |
| 249 } | 259 } |
| 250 | 260 |
| 251 js.Name getTypeTestTag(DartType type) { | 261 js.Name getTypeTestTag(DartType type) { |
| 252 return _backend.namer.operatorIsType(type); | 262 return _backend.namer.operatorIsType(type); |
| 253 } | 263 } |
| 254 | 264 |
| 255 js.Name getTypeSubstitutionTag(ClassElement element) { | 265 js.Name getTypeSubstitutionTag(ClassElement element) { |
| 256 return _backend.namer.substitutionName(element); | 266 return _backend.namer.substitutionName(element); |
| 257 } | 267 } |
| 258 | 268 |
| 259 bool operatorEqHandlesNullArgument(FunctionElement element) { | 269 bool operatorEqHandlesNullArgument(FunctionElement element) { |
| 260 return _backend.operatorEqHandlesNullArgument(element); | 270 return _backend.operatorEqHandlesNullArgument(element); |
| 261 } | 271 } |
| 262 | 272 |
| 263 bool hasStrictSubtype(ClassElement element) { | 273 bool hasStrictSubtype(ClassElement element) { |
| 264 return _compiler.world.hasAnyStrictSubtype(element); | 274 return _compiler.world.hasAnyStrictSubtype(element); |
| 265 } | 275 } |
| 266 | 276 |
| 277 ClassElement get jsFixedArrayClass => _backend.jsFixedArrayClass; |
| 267 ClassElement get jsExtendableArrayClass => _backend.jsExtendableArrayClass; | 278 ClassElement get jsExtendableArrayClass => _backend.jsExtendableArrayClass; |
| 279 ClassElement get jsUnmodifiableArrayClass => |
| 280 _backend.jsUnmodifiableArrayClass; |
| 268 ClassElement get jsMutableArrayClass => _backend.jsMutableArrayClass; | 281 ClassElement get jsMutableArrayClass => _backend.jsMutableArrayClass; |
| 269 | 282 |
| 270 bool isStringClass(ClassElement classElement) => | 283 bool isStringClass(ClassElement classElement) => |
| 271 classElement == _backend.jsStringClass || | 284 classElement == _backend.jsStringClass || |
| 272 classElement == _compiler.stringClass; | 285 classElement == _compiler.stringClass; |
| 273 | 286 |
| 274 bool isBoolClass(ClassElement classElement) => | 287 bool isBoolClass(ClassElement classElement) => |
| 275 classElement == _backend.jsBoolClass || | 288 classElement == _backend.jsBoolClass || |
| 276 classElement == _compiler.boolClass; | 289 classElement == _compiler.boolClass; |
| 290 |
| 291 // TODO(sra): Should this be part of CodegenRegistry? |
| 292 void registerNativeBehavior(NativeBehavior nativeBehavior, node) { |
| 293 if (nativeBehavior == null) return; |
| 294 _enqueuer.nativeEnqueuer.registerNativeBehavior(nativeBehavior, node); |
| 295 } |
| 277 } | 296 } |
| OLD | NEW |