Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart

Issue 720813002: Incremental compilation of new classes with fields. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r41823. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | dart/pkg/dart2js_incremental/lib/caching_compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
diff --git a/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index 602333a1d830239ff491cbd0f4295639c400adb2..5f3de2427ec119a2fab6bfec525cb673fce4d774 100644
--- a/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -267,27 +267,27 @@ class OldEmitter implements Emitter {
// },
// });
- var defineClass = js('''function(name, cls, fields) {
+ var defineClass = js('''function(name, fields) {
var accessors = [];
- var str = "function " + cls + "(";
+ var str = "function " + name + "(";
var body = "";
for (var i = 0; i < fields.length; i++) {
if(i != 0) str += ", ";
- var field = generateAccessor(fields[i], accessors, cls);
+ var field = generateAccessor(fields[i], accessors, name);
var parameter = "parameter_" + field;
str += parameter;
body += ("this." + field + " = " + parameter + ";\\n");
}
str += ") {\\n" + body + "}\\n";
- str += cls + ".builtin\$cls=\\"" + name + "\\";\\n";
- str += "\$desc=\$collectedClasses." + cls + ";\\n";
+ str += name + ".builtin\$cls=\\"" + name + "\\";\\n";
+ str += "\$desc=\$collectedClasses." + name + ";\\n";
str += "if(\$desc instanceof Array) \$desc = \$desc[1];\\n";
- str += cls + ".prototype = \$desc;\\n";
+ str += name + ".prototype = \$desc;\\n";
if (typeof defineClass.name != "string") {
- str += cls + ".name=\\"" + cls + "\\";\\n";
+ str += name + ".name=\\"" + name + "\\";\\n";
}
str += accessors.join("");
@@ -295,11 +295,17 @@ class OldEmitter implements Emitter {
}''');
// Declare a function called "generateAccessor". This is used in
// defineClassFunction (it's a local declaration in init()).
+ List<jsAst.Node> saveDefineClass = [];
+ if (compiler.hasIncrementalSupport) {
+ saveDefineClass.add(
+ js(r'self.$dart_unsafe_eval.defineClass = defineClass'));
+ }
return [
generateAccessorFunction,
js('$generateAccessorHolder = generateAccessor'),
new jsAst.FunctionDeclaration(
- new jsAst.VariableDeclaration('defineClass'), defineClass) ];
+ new jsAst.VariableDeclaration('defineClass'), defineClass) ]
+ ..addAll(saveDefineClass);
}
/** Needs defineClass to be defined. */
@@ -418,27 +424,16 @@ class OldEmitter implements Emitter {
/* The 'fields' are either a constructor function or a
* string encoding fields, constructor and superclass. Gets the
* superclass and fields in the format
- * '[name/]Super;field1,field2'
+ * 'Super;field1,field2'
* from the CLASS_DESCRIPTOR_PROPERTY property on the descriptor.
- * The 'name/' is optional and contains the name that should be used
- * when printing the runtime type string. It is used, for example,
- * to print the runtime type JSInt as 'int'.
*/
var classData = desc["${namer.classDescriptorProperty}"],
- supr, name = cls, fields = classData;
+ supr, fields = classData;
if (#hasRetainedMetadata)
if (typeof classData == "object" &&
classData instanceof Array) {
classData = fields = classData[0];
}
- if (typeof classData == "string") {
- var split = classData.split("/");
- if (split.length == 2) {
- name = split[0];
- fields = split[1];
- }
- }
-
var s = fields.split(";");
fields = s[1] == "" ? [] : s[1].split(",");
supr = s[0];
@@ -466,7 +461,7 @@ class OldEmitter implements Emitter {
}
if (typeof dart_precompiled != "function") {
- combinedConstructorFunction += defineClass(name, cls, fields);
+ combinedConstructorFunction += defineClass(cls, fields);
constructorsList.push(cls);
}
if (supr) pendingClasses[cls] = supr;
« no previous file with comments | « no previous file | dart/pkg/dart2js_incremental/lib/caching_compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698