Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/native_data.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart |
| index 67b473b53c5c0badc6dfac4e4a0f9b8ec063bf45..31fe7d69fea1bf11dbf707181e0b4b1361f404e3 100644 |
| --- a/pkg/compiler/lib/src/js_backend/native_data.dart |
| +++ b/pkg/compiler/lib/src/js_backend/native_data.dart |
| @@ -35,6 +35,10 @@ class NativeData { |
| Map<MemberElement, NativeBehavior> nativeFieldStoreBehavior = |
| <FieldElement, NativeBehavior>{}; |
| + /// Prefix used to escape JS names that are not valid Dart names |
| + /// when using JSInterop. |
| + static const String _jsInteropEscapePrefix = r'JS$'; |
| + |
| /// Returns `true` if [element] is explicitly marked as part of JsInterop. |
| bool _isJsInterop(Element element) { |
| return jsInteropNames.containsKey(element.declaration); |
| @@ -93,7 +97,7 @@ class NativeData { |
| if (jsInteropName != null && jsInteropName.isNotEmpty) { |
| return jsInteropName; |
| } |
| - return element.isLibrary ? 'self' : element.name; |
| + return element.isLibrary ? 'self' : getUnescapedJSInteropName(element.name); |
| } |
| /// Computes the name for [element] to use in the generated JavaScript. This |
| @@ -216,4 +220,12 @@ class NativeData { |
| FieldElement field, NativeBehavior behavior) { |
| nativeFieldStoreBehavior[field] = behavior; |
| } |
| + |
| + /// Apply JS$ escaping scheme to convert possible escaped Dart names into |
| + /// JS names. |
| + String getUnescapedJSInteropName(String name) { |
|
sra1
2016/07/20 18:19:20
Some tests should use JS$JS$ to ensure this is cal
Jacob
2016/07/22 19:28:24
JS$JS$done
|
| + return name.startsWith(_jsInteropEscapePrefix) |
| + ? name.substring(_jsInteropEscapePrefix.length) |
| + : name; |
| + } |
| } |