| Index: pkg/compiler/lib/src/js_backend/backend.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
|
| index c2166d4ce291799971b5a626faa37f1748727cd5..75238e4afa7d0c13f0826c011d8b72b76aa08c14 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -331,6 +331,12 @@ class JavaScriptBackend extends Backend {
|
| */
|
| final Set<ClassElement> specialOperatorEqClasses = new Set<ClassElement>();
|
|
|
| + /**
|
| + * A set of members that are called from subclasses via `super`.
|
| + */
|
| + final Set<FunctionElement> aliasedSuperMembers =
|
| + new Setlet<FunctionElement>();
|
| +
|
| List<CompilerTask> get tasks {
|
| List<CompilerTask> result = functionCompiler.tasks;
|
| result.add(emitter);
|
| @@ -548,6 +554,20 @@ class JavaScriptBackend extends Backend {
|
| return name;
|
| }
|
|
|
| + /**
|
| + * Record that [method] is called from a subclass via `super`.
|
| + */
|
| + void registerAliasedSuperMember(FunctionElement method) {
|
| + aliasedSuperMembers.add(method);
|
| + }
|
| +
|
| + /**
|
| + * Returns `true` if [member] is called from a subclass via `super`.
|
| + */
|
| + bool isAliasedSuperMember(FunctionElement member) {
|
| + return aliasedSuperMembers.contains(member);
|
| + }
|
| +
|
| bool isInterceptedMethod(Element element) {
|
| if (!element.isInstanceMember) return false;
|
| if (element.isGenerativeConstructorBody) {
|
| @@ -2259,6 +2279,7 @@ class JavaScriptBackend extends Backend {
|
| void forgetElement(Element element) {
|
| constants.forgetElement(element);
|
| constantCompilerTask.dartConstantCompiler.forgetElement(element);
|
| + aliasedSuperMembers.remove(element);
|
| }
|
|
|
| void registerMainHasArguments(Enqueuer enqueuer) {
|
|
|