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 part of dart2js.js_emitter; | 5 part of dart2js.js_emitter; |
6 | 6 |
7 | 7 |
8 class OldEmitter implements Emitter { | 8 class OldEmitter implements Emitter { |
9 final Compiler compiler; | 9 final Compiler compiler; |
10 final CodeEmitterTask task; | 10 final CodeEmitterTask task; |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
270 typeAccess(compiler.objectClass)); | 270 typeAccess(compiler.objectClass)); |
271 | 271 |
272 case JsBuiltin.isCheckPropertyToJsConstructorName: | 272 case JsBuiltin.isCheckPropertyToJsConstructorName: |
273 int isPrefixLength = namer.operatorIsPrefix.length; | 273 int isPrefixLength = namer.operatorIsPrefix.length; |
274 return jsAst.js.expressionTemplateFor('#.substring($isPrefixLength)'); | 274 return jsAst.js.expressionTemplateFor('#.substring($isPrefixLength)'); |
275 | 275 |
276 case JsBuiltin.isFunctionType: | 276 case JsBuiltin.isFunctionType: |
277 return backend.rti.representationGenerator.templateForIsFunctionType; | 277 return backend.rti.representationGenerator.templateForIsFunctionType; |
278 | 278 |
279 case JsBuiltin.rawRtiToJsConstructorName: | 279 case JsBuiltin.rawRtiToJsConstructorName: |
280 return jsAst.js.expressionTemplateFor("#.$typeNameProperty"); | 280 return jsAst.js.expressionTemplateFor("#.name"); |
281 | 281 |
282 case JsBuiltin.rawRuntimeType: | 282 case JsBuiltin.rawRuntimeType: |
283 return jsAst.js.expressionTemplateFor("#.constructor"); | 283 return jsAst.js.expressionTemplateFor("#.constructor"); |
284 | 284 |
285 case JsBuiltin.createFunctionTypeRti: | 285 case JsBuiltin.createFunctionTypeRti: |
286 return backend.rti.representationGenerator | 286 return backend.rti.representationGenerator |
287 .templateForCreateFunctionType; | 287 .templateForCreateFunctionType; |
288 | 288 |
289 case JsBuiltin.isSubtype: | 289 case JsBuiltin.isSubtype: |
290 // TODO(floitsch): move this closer to where is-check properties are | 290 // TODO(floitsch): move this closer to where is-check properties are |
291 // built. | 291 // built. |
292 String isPrefix = namer.operatorIsPrefix; | 292 String isPrefix = namer.operatorIsPrefix; |
293 return jsAst.js.expressionTemplateFor( | 293 return jsAst.js.expressionTemplateFor( |
294 "('$isPrefix' + #) in #.prototype"); | 294 "('$isPrefix' + #) in #.prototype"); |
295 | 295 |
296 case JsBuiltin.isFunctionTypeRti: | 296 case JsBuiltin.isFunctionTypeRti: |
297 String functionClassName = | 297 String functionClassName = |
298 backend.namer.runtimeTypeName(compiler.functionClass); | 298 backend.namer.runtimeTypeName(compiler.functionClass); |
299 return jsAst.js.expressionTemplateFor( | 299 return jsAst.js.expressionTemplateFor( |
300 '#.$typeNameProperty === "$functionClassName"'); | 300 '#.name === "$functionClassName"'); |
301 | 301 |
302 case JsBuiltin.isDartObjectTypeRti: | 302 case JsBuiltin.isDartObjectTypeRti: |
303 String objectClassName = | 303 String objectClassName = |
304 backend.namer.runtimeTypeName(compiler.objectClass); | 304 backend.namer.runtimeTypeName(compiler.objectClass); |
305 return jsAst.js.expressionTemplateFor( | 305 return jsAst.js.expressionTemplateFor( |
306 '#.$typeNameProperty === "$objectClassName"'); | 306 '#.name === "$objectClassName"'); |
307 | 307 |
308 case JsBuiltin.isNullTypeRti: | 308 case JsBuiltin.isNullTypeRti: |
309 String nullClassName = | 309 String nullClassName = |
310 backend.namer.runtimeTypeName(compiler.nullClass); | 310 backend.namer.runtimeTypeName(compiler.nullClass); |
311 return jsAst.js.expressionTemplateFor( | 311 return jsAst.js.expressionTemplateFor( |
312 '#.$typeNameProperty === "$nullClassName"'); | 312 '#.name === "$nullClassName"'); |
313 | 313 |
314 case JsBuiltin.getMetadata: | 314 case JsBuiltin.getMetadata: |
315 String metadataAccess = | 315 String metadataAccess = |
316 generateEmbeddedGlobalAccessString(embeddedNames.METADATA); | 316 generateEmbeddedGlobalAccessString(embeddedNames.METADATA); |
317 return jsAst.js.expressionTemplateFor("$metadataAccess[#]"); | 317 return jsAst.js.expressionTemplateFor("$metadataAccess[#]"); |
318 | 318 |
319 case JsBuiltin.getType: | 319 case JsBuiltin.getType: |
320 String typesAccess = | 320 String typesAccess = |
321 generateEmbeddedGlobalAccessString(embeddedNames.TYPES); | 321 generateEmbeddedGlobalAccessString(embeddedNames.TYPES); |
322 return jsAst.js.expressionTemplateFor("$typesAccess[#]"); | 322 return jsAst.js.expressionTemplateFor("$typesAccess[#]"); |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1031 new jsAst.FunctionDeclaration( | 1031 new jsAst.FunctionDeclaration( |
1032 new jsAst.VariableDeclaration(constructorName), constructorAst)); | 1032 new jsAst.VariableDeclaration(constructorName), constructorAst)); |
1033 | 1033 |
1034 String fieldNamesProperty = FIELD_NAMES_PROPERTY_NAME; | 1034 String fieldNamesProperty = FIELD_NAMES_PROPERTY_NAME; |
1035 bool hasIsolateSupport = compiler.hasIsolateSupport; | 1035 bool hasIsolateSupport = compiler.hasIsolateSupport; |
1036 jsAst.Node fieldNamesArray = | 1036 jsAst.Node fieldNamesArray = |
1037 hasIsolateSupport ? js.stringArray(fields) : new jsAst.LiteralNull(); | 1037 hasIsolateSupport ? js.stringArray(fields) : new jsAst.LiteralNull(); |
1038 | 1038 |
1039 cspPrecompiledFunctionFor(outputUnit).add(js.statement(r''' | 1039 cspPrecompiledFunctionFor(outputUnit).add(js.statement(r''' |
1040 { | 1040 { |
1041 #constructorName.#typeNameProperty = #constructorNameString; | 1041 if (typeof #constructorName.name != 'string') { |
sra1
2015/06/26 23:10:09
ditto double quotw
floitsch
2015/07/01 17:00:14
Done.
| |
1042 // IE does not have a name property. | 1042 // IE does not store the name, but allows to modify the property. |
1043 if (!("name" in #constructorName)) | 1043 #constructorName.name = #constructorNameString; |
1044 #constructorName.name = #constructorNameString; | 1044 } |
1045 $desc = $collectedClasses$.#constructorName[1]; | 1045 $desc = $collectedClasses$.#constructorName[1]; |
1046 #constructorName.prototype = $desc; | 1046 #constructorName.prototype = $desc; |
1047 ''' /* next string is not a raw string */ ''' | 1047 ''' /* next string is not a raw string */ ''' |
1048 if (#hasIsolateSupport) { | 1048 if (#hasIsolateSupport) { |
1049 #constructorName.$fieldNamesProperty = #fieldNamesArray; | 1049 #constructorName.$fieldNamesProperty = #fieldNamesArray; |
1050 } | 1050 } |
1051 }''', | 1051 }''', |
1052 {"constructorName": constructorName, | 1052 {"constructorName": constructorName, |
1053 "typeNameProperty": typeNameProperty, | |
1054 "constructorNameString": js.string(constructorName), | 1053 "constructorNameString": js.string(constructorName), |
1055 "hasIsolateSupport": hasIsolateSupport, | 1054 "hasIsolateSupport": hasIsolateSupport, |
1056 "fieldNamesArray": fieldNamesArray})); | 1055 "fieldNamesArray": fieldNamesArray})); |
1057 | 1056 |
1058 cspPrecompiledConstructorNamesFor(outputUnit).add(js('#', constructorName)); | 1057 cspPrecompiledConstructorNamesFor(outputUnit).add(js('#', constructorName)); |
1059 } | 1058 } |
1060 | 1059 |
1061 void assembleTypedefs(Program program) { | 1060 void assembleTypedefs(Program program) { |
1062 Fragment mainFragment = program.mainFragment; | 1061 Fragment mainFragment = program.mainFragment; |
1063 OutputUnit mainOutputUnit = mainFragment.outputUnit; | 1062 OutputUnit mainOutputUnit = mainFragment.outputUnit; |
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2002 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { | 2001 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { |
2003 if (element.isInstanceMember) { | 2002 if (element.isInstanceMember) { |
2004 cachedClassBuilders.remove(element.enclosingClass); | 2003 cachedClassBuilders.remove(element.enclosingClass); |
2005 | 2004 |
2006 nativeEmitter.cachedBuilders.remove(element.enclosingClass); | 2005 nativeEmitter.cachedBuilders.remove(element.enclosingClass); |
2007 | 2006 |
2008 } | 2007 } |
2009 } | 2008 } |
2010 } | 2009 } |
2011 } | 2010 } |
OLD | NEW |