| 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 dart2js.new_js_emitter.emitter; | 5 library dart2js.new_js_emitter.emitter; |
| 6 | 6 |
| 7 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show | 7 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show |
| 8 JsBuiltin, | 8 JsBuiltin, |
| 9 METADATA, | 9 METADATA, |
| 10 TYPES; | 10 TYPES; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 126 |
| 127 @override | 127 @override |
| 128 js.Expression typeAccess(Element element) { | 128 js.Expression typeAccess(Element element) { |
| 129 // TODO(floitsch): minify 'ensureResolved'. | 129 // TODO(floitsch): minify 'ensureResolved'. |
| 130 // TODO(floitsch): don't emit `ensureResolved` for eager classes. | 130 // TODO(floitsch): don't emit `ensureResolved` for eager classes. |
| 131 return js.js('#.ensureResolved()', _globalPropertyAccess(element)); | 131 return js.js('#.ensureResolved()', _globalPropertyAccess(element)); |
| 132 } | 132 } |
| 133 | 133 |
| 134 @override | 134 @override |
| 135 js.Template templateForBuiltin(JsBuiltin builtin) { | 135 js.Template templateForBuiltin(JsBuiltin builtin) { |
| 136 String typeNameProperty = ModelEmitter.typeNameProperty; | |
| 137 | |
| 138 switch (builtin) { | 136 switch (builtin) { |
| 139 case JsBuiltin.dartObjectConstructor: | 137 case JsBuiltin.dartObjectConstructor: |
| 140 return js.js.expressionTemplateYielding( | 138 return js.js.expressionTemplateYielding( |
| 141 typeAccess(_compiler.objectClass)); | 139 typeAccess(_compiler.objectClass)); |
| 142 | 140 |
| 143 case JsBuiltin.isCheckPropertyToJsConstructorName: | 141 case JsBuiltin.isCheckPropertyToJsConstructorName: |
| 144 int isPrefixLength = namer.operatorIsPrefix.length; | 142 int isPrefixLength = namer.operatorIsPrefix.length; |
| 145 return js.js.expressionTemplateFor('#.substring($isPrefixLength)'); | 143 return js.js.expressionTemplateFor('#.substring($isPrefixLength)'); |
| 146 | 144 |
| 147 case JsBuiltin.isFunctionType: | 145 case JsBuiltin.isFunctionType: |
| 148 return _backend.rti.representationGenerator.templateForIsFunctionType; | 146 return _backend.rti.representationGenerator.templateForIsFunctionType; |
| 149 | 147 |
| 150 case JsBuiltin.rawRtiToJsConstructorName: | 148 case JsBuiltin.rawRtiToJsConstructorName: |
| 151 return js.js.expressionTemplateFor("#.$typeNameProperty"); | 149 return js.js.expressionTemplateFor("#.name"); |
| 152 | 150 |
| 153 case JsBuiltin.rawRuntimeType: | 151 case JsBuiltin.rawRuntimeType: |
| 154 return js.js.expressionTemplateFor("#.constructor"); | 152 return js.js.expressionTemplateFor("#.constructor"); |
| 155 | 153 |
| 156 case JsBuiltin.createFunctionTypeRti: | 154 case JsBuiltin.createFunctionTypeRti: |
| 157 return _backend.rti.representationGenerator | 155 return _backend.rti.representationGenerator |
| 158 .templateForCreateFunctionType; | 156 .templateForCreateFunctionType; |
| 159 | 157 |
| 160 case JsBuiltin.isSubtype: | 158 case JsBuiltin.isSubtype: |
| 161 // TODO(floitsch): move this closer to where is-check properties are | 159 // TODO(floitsch): move this closer to where is-check properties are |
| 162 // built. | 160 // built. |
| 163 String isPrefix = namer.operatorIsPrefix; | 161 String isPrefix = namer.operatorIsPrefix; |
| 164 return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype"); | 162 return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype"); |
| 165 | 163 |
| 166 case JsBuiltin.isFunctionTypeRti: | 164 case JsBuiltin.isFunctionTypeRti: |
| 167 String functionClassName = | 165 String functionClassName = |
| 168 _backend.namer.runtimeTypeName(_compiler.functionClass); | 166 _backend.namer.runtimeTypeName(_compiler.functionClass); |
| 169 return js.js.expressionTemplateFor( | 167 return js.js.expressionTemplateFor( |
| 170 '#.$typeNameProperty === "$functionClassName"'); | 168 '#.name === "$functionClassName"'); |
| 171 | 169 |
| 172 case JsBuiltin.isNullTypeRti: | 170 case JsBuiltin.isNullTypeRti: |
| 173 String nullClassName = | 171 String nullClassName = |
| 174 _backend.namer.runtimeTypeName(_compiler.nullClass); | 172 _backend.namer.runtimeTypeName(_compiler.nullClass); |
| 175 return js.js.expressionTemplateFor( | 173 return js.js.expressionTemplateFor( |
| 176 '#.$typeNameProperty === "$nullClassName"'); | 174 '#.name === "$nullClassName"'); |
| 177 | 175 |
| 178 case JsBuiltin.isDartObjectTypeRti: | 176 case JsBuiltin.isDartObjectTypeRti: |
| 179 String dartObjectClassName = | 177 String dartObjectClassName = |
| 180 _backend.namer.runtimeTypeName(_compiler.objectClass); | 178 _backend.namer.runtimeTypeName(_compiler.objectClass); |
| 181 return js.js.expressionTemplateFor( | 179 return js.js.expressionTemplateFor( |
| 182 '#.$typeNameProperty === "$dartObjectClassName"'); | 180 '#.name === "$dartObjectClassName"'); |
| 183 | 181 |
| 184 case JsBuiltin.getMetadata: | 182 case JsBuiltin.getMetadata: |
| 185 return _emitter.templateForReadMetadata; | 183 return _emitter.templateForReadMetadata; |
| 186 | 184 |
| 187 case JsBuiltin.getType: | 185 case JsBuiltin.getType: |
| 188 return _emitter.templateForReadType; | 186 return _emitter.templateForReadType; |
| 189 | 187 |
| 190 default: | 188 default: |
| 191 _compiler.internalError(NO_LOCATION_SPANNABLE, | 189 _compiler.internalError(NO_LOCATION_SPANNABLE, |
| 192 "Unhandled Builtin: $builtin"); | 190 "Unhandled Builtin: $builtin"); |
| 193 return null; | 191 return null; |
| 194 } | 192 } |
| 195 } | 193 } |
| 196 | 194 |
| 197 @override | 195 @override |
| 198 void invalidateCaches() { | 196 void invalidateCaches() { |
| 199 } | 197 } |
| 200 } | 198 } |
| OLD | NEW |