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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend.dart

Issue 2975433002: Assert that we don't mix K and J elements (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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) 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 library js_backend.backend; 5 library js_backend.backend;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/backend_api.dart' 8 import '../common/backend_api.dart'
9 show ForeignResolver, NativeRegistry, ImpactTransformer; 9 show ForeignResolver, NativeRegistry, ImpactTransformer;
10 import '../common/codegen.dart' show CodegenWorkItem; 10 import '../common/codegen.dart' show CodegenWorkItem;
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 final Set<ClassEntity> specialOperatorEqClasses = new Set<ClassEntity>(); 358 final Set<ClassEntity> specialOperatorEqClasses = new Set<ClassEntity>();
359 359
360 List<CompilerTask> get tasks { 360 List<CompilerTask> get tasks {
361 List<CompilerTask> result = functionCompiler.tasks; 361 List<CompilerTask> result = functionCompiler.tasks;
362 result.add(emitter); 362 result.add(emitter);
363 result.add(patchResolverTask); 363 result.add(patchResolverTask);
364 result.add(kernelTask); 364 result.add(kernelTask);
365 return result; 365 return result;
366 } 366 }
367 367
368 final RuntimeTypesNeedBuilder _rtiNeedBuilder; 368 RuntimeTypesImpl _rti;
369 RuntimeTypesNeed _rtiNeed;
370 final RuntimeTypesImpl _rti;
371 369
372 RuntimeTypesEncoder _rtiEncoder; 370 RuntimeTypesEncoder _rtiEncoder;
373 371
374 /// True if the html library has been loaded. 372 /// True if the html library has been loaded.
375 bool htmlLibraryIsLoaded = false; 373 bool htmlLibraryIsLoaded = false;
376 374
377 /// Resolution analysis for tracking reflective access to type variables.
378 TypeVariableResolutionAnalysis _typeVariableResolutionAnalysis;
379
380 /// Codegen handler for reflective access to type variables. 375 /// Codegen handler for reflective access to type variables.
381 TypeVariableCodegenAnalysis _typeVariableCodegenAnalysis; 376 TypeVariableCodegenAnalysis _typeVariableCodegenAnalysis;
382 377
383 /// Resolution support for generating table of interceptors and 378 /// Resolution support for generating table of interceptors and
384 /// constructors for custom elements. 379 /// constructors for custom elements.
385 CustomElementsResolutionAnalysis _customElementsResolutionAnalysis; 380 CustomElementsResolutionAnalysis _customElementsResolutionAnalysis;
386 381
387 /// Codegen support for generating table of interceptors and 382 /// Codegen support for generating table of interceptors and
388 /// constructors for custom elements. 383 /// constructors for custom elements.
389 CustomElementsCodegenAnalysis _customElementsCodegenAnalysis; 384 CustomElementsCodegenAnalysis _customElementsCodegenAnalysis;
(...skipping 30 matching lines...) Expand all
420 415
421 PatchResolverTask patchResolverTask; 416 PatchResolverTask patchResolverTask;
422 417
423 /// The strategy used for collecting and emitting source information. 418 /// The strategy used for collecting and emitting source information.
424 SourceInformationStrategy sourceInformationStrategy; 419 SourceInformationStrategy sourceInformationStrategy;
425 420
426 /// Interface for serialization of backend specific data. 421 /// Interface for serialization of backend specific data.
427 JavaScriptBackendSerialization serialization; 422 JavaScriptBackendSerialization serialization;
428 423
429 NativeDataBuilderImpl _nativeDataBuilder; 424 NativeDataBuilderImpl _nativeDataBuilder;
430 final NativeBasicDataBuilderImpl _nativeBasicDataBuilder =
431 new NativeBasicDataBuilderImpl();
432 NativeBasicDataImpl _nativeBasicData;
433 NativeDataBuilder get nativeDataBuilder => _nativeDataBuilder; 425 NativeDataBuilder get nativeDataBuilder => _nativeDataBuilder;
434 final NativeDataResolver _nativeDataResolver; 426 final NativeDataResolver _nativeDataResolver;
435 OneShotInterceptorData _oneShotInterceptorData; 427 OneShotInterceptorData _oneShotInterceptorData;
436 BackendUsageBuilder _backendUsageBuilder; 428 BackendUsageBuilder _backendUsageBuilder;
437 MirrorsDataImpl _mirrorsData; 429 MirrorsDataImpl _mirrorsData;
438 CheckedModeHelpers _checkedModeHelpers; 430 CheckedModeHelpers _checkedModeHelpers;
439 431
440 final SuperMemberData superMemberData = new SuperMemberData(); 432 final SuperMemberData superMemberData = new SuperMemberData();
441 433
442 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer; 434 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer;
443 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer; 435 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer;
444 436
445 BackendImpacts impacts;
446
447 Target _target; 437 Target _target;
448 438
449 Tracer tracer; 439 Tracer tracer;
450 440
451 JavaScriptBackend(this.compiler, 441 JavaScriptBackend(this.compiler,
452 {bool generateSourceMap: true, 442 {bool generateSourceMap: true,
453 bool useStartupEmitter: false, 443 bool useStartupEmitter: false,
454 bool useMultiSourceInfo: false, 444 bool useMultiSourceInfo: false,
455 bool useNewSourceInfo: false, 445 bool useNewSourceInfo: false,
456 bool useKernel: false}) 446 bool useKernel: false})
457 : _rti = new RuntimeTypesImpl( 447 : optimizerHints = new OptimizerHintsForTests(
458 compiler.frontendStrategy.elementEnvironment,
459 compiler.frontendStrategy.dartTypes),
460 optimizerHints = new OptimizerHintsForTests(
461 compiler.frontendStrategy.elementEnvironment, 448 compiler.frontendStrategy.elementEnvironment,
462 compiler.frontendStrategy.commonElements), 449 compiler.frontendStrategy.commonElements),
463 this.sourceInformationStrategy = 450 this.sourceInformationStrategy =
464 compiler.backendStrategy.sourceInformationStrategy, 451 compiler.backendStrategy.sourceInformationStrategy,
465 constantCompilerTask = new JavaScriptConstantTask(compiler), 452 constantCompilerTask = new JavaScriptConstantTask(compiler),
466 _nativeDataResolver = new NativeDataResolverImpl(compiler), 453 _nativeDataResolver = new NativeDataResolverImpl(compiler) {
467 _rtiNeedBuilder =
468 compiler.frontendStrategy.createRuntimeTypesNeedBuilder() {
469 CommonElements commonElements = compiler.frontendStrategy.commonElements; 454 CommonElements commonElements = compiler.frontendStrategy.commonElements;
470 _target = new JavaScriptBackendTarget(this); 455 _target = new JavaScriptBackendTarget(this);
471 impacts = new BackendImpacts(compiler.options, commonElements);
472 _mirrorsData = compiler.frontendStrategy.createMirrorsDataBuilder(); 456 _mirrorsData = compiler.frontendStrategy.createMirrorsDataBuilder();
473 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements); 457 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements);
474 _checkedModeHelpers = new CheckedModeHelpers(commonElements); 458 _checkedModeHelpers = new CheckedModeHelpers(commonElements);
475 emitter = 459 emitter =
476 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter); 460 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter);
477
478 _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis(
479 compiler.frontendStrategy.elementEnvironment,
480 impacts,
481 _backendUsageBuilder);
482 jsInteropAnalysis = new JsInteropAnalysis(this); 461 jsInteropAnalysis = new JsInteropAnalysis(this);
483 _mirrorsResolutionAnalysis = 462 _mirrorsResolutionAnalysis =
484 compiler.frontendStrategy.createMirrorsResolutionAnalysis(this); 463 compiler.frontendStrategy.createMirrorsResolutionAnalysis(this);
485 lookupMapResolutionAnalysis = new LookupMapResolutionAnalysis( 464 lookupMapResolutionAnalysis = new LookupMapResolutionAnalysis(
486 reporter, compiler.frontendStrategy.elementEnvironment); 465 reporter, compiler.frontendStrategy.elementEnvironment);
487 466
488 noSuchMethodRegistry = new NoSuchMethodRegistry( 467 noSuchMethodRegistry = new NoSuchMethodRegistry(
489 commonElements, compiler.frontendStrategy.createNoSuchMethodResolver()); 468 commonElements, compiler.frontendStrategy.createNoSuchMethodResolver());
490 kernelTask = new KernelTask(compiler); 469 kernelTask = new KernelTask(compiler);
491 patchResolverTask = new PatchResolverTask(compiler); 470 patchResolverTask = new PatchResolverTask(compiler);
(...skipping 25 matching lines...) Expand all
517 /// Codegen support for generating table of interceptors and 496 /// Codegen support for generating table of interceptors and
518 /// constructors for custom elements. 497 /// constructors for custom elements.
519 CustomElementsCodegenAnalysis get customElementsCodegenAnalysis { 498 CustomElementsCodegenAnalysis get customElementsCodegenAnalysis {
520 assert( 499 assert(
521 _customElementsCodegenAnalysis != null, 500 _customElementsCodegenAnalysis != null,
522 failedAt(NO_LOCATION_SPANNABLE, 501 failedAt(NO_LOCATION_SPANNABLE,
523 "CustomElementsCodegenAnalysis has not been created yet.")); 502 "CustomElementsCodegenAnalysis has not been created yet."));
524 return _customElementsCodegenAnalysis; 503 return _customElementsCodegenAnalysis;
525 } 504 }
526 505
527 NativeBasicData get nativeBasicData {
528 assert(
529 _nativeBasicData != null,
530 failedAt(NO_LOCATION_SPANNABLE,
531 "NativeBasicData has not been computed yet."));
532 return _nativeBasicData;
533 }
534
535 NativeBasicDataBuilder get nativeBasicDataBuilder => _nativeBasicDataBuilder;
536
537 /// Resolution analysis for tracking reflective access to type variables.
538 TypeVariableResolutionAnalysis get typeVariableResolutionAnalysis {
539 assert(
540 _typeVariableCodegenAnalysis == null,
541 failedAt(NO_LOCATION_SPANNABLE,
542 "TypeVariableHandler has already been created."));
543 return _typeVariableResolutionAnalysis;
544 }
545
546 /// Codegen handler for reflective access to type variables. 506 /// Codegen handler for reflective access to type variables.
547 TypeVariableCodegenAnalysis get typeVariableCodegenAnalysis { 507 TypeVariableCodegenAnalysis get typeVariableCodegenAnalysis {
548 assert( 508 assert(
549 _typeVariableCodegenAnalysis != null, 509 _typeVariableCodegenAnalysis != null,
550 failedAt(NO_LOCATION_SPANNABLE, 510 failedAt(NO_LOCATION_SPANNABLE,
551 "TypeVariableHandler has not been created yet.")); 511 "TypeVariableHandler has not been created yet."));
552 return _typeVariableCodegenAnalysis; 512 return _typeVariableCodegenAnalysis;
553 } 513 }
554 514
555 MirrorsData get mirrorsData => _mirrorsData; 515 MirrorsData get mirrorsData => _mirrorsData;
(...skipping 23 matching lines...) Expand all
579 } 539 }
580 540
581 OneShotInterceptorData get oneShotInterceptorData { 541 OneShotInterceptorData get oneShotInterceptorData {
582 assert( 542 assert(
583 _oneShotInterceptorData != null, 543 _oneShotInterceptorData != null,
584 failedAt(NO_LOCATION_SPANNABLE, 544 failedAt(NO_LOCATION_SPANNABLE,
585 "OneShotInterceptorData has not been prepared yet.")); 545 "OneShotInterceptorData has not been prepared yet."));
586 return _oneShotInterceptorData; 546 return _oneShotInterceptorData;
587 } 547 }
588 548
589 RuntimeTypesNeed get rtiNeed { 549 RuntimeTypesChecksBuilder get rtiChecksBuilder {
590 assert( 550 assert(
591 _rtiNeed != null, 551 _rti != null,
592 failedAt(NO_LOCATION_SPANNABLE, 552 failedAt(NO_LOCATION_SPANNABLE,
593 "RuntimeTypesNeed has not been computed yet.")); 553 "RuntimeTypesChecksBuilder has not been created yet."));
594 return _rtiNeed;
595 }
596
597 RuntimeTypesNeedBuilder get rtiNeedBuilder {
598 assert(
599 _rtiNeed == null,
600 failedAt(NO_LOCATION_SPANNABLE,
601 "RuntimeTypesNeed has already been computed."));
602 return _rtiNeedBuilder;
603 }
604
605 RuntimeTypesChecksBuilder get rtiChecksBuilder {
606 assert( 554 assert(
607 !_rti.rtiChecksBuilderClosed, 555 !_rti.rtiChecksBuilderClosed,
608 failedAt(NO_LOCATION_SPANNABLE, 556 failedAt(NO_LOCATION_SPANNABLE,
609 "RuntimeTypesChecks has already been computed.")); 557 "RuntimeTypesChecks has already been computed."));
610 return _rti; 558 return _rti;
611 } 559 }
612 560
613 RuntimeTypesSubstitutions get rtiSubstitutions => _rti; 561 RuntimeTypesSubstitutions get rtiSubstitutions {
562 assert(
563 _rti != null,
564 failedAt(NO_LOCATION_SPANNABLE,
565 "RuntimeTypesSubstitutions has not been created yet."));
566 return _rti;
567 }
614 568
615 RuntimeTypesEncoder get rtiEncoder { 569 RuntimeTypesEncoder get rtiEncoder {
616 assert( 570 assert(
617 _rtiEncoder != null, 571 _rtiEncoder != null,
618 failedAt(NO_LOCATION_SPANNABLE, 572 failedAt(NO_LOCATION_SPANNABLE,
619 "RuntimeTypesEncoder has not been created.")); 573 "RuntimeTypesEncoder has not been created."));
620 return _rtiEncoder; 574 return _rtiEncoder;
621 } 575 }
622 576
623 CheckedModeHelpers get checkedModeHelpers => _checkedModeHelpers; 577 CheckedModeHelpers get checkedModeHelpers => _checkedModeHelpers;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 673
720 validateInterceptorImplementsAllObjectMethods( 674 validateInterceptorImplementsAllObjectMethods(
721 frontendStrategy.commonElements.jsInterceptorClass); 675 frontendStrategy.commonElements.jsInterceptorClass);
722 // The null-interceptor must also implement *all* methods. 676 // The null-interceptor must also implement *all* methods.
723 validateInterceptorImplementsAllObjectMethods( 677 validateInterceptorImplementsAllObjectMethods(
724 frontendStrategy.commonElements.jsNullClass); 678 frontendStrategy.commonElements.jsNullClass);
725 } 679 }
726 680
727 /// Called when the resolution queue has been closed. 681 /// Called when the resolution queue has been closed.
728 void onResolutionEnd() { 682 void onResolutionEnd() {
729 frontendStrategy.annotationProcesser 683 frontendStrategy.annotationProcesser.processJsInteropAnnotations(
730 .processJsInteropAnnotations(nativeBasicData, nativeDataBuilder); 684 frontendStrategy.nativeBasicData, nativeDataBuilder);
731 } 685 }
732 686
733 /// Called when the closed world from resolution has been computed. 687 /// Called when the closed world from resolution has been computed.
734 void onResolutionClosedWorld( 688 void onResolutionClosedWorld(
735 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { 689 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) {
736 for (MemberEntity entity 690 for (MemberEntity entity
737 in compiler.enqueuer.resolution.processedEntities) { 691 in compiler.enqueuer.resolution.processedEntities) {
738 processAnnotations(closedWorld.elementEnvironment, 692 processAnnotations(closedWorld.elementEnvironment,
739 closedWorld.commonElements, entity, closedWorldRefiner); 693 closedWorld.commonElements, entity, closedWorldRefiner);
740 } 694 }
741 mirrorsDataBuilder.computeMembersNeededForReflection( 695 mirrorsDataBuilder.computeMembersNeededForReflection(
742 compiler.enqueuer.resolution.worldBuilder, closedWorld); 696 compiler.enqueuer.resolution.worldBuilder, closedWorld);
743 _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed(
744 compiler.enqueuer.resolution.worldBuilder,
745 closedWorld,
746 compiler.frontendStrategy.dartTypes,
747 enableTypeAssertions: compiler.options.enableTypeAssertions);
748 mirrorsResolutionAnalysis.onResolutionComplete(); 697 mirrorsResolutionAnalysis.onResolutionComplete();
749 } 698 }
750 699
751 void onTypeInferenceComplete(GlobalTypeInferenceResults results) { 700 void onTypeInferenceComplete(GlobalTypeInferenceResults results) {
752 noSuchMethodRegistry.onTypeInferenceComplete(results); 701 noSuchMethodRegistry.onTypeInferenceComplete(results);
753 } 702 }
754 703
755 /// Called when resolving a call to a foreign function. 704 /// Called when resolving a call to a foreign function.
756 native.NativeBehavior resolveForeignCall(Send node, Element element, 705 native.NativeBehavior resolveForeignCall(Send node, Element element,
757 CallStructure callStructure, ForeignResolver resolver) { 706 CallStructure callStructure, ForeignResolver resolver) {
(...skipping 24 matching lines...) Expand all
782 } 731 }
783 // No native behavior for this call. 732 // No native behavior for this call.
784 return null; 733 return null;
785 } 734 }
786 735
787 ResolutionEnqueuer createResolutionEnqueuer( 736 ResolutionEnqueuer createResolutionEnqueuer(
788 CompilerTask task, Compiler compiler) { 737 CompilerTask task, Compiler compiler) {
789 ElementEnvironment elementEnvironment = 738 ElementEnvironment elementEnvironment =
790 compiler.frontendStrategy.elementEnvironment; 739 compiler.frontendStrategy.elementEnvironment;
791 CommonElements commonElements = compiler.frontendStrategy.commonElements; 740 CommonElements commonElements = compiler.frontendStrategy.commonElements;
792 _nativeBasicData = nativeBasicDataBuilder.close(elementEnvironment); 741 NativeBasicData nativeBasicData = compiler.frontendStrategy.nativeBasicData;
742 RuntimeTypesNeedBuilder rtiNeedBuilder =
743 compiler.frontendStrategy.createRuntimeTypesNeedBuilder();
744 BackendImpacts impacts =
745 new BackendImpacts(compiler.options, commonElements);
746 TypeVariableResolutionAnalysis typeVariableResolutionAnalysis =
747 new TypeVariableResolutionAnalysis(
748 compiler.frontendStrategy.elementEnvironment,
749 impacts,
750 _backendUsageBuilder);
793 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer( 751 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer(
794 compiler.options, 752 compiler.options,
795 elementEnvironment, 753 elementEnvironment,
796 commonElements, 754 commonElements,
797 compiler.frontendStrategy.dartTypes, 755 compiler.frontendStrategy.dartTypes,
798 _backendUsageBuilder, 756 _backendUsageBuilder,
799 compiler.frontendStrategy.createNativeClassFinder(nativeBasicData)); 757 compiler.frontendStrategy.createNativeClassFinder(nativeBasicData));
800 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData); 758 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData);
801 _customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis( 759 _customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis(
802 constantSystem, 760 constantSystem,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 mirrorsResolutionAnalysis, 799 mirrorsResolutionAnalysis,
842 typeVariableResolutionAnalysis, 800 typeVariableResolutionAnalysis,
843 _nativeResolutionEnqueuer, 801 _nativeResolutionEnqueuer,
844 compiler.deferredLoadTask, 802 compiler.deferredLoadTask,
845 kernelTask), 803 kernelTask),
846 compiler.frontendStrategy.createResolutionWorldBuilder( 804 compiler.frontendStrategy.createResolutionWorldBuilder(
847 nativeBasicData, 805 nativeBasicData,
848 _nativeDataBuilder, 806 _nativeDataBuilder,
849 interceptorDataBuilder, 807 interceptorDataBuilder,
850 _backendUsageBuilder, 808 _backendUsageBuilder,
809 rtiNeedBuilder,
810 _nativeResolutionEnqueuer,
851 const OpenWorldStrategy()), 811 const OpenWorldStrategy()),
852 compiler.frontendStrategy.createResolutionWorkItemBuilder( 812 compiler.frontendStrategy.createResolutionWorkItemBuilder(
853 nativeBasicData, _nativeDataBuilder, impactTransformer)); 813 nativeBasicData, _nativeDataBuilder, impactTransformer));
854 } 814 }
855 815
856 /// Creates an [Enqueuer] for code generation specific to this backend. 816 /// Creates an [Enqueuer] for code generation specific to this backend.
857 CodegenEnqueuer createCodegenEnqueuer( 817 CodegenEnqueuer createCodegenEnqueuer(
858 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { 818 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) {
859 ElementEnvironment elementEnvironment = closedWorld.elementEnvironment; 819 ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
860 CommonElements commonElements = closedWorld.commonElements; 820 CommonElements commonElements = closedWorld.commonElements;
821 BackendImpacts impacts =
822 new BackendImpacts(compiler.options, commonElements);
861 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis( 823 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis(
862 closedWorld.elementEnvironment, this, commonElements, mirrorsData); 824 closedWorld.elementEnvironment, this, commonElements, mirrorsData);
863 _lookupMapAnalysis = new LookupMapAnalysis( 825 _lookupMapAnalysis = new LookupMapAnalysis(
864 reporter, 826 reporter,
865 constantSystem, 827 constantSystem,
866 constants, 828 constants,
867 elementEnvironment, 829 elementEnvironment,
868 commonElements, 830 commonElements,
869 lookupMapResolutionAnalysis); 831 lookupMapResolutionAnalysis);
870 _mirrorsCodegenAnalysis = mirrorsResolutionAnalysis.close(); 832 _mirrorsCodegenAnalysis = mirrorsResolutionAnalysis.close();
871 _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis( 833 _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis(
872 constantSystem, commonElements, elementEnvironment, nativeBasicData); 834 constantSystem,
835 commonElements,
836 elementEnvironment,
837 closedWorld.nativeData);
873 _nativeCodegenEnqueuer = new native.NativeCodegenEnqueuer( 838 _nativeCodegenEnqueuer = new native.NativeCodegenEnqueuer(
874 compiler.options, 839 compiler.options,
875 elementEnvironment, 840 elementEnvironment,
876 commonElements, 841 commonElements,
877 compiler.frontendStrategy.dartTypes, 842 closedWorld.dartTypes,
878 emitter, 843 emitter,
879 _nativeResolutionEnqueuer, 844 closedWorld.liveNativeClasses,
880 closedWorld.nativeData); 845 closedWorld.nativeData);
881 return new CodegenEnqueuer( 846 return new CodegenEnqueuer(
882 task, 847 task,
883 compiler.options, 848 compiler.options,
884 const TreeShakingEnqueuerStrategy(), 849 const TreeShakingEnqueuerStrategy(),
885 compiler.backendStrategy.createCodegenWorldBuilder( 850 compiler.backendStrategy.createCodegenWorldBuilder(
886 nativeBasicData, closedWorld, const TypeMaskStrategy()), 851 closedWorld.nativeData, closedWorld, const TypeMaskStrategy()),
887 compiler.backendStrategy.createCodegenWorkItemBuilder(closedWorld), 852 compiler.backendStrategy.createCodegenWorkItemBuilder(closedWorld),
888 new CodegenEnqueuerListener( 853 new CodegenEnqueuerListener(
889 elementEnvironment, 854 elementEnvironment,
890 commonElements, 855 commonElements,
891 impacts, 856 impacts,
892 closedWorld.backendUsage, 857 closedWorld.backendUsage,
893 rtiNeed, 858 closedWorld.rtiNeed,
894 customElementsCodegenAnalysis, 859 customElementsCodegenAnalysis,
895 typeVariableCodegenAnalysis, 860 typeVariableCodegenAnalysis,
896 lookupMapAnalysis, 861 lookupMapAnalysis,
897 mirrorsCodegenAnalysis, 862 mirrorsCodegenAnalysis,
898 nativeCodegenEnqueuer)); 863 nativeCodegenEnqueuer));
899 } 864 }
900 865
901 WorldImpact codegen(CodegenWorkItem work, ClosedWorld closedWorld) { 866 WorldImpact codegen(CodegenWorkItem work, ClosedWorld closedWorld) {
902 MemberEntity element = work.element; 867 MemberEntity element = work.element;
903 if (compiler.elementHasCompileTimeError(element)) { 868 if (compiler.elementHasCompileTimeError(element)) {
(...skipping 27 matching lines...) Expand all
931 .transformCodegenImpact(work.registry.worldImpact); 896 .transformCodegenImpact(work.registry.worldImpact);
932 compiler.dumpInfoTask.registerImpact(element, worldImpact); 897 compiler.dumpInfoTask.registerImpact(element, worldImpact);
933 return worldImpact; 898 return worldImpact;
934 } 899 }
935 900
936 native.NativeResolutionEnqueuer get nativeResolutionEnqueuerForTesting => 901 native.NativeResolutionEnqueuer get nativeResolutionEnqueuerForTesting =>
937 _nativeResolutionEnqueuer; 902 _nativeResolutionEnqueuer;
938 903
939 native.NativeEnqueuer get nativeCodegenEnqueuer => _nativeCodegenEnqueuer; 904 native.NativeEnqueuer get nativeCodegenEnqueuer => _nativeCodegenEnqueuer;
940 905
941 ClassElement defaultSuperclass( 906 ClassElement defaultSuperclass(CommonElements commonElements,
942 CommonElements commonElements, ClassElement element) { 907 NativeBasicData nativeBasicData, ClassElement element) {
943 if (nativeBasicData.isJsInteropClass(element)) { 908 if (nativeBasicData.isJsInteropClass(element)) {
944 return commonElements.jsJavaScriptObjectClass; 909 return commonElements.jsJavaScriptObjectClass;
945 } 910 }
946 // Native classes inherit from Interceptor. 911 // Native classes inherit from Interceptor.
947 return nativeBasicData.isNativeClass(element) 912 return nativeBasicData.isNativeClass(element)
948 ? commonElements.jsInterceptorClass 913 ? commonElements.jsInterceptorClass
949 : commonElements.objectClass; 914 : commonElements.objectClass;
950 } 915 }
951 916
952 /** 917 /**
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 element == commonElements.jsUnmodifiableArrayClass; 984 element == commonElements.jsUnmodifiableArrayClass;
1020 } 985 }
1021 986
1022 /// This method is called immediately after the [library] and its parts have 987 /// This method is called immediately after the [library] and its parts have
1023 /// been loaded. 988 /// been loaded.
1024 void setAnnotations(LibraryEntity library) { 989 void setAnnotations(LibraryEntity library) {
1025 if (!compiler.serialization.isDeserialized(library)) { 990 if (!compiler.serialization.isDeserialized(library)) {
1026 AnnotationProcessor processor = 991 AnnotationProcessor processor =
1027 compiler.frontendStrategy.annotationProcesser; 992 compiler.frontendStrategy.annotationProcesser;
1028 if (canLibraryUseNative(library)) { 993 if (canLibraryUseNative(library)) {
1029 processor.extractNativeAnnotations(library, nativeBasicDataBuilder); 994 processor.extractNativeAnnotations(library);
1030 } 995 }
1031 processor.extractJsInteropAnnotations(library, nativeBasicDataBuilder); 996 processor.extractJsInteropAnnotations(library);
1032 } 997 }
1033 Uri uri = library.canonicalUri; 998 Uri uri = library.canonicalUri;
1034 if (uri == Uris.dart_html) { 999 if (uri == Uris.dart_html) {
1035 htmlLibraryIsLoaded = true; 1000 htmlLibraryIsLoaded = true;
1036 } else if (uri == LookupMapResolutionAnalysis.PACKAGE_LOOKUP_MAP) { 1001 } else if (uri == LookupMapResolutionAnalysis.PACKAGE_LOOKUP_MAP) {
1037 lookupMapResolutionAnalysis.init(library); 1002 lookupMapResolutionAnalysis.init(library);
1038 } 1003 }
1039 } 1004 }
1040 1005
1041 /// This method is called when all new libraries loaded through 1006 /// This method is called when all new libraries loaded through
(...skipping 17 matching lines...) Expand all
1059 WorldImpact onCodegenStart(ClosedWorld closedWorld, 1024 WorldImpact onCodegenStart(ClosedWorld closedWorld,
1060 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) { 1025 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) {
1061 functionCompiler.onCodegenStart(); 1026 functionCompiler.onCodegenStart();
1062 _oneShotInterceptorData = new OneShotInterceptorData( 1027 _oneShotInterceptorData = new OneShotInterceptorData(
1063 closedWorld.interceptorData, closedWorld.commonElements); 1028 closedWorld.interceptorData, closedWorld.commonElements);
1064 _namer = determineNamer(closedWorld, codegenWorldBuilder); 1029 _namer = determineNamer(closedWorld, codegenWorldBuilder);
1065 tracer = new Tracer(closedWorld, namer, compiler); 1030 tracer = new Tracer(closedWorld, namer, compiler);
1066 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl( 1031 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl(
1067 namer, closedWorld.elementEnvironment, closedWorld.commonElements); 1032 namer, closedWorld.elementEnvironment, closedWorld.commonElements);
1068 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder, sorter); 1033 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder, sorter);
1034 // TODO(johnniwinther): Share the impact object created in
1035 // createCodegenEnqueuer.
1036 BackendImpacts impacts =
1037 new BackendImpacts(compiler.options, closedWorld.commonElements);
1038 _rti = new RuntimeTypesImpl(
1039 closedWorld.elementEnvironment, closedWorld.dartTypes);
1069 _codegenImpactTransformer = new CodegenImpactTransformer( 1040 _codegenImpactTransformer = new CodegenImpactTransformer(
1070 compiler.options, 1041 compiler.options,
1071 closedWorld.elementEnvironment, 1042 closedWorld.elementEnvironment,
1072 closedWorld.commonElements, 1043 closedWorld.commonElements,
1073 impacts, 1044 impacts,
1074 checkedModeHelpers, 1045 checkedModeHelpers,
1075 closedWorld.nativeData, 1046 closedWorld.nativeData,
1076 closedWorld.backendUsage, 1047 closedWorld.backendUsage,
1077 rtiNeed, 1048 closedWorld.rtiNeed,
1078 nativeCodegenEnqueuer, 1049 nativeCodegenEnqueuer,
1079 namer, 1050 namer,
1080 oneShotInterceptorData, 1051 oneShotInterceptorData,
1081 lookupMapAnalysis, 1052 lookupMapAnalysis,
1082 rtiChecksBuilder); 1053 rtiChecksBuilder);
1083 return const WorldImpact(); 1054 return const WorldImpact();
1084 } 1055 }
1085 1056
1086 /// Called when code generation has been completed. 1057 /// Called when code generation has been completed.
1087 void onCodegenEnd() { 1058 void onCodegenEnd() {
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 return _backend.resolveForeignCall(node, element, callStructure, resolver); 1326 return _backend.resolveForeignCall(node, element, callStructure, resolver);
1356 } 1327 }
1357 1328
1358 @override 1329 @override
1359 bool isDefaultNoSuchMethod(MethodElement element) { 1330 bool isDefaultNoSuchMethod(MethodElement element) {
1360 return _commonElements.isDefaultNoSuchMethodImplementation(element); 1331 return _commonElements.isDefaultNoSuchMethodImplementation(element);
1361 } 1332 }
1362 1333
1363 @override 1334 @override
1364 ClassElement defaultSuperclass(ClassElement element) { 1335 ClassElement defaultSuperclass(ClassElement element) {
1365 return _backend.defaultSuperclass(_commonElements, element); 1336 return _backend.defaultSuperclass(
1337 _commonElements, _backend.frontendStrategy.nativeBasicData, element);
1366 } 1338 }
1367 1339
1368 @override 1340 @override
1369 bool isNativeClass(ClassEntity element) => 1341 bool isNativeClass(ClassEntity element) =>
1370 _backend.nativeBasicData.isNativeClass(element); 1342 _backend.compiler.frontendStrategy.nativeBasicData.isNativeClass(element);
1371 1343
1372 @override 1344 @override
1373 bool isForeign(Element element) => 1345 bool isForeign(Element element) =>
1374 _backend.isForeign(_commonElements, element); 1346 _backend.isForeign(_commonElements, element);
1375 } 1347 }
1376 1348
1377 class SuperMemberData { 1349 class SuperMemberData {
1378 /// A set of member that are called from subclasses via `super`. 1350 /// A set of member that are called from subclasses via `super`.
1379 final Set<MemberEntity> _aliasedSuperMembers = new Setlet<MemberEntity>(); 1351 final Set<MemberEntity> _aliasedSuperMembers = new Setlet<MemberEntity>();
1380 1352
(...skipping 10 matching lines...) Expand all
1391 1363
1392 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { 1364 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) {
1393 return !selector.isGetter; 1365 return !selector.isGetter;
1394 } 1366 }
1395 1367
1396 /// Returns `true` if [member] is called from a subclass via `super`. 1368 /// Returns `true` if [member] is called from a subclass via `super`.
1397 bool isAliasedSuperMember(MemberEntity member) { 1369 bool isAliasedSuperMember(MemberEntity member) {
1398 return _aliasedSuperMembers.contains(member); 1370 return _aliasedSuperMembers.contains(member);
1399 } 1371 }
1400 } 1372 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/frontend_strategy.dart ('k') | pkg/compiler/lib/src/js_backend/backend_serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698