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

Side by Side Diff: pkg/compiler/lib/src/native/behavior.dart

Issue 2813093002: Remove BackendClasses and JavaScriptBackendClasses. (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 import '../common.dart'; 5 import '../common.dart';
6 import '../common/backend_api.dart' show BackendClasses, ForeignResolver; 6 import '../common/backend_api.dart' show ForeignResolver;
7 import '../common/resolution.dart' show ParsingContext, Resolution; 7 import '../common/resolution.dart' show ParsingContext, Resolution;
8 import '../compiler.dart' show Compiler; 8 import '../compiler.dart' show Compiler;
9 import '../compile_time_constants.dart' show ConstantEnvironment; 9 import '../compile_time_constants.dart' show ConstantEnvironment;
10 import '../constants/expressions.dart'; 10 import '../constants/expressions.dart';
11 import '../constants/values.dart'; 11 import '../constants/values.dart';
12 import '../common_elements.dart' show CommonElements; 12 import '../common_elements.dart' show CommonElements;
13 import '../elements/elements.dart'; 13 import '../elements/elements.dart';
14 import '../elements/entities.dart'; 14 import '../elements/entities.dart';
15 import '../elements/resolution_types.dart'; 15 import '../elements/resolution_types.dart';
16 import '../elements/types.dart'; 16 import '../elements/types.dart';
17 import '../js/js.dart' as js; 17 import '../js/js.dart' as js;
18 import '../js_backend/native_data.dart' show NativeData;
18 import '../tree/tree.dart'; 19 import '../tree/tree.dart';
19 import '../universe/side_effects.dart' show SideEffects; 20 import '../universe/side_effects.dart' show SideEffects;
20 import '../util/util.dart'; 21 import '../util/util.dart';
21 import 'js.dart'; 22 import 'js.dart';
22 23
23 typedef dynamic /*DartType|SpecialType*/ TypeLookup(String typeString, 24 typedef dynamic /*DartType|SpecialType*/ TypeLookup(String typeString,
24 {bool required}); 25 {bool required});
25 26
26 /// This class is a temporary work-around until we get a more powerful DartType. 27 /// This class is a temporary work-around until we get a more powerful DartType.
27 class SpecialType { 28 class SpecialType {
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 static NativeBehavior ofMethodElement( 769 static NativeBehavior ofMethodElement(
769 MethodElement element, Compiler compiler, 770 MethodElement element, Compiler compiler,
770 {bool isJsInterop}) { 771 {bool isJsInterop}) {
771 ResolutionFunctionType type = element.computeType(compiler.resolution); 772 ResolutionFunctionType type = element.computeType(compiler.resolution);
772 List<ConstantExpression> metadata = <ConstantExpression>[]; 773 List<ConstantExpression> metadata = <ConstantExpression>[];
773 for (MetadataAnnotation annotation in element.implementation.metadata) { 774 for (MetadataAnnotation annotation in element.implementation.metadata) {
774 annotation.ensureResolved(compiler.resolution); 775 annotation.ensureResolved(compiler.resolution);
775 metadata.add(annotation.constant); 776 metadata.add(annotation.constant);
776 } 777 }
777 778
778 BehaviorBuilder builder = new ResolverBehaviorBuilder(compiler); 779 BehaviorBuilder builder =
780 new ResolverBehaviorBuilder(compiler, compiler.backend.nativeData);
779 return builder.buildMethodBehavior( 781 return builder.buildMethodBehavior(
780 type, metadata, lookupFromElement(compiler.resolution, element), 782 type, metadata, lookupFromElement(compiler.resolution, element),
781 isJsInterop: isJsInterop); 783 isJsInterop: isJsInterop);
782 } 784 }
783 785
784 static NativeBehavior ofFieldElementLoad( 786 static NativeBehavior ofFieldElementLoad(
785 MemberElement element, Compiler compiler, 787 MemberElement element, Compiler compiler,
786 {bool isJsInterop}) { 788 {bool isJsInterop}) {
787 Resolution resolution = compiler.resolution; 789 Resolution resolution = compiler.resolution;
788 ResolutionDartType type = element.computeType(resolution); 790 ResolutionDartType type = element.computeType(resolution);
789 List<ConstantExpression> metadata = <ConstantExpression>[]; 791 List<ConstantExpression> metadata = <ConstantExpression>[];
790 for (MetadataAnnotation annotation in element.implementation.metadata) { 792 for (MetadataAnnotation annotation in element.implementation.metadata) {
791 annotation.ensureResolved(compiler.resolution); 793 annotation.ensureResolved(compiler.resolution);
792 metadata.add(annotation.constant); 794 metadata.add(annotation.constant);
793 } 795 }
794 796
795 BehaviorBuilder builder = new ResolverBehaviorBuilder(compiler); 797 BehaviorBuilder builder =
798 new ResolverBehaviorBuilder(compiler, compiler.backend.nativeData);
796 return builder.buildFieldLoadBehavior( 799 return builder.buildFieldLoadBehavior(
797 type, metadata, lookupFromElement(resolution, element), 800 type, metadata, lookupFromElement(resolution, element),
798 isJsInterop: isJsInterop); 801 isJsInterop: isJsInterop);
799 } 802 }
800 803
801 static NativeBehavior ofFieldElementStore( 804 static NativeBehavior ofFieldElementStore(
802 MemberElement field, Compiler compiler) { 805 MemberElement field, Compiler compiler) {
803 BehaviorBuilder builder = new ResolverBehaviorBuilder(compiler); 806 BehaviorBuilder builder =
807 new ResolverBehaviorBuilder(compiler, compiler.backend.nativeData);
804 ResolutionDartType type = field.computeType(compiler.resolution); 808 ResolutionDartType type = field.computeType(compiler.resolution);
805 return builder.buildFieldStoreBehavior(type); 809 return builder.buildFieldStoreBehavior(type);
806 } 810 }
807 811
808 static TypeLookup lookupFromElement(Resolution resolution, Element element) { 812 static TypeLookup lookupFromElement(Resolution resolution, Element element) {
809 ResolutionDartType lookup(String name, {bool required}) { 813 ResolutionDartType lookup(String name, {bool required}) {
810 Element e = element.buildScope().lookup(name); 814 Element e = element.buildScope().lookup(name);
811 if (e == null || e is! ClassElement) { 815 if (e == null || e is! ClassElement) {
812 if (required) { 816 if (required) {
813 resolution.reporter.reportErrorMessage(element, MessageKind.GENERIC, 817 resolution.reporter.reportErrorMessage(element, MessageKind.GENERIC,
(...skipping 25 matching lines...) Expand all
839 // TODO(sra): Parse type parameters. 843 // TODO(sra): Parse type parameters.
840 return type; 844 return type;
841 } 845 }
842 } 846 }
843 return const ResolutionDynamicType(); 847 return const ResolutionDynamicType();
844 } 848 }
845 } 849 }
846 850
847 abstract class BehaviorBuilder { 851 abstract class BehaviorBuilder {
848 CommonElements get commonElements; 852 CommonElements get commonElements;
849 BackendClasses get backendClasses;
850 DiagnosticReporter get reporter; 853 DiagnosticReporter get reporter;
851 ConstantEnvironment get constants; 854 ConstantEnvironment get constants;
855 NativeData get nativeData;
852 bool get trustJSInteropTypeAnnotations; 856 bool get trustJSInteropTypeAnnotations;
853 857
854 Resolution get resolution => null; 858 Resolution get resolution => null;
855 859
856 NativeBehavior _behavior; 860 NativeBehavior _behavior;
857 861
858 void _overrideWithAnnotations( 862 void _overrideWithAnnotations(
859 Iterable<ConstantExpression> metadata, TypeLookup lookupType) { 863 Iterable<ConstantExpression> metadata, TypeLookup lookupType) {
860 if (metadata.isEmpty) return; 864 if (metadata.isEmpty) return;
861 865
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 if (type is FunctionType) { 943 if (type is FunctionType) {
940 FunctionType functionType = type; 944 FunctionType functionType = type;
941 _capture(functionType.returnType, isInterop: isInterop); 945 _capture(functionType.returnType, isInterop: isInterop);
942 for (DartType parameter in functionType.parameterTypes) { 946 for (DartType parameter in functionType.parameterTypes) {
943 _escape(parameter); 947 _escape(parameter);
944 } 948 }
945 } else { 949 } else {
946 if (!isInterop) { 950 if (!isInterop) {
947 _behavior.typesInstantiated.add(type); 951 _behavior.typesInstantiated.add(type);
948 } else { 952 } else {
949 if (type is InterfaceType && 953 if (type is InterfaceType && nativeData.isNativeClass(type.element)) {
950 backendClasses.isNativeClass(type.element)) {
951 // Any declared native or interop type (isNative implies isJsInterop) 954 // Any declared native or interop type (isNative implies isJsInterop)
952 // is assumed to be allocated. 955 // is assumed to be allocated.
953 _behavior.typesInstantiated.add(type); 956 _behavior.typesInstantiated.add(type);
954 } 957 }
955 958
956 if (!trustJSInteropTypeAnnotations || 959 if (!trustJSInteropTypeAnnotations ||
957 type.isDynamic || 960 type.isDynamic ||
958 type == commonElements.objectType) { 961 type == commonElements.objectType) {
959 // By saying that only JS-interop types can be created, we prevent 962 // By saying that only JS-interop types can be created, we prevent
960 // pulling in every other native type (e.g. all of dart:html) when a 963 // pulling in every other native type (e.g. all of dart:html) when a
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 _escape(type); 1031 _escape(type);
1029 } 1032 }
1030 1033
1031 _overrideWithAnnotations(metadata, lookupType); 1034 _overrideWithAnnotations(metadata, lookupType);
1032 return _behavior; 1035 return _behavior;
1033 } 1036 }
1034 } 1037 }
1035 1038
1036 class ResolverBehaviorBuilder extends BehaviorBuilder { 1039 class ResolverBehaviorBuilder extends BehaviorBuilder {
1037 final Compiler compiler; 1040 final Compiler compiler;
1041 final NativeData nativeData;
1038 1042
1039 ResolverBehaviorBuilder(this.compiler); 1043 ResolverBehaviorBuilder(this.compiler, this.nativeData);
1040 1044
1041 @override 1045 @override
1042 CommonElements get commonElements => compiler.commonElements; 1046 CommonElements get commonElements => compiler.commonElements;
1043 1047
1044 @override 1048 @override
1045 bool get trustJSInteropTypeAnnotations => 1049 bool get trustJSInteropTypeAnnotations =>
1046 compiler.options.trustJSInteropTypeAnnotations; 1050 compiler.options.trustJSInteropTypeAnnotations;
1047 1051
1048 @override 1052 @override
1049 ConstantEnvironment get constants => compiler.constants; 1053 ConstantEnvironment get constants => compiler.constants;
1050 1054
1051 @override 1055 @override
1052 DiagnosticReporter get reporter => compiler.reporter; 1056 DiagnosticReporter get reporter => compiler.reporter;
1053 1057
1054 @override 1058 @override
1055 BackendClasses get backendClasses => compiler.backend.backendClasses;
1056
1057 @override
1058 Resolution get resolution => compiler.resolution; 1059 Resolution get resolution => compiler.resolution;
1059 } 1060 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/world_builder.dart ('k') | pkg/compiler/lib/src/native/enqueue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698