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

Side by Side Diff: lib/src/codegen/js_codegen.dart

Issue 1111803005: fix #159, static renames for caller/arguments (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « lib/runtime/dart_runtime.js ('k') | lib/src/codegen/js_names.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dev_compiler.src.codegen.js_codegen; 5 library dev_compiler.src.codegen.js_codegen;
6 6
7 import 'dart:collection' show HashSet, HashMap; 7 import 'dart:collection' show HashSet, HashMap;
8 8
9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator; 9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator;
10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator; 10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator;
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 body.add(_overrideField(field)); 634 body.add(_overrideField(field));
635 } 635 }
636 } 636 }
637 } 637 }
638 638
639 // Static fields 639 // Static fields
640 var lazyStatics = <VariableDeclaration>[]; 640 var lazyStatics = <VariableDeclaration>[];
641 for (FieldDeclaration member in staticFields) { 641 for (FieldDeclaration member in staticFields) {
642 for (VariableDeclaration field in member.fields.variables) { 642 for (VariableDeclaration field in member.fields.variables) {
643 var fieldName = field.name.name; 643 var fieldName = field.name.name;
644 if (field.isConst || _isFieldInitConstant(field)) { 644 if ((field.isConst || _isFieldInitConstant(field)) &&
645 !JS.invalidStaticFieldName(fieldName)) {
645 var init = _visit(field.initializer); 646 var init = _visit(field.initializer);
646 if (init == null) init = new JS.LiteralNull(); 647 if (init == null) init = new JS.LiteralNull();
647 body.add(js.statement('#.# = #;', [name, fieldName, init])); 648 body.add(js.statement('#.# = #;', [name, fieldName, init]));
648 } else { 649 } else {
649 lazyStatics.add(field); 650 lazyStatics.add(field);
650 } 651 }
651 } 652 }
652 } 653 }
653 var lazy = _emitLazyFields(new JS.Identifier(name), lazyStatics); 654 var lazy = _emitLazyFields(new JS.Identifier(name), lazyStatics);
654 if (lazy != null) body.add(lazy); 655 if (lazy != null) body.add(lazy);
(...skipping 1701 matching lines...) Expand 10 before | Expand all | Expand 10 after
2356 /// 2357 ///
2357 /// Unary minus looks like: `x['unary-']()`. Note that [unary] must be passed 2358 /// Unary minus looks like: `x['unary-']()`. Note that [unary] must be passed
2358 /// for this transformation to happen, otherwise binary minus is assumed. 2359 /// for this transformation to happen, otherwise binary minus is assumed.
2359 /// 2360 ///
2360 /// Equality is a bit special, it is generated via the Dart `equals` runtime 2361 /// Equality is a bit special, it is generated via the Dart `equals` runtime
2361 /// helper, that checks for null. The user defined method is called '=='. 2362 /// helper, that checks for null. The user defined method is called '=='.
2362 /// 2363 ///
2363 JS.Expression _emitMemberName(String name, 2364 JS.Expression _emitMemberName(String name,
2364 {DartType type, bool unary: false, bool isStatic: false}) { 2365 {DartType type, bool unary: false, bool isStatic: false}) {
2365 2366
2366 // Static methods skip most of the rename steps. 2367 // Static members skip the rename steps.
2367 if (isStatic) { 2368 if (isStatic) return _propertyName(name);
2368 if (JS.invalidStaticMethodName(name)) {
2369 // Choose an string name. Use an invalid identifier so it won't conflict
2370 // with any valid member names.
2371 // TODO(jmesserly): this works around the problem, but I'm pretty sure w e
2372 // don't need it, as static methods seemed to work. The only concrete
2373 // issue we saw was in the defineNamedConstructor helper function.
2374 name = '$name*';
2375 }
2376 return _propertyName(name);
2377 }
2378 2369
2379 if (name.startsWith('_')) { 2370 if (name.startsWith('_')) {
2380 return _privateNames.putIfAbsent( 2371 return _privateNames.putIfAbsent(
2381 name, () => _initSymbol(new JS.TemporaryId(name))); 2372 name, () => _initSymbol(new JS.TemporaryId(name)));
2382 } 2373 }
2383 2374
2384 // Check for extension method: 2375 // Check for extension method:
2385 var extLibrary = _findExtensionLibrary(name, type); 2376 var extLibrary = _findExtensionLibrary(name, type);
2386 2377
2387 if (name == '[]') { 2378 if (name == '[]') {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2520 // TODO(jmesserly): validate the library. See issue #135. 2511 // TODO(jmesserly): validate the library. See issue #135.
2521 bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName'; 2512 bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName';
2522 2513
2523 bool _isJsPeerInterface(DartObjectImpl value) => 2514 bool _isJsPeerInterface(DartObjectImpl value) =>
2524 value.type.name == 'JsPeerInterface'; 2515 value.type.name == 'JsPeerInterface';
2525 2516
2526 // TODO(jacobr): we would like to do something like the following 2517 // TODO(jacobr): we would like to do something like the following
2527 // but we don't have summary support yet. 2518 // but we don't have summary support yet.
2528 // bool _supportJsExtensionMethod(AnnotatedNode node) => 2519 // bool _supportJsExtensionMethod(AnnotatedNode node) =>
2529 // _getAnnotation(node, "SupportJsExtensionMethod") != null; 2520 // _getAnnotation(node, "SupportJsExtensionMethod") != null;
OLDNEW
« no previous file with comments | « lib/runtime/dart_runtime.js ('k') | lib/src/codegen/js_names.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698