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

Unified Diff: lib/src/compiler/code_generator.dart

Issue 1949163003: fix for #520, ListMixin should work again (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | lib/src/compiler/compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/compiler/code_generator.dart
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart
index 67263cfe43ba16358b222be280292a0b425a2b48..898c6b57be226f3406c2815c4d858c587801ca44 100644
--- a/lib/src/compiler/code_generator.dart
+++ b/lib/src/compiler/code_generator.dart
@@ -867,7 +867,7 @@ class CodeGenerator extends GeneralizingAstVisitor
jsMethods.add(_emitIterable(type));
}
} else if (m is FieldDeclaration) {
- if (_extensionTypes.contains(element)) {
+ if (_extensionTypes.isNativeClass(element)) {
jsMethods.addAll(_emitNativeFieldAccessors(m));
continue;
}
@@ -937,7 +937,7 @@ class CodeGenerator extends GeneralizingAstVisitor
// Generate a corresponding virtual getter / setter.
var name = _elementMemberName(methodElement,
- allowExtensions: _extensionTypes.contains(type.element));
+ allowExtensions: _extensionTypes.isNativeClass(type.element));
if (method.isGetter) {
// Generate a setter
if (field.setter != null || !propertyOverrideResult.foundSetter)
@@ -1000,7 +1000,7 @@ class CodeGenerator extends GeneralizingAstVisitor
classElem,
(a) =>
isJsPeerInterface(a) ||
- isNativeAnnotation(a) && _extensionTypes.contains(classElem));
+ isNativeAnnotation(a) && _extensionTypes.isNativeClass(classElem));
if (jsPeerName != null && jsPeerName.contains(',')) {
jsPeerName = jsPeerName.split(',')[0];
}
@@ -1091,7 +1091,7 @@ class CodeGenerator extends GeneralizingAstVisitor
if (extensions.isNotEmpty) {
var methodNames = <JS.Expression>[];
for (var e in extensions) {
- methodNames.add(_elementMemberName(e));
+ methodNames.add(_elementMemberName(e, allowExtensions: false));
}
body.add(js.statement('dart.defineExtensionMembers(#, #);', [
className,
@@ -1128,7 +1128,8 @@ class CodeGenerator extends GeneralizingAstVisitor
if (inheritedElement != null && inheritedElement.type == element.type) {
continue;
}
- var memberName = _elementMemberName(element);
+ var memberName = _elementMemberName(element,
+ allowExtensions: _extensionTypes.isNativeClass(classElem));
var parts = _emitFunctionTypeParts(element.type);
var property =
new JS.Property(memberName, new JS.ArrayInitializer(parts));
@@ -1180,7 +1181,7 @@ class CodeGenerator extends GeneralizingAstVisitor
List<MethodDeclaration> methods,
List<FieldDeclaration> fields,
List<JS.Statement> body) {
- if (_extensionTypes.contains(classElem)) {
+ if (_extensionTypes.hasNativeSubtype(classElem.type)) {
var dartxNames = <JS.Expression>[];
for (var m in methods) {
if (!m.isAbstract && !m.isStatic && m.element.isPublic) {
@@ -1206,12 +1207,11 @@ class CodeGenerator extends GeneralizingAstVisitor
List<ExecutableElement> _extensionsToImplement(ClassElement element) {
var members = <ExecutableElement>[];
- if (_extensionTypes.contains(element)) return members;
+ if (_extensionTypes.isNativeClass(element)) return members;
// Collect all extension types we implement.
var type = element.type;
- var types = new Set<ClassElement>();
- _collectExtensions(type, types);
+ var types = _extensionTypes.collectNativeInterfaces(element);
if (types.isEmpty) return members;
// Collect all possible extension method names.
@@ -1231,21 +1231,6 @@ class CodeGenerator extends GeneralizingAstVisitor
return members;
}
- /// Collections the type and all supertypes, including interfaces, but
- /// excluding [Object].
- void _collectExtensions(InterfaceType type, Set<ClassElement> types) {
- if (type.isObject) return;
- var element = type.element;
- if (_extensionTypes.contains(element)) types.add(element);
- for (var m in type.mixins.reversed) {
- _collectExtensions(m, types);
- }
- for (var i in type.interfaces) {
- _collectExtensions(i, types);
- }
- _collectExtensions(type.superclass, types);
- }
-
/// Generates the implicit default constructor for class C of the form
/// `C() : super() {}`.
JS.Method _emitImplicitConstructor(
@@ -1665,7 +1650,10 @@ class CodeGenerator extends GeneralizingAstVisitor
}
return annotate(
- new JS.Method(_elementMemberName(node.element), fn,
+ new JS.Method(
+ _elementMemberName(node.element,
+ allowExtensions: _extensionTypes.isNativeClass(type.element)),
+ fn,
isGetter: node.isGetter,
isSetter: node.isSetter,
isStatic: node.isStatic),
@@ -3541,7 +3529,7 @@ class CodeGenerator extends GeneralizingAstVisitor
var type = getStaticType(target);
return isNullable(target) ||
type.isDynamic ||
- (_extensionTypes.contains(type.element) && target is! SuperExpression);
+ (_extensionTypes.hasNativeSubtype(type) && target is! SuperExpression);
}
/// Shared code for [PrefixedIdentifier] and [PropertyAccess].
@@ -4144,7 +4132,7 @@ class CodeGenerator extends GeneralizingAstVisitor
}
if (allowExtensions &&
baseType != null &&
- _extensionTypes.contains(baseType.element) &&
+ _extensionTypes.hasNativeSubtype(baseType) &&
!isObjectProperty(name)) {
return js.call('dartx.#', _propertyName(name));
}
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | lib/src/compiler/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698