Index: compiler/java/com/google/dart/compiler/resolver/Resolver.java |
=================================================================== |
--- compiler/java/com/google/dart/compiler/resolver/Resolver.java (revision 771) |
+++ compiler/java/com/google/dart/compiler/resolver/Resolver.java (working copy) |
@@ -44,6 +44,7 @@ |
import com.google.dart.compiler.ast.DartParameter; |
import com.google.dart.compiler.ast.DartPropertyAccess; |
import com.google.dart.compiler.ast.DartRedirectConstructorInvocation; |
+import com.google.dart.compiler.ast.DartReturnStatement; |
import com.google.dart.compiler.ast.DartStatement; |
import com.google.dart.compiler.ast.DartStringInterpolation; |
import com.google.dart.compiler.ast.DartStringLiteral; |
@@ -1115,6 +1116,21 @@ |
} |
@Override |
+ public Element visitReturnStatement(DartReturnStatement x) { |
+ if (x.getValue() != null) { |
+ // Dart Spec v0.03, section 11.10. |
+ // Generative constructors cannot return arbitrary expressions in the form: 'return e;' |
+ // they can though have return statement in the form: 'return;' |
+ if ((currentMethod == innermostFunction) |
+ && Elements.isNonFactoryConstructor(currentMethod)) { |
+ resolutionError(x, DartCompilerErrorCode.INVALID_RETURN_IN_CONSTRUCTOR); |
+ } |
+ return x.getValue().accept(this); |
+ } |
+ return null; |
+ } |
+ |
+ @Override |
public Element visitIntegerLiteral(DartIntegerLiteral node) { |
recordType(node, typeProvider.getIntType()); |
return null; |