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

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart

Issue 14646031: Implement invoke, setField, and getField (unminified). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review comments. Created 7 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 side-by-side diff with in-line comments
Download patch
Index: dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 49cd0f9b640050980c9730123a300f76a2a54580..501bbe135f764adb547d3b057f8833549f524829 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -2499,11 +2499,6 @@ class ResolverVisitor extends MappingVisitor<Element> {
Node selector = node.send.selector;
FunctionElement constructor = resolveConstructor(node);
final bool isSymbolConstructor = constructor == compiler.symbolConstructor;
- if (!node.isConst() && isSymbolConstructor) {
- compiler.reportWarningCode(
- node.newToken, MessageKind.NON_CONST_BLOAT,
- {'name': compiler.symbolClass.name});
- }
resolveSelector(node.send, constructor);
resolveArguments(node.send.argumentsNode);
useElement(node.send, constructor);
@@ -2535,35 +2530,46 @@ class ResolverVisitor extends MappingVisitor<Element> {
includeBackendMembers: false,
includeSuperMembers: true);
- if (node.isConst() && isSymbolConstructor) {
- Node argumentNode = node.send.arguments.head;
- Constant name = compiler.metadataHandler.compileNodeWithDefinitions(
- argumentNode, mapping, isConst: true);
- if (!name.isString()) {
- DartType type = name.computeType(compiler);
- compiler.reportErrorCode(argumentNode, MessageKind.STRING_EXPECTED,
- {'type': type});
+ if (isSymbolConstructor) {
+ if (node.isConst()) {
+ Node argumentNode = node.send.arguments.head;
+ Constant name = compiler.metadataHandler.compileNodeWithDefinitions(
+ argumentNode, mapping, isConst: true);
+ if (!name.isString()) {
+ DartType type = name.computeType(compiler);
+ compiler.reportErrorCode(argumentNode, MessageKind.STRING_EXPECTED,
+ {'type': type});
+ } else {
+ StringConstant stringConstant = name;
+ String nameString = stringConstant.toDartString().slowToString();
+ if (validateSymbol(argumentNode, nameString)) {
+ world.registerConstSymbol(nameString, mapping);
+ }
+ }
} else {
- StringConstant stringConstant = name;
- validateSymbol(argumentNode,
- stringConstant.toDartString().slowToString());
+ compiler.reportWarningCode(
+ node.newToken, MessageKind.NON_CONST_BLOAT,
+ {'name': compiler.symbolClass.name});
+ world.registerNewSymbol(mapping);
}
}
return null;
}
- void validateSymbol(Node node, String name) {
- if (name.isEmpty) return;
+ bool validateSymbol(Node node, String name) {
+ if (name.isEmpty) return true;
if (name.startsWith('_')) {
compiler.reportErrorCode(node, MessageKind.PRIVATE_IDENTIFIER,
{'value': name});
- return;
+ return false;
}
if (!symbolValidationPattern.hasMatch(name)) {
compiler.reportErrorCode(node, MessageKind.INVALID_SYMBOL,
{'value': name});
+ return false;
}
+ return true;
}

Powered by Google App Engine
This is Rietveld 408576698