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

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

Issue 1318043005: Support user generated custom native JS classes. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: ptal Created 5 years, 2 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 part of js_backend; 5 part of js_backend;
6 6
7 /** 7 /**
8 * Assigns JavaScript identifiers to Dart variables, class-names and members. 8 * Assigns JavaScript identifiers to Dart variables, class-names and members.
9 * 9 *
10 * Names are generated through three stages: 10 * Names are generated through three stages:
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 } 627 }
628 628
629 /// Annotated name for [method] encoding arity and named parameters. 629 /// Annotated name for [method] encoding arity and named parameters.
630 jsAst.Name instanceMethodName(FunctionElement method) { 630 jsAst.Name instanceMethodName(FunctionElement method) {
631 if (method.isGenerativeConstructorBody) { 631 if (method.isGenerativeConstructorBody) {
632 return constructorBodyName(method); 632 return constructorBodyName(method);
633 } 633 }
634 return invocationName(new Selector.fromElement(method)); 634 return invocationName(new Selector.fromElement(method));
635 } 635 }
636 636
637 String _jsNameHelper(Element e) {
638 if (e.jsInteropName != null && e.jsInteropName.isNotEmpty)
639 return e.jsInteropName;
640 return e.isLibrary ? 'self' : e.name;
641 }
642
643 String fixedBackendPath(Element element) {
Siggi Cherem (dart-lang) 2015/10/06 22:38:02 + dartdoc?
Jacob 2015/10/13 01:19:23 Done.
644 if (!element.isJsInterop) return null;
645 if (element.isInstanceMember) return 'this';
646 if (element.isConstructor) return fixedBackendPath(element.enclosingClass);
647 if (element.isLibrary) return 'self';
648 var sb = new StringBuffer();
649 sb..write(_jsNameHelper(element.library));
650
651 if (element.enclosingClass != null && element.enclosingClass != element) {
652 sb..write('.')..write(_jsNameHelper(element.enclosingClass));
653 }
654 return sb.toString();
655 }
656
637 /// Returns the annotated name for a variant of `call`. 657 /// Returns the annotated name for a variant of `call`.
638 /// The result has the form: 658 /// The result has the form:
639 /// 659 ///
640 /// call$<N>$namedParam1...$namedParam<M> 660 /// call$<N>$namedParam1...$namedParam<M>
641 /// 661 ///
642 /// This name cannot be minified because it is generated by string 662 /// This name cannot be minified because it is generated by string
643 /// concatenation at runtime, by applyFunction in js_helper.dart. 663 /// concatenation at runtime, by applyFunction in js_helper.dart.
644 jsAst.Name deriveCallMethodName(List<String> suffix) { 664 jsAst.Name deriveCallMethodName(List<String> suffix) {
645 // TODO(asgerf): Avoid clashes when named parameters contain $ symbols. 665 // TODO(asgerf): Avoid clashes when named parameters contain $ symbols.
646 return new StringBackedName('$callPrefix\$${suffix.join(r'$')}'); 666 return new StringBackedName('$callPrefix\$${suffix.join(r'$')}');
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 778
759 /** 779 /**
760 * Returns the JavaScript property name used to store an instance field. 780 * Returns the JavaScript property name used to store an instance field.
761 */ 781 */
762 jsAst.Name instanceFieldPropertyName(FieldElement element) { 782 jsAst.Name instanceFieldPropertyName(FieldElement element) {
763 ClassElement enclosingClass = element.enclosingClass; 783 ClassElement enclosingClass = element.enclosingClass;
764 784
765 if (element.hasFixedBackendName) { 785 if (element.hasFixedBackendName) {
766 // Certain native fields must be given a specific name. Native names must 786 // Certain native fields must be given a specific name. Native names must
767 // not contain '$'. We rely on this to avoid clashes. 787 // not contain '$'. We rely on this to avoid clashes.
788 // TODO(jacobr): we need to relax this constraint.
Siggi Cherem (dart-lang) 2015/10/06 22:38:02 please file a bug to refer to it here.
Jacob 2015/10/13 01:19:23 synced with sra and we decided this assert can be
768 assert(enclosingClass.isNative && 789 assert(enclosingClass.isNative &&
769 !element.fixedBackendName.contains(r'$')); 790 !element.fixedBackendName.contains(r'$'));
770 791
771 return new StringBackedName(element.fixedBackendName); 792 return new StringBackedName(element.fixedBackendName);
772 } 793 }
773 794
774 // Instances of BoxFieldElement are special. They are already created with 795 // Instances of BoxFieldElement are special. They are already created with
775 // a unique and safe name. However, as boxes are not really instances of 796 // a unique and safe name. However, as boxes are not really instances of
776 // classes, the usual naming scheme that tries to avoid name clashes with 797 // classes, the usual naming scheme that tries to avoid name clashes with
777 // super classes does not apply. We still do not mark the name as a 798 // super classes does not apply. We still do not mark the name as a
(...skipping 1215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 } 2014 }
1994 } 2015 }
1995 } 2016 }
1996 } 2017 }
1997 2018
1998 enum NamingScope { 2019 enum NamingScope {
1999 global, 2020 global,
2000 instance, 2021 instance,
2001 constant 2022 constant
2002 } 2023 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698