| Index: sdk/lib/_internal/compiler/js_lib/js_names.dart
|
| diff --git a/sdk/lib/_internal/compiler/js_lib/js_names.dart b/sdk/lib/_internal/compiler/js_lib/js_names.dart
|
| deleted file mode 100644
|
| index 708b873b7e5deed4e18bb17dbd499d77b1ea08fa..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/compiler/js_lib/js_names.dart
|
| +++ /dev/null
|
| @@ -1,173 +0,0 @@
|
| -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library dart._js_names;
|
| -
|
| -import 'dart:_js_embedded_names' show
|
| - JsGetName,
|
| - MANGLED_GLOBAL_NAMES,
|
| - MANGLED_NAMES;
|
| -
|
| -import 'dart:_foreign_helper' show
|
| - JS,
|
| - JS_EMBEDDED_GLOBAL,
|
| - JS_GET_NAME;
|
| -
|
| -import 'dart:_js_helper' show
|
| - JsCache,
|
| - NoInline;
|
| -
|
| -import 'dart:_interceptors' show JSArray;
|
| -
|
| -/// No-op method that is called to inform the compiler that unmangled named
|
| -/// must be preserved.
|
| -preserveNames() {}
|
| -
|
| -/// A map from mangled names to "reflective" names, that is, unmangled names
|
| -/// with some additional information, such as, number of required arguments.
|
| -/// This map is for mangled names used as instance members.
|
| -final _LazyMangledNamesMap mangledNames = new _LazyMangledInstanceNamesMap(
|
| - JS_EMBEDDED_GLOBAL('=Object', MANGLED_NAMES));
|
| -
|
| -/// A map from "reflective" names to mangled names (the reverse of
|
| -/// [mangledNames]).
|
| -final _LazyReflectiveNamesMap reflectiveNames =
|
| - new _LazyReflectiveNamesMap(JS_EMBEDDED_GLOBAL('=Object', MANGLED_NAMES),
|
| - true);
|
| -
|
| -/// A map from mangled names to "reflective" names (see [mangledNames]). This
|
| -/// map is for globals, that is, static and top-level members.
|
| -final _LazyMangledNamesMap mangledGlobalNames = new _LazyMangledNamesMap(
|
| - JS_EMBEDDED_GLOBAL('=Object', MANGLED_GLOBAL_NAMES));
|
| -
|
| -/// A map from "reflective" names to mangled names (the reverse of
|
| -/// [mangledGlobalNames]).
|
| -final _LazyReflectiveNamesMap reflectiveGlobalNames =
|
| - new _LazyReflectiveNamesMap(
|
| - JS_EMBEDDED_GLOBAL('=Object', MANGLED_GLOBAL_NAMES), false);
|
| -
|
| -/// Implements a mapping from mangled names to their reflective counterparts.
|
| -/// The propertiy names of [_jsMangledNames] are the mangled names, and the
|
| -/// values are the "reflective" names.
|
| -class _LazyMangledNamesMap {
|
| - /// [_jsMangledNames] is a JavaScript object literal.
|
| - var _jsMangledNames;
|
| -
|
| - _LazyMangledNamesMap(this._jsMangledNames);
|
| -
|
| - String operator[](String key) {
|
| - var result = JS('var', '#[#]', _jsMangledNames, key);
|
| - // Filter out all non-string values to protect against polution from
|
| - // anciliary fields in [_jsMangledNames].
|
| - bool filter =
|
| - JS('bool', 'typeof # !== "string"', result);
|
| - // To ensure that the inferrer sees that result is a String, we explicitly
|
| - // give it a better type here.
|
| - return filter ? null : JS('String', '#', result);
|
| - }
|
| -}
|
| -
|
| -/// Extends [_LazyMangledNamesMap] with additional support for adding mappings
|
| -/// from mangled setter names to their reflective counterpart by rewriting a
|
| -/// corresponding entry for a getter name, if it exists.
|
| -class _LazyMangledInstanceNamesMap extends _LazyMangledNamesMap {
|
| - _LazyMangledInstanceNamesMap(_jsMangledNames) : super(_jsMangledNames);
|
| -
|
| - String operator[](String key) {
|
| - String result = super[key];
|
| - String setterPrefix = JS_GET_NAME(JsGetName.SETTER_PREFIX);
|
| - if (result == null && key.startsWith(setterPrefix)) {
|
| - String getterPrefix = JS_GET_NAME(JsGetName.GETTER_PREFIX);
|
| - int setterPrefixLength = setterPrefix.length;
|
| -
|
| - // Generate the setter name from the getter name.
|
| - key = '$getterPrefix${key.substring(setterPrefixLength)}';
|
| - result = super[key];
|
| - return (result != null) ? "${result}=" : null;
|
| - }
|
| - return result;
|
| - }
|
| -}
|
| -
|
| -/// Implements the inverse of [_LazyMangledNamesMap]. As it would be too
|
| -/// expensive to seach the mangled names map for a value that corresponds to
|
| -/// the lookup key on each invocation, we compute the full mapping in demand
|
| -/// and cache it. The cache is invalidated when the underlying [_jsMangledNames]
|
| -/// object changes its length. This condition is sufficient as the name mapping
|
| -/// can only grow over time.
|
| -/// When [_isInstance] is true, we also apply the inverse of the setter/getter
|
| -/// name conversion implemented by [_LazyMangledInstanceNamesMap].
|
| -class _LazyReflectiveNamesMap {
|
| - /// [_jsMangledNames] is a JavaScript object literal.
|
| - final _jsMangledNames;
|
| - final bool _isInstance;
|
| - int _cacheLength = 0;
|
| - Map<String, String> _cache;
|
| -
|
| - _LazyReflectiveNamesMap(this._jsMangledNames, this._isInstance);
|
| -
|
| - Map<String, String> _updateReflectiveNames() {
|
| - preserveNames();
|
| - Map<String, String> result = <String, String>{};
|
| - List keys = JS('List', 'Object.keys(#)', _jsMangledNames);
|
| - for (String key in keys) {
|
| - var reflectiveName = JS('var', '#[#]', _jsMangledNames, key);
|
| - // Filter out all non-string values to protect against polution from
|
| - // anciliary fields in [_jsMangledNames].
|
| - bool filter = JS('bool', 'typeof # !== "string"', reflectiveName);
|
| - if (filter) continue;
|
| - result[reflectiveName] = JS('String', '#', key);
|
| -
|
| - String getterPrefix = JS_GET_NAME(JsGetName.GETTER_PREFIX);
|
| - if (_isInstance && key.startsWith(getterPrefix)) {
|
| - int getterPrefixLength = getterPrefix.length;
|
| - String setterPrefix = JS_GET_NAME(JsGetName.SETTER_PREFIX);
|
| - result['$reflectiveName='] =
|
| - '$setterPrefix${key.substring(getterPrefixLength)}';
|
| - }
|
| - }
|
| - return result;
|
| - }
|
| -
|
| - int get _jsMangledNamesLength => JS('int', 'Object.keys(#).length',
|
| - _jsMangledNames);
|
| -
|
| - String operator[](String key) {
|
| - if (_cache == null || _jsMangledNamesLength != _cacheLength) {
|
| - _cache = _updateReflectiveNames();
|
| - _cacheLength = _jsMangledNamesLength;
|
| - }
|
| - return _cache[key];
|
| - }
|
| -}
|
| -
|
| -@NoInline()
|
| -List extractKeys(victim) {
|
| - var result = JS('', '# ? Object.keys(#) : []', victim, victim);
|
| - return new JSArray.markFixed(result);
|
| -}
|
| -
|
| -/**
|
| - * Returns the (global) unmangled version of [name].
|
| - *
|
| - * Normally, you should use [mangledGlobalNames] directly, but this method
|
| - * doesn't tell the compiler to preserve names. So this method only returns a
|
| - * non-null value if some other component has made the compiler preserve names.
|
| - *
|
| - * This is used, for example, to return unmangled names from TypeImpl.toString
|
| - * *if* names are being preserved for other reasons (use of dart:mirrors, for
|
| - * example).
|
| - */
|
| -String unmangleGlobalNameIfPreservedAnyways(String name) {
|
| - var names = JS_EMBEDDED_GLOBAL('=Object', MANGLED_GLOBAL_NAMES);
|
| - return JsCache.fetch(names, name);
|
| -}
|
| -
|
| -String unmangleAllIdentifiersIfPreservedAnyways(String str) {
|
| - return JS("String",
|
| - r"(#).replace(/[^<,> ]+/g,"
|
| - r"function(m) { return #[m] || m; })",
|
| - str,
|
| - JS_EMBEDDED_GLOBAL('', MANGLED_GLOBAL_NAMES));
|
| -}
|
|
|