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 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 324 | 324 |
| 325 var str = "function " + name + "("; | 325 var str = "function " + name + "("; |
| 326 var body = ""; | 326 var body = ""; |
| 327 if (#hasIsolateSupport) { var fieldNames = ""; } | 327 if (#hasIsolateSupport) { var fieldNames = ""; } |
| 328 | 328 |
| 329 for (var i = 0; i < fields.length; i++) { | 329 for (var i = 0; i < fields.length; i++) { |
| 330 if(i != 0) str += ", "; | 330 if(i != 0) str += ", "; |
| 331 | 331 |
| 332 var field = generateAccessor(fields[i], accessors, name); | 332 var field = generateAccessor(fields[i], accessors, name); |
| 333 if (#hasIsolateSupport) { fieldNames += "'" + field + "',"; } | 333 if (#hasIsolateSupport) { fieldNames += "'" + field + "',"; } |
| 334 var parameter = "parameter_" + field; | 334 var parameter = "p_" + field; |
| 335 str += parameter; | 335 str += parameter; |
| 336 body += ("this." + field + " = " + parameter + ";\n"); | 336 body += ("this." + field + " = " + parameter + ";\n"); |
| 337 } | 337 } |
| 338 str += ") {\n" + body + "}\n"; | 338 str += ") {\n" + body + "}\n"; |
| 339 str += name + ".builtin$cls=\"" + name + "\";\n"; | 339 str += name + ".builtin$cls=\"" + name + "\";\n"; |
| 340 str += "$desc=$collectedClasses." + name + ";\n"; | 340 str += "$desc=$collectedClasses." + name + "[1];\n"; |
| 341 str += "if($desc instanceof Array) $desc = \$desc[1];\n"; | |
| 342 str += name + ".prototype = $desc;\n"; | 341 str += name + ".prototype = $desc;\n"; |
| 343 if (typeof defineClass.name != "string") { | 342 if (typeof defineClass.name != "string") { |
| 344 str += name + ".name=\"" + name + "\";\n"; | 343 str += name + ".name=\"" + name + "\";\n"; |
| 345 } | 344 } |
| 346 if (#hasIsolateSupport) { | 345 if (#hasIsolateSupport) { |
| 347 str += name + "." + #fieldNamesProperty + "=[" + fieldNames | 346 str += name + "." + #fieldNamesProperty + "=[" + fieldNames |
| 348 + "];\n"; | 347 + "];\n"; |
| 349 } | 348 } |
| 350 str += accessors.join(""); | 349 str += accessors.join(""); |
| 351 | 350 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 419 } | 418 } |
| 420 | 419 |
| 421 /** Needs defineClass to be defined. */ | 420 /** Needs defineClass to be defined. */ |
| 422 jsAst.Expression buildInheritFrom() { | 421 jsAst.Expression buildInheritFrom() { |
| 423 jsAst.Expression result = js(r""" | 422 jsAst.Expression result = js(r""" |
| 424 function() { | 423 function() { |
| 425 function tmp() {} | 424 function tmp() {} |
| 426 return function (constructor, superConstructor) { | 425 return function (constructor, superConstructor) { |
| 427 tmp.prototype = superConstructor.prototype; | 426 tmp.prototype = superConstructor.prototype; |
| 428 var object = new tmp(); | 427 var object = new tmp(); |
| 428 object.x = 0; delete object.x; // Make object slow. | |
|
floitsch
2015/02/24 20:21:39
I discussed and benchmarked this with Slava. It lo
herhut
2015/03/09 15:11:05
Acknowledged.
| |
| 429 var properties = constructor.prototype; | 429 var properties = constructor.prototype; |
| 430 var members = Object.keys(properties); | 430 var members = Object.keys(properties); |
| 431 for (var i = 0; i < members.length; i++) { | 431 for (var i = 0; i < members.length; i++) { |
| 432 var member = members[i]; | 432 var member = members[i]; |
| 433 object[member] = properties[member]; | 433 object[member] = properties[member]; |
| 434 } | 434 } |
| 435 // Use a function for `true` here, as functions are stored in the | 435 // Use a function for `true` here, as functions are stored in the |
| 436 // hidden class and not as properties in the object. | 436 // hidden class and not as properties in the object. |
| 437 object[#operatorIsPrefix + constructor.name] = constructor; | 437 object[#operatorIsPrefix + constructor.name] = constructor; |
| 438 object.constructor = constructor; | 438 object.constructor = constructor; |
| (...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1999 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { | 1999 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { |
| 2000 if (element.isInstanceMember) { | 2000 if (element.isInstanceMember) { |
| 2001 cachedClassBuilders.remove(element.enclosingClass); | 2001 cachedClassBuilders.remove(element.enclosingClass); |
| 2002 | 2002 |
| 2003 nativeEmitter.cachedBuilders.remove(element.enclosingClass); | 2003 nativeEmitter.cachedBuilders.remove(element.enclosingClass); |
| 2004 | 2004 |
| 2005 } | 2005 } |
| 2006 } | 2006 } |
| 2007 } | 2007 } |
| 2008 } | 2008 } |
| OLD | NEW |