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

Unified Diff: pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart

Issue 2721403006: Split NativeData (Closed)
Patch Set: Updated cf. comments. Created 3 years, 9 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/program_builder/field_visitor.dart
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
index 7f1ac60b19c23100be2d9fbee006d608cb6ce678..1352e4b503cc99d1ac60d05780df351694ff2e54 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
@@ -58,10 +58,18 @@ class FieldVisitor {
void visitFields(Element element, bool visitStatics, AcceptField f) {
assert(invariant(element, element.isDeclaration));
- bool isClass = false;
+ ClassElement cls;
+ bool isNativeClass = false;
bool isLibrary = false;
+ bool isInstantiated = false;
if (element.isClass) {
- isClass = true;
+ cls = element;
+ isNativeClass = backend.nativeData.isNativeClass(cls);
+
+ // If the class is never instantiated we still need to set it up for
+ // inheritance purposes, but we can simplify its JavaScript constructor.
+ isInstantiated = compiler.codegenWorldBuilder.directlyInstantiatedClasses
+ .contains(cls);
} else if (element.isLibrary) {
isLibrary = true;
assert(invariant(element, visitStatics));
@@ -70,19 +78,10 @@ class FieldVisitor {
element, 'Expected a ClassElement or a LibraryElement.');
}
- // If the class is never instantiated we still need to set it up for
- // inheritance purposes, but we can simplify its JavaScript constructor.
- bool isInstantiated = compiler
- .codegenWorldBuilder.directlyInstantiatedClasses
- .contains(element);
-
void visitField(Element holder, FieldElement field) {
assert(invariant(element, field.isDeclaration));
- // Keep track of whether or not we're dealing with a field mixin
- // into a native class.
- bool isMixinNativeField =
- isClass && backend.isNative(element) && holder.isMixinApplication;
+ bool isMixinNativeField = isNativeClass && holder.isMixinApplication;
// See if we can dynamically create getters and setters.
// We can only generate getters and setters for [element] since
@@ -95,7 +94,7 @@ class FieldVisitor {
needsSetter = fieldNeedsSetter(field);
}
- if ((isInstantiated && !backend.isNative(holder)) ||
+ if ((isInstantiated && !backend.nativeData.isNativeClass(cls)) ||
needsGetter ||
needsSetter) {
js.Name accessorName = namer.fieldAccessorName(field);
@@ -119,10 +118,8 @@ class FieldVisitor {
if (member.isField) visitField(library, member);
});
} else if (visitStatics) {
- ClassElement cls = element;
cls.implementation.forEachStaticField(visitField);
} else {
- ClassElement cls = element;
// TODO(kasperl): We should make sure to only emit one version of
// overridden fields. Right now, we rely on the ordering so the
// fields pulled in from mixins are replaced with the fields from

Powered by Google App Engine
This is Rietveld 408576698