Chromium Code Reviews| 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..7852e47a445187e4d4a4cc3f81cb6bdde5044fb0 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 # }', |
| @@ -278,8 +287,8 @@ class NsmEmitter extends CodeEmitterHelper { |
| if (useDiffEncoding) { |
| statements.add(js.statement('''{ |
| var objectClassObject = |
|
floitsch
2014/12/29 18:09:12
fits on one line?
zarah
2014/12/30 10:29:26
Done.
|
| - collectedClasses[#], // # is name of class Object. |
| - shortNames = #.split(","), // # is diffEncoding. |
| + collectedClasses[#objectClass], |
| + shortNames = #diffEncoding.split(","), |
| nameNumber = 0, |
| diffEncodedString = shortNames[0], |
| calculatedShortNames = [0, 1]; // 0, 1 are args for splice. |
| @@ -316,21 +325,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(",")', { |
|
floitsch
2014/12/29 18:09:12
move the "{" to the next line.
At least for the co
zarah
2014/12/30 10:29:26
Done.
|
| + '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(",")', |
|
floitsch
2014/12/29 18:09:12
ok. But I didn't find it hard to read.
zarah
2014/12/30 10:29:26
Acknowledged.
|
| + {'longs': js.string(longs.join(','))})); |
| } |
| statements.add(js.statement( |
| 'if (objectClassObject instanceof Array)' |
| @@ -366,23 +374,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; |
| } |