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

Unified Diff: frog/leg/namer.dart

Issue 9873021: Move frog/leg to lib/compiler/implementation. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 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
« no previous file with comments | « frog/leg/lib/string_helper.dart ('k') | frog/leg/native_emitter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/leg/namer.dart
===================================================================
--- frog/leg/namer.dart (revision 5925)
+++ frog/leg/namer.dart (working copy)
@@ -1,218 +0,0 @@
-// Copyright (c) 2011, 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.
-
-/**
- * Assigns JavaScript identifiers to Dart variables, class-names and members.
- */
-class Namer {
- final Compiler compiler;
-
- static final CLOSURE_INVOCATION_NAME = const SourceString('\$call');
- static final OPERATOR_EQUALS = const SourceString('operator\$eq');
-
- static Set<String> _jsReserved = null;
- Set<String> get jsReserved() {
- if (_jsReserved === null) {
- _jsReserved = new Set<String>();
- _jsReserved.addAll(JsNames.javaScriptKeywords);
- _jsReserved.addAll(JsNames.reservedPropertySymbols);
- }
- return _jsReserved;
- }
-
- Map<Element, String> globals;
- Map<String, int> usedGlobals;
-
- Namer(this.compiler)
- : globals = new Map<Element, String>(),
- usedGlobals = new Map<String, int>();
-
- final String CURRENT_ISOLATE = "\$";
- final String ISOLATE = "Isolate";
-
-
- String closureInvocationName(Selector selector) {
- // TODO(floitsch): mangle, while not conflicting with instance names.
- return instanceMethodInvocationName(null, CLOSURE_INVOCATION_NAME,
- selector);
- }
-
- String privateName(LibraryElement lib, SourceString name) {
- if (name.isPrivate()) {
- return '_${getName(lib)}${name.slowToString()}';
- } else {
- return '${name.slowToString()}';
- }
- }
-
- String instanceMethodName(LibraryElement lib, SourceString name, int arity) {
- return '${privateName(lib, name)}\$$arity';
- }
-
- String instanceMethodInvocationName(LibraryElement lib, SourceString name,
- Selector selector) {
- // TODO(floitsch): mangle, while preserving uniqueness.
- StringBuffer buffer = new StringBuffer();
- List<SourceString> names = selector.getOrderedNamedArguments();
- for (SourceString argumentName in names) {
- buffer.add(@'$');
- argumentName.printOn(buffer);
- }
- return '${privateName(lib, name)}\$${selector.argumentCount}$buffer';
- }
-
- String instanceFieldName(LibraryElement lib, SourceString name) {
- return privateName(lib, name);
- }
-
- String setterName(LibraryElement lib, SourceString name) {
- return 'set\$${privateName(lib, name)}';
- }
-
- String getterName(LibraryElement lib, SourceString name) {
- return 'get\$${privateName(lib, name)}';
- }
-
- String getFreshGlobalName(String proposedName) {
- int usedCount = usedGlobals[proposedName];
- if (usedCount === null) {
- // No element with this name has been used before.
- usedGlobals[proposedName] = 1;
- return proposedName;
- } else {
- // Not the first time we see this name. Append a number to make it unique.
- String name;
- do {
- usedCount++;
- name = '$proposedName$usedCount';
- } while (usedGlobals[name] !== null);
- usedGlobals[proposedName] = usedCount;
- return name;
- }
- }
-
- /**
- * Returns a preferred JS-id for the given top-level or static element.
- * The returned id is guaranteed to be a valid JS-id.
- */
- String _computeGuess(Element element) {
- assert(!element.isInstanceMember());
- LibraryElement lib = element.getLibrary();
- if (element.kind == ElementKind.GENERATIVE_CONSTRUCTOR) {
- FunctionElement functionElement = element;
- return instanceMethodName(lib, element.name,
- functionElement.parameterCount(compiler));
- } else {
- // TODO(floitsch): deal with named constructors.
- String name;
- if (Elements.isStaticOrTopLevel(element)) {
- name = element.name.slowToString();
- } else if (element.kind == ElementKind.GETTER) {
- name = getterName(lib, element.name);
- } else if (element.kind == ElementKind.SETTER) {
- name = setterName(lib, element.name);
- } else if (element.kind == ElementKind.FUNCTION) {
- FunctionElement functionElement = element;
- name = element.name.slowToString();
- name = '$name\$${functionElement.parameterCount(compiler)}';
- } else if (element.kind === ElementKind.LIBRARY) {
- name = 'lib';
- } else {
- name = element.name.slowToString();
- }
- // Prefix the name with '$' if it is reserved.
- return safeName(name);
- }
- }
-
- String getBailoutName(Element element) {
- return '${getName(element)}\$bailout';
- }
-
- /**
- * Returns a preferred JS-id for the given element. The returned id is
- * guaranteed to be a valid JS-id. Globals and static fields are furthermore
- * guaranteed to be unique.
- *
- * For accessing statics consider calling
- * [isolateAccess]/[isolateBailoutAccess] or [isolatePropertyAccess] instead.
- */
- String getName(Element element) {
- if (element.isInstanceMember()) {
- if (element.kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY) {
- ConstructorBodyElement bodyElement = element;
- SourceString name = bodyElement.constructor.name;
- return instanceMethodName(element.getLibrary(),
- name, bodyElement.parameterCount(compiler));
- } else if (element.kind == ElementKind.FUNCTION) {
- FunctionElement functionElement = element;
- return instanceMethodName(element.getLibrary(),
- element.name,
- functionElement.parameterCount(compiler));
- } else if (element.kind == ElementKind.GETTER) {
- return getterName(element.getLibrary(), element.name);
- } else if (element.kind == ElementKind.SETTER) {
- return setterName(element.getLibrary(), element.name);
- } else {
- return instanceFieldName(element.getLibrary(), element.name);
- }
- } else {
- // Dealing with a top-level or static element.
- String cached = globals[element];
- if (cached !== null) return cached;
-
- String guess = _computeGuess(element);
- switch (element.kind) {
- case ElementKind.VARIABLE:
- case ElementKind.PARAMETER:
- // The name is not guaranteed to be unique.
- return guess;
-
- case ElementKind.GENERATIVE_CONSTRUCTOR:
- case ElementKind.FUNCTION:
- case ElementKind.CLASS:
- case ElementKind.FIELD:
- case ElementKind.GETTER:
- case ElementKind.SETTER:
- case ElementKind.TYPEDEF:
- case ElementKind.LIBRARY:
- String result = getFreshGlobalName(guess);
- globals[element] = result;
- return result;
-
- default:
- compiler.internalError('getName for unknown kind: ${element.kind}',
- node: element.parseNode(compiler));
- }
- }
- }
-
- String isolateAccess(Element element) {
- return "$CURRENT_ISOLATE.${getName(element)}";
- }
-
- String isolatePropertyAccess(Element element) {
- return "$ISOLATE.prototype.${getName(element)}";
- }
-
- String isolateBailoutPropertyAccess(Element element) {
- return '${isolatePropertyAccess(element)}\$bailout';
- }
-
- String isolateBailoutAccess(Element element) {
- return '${isolateAccess(element)}\$bailout';
- }
-
- String operatorIs(Element element) {
- return 'is\$${getName(element)}';
- }
-
- String safeName(String name) {
- if (jsReserved.contains(name) || name.startsWith('\$')) {
- name = "\$$name";
- assert(!jsReserved.contains(name));
- }
- return name;
- }
-}
« no previous file with comments | « frog/leg/lib/string_helper.dart ('k') | frog/leg/native_emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698