| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 dart2js.js_emitter.startup_emitter; | 5 library dart2js.js_emitter.startup_emitter; |
| 6 | 6 |
| 7 import 'package:js_runtime/shared/embedded_names.dart' | 7 import 'package:js_runtime/shared/embedded_names.dart' |
| 8 show JsBuiltin, METADATA, STATIC_FUNCTION_NAME_TO_CLOSURE, TYPES; | 8 show JsBuiltin, METADATA, STATIC_FUNCTION_NAME_TO_CLOSURE, TYPES; |
| 9 | 9 |
| 10 import '../../common.dart'; | 10 import '../../common.dart'; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 @override | 33 @override |
| 34 Emitter createEmitter( | 34 Emitter createEmitter( |
| 35 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) { | 35 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) { |
| 36 return new Emitter(task.compiler, namer, task.nativeEmitter, closedWorld, | 36 return new Emitter(task.compiler, namer, task.nativeEmitter, closedWorld, |
| 37 task, generateSourceMap); | 37 task, generateSourceMap); |
| 38 } | 38 } |
| 39 } | 39 } |
| 40 | 40 |
| 41 class Emitter extends emitterTask.EmitterBase { | 41 class Emitter extends emitterTask.EmitterBase { |
| 42 final Compiler _compiler; | 42 final Compiler _compiler; |
| 43 final ClosedWorld _closedWorld; |
| 43 final Namer namer; | 44 final Namer namer; |
| 44 final ModelEmitter _emitter; | 45 final ModelEmitter _emitter; |
| 45 | 46 |
| 46 JavaScriptBackend get _backend => _compiler.backend; | 47 JavaScriptBackend get _backend => _compiler.backend; |
| 47 | 48 |
| 48 Emitter( | 49 Emitter(this._compiler, this.namer, NativeEmitter nativeEmitter, |
| 49 Compiler compiler, | 50 this._closedWorld, CodeEmitterTask task, bool shouldGenerateSourceMap) |
| 50 Namer namer, | 51 : _emitter = new ModelEmitter(_compiler, namer, nativeEmitter, |
| 51 NativeEmitter nativeEmitter, | 52 _closedWorld, task, shouldGenerateSourceMap); |
| 52 ClosedWorld closedWorld, | |
| 53 CodeEmitterTask task, | |
| 54 bool shouldGenerateSourceMap) | |
| 55 : this._compiler = compiler, | |
| 56 this.namer = namer, | |
| 57 _emitter = new ModelEmitter(compiler, namer, nativeEmitter, closedWorld, | |
| 58 task, shouldGenerateSourceMap); | |
| 59 | 53 |
| 60 DiagnosticReporter get reporter => _compiler.reporter; | 54 DiagnosticReporter get reporter => _compiler.reporter; |
| 61 | 55 |
| 62 @override | 56 @override |
| 63 int emitProgram(ProgramBuilder programBuilder) { | 57 int emitProgram(ProgramBuilder programBuilder) { |
| 64 Program program = programBuilder.buildProgram(); | 58 Program program = programBuilder.buildProgram(); |
| 65 return _emitter.emitProgram(program); | 59 return _emitter.emitProgram(program); |
| 66 } | 60 } |
| 67 | 61 |
| 68 @override | 62 @override |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); | 105 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); |
| 112 return js.js('#.prototype', constructor); | 106 return js.js('#.prototype', constructor); |
| 113 } | 107 } |
| 114 | 108 |
| 115 @override | 109 @override |
| 116 js.Template templateForBuiltin(JsBuiltin builtin) { | 110 js.Template templateForBuiltin(JsBuiltin builtin) { |
| 117 String typeNameProperty = ModelEmitter.typeNameProperty; | 111 String typeNameProperty = ModelEmitter.typeNameProperty; |
| 118 | 112 |
| 119 switch (builtin) { | 113 switch (builtin) { |
| 120 case JsBuiltin.dartObjectConstructor: | 114 case JsBuiltin.dartObjectConstructor: |
| 121 ClassElement objectClass = _compiler.commonElements.objectClass; | 115 ClassElement objectClass = _closedWorld.commonElements.objectClass; |
| 122 return js.js.expressionTemplateYielding(typeAccess(objectClass)); | 116 return js.js.expressionTemplateYielding(typeAccess(objectClass)); |
| 123 | 117 |
| 124 case JsBuiltin.isCheckPropertyToJsConstructorName: | 118 case JsBuiltin.isCheckPropertyToJsConstructorName: |
| 125 int isPrefixLength = namer.operatorIsPrefix.length; | 119 int isPrefixLength = namer.operatorIsPrefix.length; |
| 126 return js.js.expressionTemplateFor('#.substring($isPrefixLength)'); | 120 return js.js.expressionTemplateFor('#.substring($isPrefixLength)'); |
| 127 | 121 |
| 128 case JsBuiltin.isFunctionType: | 122 case JsBuiltin.isFunctionType: |
| 129 return _backend.rtiEncoder.templateForIsFunctionType; | 123 return _backend.rtiEncoder.templateForIsFunctionType; |
| 130 | 124 |
| 131 case JsBuiltin.rawRtiToJsConstructorName: | 125 case JsBuiltin.rawRtiToJsConstructorName: |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 } | 161 } |
| 168 } | 162 } |
| 169 | 163 |
| 170 @override | 164 @override |
| 171 int generatedSize(OutputUnit unit) { | 165 int generatedSize(OutputUnit unit) { |
| 172 Fragment key = _emitter.outputBuffers.keys | 166 Fragment key = _emitter.outputBuffers.keys |
| 173 .firstWhere((Fragment fragment) => fragment.outputUnit == unit); | 167 .firstWhere((Fragment fragment) => fragment.outputUnit == unit); |
| 174 return _emitter.outputBuffers[key].length; | 168 return _emitter.outputBuffers[key].length; |
| 175 } | 169 } |
| 176 } | 170 } |
| OLD | NEW |