Chromium Code Reviews| 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..7d1859de6c7d8d1a8e6445d4ef45a5da3e0cce57 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. |
|
floitsch
2014/11/24 10:47:52
`super`
herhut
2014/11/25 14:03:19
Done.
|
| + */ |
| + 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` is [member] is called from a subclass via `super`. |
|
floitsch
2014/11/24 10:47:52
.. `true` if [member] ...
herhut
2014/11/25 14:03:19
Done.
|
| + */ |
| + 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) { |