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

Unified Diff: frog/minfrog

Issue 9107031: fix Library*NegativeTests (and a couple Prefix ones by accident) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: rebased 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
Index: frog/minfrog
diff --git a/frog/minfrog b/frog/minfrog
index a4f7d488047db53f0335d973562bacbc2543e5de..70ee538b2f56fdc06bf814c45cfd754b55703ffb 100755
--- a/frog/minfrog
+++ b/frog/minfrog
@@ -278,6 +278,9 @@ Object.defineProperty(Object.prototype, "needsConversion$1", { value: function($
Object.defineProperty(Object.prototype, "next$0", { value: function() {
return this.noSuchMethod("next", []);
}, enumerable: false, configurable: true });
+Object.defineProperty(Object.prototype, "postResolveChecks$0", { value: function() {
+ return this.noSuchMethod("postResolveChecks", []);
+}, enumerable: false, configurable: true });
Object.defineProperty(Object.prototype, "provideFieldSyntax$0", { value: function() {
return this.noSuchMethod("provideFieldSyntax", []);
}, enumerable: false, configurable: true });
@@ -504,14 +507,6 @@ function _print(obj) {
write('\n');
}
}
-function _map(itemsAndKeys) {
- var ret = new LinkedHashMapImplementation();
- for (var i = (0);
- i < itemsAndKeys.get$length(); ) {
- ret.$setindex(itemsAndKeys.$index(i++), itemsAndKeys.$index(i++));
- }
- return ret;
-}
function _toDartException(e) {
function attachStack(dartEx) {
// TODO(jmesserly): setting the stack property is not a long term solution.
@@ -1847,6 +1842,14 @@ _FunctionImplementation.prototype._genStub = function(argsLength, names) {
}
// ********** Code for top level **************
+function _map(itemsAndKeys) {
+ var ret = new LinkedHashMapImplementation();
+ for (var i = (0);
+ i < itemsAndKeys.get$length(); ) {
+ ret.$setindex(itemsAndKeys.$index(i++), itemsAndKeys.$index(i++));
+ }
+ return ret;
+}
// ********** Library node **************
// ********** Code for Process **************
function Process(_process) {
@@ -4418,14 +4421,163 @@ Arguments.prototype.toCallStubArgs = function() {
return new Arguments(this.nodes, result);
}
// ********** Code for LibraryImport **************
-function LibraryImport(library, prefix) {
+function LibraryImport(library, prefix, span) {
this.library = library;
+ this.span = span;
this.prefix = prefix;
}
LibraryImport.prototype.get$prefix = function() { return this.prefix; };
-LibraryImport.prototype.set$prefix = function(value) { return this.prefix = value; };
LibraryImport.prototype.get$library = function() { return this.library; };
-LibraryImport.prototype.set$library = function(value) { return this.library = value; };
+LibraryImport.prototype.get$span = function() { return this.span; };
+// ********** Code for Member **************
+$inherits(Member, Element);
+function Member(name, declaringType) {
+ this.isGenerated = false;
+ this.declaringType = declaringType;
+ this._provideFieldSyntax = false;
+ this._providePropertySyntax = false;
+ Element.call(this, name, declaringType);
+}
+Member.prototype.get$declaringType = function() { return this.declaringType; };
+Member.prototype.get$isGenerated = function() { return this.isGenerated; };
+Member.prototype.set$isGenerated = function(value) { return this.isGenerated = value; };
+Member.prototype.get$generator = function() { return this.generator; };
+Member.prototype.set$generator = function(value) { return this.generator = value; };
+Member.prototype.get$library = function() {
+ return this.declaringType.get$library();
+}
+Member.prototype.get$isPrivate = function() {
+ return this.name != null && this.name.startsWith("_");
+}
+Member.prototype.get$isConstructor = function() {
+ return false;
+}
+Member.prototype.get$isField = function() {
+ return false;
+}
+Member.prototype.get$isMethod = function() {
+ return false;
+}
+Member.prototype.get$isProperty = function() {
+ return false;
+}
+Member.prototype.get$isAbstract = function() {
+ return false;
+}
+Member.prototype.get$isFinal = function() {
+ return false;
+}
+Member.prototype.get$isConst = function() {
+ return false;
+}
+Member.prototype.get$isFactory = function() {
+ return false;
+}
+Member.prototype.get$isOperator = function() {
+ return this.name.startsWith(":");
+}
+Member.prototype.get$isCallMethod = function() {
+ return this.name == ":call";
+}
+Member.prototype.get$requiresPropertySyntax = function() {
+ return false;
+}
+Member.prototype.get$requiresFieldSyntax = function() {
+ return false;
+}
+Member.prototype.get$isNative = function() {
+ return false;
+}
+Member.prototype.get$constructorName = function() {
+ $globals.world.internalError("can not be a constructor", this.get$span());
+}
+Member.prototype.provideFieldSyntax = function() {
+
+}
+Member.prototype.providePropertySyntax = function() {
+
+}
+Member.prototype.get$initDelegate = function() {
+ $globals.world.internalError("cannot have initializers", this.get$span());
+}
+Member.prototype.set$initDelegate = function(ctor) {
+ $globals.world.internalError("cannot have initializers", this.get$span());
+}
+Member.prototype.computeValue = function() {
+ $globals.world.internalError("cannot have value", this.get$span());
+}
+Member.prototype.get$inferredResult = function() {
+ var t = this.get$returnType();
+ if (t.get$isBool() && (this.get$library().get$isCore() || this.get$library().get$isCoreImpl())) {
+ return $globals.world.nonNullBool;
+ }
+ return t;
+}
+Member.prototype.get$definition = function() {
+ return null;
+}
+Member.prototype.get$parameters = function() {
+ return [];
+}
+Member.prototype.canInvoke = function(context, args) {
+ return this.get$canGet() && new Value(this.get$returnType(), null, null, true).canInvoke(context, ":call", args);
+}
+Member.prototype.invoke = function(context, node, target, args, isDynamic) {
+ var newTarget = this._get(context, node, target, isDynamic);
+ return newTarget.invoke$5(context, ":call", node, args, isDynamic);
+}
+Member.prototype.override = function(other) {
+ if (this.get$isStatic()) {
+ $globals.world.error("static members can not hide parent members", this.get$span(), other.get$span());
+ return false;
+ }
+ else if (other.get$isStatic()) {
+ $globals.world.error("can not override static member", this.get$span(), other.get$span());
+ return false;
+ }
+ return true;
+}
+Member.prototype.get$generatedFactoryName = function() {
+ var prefix = ("" + this.declaringType.get$jsname() + "." + this.get$constructorName() + "$");
+ if (this.name == "") {
+ return ("" + prefix + "factory");
+ }
+ else {
+ return ("" + prefix + this.name + "$factory");
+ }
+}
+Member.prototype.hashCode = function() {
+ var typeCode = this.declaringType == null ? (1) : this.declaringType.hashCode();
+ var nameCode = this.get$isConstructor() ? this.get$constructorName().hashCode() : this.name.hashCode();
+ return (typeCode << (4)) ^ nameCode;
+}
+Member.prototype.$eq = function(other) {
+ return (other instanceof Member) && $eq(this.get$isConstructor(), other.get$isConstructor()) && $eq(this.declaringType, other.get$declaringType()) && (this.get$isConstructor() ? this.get$constructorName() == other.get$constructorName() : this.name == other.get$name());
+}
+Member.prototype._get$3 = Member.prototype._get;
+Member.prototype._get$3$isDynamic = Member.prototype._get;
+Member.prototype._get$4 = Member.prototype._get;
+Member.prototype._set$4 = Member.prototype._set;
+Member.prototype._set$4$isDynamic = Member.prototype._set;
+Member.prototype._set$5 = Member.prototype._set;
+Member.prototype.canInvoke$2 = Member.prototype.canInvoke;
+Member.prototype.computeValue$0 = Member.prototype.computeValue;
+Member.prototype.hashCode$0 = Member.prototype.hashCode;
+Member.prototype.invoke$4 = function($0, $1, $2, $3) {
+ return this.invoke($0, $1, $2, $3, false);
+};
+Member.prototype.invoke$4$isDynamic = Member.prototype.invoke;
+Member.prototype.invoke$5 = Member.prototype.invoke;
+Member.prototype.provideFieldSyntax$0 = Member.prototype.provideFieldSyntax;
+Member.prototype.providePropertySyntax$0 = Member.prototype.providePropertySyntax;
+// ********** Code for AmbiguousMember **************
+$inherits(AmbiguousMember, Member);
+function AmbiguousMember(name, members) {
+ this.members = members;
+ Member.call(this, name, null);
+}
+AmbiguousMember.prototype.get$members = function() { return this.members; };
+AmbiguousMember.prototype.set$members = function(value) { return this.members = value; };
// ********** Code for Library **************
$inherits(Library, Element);
function Library(baseSource) {
@@ -4477,9 +4629,10 @@ Library.prototype.makeFullPath = function(filename) {
if (filename.startsWith("http://")) return filename;
return joinPaths(this.sourceDir, filename);
}
-Library.prototype.addImport = function(fullname, prefix) {
+Library.prototype.addImport = function(fullname, prefix, span) {
var newLib = $globals.world.getOrAddLibrary(fullname);
- this.imports.add(new LibraryImport(newLib, prefix));
+ if (newLib.get$isCore()) return;
+ this.imports.add(new LibraryImport(newLib, prefix, span));
return newLib;
}
Library.prototype.addNative = function(fullname) {
@@ -4614,36 +4767,7 @@ Library._getDottedName = function(type) {
}
}
Library.prototype.lookup = function(name, span) {
- var retType = this.findTypeByName(name);
- var ret = null;
- if (retType != null) {
- ret = retType.get$typeMember();
- }
- var newRet = this.topType.getMember(name);
- if (newRet != null) {
- if (ret != null && $ne(ret, newRet)) {
- $globals.world.error(("conflicting members for \"" + name + "\""), span, ret.get$span(), newRet.get$span());
- }
- else {
- ret = newRet;
- }
- }
- var $$list = this.imports;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var imported = $$list.$index($$i);
- if (imported.get$prefix() == null) {
- newRet = imported.get$library().get$topType().getMember$1(name);
- if (newRet != null) {
- if (ret != null && $ne(ret, newRet)) {
- $globals.world.error(("conflicting members for \"" + name + "\""), span, ret.get$span(), newRet.get$span());
- }
- else {
- ret = newRet;
- }
- }
- }
- }
- return ret;
+ return this._topNames.$index(name);
}
Library.prototype.resolve = function() {
if (this.name == null) {
@@ -4664,6 +4788,52 @@ Library.prototype.resolve = function() {
type.resolve$0();
}
}
+Library.prototype._addTopName = function(name, member, localSpan) {
+ var existing = this._topNames.$index(name);
+ if (existing == null) {
+ this._topNames.$setindex(name, member);
+ }
+ else {
+ if ((existing instanceof AmbiguousMember)) {
+ existing.get$members().add$1(member);
+ }
+ else {
+ var newMember = new AmbiguousMember(name, [existing, member]);
+ $globals.world.error(("conflicting members for \"" + name + "\""), existing.get$span(), member.get$span(), localSpan);
+ this._topNames.$setindex(name, newMember);
+ }
+ }
+}
+Library.prototype._addTopNames = function(lib) {
+ var $$list = lib.topType.members.getValues();
+ for (var $$i = lib.topType.members.getValues().iterator$0(); $$i.hasNext$0(); ) {
+ var member = $$i.next$0();
+ if (member.get$isPrivate() && $ne(lib, this)) continue;
+ this._addTopName(member.get$name(), member);
+ }
+ var $$list = lib.types.getValues();
+ for (var $$i = lib.types.getValues().iterator$0(); $$i.hasNext$0(); ) {
+ var type = $$i.next$0();
+ if (!type.get$isTop()) {
+ if ($ne(lib, this) && type.get$typeMember().get$isPrivate()) continue;
+ this._addTopName(type.get$name(), type.get$typeMember());
+ }
+ }
+}
+Library.prototype.postResolveChecks = function() {
+ this._topNames = new HashMapImplementation();
+ this._addTopNames(this);
+ var $$list = this.imports;
+ for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
+ var imported = $$list.$index($$i);
+ if (imported.get$prefix() == null) {
+ this._addTopNames(imported.get$library());
+ }
+ else {
+ this._addTopName(imported.get$prefix(), imported.get$library().get$topType().get$typeMember(), imported.get$span());
+ }
+ }
+}
Library.prototype.visitSources = function() {
var visitor = new _LibraryVisitor(this);
visitor.addSource$1(this.baseSource);
@@ -4679,6 +4849,7 @@ Library.prototype.$eq = function(other) {
}
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.toString$0 = Library.prototype.toString;
Library.prototype.visitSources$0 = Library.prototype.visitSources;
@@ -4782,7 +4953,7 @@ _LibraryVisitor.prototype.visitDirectiveDefinition = function(node) {
$globals.world.error(("duplicate import of \"" + name + "\""), node.span);
return;
}
- var newLib = this.library.addImport(filename, prefix);
+ var newLib = this.library.addImport(filename, prefix, node.span);
break;
case "source":
@@ -4940,147 +5111,6 @@ Parameter.prototype.get$hasDefaultValue = function() {
Parameter.prototype.copyWithNewType$2 = Parameter.prototype.copyWithNewType;
Parameter.prototype.genValue$2 = Parameter.prototype.genValue;
Parameter.prototype.resolve$0 = Parameter.prototype.resolve;
-// ********** Code for Member **************
-$inherits(Member, Element);
-function Member(name, declaringType) {
- this.isGenerated = false;
- this.declaringType = declaringType;
- this._provideFieldSyntax = false;
- this._providePropertySyntax = false;
- Element.call(this, name, declaringType);
-}
-Member.prototype.get$declaringType = function() { return this.declaringType; };
-Member.prototype.get$isGenerated = function() { return this.isGenerated; };
-Member.prototype.set$isGenerated = function(value) { return this.isGenerated = value; };
-Member.prototype.get$generator = function() { return this.generator; };
-Member.prototype.set$generator = function(value) { return this.generator = value; };
-Member.prototype.get$library = function() {
- return this.declaringType.get$library();
-}
-Member.prototype.get$isPrivate = function() {
- return this.name.startsWith("_");
-}
-Member.prototype.get$isConstructor = function() {
- return false;
-}
-Member.prototype.get$isField = function() {
- return false;
-}
-Member.prototype.get$isMethod = function() {
- return false;
-}
-Member.prototype.get$isProperty = function() {
- return false;
-}
-Member.prototype.get$isAbstract = function() {
- return false;
-}
-Member.prototype.get$isFinal = function() {
- return false;
-}
-Member.prototype.get$isConst = function() {
- return false;
-}
-Member.prototype.get$isFactory = function() {
- return false;
-}
-Member.prototype.get$isOperator = function() {
- return this.name.startsWith(":");
-}
-Member.prototype.get$isCallMethod = function() {
- return this.name == ":call";
-}
-Member.prototype.get$requiresPropertySyntax = function() {
- return false;
-}
-Member.prototype.get$requiresFieldSyntax = function() {
- return false;
-}
-Member.prototype.get$isNative = function() {
- return false;
-}
-Member.prototype.get$constructorName = function() {
- $globals.world.internalError("can not be a constructor", this.get$span());
-}
-Member.prototype.provideFieldSyntax = function() {
-
-}
-Member.prototype.providePropertySyntax = function() {
-
-}
-Member.prototype.get$initDelegate = function() {
- $globals.world.internalError("cannot have initializers", this.get$span());
-}
-Member.prototype.set$initDelegate = function(ctor) {
- $globals.world.internalError("cannot have initializers", this.get$span());
-}
-Member.prototype.computeValue = function() {
- $globals.world.internalError("cannot have value", this.get$span());
-}
-Member.prototype.get$inferredResult = function() {
- var t = this.get$returnType();
- if (t.get$isBool() && (this.get$library().get$isCore() || this.get$library().get$isCoreImpl())) {
- return $globals.world.nonNullBool;
- }
- return t;
-}
-Member.prototype.get$definition = function() {
- return null;
-}
-Member.prototype.get$parameters = function() {
- return [];
-}
-Member.prototype.canInvoke = function(context, args) {
- return this.get$canGet() && new Value(this.get$returnType(), null, null, true).canInvoke(context, ":call", args);
-}
-Member.prototype.invoke = function(context, node, target, args, isDynamic) {
- var newTarget = this._get(context, node, target, isDynamic);
- return newTarget.invoke$5(context, ":call", node, args, isDynamic);
-}
-Member.prototype.override = function(other) {
- if (this.get$isStatic()) {
- $globals.world.error("static members can not hide parent members", this.get$span(), other.get$span());
- return false;
- }
- else if (other.get$isStatic()) {
- $globals.world.error("can not override static member", this.get$span(), other.get$span());
- return false;
- }
- return true;
-}
-Member.prototype.get$generatedFactoryName = function() {
- var prefix = ("" + this.declaringType.get$jsname() + "." + this.get$constructorName() + "$");
- if (this.name == "") {
- return ("" + prefix + "factory");
- }
- else {
- return ("" + prefix + this.name + "$factory");
- }
-}
-Member.prototype.hashCode = function() {
- var typeCode = this.declaringType == null ? (1) : this.declaringType.hashCode();
- var nameCode = this.get$isConstructor() ? this.get$constructorName().hashCode() : this.name.hashCode();
- return (typeCode << (4)) ^ nameCode;
-}
-Member.prototype.$eq = function(other) {
- return (other instanceof Member) && $eq(this.get$isConstructor(), other.get$isConstructor()) && $eq(this.declaringType, other.get$declaringType()) && (this.get$isConstructor() ? this.get$constructorName() == other.get$constructorName() : this.name == other.get$name());
-}
-Member.prototype._get$3 = Member.prototype._get;
-Member.prototype._get$3$isDynamic = Member.prototype._get;
-Member.prototype._get$4 = Member.prototype._get;
-Member.prototype._set$4 = Member.prototype._set;
-Member.prototype._set$4$isDynamic = Member.prototype._set;
-Member.prototype._set$5 = Member.prototype._set;
-Member.prototype.canInvoke$2 = Member.prototype.canInvoke;
-Member.prototype.computeValue$0 = Member.prototype.computeValue;
-Member.prototype.hashCode$0 = Member.prototype.hashCode;
-Member.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
-};
-Member.prototype.invoke$4$isDynamic = Member.prototype.invoke;
-Member.prototype.invoke$5 = Member.prototype.invoke;
-Member.prototype.provideFieldSyntax$0 = Member.prototype.provideFieldSyntax;
-Member.prototype.providePropertySyntax$0 = Member.prototype.providePropertySyntax;
// ********** Code for TypeMember **************
$inherits(TypeMember, Member);
function TypeMember(type) {
@@ -5089,7 +5119,7 @@ function TypeMember(type) {
}
TypeMember.prototype.get$type = function() { return this.type; };
TypeMember.prototype.get$span = function() {
- return this.type.definition.span;
+ return this.type.definition == null ? null : this.type.definition.span;
}
TypeMember.prototype.get$isStatic = function() {
return true;
@@ -12916,7 +12946,7 @@ function MapValue(values, isConst, type, span) {
}
MapValue.prototype.get$code = function() {
var items = new ListValue(this.values, false, $globals.world.listType, this.span);
- var tp = $globals.world.corelib.topType;
+ var tp = $globals.world.coreimpl.topType;
var f = this.isConst ? tp.getMember$1("_constMap") : tp.getMember$1("_map");
var value = f.invoke(null, null, new Value.type$ctor(tp, null), new Arguments(null, [items]), false);
return value.get$code();
@@ -13377,6 +13407,11 @@ World.prototype.resolveAll = function() {
var lib = $$i.next$0();
lib.resolve$0();
}
+ var $$list = this.libraries.getValues();
+ for (var $$i = this.libraries.getValues().iterator$0(); $$i.hasNext$0(); ) {
+ var lib = $$i.next$0();
+ lib.postResolveChecks$0();
+ }
}
World.prototype.get$resolveAll = function() {
return this.resolveAll.bind(this);

Powered by Google App Engine
This is Rietveld 408576698