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

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: Make expando private 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..8d9c593ec79da5fe89d828a774d5cc34f8087f44 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -1553,7 +1553,7 @@ abstract class MappingVisitor<T> extends CommonResolverVisitor<T> {
Element useElement(Node node, Element element) {
if (element == null) return null;
- return mapping[node] = element;
+ return mapping[node] = element.declaration;
Johnni Winther 2013/05/08 08:22:08 I'm not sure this works with the current invariant
ahe 2013/05/08 08:57:43 Good you spotted this, then. The problem is that
}
DartType useType(TypeAnnotation annotation, DartType type) {
@@ -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