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

Unified Diff: pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart

Issue 2927043002: Handle `new Object()` in compile_from_dill_test (Closed)
Patch Set: Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
index 917008c2e818857340dd67d8f854d4b9220b7ffe..ab8b705f4a48f55f4e507f932c6744f2b554a106 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
@@ -6,10 +6,12 @@ library dart2js.js_emitter.full_emitter.class_emitter;
import '../../common.dart';
import '../../common/names.dart' show Names;
+import '../../common_elements.dart';
import '../../elements/resolution_types.dart' show ResolutionDartType;
import '../../deferred_load.dart' show OutputUnit;
import '../../elements/elements.dart'
show ClassElement, FieldElement, MemberElement;
+import '../../elements/entities.dart';
import '../../elements/names.dart';
import '../../js/js.dart' as jsAst;
import '../../js/js.dart' show js;
@@ -30,17 +32,20 @@ class ClassEmitter extends CodeEmitterHelper {
compiler.commonElements, namer, codegenWorldBuilder, closedWorld,
enableMinification: compiler.options.enableMinification);
+ ElementEnvironment get _elementEnvironment => compiler.elementEnvironment;
+
/**
* Documentation wanted -- johnniwinther
*/
void emitClass(Class cls, ClassBuilder enclosingBuilder, Fragment fragment) {
- ClassElement classElement = cls.element;
+ ClassEntity classElement = cls.element;
- assert(classElement.isDeclaration, failedAt(classElement));
+ assert(!(classElement is ClassElement && !classElement.isDeclaration),
+ failedAt(classElement));
emitter.needsClassSupport = true;
- ClassElement superclass = classElement.superclass;
+ ClassEntity superclass = _elementEnvironment.getSuperClass(classElement);
jsAst.Name superName;
if (superclass != null) {
superName = namer.className(superclass);
@@ -257,8 +262,9 @@ class ClassEmitter extends CodeEmitterHelper {
* Invariant: [classElement] must be a declaration element.
*/
void emitInstanceMembers(Class cls, ClassBuilder builder) {
- ClassElement classElement = cls.element;
- assert(classElement.isDeclaration, failedAt(classElement));
+ ClassEntity classElement = cls.element;
+ assert(!(classElement is ClassElement && !classElement.isDeclaration),
+ failedAt(classElement));
if (cls.onlyForRti || cls.isMixinApplication) return;
@@ -272,7 +278,8 @@ class ClassEmitter extends CodeEmitterHelper {
emitter.containerBuilder.addMemberMethod(method, builder);
}
- if (classElement.isObject && closedWorld.backendUsage.isNoSuchMethodUsed) {
+ if (classElement == closedWorld.commonElements.objectClass &&
+ closedWorld.backendUsage.isNoSuchMethodUsed) {
// Emit the noSuchMethod handlers on the Object prototype now,
// so that the code in the dynamicFunction helper can find
// them. Note that this helper is invoked before analyzing the
@@ -302,16 +309,18 @@ class ClassEmitter extends CodeEmitterHelper {
void emitClassBuilderWithReflectionData(Class cls, ClassBuilder classBuilder,
ClassBuilder enclosingBuilder, Fragment fragment) {
- ClassElement classElement = cls.element;
+ ClassEntity classEntity = cls.element;
jsAst.Name className = cls.name;
var metadata =
- task.metadataCollector.buildClassMetadataFunction(classElement);
+ task.metadataCollector.buildClassMetadataFunction(classEntity);
if (metadata != null) {
classBuilder.addPropertyByName("@", metadata);
}
- if (backend.mirrorsData.isClassAccessibleByReflection(classElement)) {
+ if (backend.mirrorsData.isClassAccessibleByReflection(classEntity)) {
+ // TODO(johnniwinther): Handle class entities.
+ ClassElement classElement = classEntity;
List<ResolutionDartType> typeVars = classElement.typeVariables;
Iterable typeVariableProperties =
emitter.typeVariableCodegenAnalysis.typeVariablesOf(classElement);
@@ -327,19 +336,19 @@ class ClassEmitter extends CodeEmitterHelper {
List<jsAst.Property> statics = new List<jsAst.Property>();
ClassBuilder staticsBuilder =
- new ClassBuilder.forStatics(classElement, namer);
+ new ClassBuilder.forStatics(classEntity, namer);
if (emitFields(cls, staticsBuilder, emitStatics: true)) {
jsAst.ObjectInitializer initializer =
staticsBuilder.toObjectInitializer();
- compiler.dumpInfoTask.registerElementAst(classElement, initializer);
+ compiler.dumpInfoTask.registerElementAst(classEntity, initializer);
jsAst.Node property = initializer.properties.single;
- compiler.dumpInfoTask.registerElementAst(classElement, property);
+ compiler.dumpInfoTask.registerElementAst(classEntity, property);
statics.add(property);
}
// TODO(herhut): Do not grab statics out of the properties.
ClassBuilder classProperties =
- emitter.classDescriptors[fragment]?.remove(classElement);
+ emitter.classDescriptors[fragment]?.remove(classEntity);
if (classProperties != null) {
statics.addAll(classProperties.properties);
}
@@ -356,8 +365,10 @@ class ClassEmitter extends CodeEmitterHelper {
.registerElementAst(classBuilder.element, propertyValue);
enclosingBuilder.addProperty(className, propertyValue);
- String reflectionName = emitter.getReflectionName(classElement, className);
+ String reflectionName = emitter.getReflectionName(classEntity, className);
if (reflectionName != null) {
+ // TODO(johnniwinther): Handle class entities.
+ ClassElement classElement = classEntity;
if (!backend.mirrorsData.isClassAccessibleByReflection(classElement) ||
cls.onlyForRti) {
// TODO(herhut): Fix use of reflection name here.
« no previous file with comments | « pkg/compiler/lib/src/js_backend/mirrors_data.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