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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2435163002: fix #27631, get/set methods no longer shadow index operator (Closed)
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/dev_compiler/lib/js/legacy/dart_sdk.js ('k') | pkg/dev_compiler/test/codegen_expected/BenchmarkBase.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index 221d94ca9bdec9c773ecbd8bd8371ab22c711948..ea967056be45400965b7d5d4b487a958c0e92977 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -4481,7 +4481,9 @@ class CodeGenerator extends GeneralizingAstVisitor
context: expr);
}
- return _emitSend(expr, op.lexeme[0], []);
+ var operatorName = op.lexeme;
+ if (operatorName == '-') operatorName = 'unary-';
Bob Nystrom 2016/10/20 21:01:13 Is "unary-" just used as a magic string for _emitM
Jennifer Messerly 2016/10/20 22:45:04 it's not. It's defined by the Dart language spec a
+ return _emitSend(expr, operatorName, []);
}
// Cascades can contain [IndexExpression], [MethodInvocation] and
@@ -4714,7 +4716,7 @@ class CodeGenerator extends GeneralizingAstVisitor
JS.Expression _emitSend(
Expression target, String name, List<Expression> args) {
var type = getStaticType(target);
- var memberName = _emitMemberName(name, unary: args.isEmpty, type: type);
+ var memberName = _emitMemberName(name, type: type);
if (isDynamicInvoke(target)) {
if (_inWhitelistCode(target)) {
var vars = <JS.MetaLetVariable, JS.Expression>{};
@@ -5226,7 +5228,6 @@ class CodeGenerator extends GeneralizingAstVisitor
}
return _emitMemberName(name,
type: (e.enclosingElement as ClassElement).type,
- unary: e.parameters.isEmpty,
isStatic: e.isStatic,
useExtension: useExtension);
}
@@ -5266,17 +5267,14 @@ class CodeGenerator extends GeneralizingAstVisitor
/// This follows the same pattern as ECMAScript 6 Map:
/// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map>
///
- /// Unary minus looks like: `x['unary-']()`. Note that [unary] must be passed
+ /// Unary minus looks like: `x._negate()`. Note that [unary] must be passed
Bob Nystrom 2016/10/20 21:01:13 Can you update the part of the doc around "[unary]
Jennifer Messerly 2016/10/20 22:45:04 Done.
/// for this transformation to happen, otherwise binary minus is assumed.
///
/// Equality is a bit special, it is generated via the Dart `equals` runtime
/// helper, that checks for null. The user defined method is called '=='.
///
JS.Expression _emitMemberName(String name,
- {DartType type,
- bool unary: false,
- bool isStatic: false,
- bool useExtension}) {
+ {DartType type, bool isStatic: false, bool useExtension}) {
// Static members skip the rename steps.
if (isStatic) return _propertyName(name);
@@ -5284,16 +5282,16 @@ class CodeGenerator extends GeneralizingAstVisitor
return _emitPrivateNameSymbol(currentLibrary, name);
}
+ // When generating synthetic names, we use _ as the prefix, since Dart names
+ // won't have this (eliminated above), nor will static names reach here.
if (name == '[]') {
kevmoo 2016/10/20 20:06:03 better as a switch, no?
Jennifer Messerly 2016/10/20 20:12:14 I tend to find Dart's C-style switch clunky, e.g.
Bob Nystrom 2016/10/20 21:01:13 If it was my code, I'd probably use switch () to h
- name = 'get';
+ name = '_get';
} else if (name == '[]=') {
- name = 'set';
- } else if (name == '-' && unary) {
- name = 'unary-';
+ name = '_set';
+ } else if (name == 'unary-') {
+ name = '_negate';
} else if (name == 'constructor' || name == 'prototype') {
- // This uses an illegal (in Dart) character for a member, avoiding the
- // conflict. We could use practically any character for this.
- name = '+$name';
+ name = '_$name';
}
var result = _propertyName(name);
« no previous file with comments | « pkg/dev_compiler/lib/js/legacy/dart_sdk.js ('k') | pkg/dev_compiler/test/codegen_expected/BenchmarkBase.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698