Chromium Code Reviews| Index: dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
| index b2175c53090a95f4f25ac2adb7729698fd04cc82..5084f28b8404e1f8e397d74fa90f1d0e75dd90a8 100644 |
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
| @@ -1395,17 +1395,21 @@ class JavaScriptBackend extends Backend { |
| /// Called when [:const Symbol(name):] is seen. |
| void registerConstSymbol(String name, TreeElements elements) { |
| + symbolsUsed.add(name); |
| } |
| /// Called when [:new Symbol(...):] is seen. |
| void registerNewSymbol(TreeElements elements) { |
| } |
| - bool retainGetter(Element element) => isTreeShakingDisabled; |
| + bool retainGetter(Element element) => isNeededForReflection(element); |
|
Johnni Winther
2013/08/07 10:47:34
Rename these three to shouldRetainX, isXRetained o
ahe
2013/08/07 14:03:17
Done.
|
| - bool retainSetter(Element element) => isTreeShakingDisabled; |
| + bool retainSetter(Element element) => isNeededForReflection(element); |
| - bool retainName(SourceString name) => mustPreserveNames; |
| + bool retainName(SourceString name) { |
| + if (name == const SourceString('')) return false; |
| + return symbolsUsed.contains(name.slowToString()); |
| + } |
| bool get rememberLazies => isTreeShakingDisabled; |
| @@ -1475,12 +1479,20 @@ class JavaScriptBackend extends Backend { |
| if (metaTargets != null) metaTargetsUsed.addAll(metaTargets); |
| } |
| + bool rememberNameOf(Element element) { |
|
Johnni Winther
2013/08/07 10:47:34
Ditto.
ahe
2013/08/07 14:03:17
Done.
|
| + symbolsUsed.add(element.name.slowToString()); |
| + if (element.isConstructor()) { |
| + symbolsUsed.add(element.getEnclosingClass().name.slowToString()); |
| + } |
| + return true; |
| + } |
| + |
| bool isNeededForReflection(Element element) { |
| // TODO(ahe): Implement this. |
| - if (!metaTargetsUsed.isEmpty) return true; |
| + if (!metaTargetsUsed.isEmpty) return rememberNameOf(element); |
| if (!targetsUsed.isEmpty) { |
| for (Element e = element; e != null; e = e.enclosingElement) { |
| - if (targetsUsed.contains(e)) return true; |
| + if (targetsUsed.contains(e)) return rememberNameOf(element); |
| } |
| } |
| return false; |