| Index: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| index f0290b08eb0f00bf4d22075fa22ada35ffdb951d..e50a7d7ee1ea6f54ff82d02a251d4f9fe324cd21 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| @@ -15,8 +15,16 @@ import '../../constants/values.dart'
|
| import '../../common_elements.dart' show CommonElements, ElementEnvironment;
|
| import '../../deferred_load.dart' show DeferredLoadTask, OutputUnit;
|
| import '../../elements/elements.dart'
|
| - show ClassElement, FieldElement, LibraryElement, MethodElement;
|
| + show
|
| + ClassElement,
|
| + FieldElement,
|
| + FunctionSignature,
|
| + LibraryElement,
|
| + MemberElement,
|
| + MethodElement,
|
| + ParameterElement;
|
| import '../../elements/entities.dart';
|
| +import '../../elements/resolution_types.dart' show ResolutionDartType;
|
| import '../../elements/types.dart';
|
| import '../../js/js.dart' as js;
|
| import '../../js_backend/backend.dart' show SuperMemberData;
|
| @@ -184,7 +192,7 @@ class ProgramBuilder {
|
| ///
|
| /// Also contains classes that are not tracked by the profile run (like
|
| /// interceptors, ...).
|
| - Set<ClassEntity> _notSoftDeferred;
|
| + Set<ClassElement> _notSoftDeferred;
|
|
|
| Program buildProgram({bool storeFunctionTypesInMetadata: false}) {
|
| collector.collect();
|
| @@ -318,17 +326,16 @@ class ProgramBuilder {
|
|
|
| String data = new File(allocatedClassesPath).readAsStringSync();
|
| Set<String> allocatedClassesKeys = JSON.decode(data).keys.toSet();
|
| - Set<ClassEntity> allocatedClasses = new Set<ClassEntity>();
|
| + Set<ClassElement> allocatedClasses = new Set<ClassElement>();
|
|
|
| // Collects all super and mixin classes of a class.
|
| - void collect(ClassEntity element) {
|
| + void collect(ClassElement element) {
|
| allocatedClasses.add(element);
|
| - if (_elementEnvironment.isMixinApplication(element)) {
|
| + if (element.isMixinApplication) {
|
| collect(_elementEnvironment.getEffectiveMixinClass(element));
|
| }
|
| - ClassEntity superclass = _elementEnvironment.getSuperClass(element);
|
| - if (superclass != null) {
|
| - collect(superclass);
|
| + if (element.superclass != null) {
|
| + collect(element.superclass);
|
| }
|
| }
|
|
|
| @@ -336,7 +343,7 @@ class ProgramBuilder {
|
| // collect its dependencies (supers and mixins) and mark them as
|
| // not-soft-deferrable.
|
| collector.outputClassLists.forEach((_, List<ClassEntity> elements) {
|
| - for (ClassEntity element in elements) {
|
| + for (ClassElement element in elements) {
|
| // TODO(29574): share the encoding of the element with the code
|
| // that emits the profile-run.
|
| var key = "${element.library.canonicalUri}:${element.name}";
|
| @@ -555,7 +562,7 @@ class ProgramBuilder {
|
|
|
| if (member.isFunction) {
|
| MethodElement fn = member;
|
| - functionType = _elementEnvironment.getFunctionType(fn);
|
| + functionType = fn.type;
|
| } else if (member.isGetter) {
|
| if (_options.trustTypeAnnotations) {
|
| DartType returnType =
|
| @@ -779,7 +786,7 @@ class ProgramBuilder {
|
| for (Field field in instanceFields) {
|
| if (field.needsCheckedSetter) {
|
| assert(!field.needsUncheckedSetter);
|
| - FieldEntity element = field.element;
|
| + FieldElement element = field.element;
|
| js.Expression code = _generatedCode[element];
|
| assert(code != null);
|
| js.Name name = _namer.deriveSetterName(field.accessorName);
|
| @@ -856,28 +863,23 @@ class ProgramBuilder {
|
| _closedWorld.getMightBePassedToApply(method);
|
| }
|
|
|
| - /* Map | List */ _computeParameterDefaultValues(FunctionEntity method) {
|
| + /* Map | List */ _computeParameterDefaultValues(FunctionSignature signature) {
|
| var /* Map | List */ optionalParameterDefaultValues;
|
| - ParameterStructure parameterStructure = method.parameterStructure;
|
| - if (parameterStructure.namedParameters.isNotEmpty) {
|
| + if (signature.optionalParametersAreNamed) {
|
| optionalParameterDefaultValues = new Map<String, ConstantValue>();
|
| - _worldBuilder.forEachParameter(method,
|
| - (DartType type, String name, ConstantValue defaultValue) {
|
| - if (parameterStructure.namedParameters.contains(name)) {
|
| - assert(defaultValue != null);
|
| - optionalParameterDefaultValues[name] = defaultValue;
|
| - }
|
| + signature.forEachOptionalParameter((_parameter) {
|
| + ParameterElement parameter = _parameter;
|
| + ConstantValue def =
|
| + _constantHandler.getConstantValue(parameter.constant);
|
| + optionalParameterDefaultValues[parameter.name] = def;
|
| });
|
| } else {
|
| optionalParameterDefaultValues = <ConstantValue>[];
|
| - int index = 0;
|
| - _worldBuilder.forEachParameter(method,
|
| - (DartType type, String name, ConstantValue defaultValue) {
|
| - if (index >= parameterStructure.requiredParameters) {
|
| - assert(defaultValue != null);
|
| - optionalParameterDefaultValues.add(defaultValue);
|
| - }
|
| - index++;
|
| + signature.forEachOptionalParameter((_parameter) {
|
| + ParameterElement parameter = _parameter;
|
| + ConstantValue def =
|
| + _constantHandler.getConstantValue(parameter.constant);
|
| + optionalParameterDefaultValues.add(def);
|
| });
|
| }
|
| return optionalParameterDefaultValues;
|
| @@ -943,10 +945,11 @@ class ProgramBuilder {
|
| var /* List | Map */ optionalParameterDefaultValues;
|
| if (canBeApplied || canBeReflected) {
|
| // TODO(redemption): Handle function entities.
|
| - FunctionEntity method = element;
|
| - ParameterStructure parameterStructure = method.parameterStructure;
|
| - requiredParameterCount = parameterStructure.requiredParameters;
|
| - optionalParameterDefaultValues = _computeParameterDefaultValues(method);
|
| + MethodElement method = element;
|
| + FunctionSignature signature = method.functionSignature;
|
| + requiredParameterCount = signature.requiredParameterCount;
|
| + optionalParameterDefaultValues =
|
| + _computeParameterDefaultValues(signature);
|
| }
|
|
|
| return new InstanceMethod(element, name, code,
|
| @@ -992,7 +995,7 @@ class ProgramBuilder {
|
| /// Stub methods may have an element that can be used for code-size
|
| /// attribution.
|
| Method _buildStubMethod(js.Name name, js.Expression code,
|
| - {MemberEntity element}) {
|
| + {MemberElement element}) {
|
| return new StubMethod(name, code, element: element);
|
| }
|
|
|
| @@ -1082,15 +1085,8 @@ class ProgramBuilder {
|
| needsCheckedSetter));
|
| }
|
|
|
| - FieldVisitor visitor = new FieldVisitor(
|
| - _options,
|
| - _elementEnvironment,
|
| - _commonElements,
|
| - _worldBuilder,
|
| - _nativeData,
|
| - _mirrorsData,
|
| - _namer,
|
| - _closedWorld);
|
| + FieldVisitor visitor = new FieldVisitor(_options, _elementEnvironment,
|
| + _worldBuilder, _nativeData, _mirrorsData, _namer, _closedWorld);
|
| visitor.visitFields(visitField,
|
| visitStatics: visitStatics, library: library, cls: cls);
|
|
|
| @@ -1156,10 +1152,11 @@ class ProgramBuilder {
|
| var /* List | Map */ optionalParameterDefaultValues;
|
| if (canBeApplied || canBeReflected) {
|
| // TODO(redemption): Support entities;
|
| - FunctionEntity method = element;
|
| - ParameterStructure parameterStructure = method.parameterStructure;
|
| - requiredParameterCount = parameterStructure.requiredParameters;
|
| - optionalParameterDefaultValues = _computeParameterDefaultValues(method);
|
| + MethodElement method = element;
|
| + FunctionSignature signature = method.functionSignature;
|
| + requiredParameterCount = signature.requiredParameterCount;
|
| + optionalParameterDefaultValues =
|
| + _computeParameterDefaultValues(signature);
|
| }
|
|
|
| // TODO(floitsch): we shouldn't update the registry in the middle of
|
|
|