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

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

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: Skip non-live constructor bodies 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) 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 'dart:io'; 7 import 'dart:io';
8 import 'dart:convert' show JSON; 8 import 'dart:convert' show JSON;
9 9
10 import '../../closure.dart' show ClosureConversionTask, ClosureFieldElement; 10 import '../../closure.dart' show ClosureConversionTask, ClosureFieldElement;
11 import '../../common.dart'; 11 import '../../common.dart';
12 import '../../common/names.dart' show Names, Selectors; 12 import '../../common/names.dart' show Names, Selectors;
13 import '../../constants/values.dart' 13 import '../../constants/values.dart'
14 show ConstantValue, InterceptorConstantValue; 14 show ConstantValue, InterceptorConstantValue;
15 import '../../common_elements.dart' show CommonElements, ElementEnvironment; 15 import '../../common_elements.dart' show CommonElements, ElementEnvironment;
16 import '../../deferred_load.dart' show DeferredLoadTask, OutputUnit; 16 import '../../deferred_load.dart' show DeferredLoadTask, OutputUnit;
17 import '../../elements/elements.dart' 17 import '../../elements/elements.dart'
18 show 18 show
19 ClassElement, 19 ClassElement,
20 ConstructorBodyElement,
21 Elements, 20 Elements,
22 FieldElement, 21 FieldElement,
23 FunctionSignature, 22 FunctionSignature,
24 GetterElement, 23 GetterElement,
25 LibraryElement, 24 LibraryElement,
26 MemberElement, 25 MemberElement,
27 MethodElement, 26 MethodElement,
28 ParameterElement, 27 ParameterElement,
29 TypedefElement; 28 TypedefElement;
30 import '../../elements/entities.dart'; 29 import '../../elements/entities.dart';
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 // We add a special getter to allow for tearing off a closure from itself. 751 // We add a special getter to allow for tearing off a closure from itself.
753 js.Name name = _namer.getterForMember(Names.call); 752 js.Name name = _namer.getterForMember(Names.call);
754 js.Fun function = js.js('function() { return this; }'); 753 js.Fun function = js.js('function() { return this; }');
755 callStubs.add(_buildStubMethod(name, function)); 754 callStubs.add(_buildStubMethod(name, function));
756 } 755 }
757 756
758 // MixinApplications run through the members of their mixin. Here, we are 757 // MixinApplications run through the members of their mixin. Here, we are
759 // only interested in direct members. 758 // only interested in direct members.
760 if (!onlyForRti && !_elementEnvironment.isMixinApplication(cls)) { 759 if (!onlyForRti && !_elementEnvironment.isMixinApplication(cls)) {
761 _elementEnvironment.forEachClassMember(cls, visitMember); 760 _elementEnvironment.forEachClassMember(cls, visitMember);
762 if (cls is ClassElement) { 761 _elementEnvironment.forEachConstructorBody(
763 // TODO(redemption): Support constructor bodies for entities. 762 cls,
764 cls.forEachConstructorBody((ConstructorBodyElement constructorBody) => 763 (ConstructorBodyEntity constructorBody) =>
765 visitMember(cls, constructorBody)); 764 visitMember(cls, constructorBody));
766 }
767 } 765 }
768 bool isInterceptedClass = _interceptorData.isInterceptedClass(cls); 766 bool isInterceptedClass = _interceptorData.isInterceptedClass(cls);
769 List<Field> instanceFields = onlyForRti 767 List<Field> instanceFields = onlyForRti
770 ? const <Field>[] 768 ? const <Field>[]
771 : _buildFields( 769 : _buildFields(
772 cls: cls, 770 cls: cls,
773 visitStatics: false, 771 visitStatics: false,
774 isHolderInterceptedClass: isInterceptedClass); 772 isHolderInterceptedClass: isInterceptedClass);
775 List<Field> staticFieldsForReflection = onlyForRti 773 List<Field> staticFieldsForReflection = onlyForRti
776 ? const <Field>[] 774 ? const <Field>[]
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 canTearOff = _worldBuilder.hasInvokedGetter(element, _closedWorld) || 923 canTearOff = _worldBuilder.hasInvokedGetter(element, _closedWorld) ||
926 (canBeReflected && !Selector.isOperatorName(element.name)); 924 (canBeReflected && !Selector.isOperatorName(element.name));
927 assert(canTearOff || 925 assert(canTearOff ||
928 !_worldBuilder.methodsNeedingSuperGetter.contains(element)); 926 !_worldBuilder.methodsNeedingSuperGetter.contains(element));
929 tearOffName = _namer.getterForElement(element); 927 tearOffName = _namer.getterForElement(element);
930 } 928 }
931 } 929 }
932 930
933 if (canTearOff) { 931 if (canTearOff) {
934 assert(element is! ConstructorEntity, failedAt(element)); 932 assert(element is! ConstructorEntity, failedAt(element));
935 assert(element is! ConstructorBodyElement, failedAt(element)); 933 assert(element is! ConstructorBodyEntity, failedAt(element));
936 } 934 }
937 935
938 js.Name callName = null; 936 js.Name callName = null;
939 if (canTearOff) { 937 if (canTearOff) {
940 Selector callSelector = 938 Selector callSelector =
941 new Selector.fromElement(element).toCallSelector(); 939 new Selector.fromElement(element).toCallSelector();
942 callName = _namer.invocationName(callSelector); 940 callName = _namer.invocationName(callSelector);
943 } 941 }
944 942
945 DartType memberType = _elementEnvironment.getFunctionType(element); 943 DartType memberType = _elementEnvironment.getFunctionType(element);
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 Constant constant = new Constant(name, holder, constantValue); 1193 Constant constant = new Constant(name, holder, constantValue);
1196 _constants[constantValue] = constant; 1194 _constants[constantValue] = constant;
1197 } 1195 }
1198 } 1196 }
1199 1197
1200 Holder _registerStaticStateHolder() { 1198 Holder _registerStaticStateHolder() {
1201 return _registry.registerHolder(_namer.staticStateHolder, 1199 return _registry.registerHolder(_namer.staticStateHolder,
1202 isStaticStateHolder: true); 1200 isStaticStateHolder: true);
1203 } 1201 }
1204 } 1202 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart ('k') | pkg/compiler/lib/src/js_model/closure.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698