Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1844)

Unified Diff: sdk/lib/_internal/compiler/js_lib/js_names.dart

Issue 1212513002: sdk files reorganization to make dart2js a proper package (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: renamed Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));
-}

Powered by Google App Engine
This is Rietveld 408576698