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

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

Issue 2820573005: dart2js: --fast-startup: share defaultValues property for closures with no default values (Closed)
Patch Set: Created 3 years, 8 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library dart2js.js_emitter.program_builder; 5 library dart2js.js_emitter.program_builder;
6 6
7 import '../../closure.dart' show ClosureFieldElement; 7 import '../../closure.dart' show ClosureFieldElement;
8 import '../../common.dart'; 8 import '../../common.dart';
9 import '../../common/names.dart' show Names, Selectors; 9 import '../../common/names.dart' show Names, Selectors;
10 import '../../compiler.dart' show Compiler; 10 import '../../compiler.dart' show Compiler;
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 } 495 }
496 496
497 Class _buildClass(ClassElement element) { 497 Class _buildClass(ClassElement element) {
498 bool onlyForRti = collector.classesOnlyNeededForRti.contains(element); 498 bool onlyForRti = collector.classesOnlyNeededForRti.contains(element);
499 bool hasRtiField = backend.rtiNeed.classNeedsRtiField(element); 499 bool hasRtiField = backend.rtiNeed.classNeedsRtiField(element);
500 if (backend.nativeData.isJsInteropClass(element)) { 500 if (backend.nativeData.isJsInteropClass(element)) {
501 // TODO(jacobr): check whether the class has any active static fields 501 // TODO(jacobr): check whether the class has any active static fields
502 // if it does not we can suppress it completely. 502 // if it does not we can suppress it completely.
503 onlyForRti = true; 503 onlyForRti = true;
504 } 504 }
505 bool isClosureBaseClass = element == _compiler.commonElements.closureClass;
505 506
506 List<Method> methods = []; 507 List<Method> methods = [];
507 List<StubMethod> callStubs = <StubMethod>[]; 508 List<StubMethod> callStubs = <StubMethod>[];
508 509
509 ClassStubGenerator classStubGenerator = new ClassStubGenerator( 510 ClassStubGenerator classStubGenerator = new ClassStubGenerator(
510 namer, backend, worldBuilder, closedWorld, 511 namer, backend, worldBuilder, closedWorld,
511 enableMinification: _compiler.options.enableMinification); 512 enableMinification: _compiler.options.enableMinification);
512 RuntimeTypeGenerator runtimeTypeGenerator = 513 RuntimeTypeGenerator runtimeTypeGenerator =
513 new RuntimeTypeGenerator(_compiler, _task, namer); 514 new RuntimeTypeGenerator(_compiler, _task, namer);
514 515
(...skipping 29 matching lines...) Expand all
544 String selectorName = selector.name; 545 String selectorName = selector.name;
545 if (selector.isSetter) selectorName = "$selectorName="; 546 if (selector.isSetter) selectorName = "$selectorName=";
546 if (backend.mirrorsData.symbolsUsed.contains(selectorName)) { 547 if (backend.mirrorsData.symbolsUsed.contains(selectorName)) {
547 _symbolsMap[name] = selectorName; 548 _symbolsMap[name] = selectorName;
548 } 549 }
549 noSuchMethodStubs.add( 550 noSuchMethodStubs.add(
550 classStubGenerator.generateStubForNoSuchMethod(name, selector)); 551 classStubGenerator.generateStubForNoSuchMethod(name, selector));
551 }); 552 });
552 } 553 }
553 554
554 if (element == _compiler.commonElements.closureClass) { 555 if (isClosureBaseClass) {
555 // We add a special getter here to allow for tearing off a closure from 556 // We add a special getter to allow for tearing off a closure from itself.
556 // itself.
557 js.Name name = namer.getterForMember(Names.call); 557 js.Name name = namer.getterForMember(Names.call);
558 js.Fun function = js.js('function() { return this; }'); 558 js.Fun function = js.js('function() { return this; }');
559 callStubs.add(_buildStubMethod(name, function)); 559 callStubs.add(_buildStubMethod(name, function));
560 } 560 }
561 561
562 ClassElement implementation = element.implementation; 562 ClassElement implementation = element.implementation;
563 563
564 // MixinApplications run through the members of their mixin. Here, we are 564 // MixinApplications run through the members of their mixin. Here, we are
565 // only interested in direct members. 565 // only interested in direct members.
566 if (!onlyForRti && !element.isMixinApplication) { 566 if (!onlyForRti && !element.isMixinApplication) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 // TODO(floitsch): we shouldn't update the registry in the middle of 610 // TODO(floitsch): we shouldn't update the registry in the middle of
611 // building a class. 611 // building a class.
612 Holder holder = _registry.registerHolder(holderName); 612 Holder holder = _registry.registerHolder(holderName);
613 bool isInstantiated = !backend.nativeData.isJsInteropClass(element) && 613 bool isInstantiated = !backend.nativeData.isJsInteropClass(element) &&
614 worldBuilder.directlyInstantiatedClasses.contains(element); 614 worldBuilder.directlyInstantiatedClasses.contains(element);
615 615
616 Class result; 616 Class result;
617 if (element.isMixinApplication && !onlyForRti) { 617 if (element.isMixinApplication && !onlyForRti) {
618 assert(!backend.nativeData.isNativeClass(element)); 618 assert(!backend.nativeData.isNativeClass(element));
619 assert(methods.isEmpty); 619 assert(methods.isEmpty);
620 assert(!isClosureBaseClass);
620 621
621 result = new MixinApplication( 622 result = new MixinApplication(
622 element, 623 element,
623 name, 624 name,
624 holder, 625 holder,
625 instanceFields, 626 instanceFields,
626 staticFieldsForReflection, 627 staticFieldsForReflection,
627 callStubs, 628 callStubs,
628 checkedSetters, 629 checkedSetters,
629 isChecks, 630 isChecks,
(...skipping 10 matching lines...) Expand all
640 instanceFields, 641 instanceFields,
641 staticFieldsForReflection, 642 staticFieldsForReflection,
642 callStubs, 643 callStubs,
643 noSuchMethodStubs, 644 noSuchMethodStubs,
644 checkedSetters, 645 checkedSetters,
645 isChecks, 646 isChecks,
646 typeTests.functionTypeIndex, 647 typeTests.functionTypeIndex,
647 isDirectlyInstantiated: isInstantiated, 648 isDirectlyInstantiated: isInstantiated,
648 hasRtiField: hasRtiField, 649 hasRtiField: hasRtiField,
649 onlyForRti: onlyForRti, 650 onlyForRti: onlyForRti,
650 isNative: backend.nativeData.isNativeClass(element)); 651 isNative: backend.nativeData.isNativeClass(element),
652 isClosureBaseClass: isClosureBaseClass);
651 } 653 }
652 _classes[element] = result; 654 _classes[element] = result;
653 return result; 655 return result;
654 } 656 }
655 657
656 bool _methodNeedsStubs(FunctionElement method) { 658 bool _methodNeedsStubs(FunctionElement method) {
657 return !method.functionSignature.optionalParameters.isEmpty; 659 return !method.functionSignature.optionalParameters.isEmpty;
658 } 660 }
659 661
660 bool _methodCanBeReflected(MethodElement method) { 662 bool _methodCanBeReflected(MethodElement method) {
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 Constant constant = new Constant(name, holder, constantValue); 973 Constant constant = new Constant(name, holder, constantValue);
972 _constants[constantValue] = constant; 974 _constants[constantValue] = constant;
973 } 975 }
974 } 976 }
975 977
976 Holder _registerStaticStateHolder() { 978 Holder _registerStaticStateHolder() {
977 return _registry.registerHolder(namer.staticStateHolder, 979 return _registry.registerHolder(namer.staticStateHolder,
978 isStaticStateHolder: true); 980 isStaticStateHolder: true);
979 } 981 }
980 } 982 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698