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

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

Issue 897243003: dart2js: remove (broken) support for nsm on native classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove whitespace Created 5 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 class NsmEmitter extends CodeEmitterHelper { 7 class NsmEmitter extends CodeEmitterHelper {
8 final List<Selector> trivialNsmHandlers = <Selector>[]; 8 final List<Selector> trivialNsmHandlers = <Selector>[];
9 9
10 /// If this is true then we can generate the noSuchMethod handlers at startup 10 /// If this is true then we can generate the noSuchMethod handlers at startup
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 'diffEncoding': js.string('$diffEncoding')})); 273 'diffEncoding': js.string('$diffEncoding')}));
274 if (!minify) { 274 if (!minify) {
275 statements.add(js.statement('var longNames = #longs.split(",")', 275 statements.add(js.statement('var longNames = #longs.split(",")',
276 {'longs': js.string(longs.join(','))})); 276 {'longs': js.string(longs.join(','))}));
277 } 277 }
278 statements.add(js.statement( 278 statements.add(js.statement(
279 'if (objectClassObject instanceof Array)' 279 'if (objectClassObject instanceof Array)'
280 ' objectClassObject = objectClassObject[1];')); 280 ' objectClassObject = objectClassObject[1];'));
281 } 281 }
282 282
283 // TODO(9631): This is no longer valid for native methods.
284 String whatToPatch = emitter.nativeEmitter.handleNoSuchMethod ?
285 "Object.prototype" :
286 "objectClassObject";
287
288 List<jsAst.Expression> sliceOffsetArguments = 283 List<jsAst.Expression> sliceOffsetArguments =
289 firstNormalSelector == 0 284 firstNormalSelector == 0
290 ? [] 285 ? []
291 : (firstNormalSelector == shorts.length 286 : (firstNormalSelector == shorts.length
292 ? [js.number(1)] 287 ? [js.number(1)]
293 : [js('(j < #) ? 1 : 0', js.number(firstNormalSelector))]); 288 : [js('(j < #) ? 1 : 0', js.number(firstNormalSelector))]);
294 289
295 var sliceOffsetParams = sliceOffsetArguments.isEmpty ? [] : ['sliceOffset']; 290 var sliceOffsetParams = sliceOffsetArguments.isEmpty ? [] : ['sliceOffset'];
296 291
297 statements.add(js.statement(''' 292 statements.add(js.statement('''
298 // If we are loading a deferred library the object class will not be in 293 // If we are loading a deferred library the object class will not be in
299 // the collectedClasses so objectClassObject is undefined, and we skip 294 // the collectedClasses so objectClassObject is undefined, and we skip
300 // setting up the names. 295 // setting up the names.
301 if (objectClassObject) { 296 if (objectClassObject) {
302 for (var j = 0; j < shortNames.length; j++) { 297 for (var j = 0; j < shortNames.length; j++) {
303 var type = 0; 298 var type = 0;
304 var short = shortNames[j]; 299 var short = shortNames[j];
305 if (short[0] == "${namer.getterPrefix[0]}") type = 1; 300 if (short[0] == "${namer.getterPrefix[0]}") type = 1;
306 if (short[0] == "${namer.setterPrefix[0]}") type = 2; 301 if (short[0] == "${namer.setterPrefix[0]}") type = 2;
307 // Generate call to: 302 // Generate call to:
308 // 303 //
309 // createInvocationMirror(String name, internalName, type, 304 // createInvocationMirror(String name, internalName, type,
310 // arguments, argumentNames) 305 // arguments, argumentNames)
311 // 306 //
312 $whatToPatch[short] = (function(name, short, 307 objectClassObject[short] = (function(name, short,
313 type, #sliceOffsetParams) { 308 type, #sliceOffsetParams) {
314 return function() { 309 return function() {
315 return this.#noSuchMethodName(this, 310 return this.#noSuchMethodName(this,
316 #createInvocationMirror(name, short, type, 311 #createInvocationMirror(name, short, type,
317 Array.prototype.slice.call(arguments, 312 Array.prototype.slice.call(arguments,
318 #sliceOffsetParams), 313 #sliceOffsetParams),
319 [])); 314 []));
320 } 315 }
321 })(#names[j], short, type, #sliceOffsetArguments); 316 })(#names[j], short, type, #sliceOffsetArguments);
322 } 317 }
323 }''', { 318 }''', {
324 'sliceOffsetParams': sliceOffsetParams, 319 'sliceOffsetParams': sliceOffsetParams,
325 'noSuchMethodName': namer.noSuchMethodName, 320 'noSuchMethodName': namer.noSuchMethodName,
326 'createInvocationMirror': createInvocationMirror, 321 'createInvocationMirror': createInvocationMirror,
327 'names': minify ? 'shortNames' : 'longNames', 322 'names': minify ? 'shortNames' : 'longNames',
328 'sliceOffsetArguments': sliceOffsetArguments})); 323 'sliceOffsetArguments': sliceOffsetArguments}));
329 324
330 return statements; 325 return statements;
331 } 326 }
332 } 327 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698