| Index: dart/frog/leg/resolver.dart
|
| ===================================================================
|
| --- dart/frog/leg/resolver.dart (revision 3790)
|
| +++ dart/frog/leg/resolver.dart (working copy)
|
| @@ -42,7 +42,8 @@
|
| return resolveMethodElement(element);
|
|
|
| case ElementKind.FIELD:
|
| - return resolveFieldElement(element);
|
| + case ElementKind.PARAMETER:
|
| + return resolveVariableElement(element);
|
|
|
| default:
|
| compiler.unimplemented(
|
| @@ -75,7 +76,7 @@
|
| return visitor.mapping;
|
| }
|
|
|
| - TreeElements resolveFieldElement(Element element) {
|
| + TreeElements resolveVariableElement(Element element) {
|
| Node tree = element.parseNode(compiler);
|
| ResolverVisitor visitor = new FullResolverVisitor(compiler, element);
|
| if (tree is SendSet) {
|
| @@ -346,6 +347,14 @@
|
| : new TopScope(compiler.universe),
|
| this.currentClass = element.isMember() ? element.enclosingElement : null;
|
|
|
| + ResolverVisitor.from(ResolverVisitor other)
|
| + : this.compiler = other.compiler,
|
| + this.mapping = other.mapping,
|
| + this.enclosingElement = other.enclosingElement,
|
| + this.inInstanceContext = other.inInstanceContext,
|
| + this.context = other.context,
|
| + this.currentClass = other.currentClass;
|
| +
|
| void error(Node node, MessageKind kind, [arguments = const []]) {
|
| ResolutionError error = new ResolutionError(kind, arguments);
|
| compiler.reportError(node, error);
|
| @@ -475,6 +484,8 @@
|
| FullResolverVisitor(Compiler compiler, Element element)
|
| : super(compiler, element);
|
|
|
| + FullResolverVisitor.from(ResolverVisitor other) : super.from(other);
|
| +
|
| Element visitClassNode(ClassNode node) {
|
| cancel(node, "shouldn't be called");
|
| }
|
| @@ -1034,9 +1045,6 @@
|
| }
|
|
|
| Element visitSend(Send node) {
|
| - if (node.receiver === null) {
|
| - cancel(node, 'internal error: no receiver on a parameter send');
|
| - }
|
| Element element;
|
| if (node.receiver.asIdentifier() === null ||
|
| !node.receiver.asIdentifier().isThis()) {
|
| @@ -1056,9 +1064,30 @@
|
| error(node, MessageKind.NOT_INSTANCE_FIELD, [name]);
|
| }
|
| }
|
| + // TODO(ngeoffray): it's not right to put the field element in
|
| + // the parameters element. Create another element instead.
|
| return element;
|
| }
|
|
|
| + Element visitSendSet(SendSet node) {
|
| + Element element;
|
| + if (node.receiver != null) {
|
| + // TODO(ngeoffray): it's not right to put the field element in
|
| + // the parameters element. Create another element instead.
|
| + element = visitSend(node);
|
| + } else if (node.selector.asIdentifier() != null) {
|
| + Element variables = new VariableListElement.node(currentDefinitions,
|
| + ElementKind.VARIABLE_LIST, enclosingElement);
|
| + element = new VariableElement(node.selector.asIdentifier().source,
|
| + variables, ElementKind.PARAMETER, enclosingElement, node: node);
|
| + }
|
| + // Visit the value. The compile time constant handler will
|
| + // make sure it's a compile time constant.
|
| + new FullResolverVisitor.from(this).visit(node.arguments.head);
|
| + compiler.enqueue(new WorkItem.toCompile(element));
|
| + return element;
|
| + }
|
| +
|
| Element visit(Node node) {
|
| if (node == null) return null;
|
| return node.accept(this);
|
|
|