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

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

Issue 3004713002: Remove use of Compiler in inferrer engines. (Closed)
Patch Set: Created 3 years, 3 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 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 609
610 Namer determineNamer( 610 Namer determineNamer(
611 ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder) { 611 ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder) {
612 return compiler.options.enableMinification 612 return compiler.options.enableMinification
613 ? compiler.options.useFrequencyNamer 613 ? compiler.options.useFrequencyNamer
614 ? new FrequencyBasedNamer(closedWorld, codegenWorldBuilder) 614 ? new FrequencyBasedNamer(closedWorld, codegenWorldBuilder)
615 : new MinifyNamer(closedWorld, codegenWorldBuilder) 615 : new MinifyNamer(closedWorld, codegenWorldBuilder)
616 : new Namer(closedWorld, codegenWorldBuilder); 616 : new Namer(closedWorld, codegenWorldBuilder);
617 } 617 }
618 618
619 /// Returns true if global optimizations such as type inferencing can apply to
620 /// the field [element].
621 ///
622 /// One category of elements that do not apply is runtime helpers that the
623 /// backend calls, but the optimizations don't see those calls.
624 bool canFieldBeUsedForGlobalOptimizations(
625 FieldEntity element, ClosedWorld closedWorld) {
626 if (closedWorld.backendUsage.isFieldUsedByBackend(element)) {
627 return false;
628 }
629 if ((element.isTopLevel || element.isStatic) && !element.isAssignable) {
630 return true;
631 }
632 return !mirrorsData.isMemberAccessibleByReflection(element);
633 }
634
635 /// Returns true if global optimizations such as type inferencing can apply to
636 /// the parameter [element].
637 ///
638 /// One category of elements that do not apply is runtime helpers that the
639 /// backend calls, but the optimizations don't see those calls.
640 bool canFunctionParametersBeUsedForGlobalOptimizations(
641 FunctionEntity function, ClosedWorld closedWorld) {
642 return !closedWorld.backendUsage.isFunctionUsedByBackend(function) &&
643 !mirrorsData.isMemberAccessibleByReflection(function);
644 }
645
646 void validateInterceptorImplementsAllObjectMethods( 619 void validateInterceptorImplementsAllObjectMethods(
647 ClassEntity interceptorClass) { 620 ClassEntity interceptorClass) {
648 if (interceptorClass == null) return; 621 if (interceptorClass == null) return;
649 ClassEntity objectClass = frontendStrategy.commonElements.objectClass; 622 ClassEntity objectClass = frontendStrategy.commonElements.objectClass;
650 frontendStrategy.elementEnvironment.forEachClassMember(objectClass, 623 frontendStrategy.elementEnvironment.forEachClassMember(objectClass,
651 (_, MemberEntity member) { 624 (_, MemberEntity member) {
652 if (member.isConstructor) return; 625 if (member.isConstructor) return;
653 MemberEntity interceptorMember = frontendStrategy.elementEnvironment 626 MemberEntity interceptorMember = frontendStrategy.elementEnvironment
654 .lookupClassMember(interceptorClass, member.name); 627 .lookupClassMember(interceptorClass, member.name);
655 // Interceptors must override all Object methods due to calling convention 628 // Interceptors must override all Object methods due to calling convention
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 } 985 }
1013 986
1014 /// Called when the compiler starts running the codegen enqueuer. The 987 /// Called when the compiler starts running the codegen enqueuer. The
1015 /// [WorldImpact] of enabled backend features is returned. 988 /// [WorldImpact] of enabled backend features is returned.
1016 WorldImpact onCodegenStart(ClosedWorld closedWorld, 989 WorldImpact onCodegenStart(ClosedWorld closedWorld,
1017 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) { 990 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) {
1018 functionCompiler.onCodegenStart(); 991 functionCompiler.onCodegenStart();
1019 _oneShotInterceptorData = new OneShotInterceptorData( 992 _oneShotInterceptorData = new OneShotInterceptorData(
1020 closedWorld.interceptorData, closedWorld.commonElements); 993 closedWorld.interceptorData, closedWorld.commonElements);
1021 _namer = determineNamer(closedWorld, codegenWorldBuilder); 994 _namer = determineNamer(closedWorld, codegenWorldBuilder);
1022 tracer = new Tracer(closedWorld, namer, compiler); 995 tracer = new Tracer(closedWorld, namer, compiler.outputProvider);
1023 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl( 996 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl(
1024 namer, closedWorld.elementEnvironment, closedWorld.commonElements); 997 namer, closedWorld.elementEnvironment, closedWorld.commonElements);
1025 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder, sorter); 998 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder, sorter);
1026 // TODO(johnniwinther): Share the impact object created in 999 // TODO(johnniwinther): Share the impact object created in
1027 // createCodegenEnqueuer. 1000 // createCodegenEnqueuer.
1028 BackendImpacts impacts = 1001 BackendImpacts impacts =
1029 new BackendImpacts(compiler.options, closedWorld.commonElements); 1002 new BackendImpacts(compiler.options, closedWorld.commonElements);
1030 _rti = new RuntimeTypesImpl( 1003 _rti = new RuntimeTypesImpl(
1031 closedWorld.elementEnvironment, closedWorld.dartTypes); 1004 closedWorld.elementEnvironment, closedWorld.dartTypes);
1032 _codegenImpactTransformer = new CodegenImpactTransformer( 1005 _codegenImpactTransformer = new CodegenImpactTransformer(
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 1328
1356 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { 1329 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) {
1357 return !selector.isGetter; 1330 return !selector.isGetter;
1358 } 1331 }
1359 1332
1360 /// Returns `true` if [member] is called from a subclass via `super`. 1333 /// Returns `true` if [member] is called from a subclass via `super`.
1361 bool isAliasedSuperMember(MemberEntity member) { 1334 bool isAliasedSuperMember(MemberEntity member) {
1362 return _aliasedSuperMembers.contains(member); 1335 return _aliasedSuperMembers.contains(member);
1363 } 1336 }
1364 } 1337 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/io/source_map_builder.dart ('k') | pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698