Chromium Code Reviews| 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 |