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

Side by Side Diff: frog/world.dart

Issue 10354005: Fix for Issue 2878 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 7 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
« no previous file with comments | « frog/tests/frog_native/native_field_rename_2_frog_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 /** The one true [World]. */ 5 /** The one true [World]. */
6 World world; 6 World world;
7 7
8 /** 8 /**
9 * Experimental phase to enable await, only set when using the 9 * Experimental phase to enable await, only set when using the
10 * await/awaitc.dart entrypoint. 10 * await/awaitc.dart entrypoint.
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 avoidHazardousMemberNames(); 513 avoidHazardousMemberNames();
514 } 514 }
515 515
516 makePrivateMembersUnique(Library rootLib) { 516 makePrivateMembersUnique(Library rootLib) {
517 var usedNames = new Set<String>(); 517 var usedNames = new Set<String>();
518 process(lib) { 518 process(lib) {
519 for (var name in lib._privateMembers.getKeys()) { 519 for (var name in lib._privateMembers.getKeys()) {
520 if (usedNames.contains(name)) { 520 if (usedNames.contains(name)) {
521 var mset = lib._privateMembers[name]; 521 var mset = lib._privateMembers[name];
522 String uniqueName = '_${lib.jsname}${mset.jsname}'; 522 String uniqueName = '_${lib.jsname}${mset.jsname}';
523 mset.jsname = uniqueName;
524 for (var member in mset.members) { 523 for (var member in mset.members) {
525 member._jsname = uniqueName; 524 member._jsname = uniqueName;
526 } 525 }
527 } else { 526 } else {
528 usedNames.add(name); 527 usedNames.add(name);
529 } 528 }
530 } 529 }
531 } 530 }
532 531
533 // Visit libraries in pre-order of imports. 532 // Visit libraries in pre-order of imports.
534 var visited = new Set<Library>(); 533 var visited = new Set<Library>();
535 visit(lib) { 534 visit(lib) {
536 if (visited.contains(lib)) return; 535 if (visited.contains(lib)) return;
537 visited.add(lib); 536 visited.add(lib);
538 process(lib); 537 process(lib);
539 for (var import in lib.imports) { 538 for (var import in lib.imports) {
540 visit(import.library); 539 visit(import.library);
541 } 540 }
542 } 541 }
543 visit(rootLib); 542 visit(rootLib);
544 } 543 }
545 544
546 /** 545 /**
547 * Ensures no non-native member has a jsname conflicting with a known native 546 * Ensures no non-native member has a jsname conflicting with a known native
548 * member jsname. 547 * member jsname.
549 */ 548 */
550 avoidHazardousMemberNames() { 549 avoidHazardousMemberNames() {
551 rename(jsname) {
552 if (_hazardousMemberNames.contains(jsname)) {
553 jsname = '${jsname}\$_';
554 }
555 return jsname;
556 }
557
558 for (var name in _members.getKeys()) { 550 for (var name in _members.getKeys()) {
559 var mset = _members[name]; 551 var mset = _members[name];
560 bool renamed = false;
561 for (var member in mset.members) { 552 for (var member in mset.members) {
562 if (!member.isNative || 553 if (!member.isNative ||
563 (member is MethodMember && member.hasNativeBody)) { 554 (member is MethodMember && member.hasNativeBody)) {
564 String oldName = member._jsname; 555 var jsname = member._jsname;
565 member._jsname = rename(oldName); 556 if (_hazardousMemberNames.contains(jsname)) {
566 if (member._jsname != oldName) renamed = true; 557 member._jsnameRoot = jsname;
558 member._jsname = '${jsname}\$_';
559 }
567 } 560 }
568 } 561 }
569 // If any of the members where renamed, rename mset.
570 //
571 // If all members were renamed this makes mset.jsname consistent. If none
572 // were renamed that means they are native methods (with names different
573 // to the Dart names), so the mset name should not be renamed to stay
574 // consistent. If only some were renamed then the mset has no consistent
575 // calling convention, and will dispatch via a stub, so the mset name is
576 // irrelevant.
577 if (renamed) {
578 mset.jsname = rename(mset.jsname);
579 }
580 } 562 }
581 } 563 }
582 564
583 findMainMethod(Library lib) { 565 findMainMethod(Library lib) {
584 var main = lib.lookup('main', lib.span); 566 var main = lib.lookup('main', lib.span);
585 if (main == null) { 567 if (main == null) {
586 if (!options.checkOnly) fatal('no main method specified'); 568 if (!options.checkOnly) fatal('no main method specified');
587 } 569 }
588 return main; 570 return main;
589 } 571 }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 702
721 withTiming(String name, f()) { 703 withTiming(String name, f()) {
722 final sw = new Stopwatch(); 704 final sw = new Stopwatch();
723 sw.start(); 705 sw.start();
724 var result = f(); 706 var result = f();
725 sw.stop(); 707 sw.stop();
726 info('$name in ${sw.elapsedInMs()}msec'); 708 info('$name in ${sw.elapsedInMs()}msec');
727 return result; 709 return result;
728 } 710 }
729 } 711 }
OLDNEW
« no previous file with comments | « frog/tests/frog_native/native_field_rename_2_frog_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698