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

Unified Diff: frog/minfrog

Issue 9188048: fix issue 1110 (handle void better) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: comment fix Created 8 years, 11 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
« no previous file with comments | « frog/member.dart ('k') | frog/parser.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/minfrog
diff --git a/frog/minfrog b/frog/minfrog
index 963f48f8274fe53dd4f8a819d7e043ed005deb68..61a9deb42989f8c94f7160da38d5c82df332983c 100755
--- a/frog/minfrog
+++ b/frog/minfrog
@@ -296,6 +296,9 @@ Object.defineProperty(Object.prototype, "replaceFirst$2", { value: function($0,
Object.defineProperty(Object.prototype, "resolve$0", { value: function() {
return this.noSuchMethod("resolve", []);
}, enumerable: false, configurable: true });
+Object.defineProperty(Object.prototype, "resolveType$2", { value: function($0, $1) {
+ return this.noSuchMethod("resolveType", [$0, $1]);
+}, enumerable: false, configurable: true });
Object.defineProperty(Object.prototype, "resolveTypeParams$1", { value: function($0) {
return this.noSuchMethod("resolveTypeParams", [$0]);
}, enumerable: false, configurable: true });
@@ -2312,11 +2315,11 @@ Element.prototype.resolveType = function(node, typeErrors) {
if (typeRef.type != null) {
return typeRef.type;
}
- return this.get$enclosingElement().resolveType(node, typeErrors);
+ return this.get$enclosingElement().resolveType$2(node, typeErrors);
}
else if ((node instanceof GenericTypeReference)) {
var typeRef = node;
- var baseType = this.resolveType(typeRef.baseType, typeErrors);
+ var baseType = this.resolveType$2(typeRef.baseType, typeErrors);
if (!baseType.get$isGeneric()) {
$globals.world.error(("" + baseType.get$name() + " is not generic"), typeRef.span);
return null;
@@ -2328,7 +2331,7 @@ Element.prototype.resolveType = function(node, typeErrors) {
var typeArgs = [];
for (var i = (0);
i < typeRef.typeArguments.get$length(); i++) {
- typeArgs.add$1(this.resolveType(typeRef.typeArguments.$index(i), typeErrors));
+ typeArgs.add$1(this.resolveType$2(typeRef.typeArguments.$index(i), typeErrors));
}
typeRef.type = baseType.getOrMakeConcreteType$1(typeArgs);
}
@@ -2347,6 +2350,7 @@ Element.prototype.resolveType = function(node, typeErrors) {
}
Element.prototype.hashCode$0 = Element.prototype.hashCode;
Element.prototype.resolve$0 = Element.prototype.resolve;
+Element.prototype.resolveType$2 = Element.prototype.resolveType;
// ********** Code for WorldGenerator **************
function WorldGenerator(main, writer) {
this.main = main;
@@ -2993,7 +2997,7 @@ BlockScope.prototype.declareParameter = function(p) {
return this.create(p.name, p.type, p.definition.span, false, true);
}
BlockScope.prototype.declare = function(id) {
- var type = this.enclosingMethod.method.resolveType(id.type, false);
+ var type = this.enclosingMethod.method.resolveType$2(id.type, false);
return this.create(id.name.name, type, id.span, false, false);
}
BlockScope.prototype.getRethrow = function() {
@@ -3474,7 +3478,7 @@ MethodGenerator.prototype.visitVariableDefinition = function(node) {
isFinal = true;
}
this.writer.write("var ");
- var type = this.method.resolveType(node.type, false);
+ var type = this.method.resolveType$2(node.type, false);
for (var i = (0);
i < node.names.get$length(); i++) {
var thisType = type;
@@ -3642,7 +3646,7 @@ MethodGenerator.prototype._isFinal = function(typeRef) {
return typeRef != null && typeRef.get$isFinal();
}
MethodGenerator.prototype.visitForInStatement = function(node) {
- var itemType = this.method.resolveType(node.item.type, false);
+ var itemType = this.method.resolveType$2(node.item.type, false);
var itemName = node.item.name.name;
var list = node.list.visit(this);
this._pushBlock(true);
@@ -3689,7 +3693,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
if (node.catches.get$length() == (1)) {
var catch_ = node.catches.$index((0));
this._pushBlock(false);
- var exType = this.method.resolveType(catch_.get$exception().get$type(), false);
+ var exType = this.method.resolveType$2(catch_.get$exception().get$type(), false);
var ex = this._scope.declare(catch_.get$exception());
this._scope.rethrow = ex;
this.writer.nextBlock(("} catch (" + ex.get$code() + ") {"));
@@ -3724,7 +3728,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
i < node.catches.get$length(); i++) {
var catch_ = node.catches.$index(i);
this._pushBlock(false);
- var tmpType = this.method.resolveType(catch_.get$exception().get$type(), false);
+ var tmpType = this.method.resolveType$2(catch_.get$exception().get$type(), false);
var tmp = this._scope.declare(catch_.get$exception());
if (!tmpType.get$isVarOrObject()) {
var test = ex.instanceOf$3$isTrue$forceCheck(this, tmpType, catch_.get$exception().get$span(), true, true);
@@ -4150,7 +4154,7 @@ MethodGenerator.prototype.visitNewExpression = function(node) {
if ($eq(names.get$length(), (0))) names = null;
typeRef = new NameTypeReference(typeRef.get$isFinal(), typeRef.get$name(), names, typeRef.get$span());
}
- var type = this.method.resolveType(typeRef, true);
+ var type = this.method.resolveType$2(typeRef, true);
if (type.get$isTop()) {
type = type.get$library().findTypeByName$1(constructorName);
constructorName = "";
@@ -4188,7 +4192,7 @@ MethodGenerator.prototype.visitListExpression = function(node) {
var listType = $globals.world.listType;
var type = $globals.world.varType;
if (node.itemType != null) {
- type = this.method.resolveType(node.itemType, true);
+ type = this.method.resolveType$2(node.itemType, true);
if (node.isConst && ((type instanceof ParameterType) || type.get$hasTypeParams())) {
$globals.world.error("type parameter cannot be used in const list literals");
}
@@ -4217,7 +4221,7 @@ MethodGenerator.prototype.visitMapExpression = function(node) {
var mapType = $globals.world.mapType;
if (node.valueType != null) {
if (node.keyType != null) {
- keyType = this.method.resolveType(node.keyType, true);
+ keyType = this.method.resolveType$2(node.keyType, true);
if (!keyType.get$isString()) {
$globals.world.error("the key type of a map literal must be \"String\"", keyType.get$span());
}
@@ -4225,7 +4229,7 @@ MethodGenerator.prototype.visitMapExpression = function(node) {
$globals.world.error("type parameter cannot be used in const map literals");
}
}
- valueType = this.method.resolveType(node.valueType, true);
+ valueType = this.method.resolveType$2(node.valueType, true);
if (node.isConst && ((valueType instanceof ParameterType) || valueType.get$hasTypeParams())) {
$globals.world.error("type parameter cannot be used in const map literals");
}
@@ -4257,7 +4261,7 @@ MethodGenerator.prototype.visitConditionalExpression = function(node) {
}
MethodGenerator.prototype.visitIsExpression = function(node) {
var value = this.visitValue(node.x);
- var type = this.method.resolveType(node.type, false);
+ var type = this.method.resolveType$2(node.type, false);
return value.instanceOf$4(this, type, node.span, node.isTrue);
}
MethodGenerator.prototype.visitParenExpression = function(node) {
@@ -4851,6 +4855,7 @@ Library.prototype.findTypeByName$1 = Library.prototype.findTypeByName;
Library.prototype.hashCode$0 = Library.prototype.hashCode;
Library.prototype.postResolveChecks$0 = Library.prototype.postResolveChecks;
Library.prototype.resolve$0 = Library.prototype.resolve;
+Library.prototype.resolveType$2 = Library.prototype.resolveType;
Library.prototype.toString$0 = Library.prototype.toString;
Library.prototype.visitSources$0 = Library.prototype.visitSources;
// ********** Code for _LibraryVisitor **************
@@ -5068,7 +5073,7 @@ Parameter.prototype.resolve = function() {
this.name = this.name.substring((5));
this.isInitializer = true;
}
- this.type = this.method.resolveType(this.definition.type, false);
+ this.type = this.method.resolveType$2(this.definition.type, false);
if (this.definition.value != null) {
if (!this.get$hasDefaultValue()) return;
if (this.method.name == ":call") {
@@ -5542,7 +5547,7 @@ ConcreteMember.prototype.set$initDelegate = function(ctor) {
this.baseMember.set$initDelegate(ctor);
}
ConcreteMember.prototype.resolveType = function(node, isRequired) {
- var type = this.baseMember.resolveType(node, isRequired);
+ var type = this.baseMember.resolveType$2(node, isRequired);
return type.resolveTypeParams$1(this.declaringType);
}
ConcreteMember.prototype.computeValue = function() {
@@ -5593,6 +5598,7 @@ ConcreteMember.prototype.invoke$4$isDynamic = ConcreteMember.prototype.invoke;
ConcreteMember.prototype.invoke$5 = ConcreteMember.prototype.invoke;
ConcreteMember.prototype.provideFieldSyntax$0 = ConcreteMember.prototype.provideFieldSyntax;
ConcreteMember.prototype.providePropertySyntax$0 = ConcreteMember.prototype.providePropertySyntax;
+ConcreteMember.prototype.resolveType$2 = ConcreteMember.prototype.resolveType;
// ********** Code for MethodMember **************
$inherits(MethodMember, Member);
function MethodMember(name, declaringType, definition) {
@@ -6063,7 +6069,7 @@ MethodMember.prototype.resolve = function() {
this.returnType = this.declaringType;
}
else {
- this.returnType = this.resolveType(this.definition.returnType, false);
+ this.returnType = this.resolveType(this.definition.returnType, false, true);
}
this.parameters = [];
var $$list = this.definition.formals;
@@ -6077,11 +6083,14 @@ MethodMember.prototype.resolve = function() {
this.get$library()._addMember(this);
}
}
-MethodMember.prototype.resolveType = function(node, typeErrors) {
+MethodMember.prototype.resolveType = function(node, typeErrors, allowVoid) {
var t = Element.prototype.resolveType.call(this, node, typeErrors);
if (this.isStatic && !this.isFactory && (t instanceof ParameterType)) {
$globals.world.error("using type parameter in static context.", node.span);
}
+ if (!allowVoid && t.get$isVoid()) {
+ $globals.world.error("\"void\" only allowed as return type", node.span);
+ }
return t;
}
MethodMember.prototype._evalConstConstructor$2 = MethodMember.prototype._evalConstConstructor;
@@ -6105,6 +6114,9 @@ MethodMember.prototype.namesInOrder$1 = MethodMember.prototype.namesInOrder;
MethodMember.prototype.provideFieldSyntax$0 = MethodMember.prototype.provideFieldSyntax;
MethodMember.prototype.providePropertySyntax$0 = MethodMember.prototype.providePropertySyntax;
MethodMember.prototype.resolve$0 = MethodMember.prototype.resolve;
+MethodMember.prototype.resolveType$2 = function($0, $1) {
+ return this.resolveType($0, $1, false);
+};
// ********** Code for MemberSet **************
function MemberSet(member, isVar) {
this.jsname = member.get$jsname();
@@ -9503,6 +9515,9 @@ Parser.prototype._lookaheadAfterParens = function(tokens) {
}
}
Parser.prototype._typeAsIdentifier = function(type) {
+ if ($eq(type.get$name().get$name(), "void")) {
+ this._errorExpected(("identifer, but found \"" + type.get$name().get$name() + "\""));
+ }
return type.get$name();
}
Parser.prototype._specialIdentifier = function(includeOperators) {
@@ -9891,6 +9906,9 @@ Parser.prototype._makeFunction = function(expr, formals, body) {
else if ((expr instanceof DeclaredIdentifier)) {
name = expr.get$name();
type = expr.get$type();
+ if (name == null) {
+ this._lang_error("expected name and type", expr.get$span());
+ }
}
else {
this._lang_error("bad function body", expr.get$span());
@@ -11119,7 +11137,7 @@ ParameterType.prototype.addDirectSubtype = function(type) {
}
ParameterType.prototype.resolve = function() {
if (this.typeParameter.extendsType != null) {
- this.extendsType = this.get$enclosingElement().resolveType(this.typeParameter.extendsType, true);
+ this.extendsType = this.get$enclosingElement().resolveType$2(this.typeParameter.extendsType, true);
}
else {
this.extendsType = $globals.world.objectType;
@@ -11241,6 +11259,7 @@ NonNullableType.prototype.getMember$1 = NonNullableType.prototype.getMember;
NonNullableType.prototype.getOrMakeConcreteType$1 = NonNullableType.prototype.getOrMakeConcreteType;
NonNullableType.prototype.isSubtypeOf$1 = NonNullableType.prototype.isSubtypeOf;
NonNullableType.prototype.markUsed$0 = NonNullableType.prototype.markUsed;
+NonNullableType.prototype.resolveType$2 = NonNullableType.prototype.resolveType;
NonNullableType.prototype.resolveTypeParams$1 = NonNullableType.prototype.resolveTypeParams;
// ********** Code for ConcreteType **************
$inherits(ConcreteType, Type);
@@ -11409,6 +11428,7 @@ ConcreteType.prototype.getFactory$2 = ConcreteType.prototype.getFactory;
ConcreteType.prototype.getMember$1 = ConcreteType.prototype.getMember;
ConcreteType.prototype.getOrMakeConcreteType$1 = ConcreteType.prototype.getOrMakeConcreteType;
ConcreteType.prototype.markUsed$0 = ConcreteType.prototype.markUsed;
+ConcreteType.prototype.resolveType$2 = ConcreteType.prototype.resolveType;
ConcreteType.prototype.resolveTypeParams$1 = ConcreteType.prototype.resolveTypeParams;
// ********** Code for DefinedType **************
$inherits(DefinedType, Type);
« no previous file with comments | « frog/member.dart ('k') | frog/parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698