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

Side by Side Diff: pkg/compiler/lib/src/js_backend/namer.dart

Issue 2731163002: Split js interop registration into library/class/member elements (Closed)
Patch Set: Updated cf. comments Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library js_backend.namer; 5 library js_backend.namer;
6 6
7 import 'dart:collection' show HashMap; 7 import 'dart:collection' show HashMap;
8 8
9 import 'package:js_runtime/shared/embedded_names.dart' show JsGetName; 9 import 'package:js_runtime/shared/embedded_names.dart' show JsGetName;
10 10
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 } 764 }
765 765
766 /// Annotated name for [method] encoding arity and named parameters. 766 /// Annotated name for [method] encoding arity and named parameters.
767 jsAst.Name instanceMethodName(MethodElement method) { 767 jsAst.Name instanceMethodName(MethodElement method) {
768 if (method.isGenerativeConstructorBody) { 768 if (method.isGenerativeConstructorBody) {
769 return constructorBodyName(method); 769 return constructorBodyName(method);
770 } 770 }
771 return invocationName(new Selector.fromElement(method)); 771 return invocationName(new Selector.fromElement(method));
772 } 772 }
773 773
774 String _jsNameHelper(Element e) {
775 String jsInteropName = _nativeData.getJsInteropName(e);
776 if (jsInteropName != null && jsInteropName.isNotEmpty) return jsInteropName;
777 return e.isLibrary ? 'self' : _nativeData.getUnescapedJSInteropName(e.name);
778 }
779
780 /// Returns a JavaScript path specifying the context in which
781 /// [element.fixedBackendName] should be evaluated. Only applicable for
782 /// elements using typed JavaScript interop.
783 /// For example: fixedBackendPath for the static method createMap in the
784 /// Map class of the goog.map JavaScript library would have path
785 /// "goog.maps.Map".
786 String fixedBackendMethodPath(MethodElement element) {
787 return _fixedBackendPath(element);
788 }
789
790 String _fixedBackendPath(Element element) {
791 if (!_nativeData.isJsInterop(element)) return null;
792 if (element.isInstanceMember) return 'this';
793 if (element.isConstructor) return _fixedBackendPath(element.enclosingClass);
794 if (element.isLibrary) return 'self';
795 var sb = new StringBuffer();
796 sb..write(_jsNameHelper(element.library));
797
798 if (element.enclosingClass != null && element.enclosingClass != element) {
799 sb..write('.')..write(_jsNameHelper(element.enclosingClass));
800 }
801 return sb.toString();
802 }
803
804 /// Returns the annotated name for a variant of `call`. 774 /// Returns the annotated name for a variant of `call`.
805 /// The result has the form: 775 /// The result has the form:
806 /// 776 ///
807 /// call$<N>$namedParam1...$namedParam<M> 777 /// call$<N>$namedParam1...$namedParam<M>
808 /// 778 ///
809 /// This name cannot be minified because it is generated by string 779 /// This name cannot be minified because it is generated by string
810 /// concatenation at runtime, by applyFunction in js_helper.dart. 780 /// concatenation at runtime, by applyFunction in js_helper.dart.
811 jsAst.Name deriveCallMethodName(List<String> suffix) { 781 jsAst.Name deriveCallMethodName(List<String> suffix) {
812 // TODO(asgerf): Avoid clashes when named parameters contain $ symbols. 782 // TODO(asgerf): Avoid clashes when named parameters contain $ symbols.
813 return new StringBackedName('$callPrefix\$${suffix.join(r'$')}'); 783 return new StringBackedName('$callPrefix\$${suffix.join(r'$')}');
(...skipping 1378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2192 void addSuggestion(String original, String suggestion) { 2162 void addSuggestion(String original, String suggestion) {
2193 assert(!_suggestedNames.containsKey(original)); 2163 assert(!_suggestedNames.containsKey(original));
2194 _suggestedNames[original] = suggestion; 2164 _suggestedNames[original] = suggestion;
2195 } 2165 }
2196 2166
2197 bool hasSuggestion(String original) => _suggestedNames.containsKey(original); 2167 bool hasSuggestion(String original) => _suggestedNames.containsKey(original);
2198 bool isSuggestion(String candidate) { 2168 bool isSuggestion(String candidate) {
2199 return _suggestedNames.containsValue(candidate); 2169 return _suggestedNames.containsValue(candidate);
2200 } 2170 }
2201 } 2171 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/minify_namer.dart ('k') | pkg/compiler/lib/src/js_backend/native_data.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698