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 |