Index: frog/frogsh |
diff --git a/frog/frogsh b/frog/frogsh |
index 427761a8a8a618798f7e08f1286f1cd035e179c6..f6336669f3e53af6d2faa8a66248a76ef02898e9 100755 |
--- a/frog/frogsh |
+++ b/frog/frogsh |
@@ -2201,7 +2201,7 @@ StringBufferImpl.prototype.clear = function() { |
} |
StringBufferImpl.prototype.toString = function() { |
if (this._buffer.length == 0) return ""; |
- if ($notnull_bool($eq(this._buffer.length, 1))) return $assert_String(this._buffer.$index(0)); |
+ if (this._buffer.length == 1) return $assert_String(this._buffer.$index(0)); |
var result = StringBase.concatAll(this._buffer); |
this._buffer.clear(); |
this._buffer.add(result); |
@@ -2231,10 +2231,10 @@ StringBase.createFromCharCodes = function(charCodes) { |
return String.fromCharCode.apply(null, charCodes); |
} |
StringBase.join = function(strings, separator) { |
- if ($notnull_bool($eq(strings.length, 0))) return ''; |
+ if (strings.length == 0) return ''; |
var s = $assert_String(strings.$index(0)); |
for (var i = 1; |
- i < $assert_num(strings.length); i++) { |
+ i < strings.length; i++) { |
s = s + separator + strings.$index(i); |
} |
return s; |
@@ -2615,10 +2615,30 @@ AbstractLink$T.prototype.is$Link$Node = function(){return this;}; |
AbstractLink$T.prototype.is$Link$Token = function(){return this;}; |
AbstractLink$T.prototype.is$Link$Type = function(){return this;}; |
AbstractLink$T.prototype.is$Iterable = function(){return this;}; |
+AbstractLink$T.prototype.prepend = function(element) { |
+ return new LinkEntry$T(element, this); |
+} |
AbstractLink$T.prototype.iterator = function() { |
var $0; |
return (($0 = this.toList().iterator$0()) && $0.is$Iterator$T()); |
} |
+AbstractLink$T.prototype.printOn = function(buffer, separatedBy) { |
+ if ($notnull_bool(this.isEmpty())) return; |
+ buffer.add(this.get$head() == null ? 'null' : this.get$head()); |
+ if (separatedBy == null) separatedBy = ''; |
+ for (var link = this.get$tail(); |
+ !$notnull_bool(link.isEmpty()); link = link.get$tail()) { |
+ buffer.add(separatedBy); |
+ buffer.add(link.get$head() == null ? 'null' : link.get$head()); |
+ } |
+} |
+AbstractLink$T.prototype.toString = function() { |
+ var buffer = new StringBufferImpl(""); |
+ buffer.add('[ '); |
+ this.printOn(buffer, ', '); |
+ buffer.add(' ]'); |
+ return buffer.toString(); |
+} |
// ********** Code for LinkTail ************** |
function LinkTail() { |
// Initializers done |
@@ -19954,6 +19974,7 @@ DeclaredIdentifier.prototype.visit$1 = function($0) { |
function lang_Type(name) { |
this.name = name; |
this.isTested = false; |
+ this._resolvedMembers = $map([]); |
// Initializers done |
} |
lang_Type.prototype.is$lang_Type = function(){return this;}; |
@@ -19978,6 +19999,9 @@ lang_Type.prototype.get$typeMember = function() { |
lang_Type.prototype.getMember = function(name) { |
return null; |
} |
+lang_Type.prototype.get$subtypes = function() { |
+ return null; |
+} |
lang_Type.prototype.get$isVar = function() { |
return false; |
} |
@@ -20124,6 +20148,37 @@ lang_Type.prototype._getMemberInParents = function(memberName) { |
} |
} |
} |
+lang_Type.prototype.resolveMember = function(memberName) { |
+ var $0; |
+ var ret = (($0 = this._resolvedMembers.$index(memberName)) && $0.is$MemberSet()); |
+ if (ret != null) return ret; |
+ var member = this.getMember(memberName); |
+ if (member == null) { |
+ return null; |
+ } |
+ ret = new MemberSet(member, false); |
+ this._resolvedMembers.$setindex(memberName, ret); |
+ if ($notnull_bool(member.get$isStatic())) { |
+ return ret; |
+ } |
+ else { |
+ var $list = this.get$subtypes(); |
+ for (var $i = this.get$subtypes().iterator(); $i.hasNext$0(); ) { |
+ var t = $i.next$0(); |
+ if (!$notnull_bool(this.get$isClass()) && $notnull_bool(t.get$isClass())) { |
+ var m = t.getMember$1(memberName); |
+ if ($notnull_bool($ne(m, null)) && ret.members.indexOf(m) == -1) { |
+ ret.add((m && m.is$Member())); |
+ } |
+ } |
+ else { |
+ var m = t.get$members().$index(memberName); |
+ if ($notnull_bool($ne(m, null))) ret.add((m && m.is$Member())); |
+ } |
+ } |
+ return ret; |
+ } |
+} |
lang_Type.prototype.ensureSubtypeOf = function(other, span, typeErrors) { |
if (!$notnull_bool(this.isSubtypeOf(other))) { |
var msg = ('type ' + this.name + ' is not a subtype of ' + other.name); |
@@ -20543,6 +20598,17 @@ ConcreteType.prototype.get$interfaces = function() { |
} |
return this._interfaces; |
} |
+ConcreteType.prototype.get$subtypes = function() { |
+ if (this._subtypes == null) { |
+ this._subtypes = new HashSetImplementation(); |
+ var $list = this.genericType.get$subtypes(); |
+ for (var $i = this.genericType.get$subtypes().iterator(); $i.hasNext$0(); ) { |
+ var s = $i.next$0(); |
+ this._subtypes.add(s.resolveTypeParams$1(this)); |
+ } |
+ } |
+ return this._subtypes; |
+} |
ConcreteType.prototype.getCallMethod = function() { |
return this.genericType.getCallMethod(); |
} |
@@ -20606,19 +20672,6 @@ ConcreteType.prototype.getMember = function(memberName) { |
} |
return this._getMemberInParents(memberName); |
} |
-ConcreteType.prototype.resolveMember = function(memberName) { |
- var mem = this.getMember(memberName); |
- if ($notnull_bool(mem == null)) return null; |
- var ret = new MemberSet((mem && mem.is$Member()), false); |
- if ($notnull_bool(mem.get$isStatic())) return (ret && ret.is$MemberSet()); |
- var $list = this.genericType.get$subtypes(); |
- for (var $i = this.genericType.get$subtypes().iterator(); $i.hasNext$0(); ) { |
- var t = $i.next$0(); |
- var m = t.get$members().$index(memberName); |
- if ($notnull_bool($ne(m, null))) ret.add$1(m); |
- } |
- return (ret && ret.is$MemberSet()); |
-} |
ConcreteType.prototype.resolveType = function(node, isRequired) { |
var ret = this.genericType.resolveType(node, isRequired); |
return (ret && ret.is$lang_Type()); |
@@ -20644,9 +20697,6 @@ ConcreteType.prototype.getOrMakeConcreteType$1 = function($0) { |
ConcreteType.prototype.markUsed$0 = function() { |
return this.markUsed(); |
}; |
-ConcreteType.prototype.resolveMember$1 = function($0) { |
- return this.resolveMember($assert_String($0)); |
-}; |
ConcreteType.prototype.resolveTypeParams$1 = function($0) { |
return this.resolveTypeParams(($0 && $0.is$ConcreteType())); |
}; |
@@ -20660,7 +20710,6 @@ function DefinedType(name, library, definition, isClass) { |
this.constructors = $map([]); |
this.members = $map([]); |
this.factories = new FactoryMap(); |
- this._resolvedMembers = $map([]); |
// Initializers done |
lang_Type.call(this, name); |
this.setDefinition(definition); |
@@ -20692,7 +20741,7 @@ DefinedType.prototype.set$isUsed = function(value) { return this.isUsed = value; |
DefinedType.prototype.get$isNativeType = function() { return this.isNativeType; }; |
DefinedType.prototype.set$isNativeType = function(value) { return this.isNativeType = value; }; |
DefinedType.prototype.setDefinition = function(def) { |
- $assert(this.definition == null, "definition == null", "type.dart", 703, 12); |
+ $assert(this.definition == null, "definition == null", "type.dart", 733, 12); |
this.definition = def; |
if ((this.definition instanceof TypeDefinition) && this.definition.get$nativeType() != null) { |
this.isNativeType = true; |
@@ -20802,7 +20851,7 @@ DefinedType.prototype._resolveInterfaces = function(types) { |
return (interfaces && interfaces.is$List$Type()); |
} |
DefinedType.prototype.addDirectSubtype = function(type) { |
- $assert(this._subtypes == null, "_subtypes == null", "type.dart", 819, 12); |
+ $assert(this._subtypes == null, "_subtypes == null", "type.dart", 849, 12); |
this.directSubtypes.add(type); |
} |
DefinedType.prototype.get$subtypes = function() { |
@@ -21064,37 +21113,6 @@ DefinedType.prototype.getMember = function(memberName) { |
} |
return this._getMemberInParents(memberName); |
} |
-DefinedType.prototype.resolveMember = function(memberName) { |
- var $0; |
- var ret = (($0 = this._resolvedMembers.$index(memberName)) && $0.is$MemberSet()); |
- if (ret != null) return ret; |
- var member = this.getMember(memberName); |
- if (member == null) { |
- return null; |
- } |
- ret = new MemberSet(member, false); |
- this._resolvedMembers.$setindex(memberName, ret); |
- if ($notnull_bool(member.get$isStatic())) { |
- return ret; |
- } |
- else { |
- var $list = this.get$subtypes(); |
- for (var $i = this.get$subtypes().iterator(); $i.hasNext$0(); ) { |
- var t = $i.next$0(); |
- if (!$notnull_bool(this.isClass) && $notnull_bool(t.get$isClass())) { |
- var m = t.getMember$1(memberName); |
- if ($notnull_bool($ne(m, null)) && ret.members.indexOf(m) == -1) { |
- ret.add((m && m.is$Member())); |
- } |
- } |
- else { |
- var m = t.get$members().$index(memberName); |
- if ($notnull_bool($ne(m, null))) ret.add((m && m.is$Member())); |
- } |
- } |
- return ret; |
- } |
-} |
DefinedType._getDottedName = function(type) { |
if (type.names != null) { |
var names = map(type.names, (function (n) { |
@@ -21182,7 +21200,7 @@ DefinedType.prototype.resolveTypeParams = function(inType) { |
return this; |
} |
DefinedType.prototype.getOrMakeConcreteType = function(typeArgs) { |
- $assert(this.get$isGeneric(), "isGeneric", "type.dart", 1251, 12); |
+ $assert(this.get$isGeneric(), "isGeneric", "type.dart", 1246, 12); |
var names = [this.name]; |
var typeMap = $map([]); |
for (var i = 0; |
@@ -21200,7 +21218,7 @@ DefinedType.prototype.getOrMakeConcreteType = function(typeArgs) { |
return (ret && ret.is$lang_Type()); |
} |
DefinedType.prototype.getCallStub = function(args) { |
- $assert(this.get$isFunction(), "isFunction", "type.dart", 1271, 12); |
+ $assert(this.get$isFunction(), "isFunction", "type.dart", 1266, 12); |
var name = _getCallStubName('call', args); |
if (this.varStubs == null) this.varStubs = $map([]); |
var stub = this.varStubs.$index(name); |
@@ -21234,9 +21252,6 @@ DefinedType.prototype.markUsed$0 = function() { |
DefinedType.prototype.resolve$0 = function() { |
return this.resolve(); |
}; |
-DefinedType.prototype.resolveMember$1 = function($0) { |
- return this.resolveMember($assert_String($0)); |
-}; |
DefinedType.prototype.resolveTypeParams$1 = function($0) { |
return this.resolveTypeParams(($0 && $0.is$ConcreteType())); |
}; |