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; |
} |