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

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

Issue 828753002: dart2js OldEmitter: Change to named holes in js output strings plus some extra clean-ups. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments. Created 6 years 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
Index: pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
index 6b48c7a0f1f7929fc6ac242b5f039dc4a4967256..d396698a13bcffad940a4eb777cb854400e639c3 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart
@@ -81,16 +81,25 @@ class NsmEmitter extends CodeEmitterHelper {
}
assert(backend.isInterceptedName(Compiler.NO_SUCH_METHOD));
- jsAst.Expression expression = js('this.#(this, #(#, #, #, #, #))', [
- noSuchMethodName,
- backend.emitter.staticFunctionAccess(
- backend.getCreateInvocationMirror()),
- js.string(compiler.enableMinification ?
- internalName : methodName),
- js.string(internalName),
- js.number(type),
- new jsAst.ArrayInitializer(parameterNames.map(js).toList()),
- new jsAst.ArrayInitializer(argNames)]);
+ jsAst.Expression expression =
+ js('''this.#noSuchMethodName(this,
+ #createInvocationMirror(#methodName,
+ #internalName,
+ #type,
+ #arguments,
+ #namedArguments))''',
+ {'noSuchMethodName': noSuchMethodName,
+ 'createInvocationMirror':
+ backend.emitter.staticFunctionAccess(
+ backend.getCreateInvocationMirror()),
+ 'methodName':
+ js.string(compiler.enableMinification
+ ? internalName : methodName),
+ 'internalName': js.string(internalName),
+ 'type': js.number(type),
+ 'arguments':
+ new jsAst.ArrayInitializer(parameterNames.map(js).toList()),
+ 'namedArguments': new jsAst.ArrayInitializer(argNames)});
if (backend.isInterceptedName(selector.name)) {
return js(r'function($receiver, #) { return # }',
@@ -277,9 +286,8 @@ class NsmEmitter extends CodeEmitterHelper {
var type = 0;
if (useDiffEncoding) {
statements.add(js.statement('''{
- var objectClassObject =
- collectedClasses[#], // # is name of class Object.
- shortNames = #.split(","), // # is diffEncoding.
+ var objectClassObject = collectedClasses[#objectClass],
+ shortNames = #diffEncoding.split(","),
nameNumber = 0,
diffEncodedString = shortNames[0],
calculatedShortNames = [0, 1]; // 0, 1 are args for splice.
@@ -316,21 +324,20 @@ class NsmEmitter extends CodeEmitterHelper {
}
shortNames.splice.apply(shortNames, calculatedShortNames);
}
- }''', [
- js.string(namer.getNameOfClass(objectClass)),
- js.string('$diffEncoding')]));
+ }''', {'objectClass': js.string(namer.getNameOfClass(objectClass)),
+ 'diffEncoding': js.string('$diffEncoding')}));
} else {
// No useDiffEncoding version.
Iterable<String> longs = trivialNsmHandlers.map((selector) =>
selector.invocationMirrorMemberName);
statements.add(js.statement(
- 'var objectClassObject = collectedClasses[#],'
- ' shortNames = #.split(",")', [
- js.string(namer.getNameOfClass(objectClass)),
- js.string('$diffEncoding')]));
+ 'var objectClassObject = collectedClasses[#objectClass],'
+ ' shortNames = #diffEncoding.split(",")',
+ {'objectClass': js.string(namer.getNameOfClass(objectClass)),
+ 'diffEncoding': js.string('$diffEncoding')}));
if (!minify) {
- statements.add(js.statement('var longNames = #.split(",")',
- js.string(longs.join(','))));
+ statements.add(js.statement('var longNames = #longs.split(",")',
+ {'longs': js.string(longs.join(','))}));
}
statements.add(js.statement(
'if (objectClassObject instanceof Array)'
@@ -366,23 +373,23 @@ class NsmEmitter extends CodeEmitterHelper {
// createInvocationMirror(String name, internalName, type,
// arguments, argumentNames)
//
- $whatToPatch[short] = (function(name, short, type, #) {
+ $whatToPatch[short] = (function(name, short,
+ type, #sliceOffsetParams) {
return function() {
- return this.#(this,
- #(name, short, type,
- Array.prototype.slice.call(arguments, #),
- []));
+ return this.#noSuchMethodName(this,
+ #createInvocationMirror(name, short, type,
+ Array.prototype.slice.call(arguments,
+ #sliceOffsetParams),
+ []));
}
- })(#[j], short, type, #);
+ })(#names[j], short, type, #sliceOffsetArguments);
}
- }''', [
- sliceOffsetParams, // parameter
- noSuchMethodName,
- createInvocationMirror,
- sliceOffsetParams, // argument to slice
- minify ? 'shortNames' : 'longNames',
- sliceOffsetArguments
- ]));
+ }''', {
+ 'sliceOffsetParams': sliceOffsetParams,
+ 'noSuchMethodName': noSuchMethodName,
+ 'createInvocationMirror': createInvocationMirror,
+ 'names': minify ? 'shortNames' : 'longNames',
+ 'sliceOffsetArguments': sliceOffsetArguments}));
return statements;
}

Powered by Google App Engine
This is Rietveld 408576698