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

Unified Diff: frog/minfrog

Issue 9270048: Lots of frog cleanup (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
« frog/gen.dart ('K') | « frog/method_data.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 0264c9962365eda9bdadefda9a2e7b742a908b8e..579cb3f23d2edc27b7890f82fd59cc76e107de82 100755
--- a/frog/minfrog
+++ b/frog/minfrog
@@ -38,6 +38,10 @@ function $add(x, y) {
(typeof(x) == 'string'))
? x + y : x.$add(y);
}
+function $bit_xor(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x ^ y : x.$bit_xor(y);
+}
function $eq(x, y) {
if (x == null) return y == null;
return (typeof(x) == 'number' && typeof(y) == 'number') ||
@@ -49,6 +53,22 @@ function $eq(x, y) {
Object.defineProperty(Object.prototype, '$eq', { value: function(other) {
return this === other;
}, enumerable: false, writable: true, configurable: true });
+function $gt(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x > y : x.$gt(y);
+}
+function $gte(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x >= y : x.$gte(y);
+}
+function $lt(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x < y : x.$lt(y);
+}
+function $lte(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x <= y : x.$lte(y);
+}
function $mod(x, y) {
if (typeof(x) == 'number' && typeof(y) == 'number') {
var result = x % y;
@@ -66,6 +86,10 @@ function $mod(x, y) {
return x.$mod(y);
}
}
+function $mul(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x * y : x.$mul(y);
+}
function $ne(x, y) {
if (x == null) return y != null;
return (typeof(x) == 'number' && typeof(y) == 'number') ||
@@ -73,6 +97,14 @@ function $ne(x, y) {
(typeof(x) == 'string' && typeof(y) == 'string')
? x != y : !x.$eq(y);
}
+function $shl(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x << y : x.$shl(y);
+}
+function $sub(x, y) {
+ return (typeof(x) == 'number' && typeof(y) == 'number')
+ ? x - y : x.$sub(y);
+}
function $truncdiv(x, y) {
if (typeof(x) == 'number' && typeof(y) == 'number') {
if (y == 0) $throw(new IntegerDivisionByZeroException());
@@ -89,182 +121,29 @@ Object.defineProperty(Object.prototype, "get$dynamic", { value: function() {
Object.defineProperty(Object.prototype, "noSuchMethod", { value: function(name, args) {
$throw(new NoSuchMethodException(this, name, args));
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_asNonSentinelEntry$0", { value: function() {
- return this.noSuchMethod$2("_asNonSentinelEntry", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_checkExtends$0", { value: function() {
- return this.noSuchMethod$2("_checkExtends", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_checkNonStatic$1", { value: function($0) {
- return this.noSuchMethod$2("_checkNonStatic", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_evalConstConstructor$2", { value: function($0, $1) {
- return this.noSuchMethod$2("_evalConstConstructor", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_get$3", { value: function($0, $1, $2) {
- return this.noSuchMethod$2("_get", [$0, $1, $2]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_get$3$isDynamic", { value: function($0, $1, $2, isDynamic) {
- return this.noSuchMethod$2("_get", [$0, $1, $2, isDynamic]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_get$4", { value: function($0, $1, $2, $3) {
- return this.noSuchMethod$2("_get", [$0, $1, $2, $3]);
-}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "_pushBlock$1", { value: function($0) {
- return this.noSuchMethod$2("_pushBlock", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_set$4$isDynamic", { value: function($0, $1, $2, $3, isDynamic) {
- return this.noSuchMethod$2("_set", [$0, $1, $2, $3, isDynamic]);
+ return this.noSuchMethod("_pushBlock", [$0]);
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "_set$5", { value: function($0, $1, $2, $3, $4) {
- return this.noSuchMethod$2("_set", [$0, $1, $2, $3, $4]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "add$1", { value: function($0) {
- return this.noSuchMethod$2("add", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "addAll$1", { value: function($0) {
- return this.noSuchMethod$2("addAll", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "addDirectSubtype$1", { value: function($0) {
- return this.noSuchMethod$2("addDirectSubtype", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "addLast$1", { value: function($0) {
- return this.noSuchMethod$2("addLast", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "addMethod$2", { value: function($0, $1) {
- return this.noSuchMethod$2("addMethod", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "addSource$1", { value: function($0) {
- return this.noSuchMethod$2("addSource", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "binop$4", { value: function($0, $1, $2, $3) {
- return this.noSuchMethod$2("binop", [$0, $1, $2, $3]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "block$0", { value: function() {
- return this.noSuchMethod$2("block", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "canInvoke$2", { value: function($0, $1) {
- return this.noSuchMethod$2("canInvoke", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "checkFirstClass$1", { value: function($0) {
- return this.noSuchMethod$2("checkFirstClass", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "compareTo$1", { value: function($0) {
- return this.noSuchMethod$2("compareTo", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "compilationUnit$0", { value: function() {
- return this.noSuchMethod$2("compilationUnit", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "computeValue$0", { value: function() {
- return this.noSuchMethod$2("computeValue", []);
+Object.defineProperty(Object.prototype, "analyze$1", { value: function($0) {
+ return this.noSuchMethod("analyze", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "contains$1", { value: function($0) {
- return this.noSuchMethod$2("contains", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "containsKey$1", { value: function($0) {
- return this.noSuchMethod$2("containsKey", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "convertTo$2", { value: function($0, $1) {
- return this.noSuchMethod$2("convertTo", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "convertTo$3", { value: function($0, $1, $2) {
- return this.noSuchMethod$2("convertTo", [$0, $1, $2]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "copyWithNewType$2", { value: function($0, $1) {
- return this.noSuchMethod$2("copyWithNewType", [$0, $1]);
+ return this.noSuchMethod("contains", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "create$3$isFinal", { value: function($0, $1, $2, isFinal) {
- return this.noSuchMethod$2("create", [$0, $1, $2, isFinal]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "elapsedInMs$0", { value: function() {
- return this.noSuchMethod$2("elapsedInMs", []);
+ return this.noSuchMethod("create", [$0, $1, $2, isFinal]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "end$0", { value: function() {
- return this.noSuchMethod$2("end", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "endsWith$1", { value: function($0) {
- return this.noSuchMethod$2("endsWith", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "ensureSubtypeOf$3", { value: function($0, $1, $2) {
- return this.noSuchMethod$2("ensureSubtypeOf", [$0, $1, $2]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "evalBody$2", { value: function($0, $1) {
- return this.noSuchMethod$2("evalBody", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "filter$1", { value: function($0) {
- return this.noSuchMethod$2("filter", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "findTypeByName$1", { value: function($0) {
- return this.noSuchMethod$2("findTypeByName", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "forEach$1", { value: function($0) {
- return this.noSuchMethod$2("forEach", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "genValue$2", { value: function($0, $1) {
- return this.noSuchMethod$2("genValue", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "generate$1", { value: function($0) {
- return this.noSuchMethod$2("generate", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getColumn$2", { value: function($0, $1) {
- return this.noSuchMethod$2("getColumn", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getConstructor$1", { value: function($0) {
- return this.noSuchMethod$2("getConstructor", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getFactory$2", { value: function($0, $1) {
- return this.noSuchMethod$2("getFactory", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getGlobalValue$0", { value: function() {
- return this.noSuchMethod$2("getGlobalValue", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getKeys$0", { value: function() {
- return this.noSuchMethod$2("getKeys", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getLine$1", { value: function($0) {
- return this.noSuchMethod$2("getLine", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getMember$1", { value: function($0) {
- return this.noSuchMethod$2("getMember", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getOrMakeConcreteType$1", { value: function($0) {
- return this.noSuchMethod$2("getOrMakeConcreteType", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "getValues$0", { value: function() {
- return this.noSuchMethod$2("getValues", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "get_$3", { value: function($0, $1, $2) {
- return this.noSuchMethod$2("get_", [$0, $1, $2]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "hasNext$0", { value: function() {
- return this.noSuchMethod$2("hasNext", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "hashCode$0", { value: function() {
- return this.noSuchMethod$2("hashCode", []);
+ return this.noSuchMethod("end", []);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "indexOf$1", { value: function($0) {
- return this.noSuchMethod$2("indexOf", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "initFields$0", { value: function() {
- return this.noSuchMethod$2("initFields", []);
+ return this.noSuchMethod("indexOf", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "instanceOf$3$isTrue$forceCheck", { value: function($0, $1, $2, isTrue, forceCheck) {
- return this.noSuchMethod$2("instanceOf", [$0, $1, $2, isTrue, forceCheck]);
+ return this.noSuchMethod("instanceOf", [$0, $1, $2, isTrue, forceCheck]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "instanceOf$4", { value: function($0, $1, $2, $3) {
- return this.noSuchMethod$2("instanceOf", [$0, $1, $2, $3]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "invoke$4", { value: function($0, $1, $2, $3) {
- return this.noSuchMethod$2("invoke", [$0, $1, $2, $3]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "invoke$4$isDynamic", { value: function($0, $1, $2, $3, isDynamic) {
- return this.noSuchMethod$2("invoke", [$0, $1, $2, $3, isDynamic]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "invoke$5", { value: function($0, $1, $2, $3, $4) {
- return this.noSuchMethod$2("invoke", [$0, $1, $2, $3, $4]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "invokeNoSuchMethod$4", { value: function($0, $1, $2, $3) {
- return this.noSuchMethod$2("invokeNoSuchMethod", [$0, $1, $2, $3]);
+ return this.noSuchMethod("instanceOf", [$0, $1, $2, $3]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "is$List", { value: function() {
return false;
@@ -272,197 +151,38 @@ Object.defineProperty(Object.prototype, "is$List", { value: function() {
Object.defineProperty(Object.prototype, "is$RegExp", { value: function() {
return false;
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "isAssignable$1", { value: function($0) {
- return this.noSuchMethod$2("isAssignable", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "isEmpty$0", { value: function() {
- return this.noSuchMethod$2("isEmpty", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "isSubtypeOf$1", { value: function($0) {
- return this.noSuchMethod$2("isSubtypeOf", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "iterator$0", { value: function() {
- return this.noSuchMethod$2("iterator", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "last$0", { value: function() {
- return this.noSuchMethod$2("last", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "lookup$2", { value: function($0, $1) {
- return this.noSuchMethod$2("lookup", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "markUsed$0", { value: function() {
- return this.noSuchMethod$2("markUsed", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "namesInOrder$1", { value: function($0) {
- return this.noSuchMethod$2("namesInOrder", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "needsConversion$1", { value: function($0) {
- return this.noSuchMethod$2("needsConversion", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "next$0", { value: function() {
- return this.noSuchMethod$2("next", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "noSuchMethod$2", { value: function($0, $1) {
- return this.noSuchMethod($0, $1);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "postResolveChecks$0", { value: function() {
- return this.noSuchMethod$2("postResolveChecks", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "provideFieldSyntax$0", { value: function() {
- return this.noSuchMethod$2("provideFieldSyntax", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "providePropertySyntax$0", { value: function() {
- return this.noSuchMethod$2("providePropertySyntax", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "removeLast$0", { value: function() {
- return this.noSuchMethod$2("removeLast", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "replaceFirst$2", { value: function($0, $1) {
- return this.noSuchMethod$2("replaceFirst", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "replaceValue$1", { value: function($0) {
- return this.noSuchMethod$2("replaceValue", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "resolve$0", { value: function() {
- return this.noSuchMethod$2("resolve", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "resolveType$2", { value: function($0, $1) {
- return this.noSuchMethod$2("resolveType", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "resolveTypeParams$1", { value: function($0) {
- return this.noSuchMethod$2("resolveTypeParams", [$0]);
+Object.defineProperty(Object.prototype, "remove$1", { value: function($0) {
+ return this.noSuchMethod("remove", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "run$0", { value: function() {
- return this.noSuchMethod$2("run", []);
+ return this.noSuchMethod("run", []);
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "setDefinition$1", { value: function($0) {
- return this.noSuchMethod$2("setDefinition", [$0]);
+Object.defineProperty(Object.prototype, "setIndex$4$kind", { value: function($0, $1, $2, $3, kind) {
+ return this.noSuchMethod("setIndex", [$0, $1, $2, $3, kind]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "setIndex$4$kind$returnKind", { value: function($0, $1, $2, $3, kind, returnKind) {
- return this.noSuchMethod$2("setIndex", [$0, $1, $2, $3, kind, returnKind]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "set_$4$kind$returnKind", { value: function($0, $1, $2, $3, kind, returnKind) {
- return this.noSuchMethod$2("set_", [$0, $1, $2, $3, kind, returnKind]);
+ return this.noSuchMethod("setIndex", [$0, $1, $2, $3, kind, returnKind]);
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "sort$1", { value: function($0) {
- return this.noSuchMethod$2("sort", [$0]);
+Object.defineProperty(Object.prototype, "set_$4$kind", { value: function($0, $1, $2, $3, kind) {
+ return this.noSuchMethod("set_", [$0, $1, $2, $3, kind]);
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "start$0", { value: function() {
- return this.noSuchMethod$2("start", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "startsWith$1", { value: function($0) {
- return this.noSuchMethod$2("startsWith", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "stop$0", { value: function() {
- return this.noSuchMethod$2("stop", []);
+Object.defineProperty(Object.prototype, "set_$4$kind$returnKind", { value: function($0, $1, $2, $3, kind, returnKind) {
+ return this.noSuchMethod("set_", [$0, $1, $2, $3, kind, returnKind]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "substring$1", { value: function($0) {
- return this.noSuchMethod$2("substring", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "substring$2", { value: function($0, $1) {
- return this.noSuchMethod$2("substring", [$0, $1]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "toRadixString$1", { value: function($0) {
- return this.noSuchMethod$2("toRadixString", [$0]);
+ return this.noSuchMethod("substring", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "toString$0", { value: function() {
return this.toString();
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "unop$3", { value: function($0, $1, $2) {
- return this.noSuchMethod$2("unop", [$0, $1, $2]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visit$1", { value: function($0) {
- return this.noSuchMethod$2("visit", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitAssertStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitAssertStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "visitBinaryExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitBinaryExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitBlockStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitBlockStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitBreakStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitBreakStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitContinueStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitContinueStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitDeclaredIdentifier$1", { value: function($0) {
- return this.noSuchMethod$2("visitDeclaredIdentifier", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitDietStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitDietStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitDoStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitDoStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitEmptyStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitEmptyStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitExpressionStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitExpressionStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitForInStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitForInStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitForStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitForStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitFunctionDefinition$1", { value: function($0) {
- return this.noSuchMethod$2("visitFunctionDefinition", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitIfStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitIfStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitIndexExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitIndexExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitLabeledStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitLabeledStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitLambdaExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitLambdaExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitLiteralExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitLiteralExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitMapExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitMapExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitNewExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitNewExpression", [$0]);
+ return this.noSuchMethod("visitBinaryExpression", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "visitPostfixExpression$1", { value: function($0) {
- return this.noSuchMethod$2("visitPostfixExpression", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitReturnStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitReturnStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitSources$0", { value: function() {
- return this.noSuchMethod$2("visitSources", []);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitSwitchStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitSwitchStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitThrowStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitThrowStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitTryStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitTryStatement", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitVariableDefinition$1", { value: function($0) {
- return this.noSuchMethod$2("visitVariableDefinition", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "visitWhileStatement$1", { value: function($0) {
- return this.noSuchMethod$2("visitWhileStatement", [$0]);
+ return this.noSuchMethod("visitPostfixExpression", [$0]);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(Object.prototype, "write$1", { value: function($0) {
- return this.noSuchMethod$2("write", [$0]);
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(Object.prototype, "writeDefinition$2", { value: function($0, $1) {
- return this.noSuchMethod$2("writeDefinition", [$0, $1]);
+ return this.noSuchMethod("write", [$0]);
}, enumerable: false, writable: true, configurable: true });
// ********** Code for Clock **************
function Clock() {}
@@ -493,10 +213,10 @@ NoSuchMethodException.prototype.toString = function() {
if (i > (0)) {
sb.add(", ");
}
- sb.add(this._arguments[i]);
+ sb.add(this._arguments.$index(i));
}
sb.add("]");
- return ("NoSuchMethodException - receiver: '" + this._receiver + "' ") + ("function name: '" + this._functionName + "' arguments: [" + sb + "]");
+ return $add(("NoSuchMethodException - receiver: '" + this._receiver + "' "), ("function name: '" + this._functionName + "' arguments: [" + sb + "]"));
}
NoSuchMethodException.prototype.toString$0 = NoSuchMethodException.prototype.toString;
// ********** Code for ClosureArgumentMismatchException **************
@@ -682,9 +402,9 @@ ListFactory = Array;
Object.defineProperty(ListFactory.prototype, "is$List", { value: function(){return true}, enumerable: false, writable: true, configurable: true });
ListFactory.ListFactory$from$factory = function(other) {
var list = [];
- for (var $$i = other.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- list.add$1(e);
+ for (var $$i = other.iterator(); $$i.hasNext(); ) {
+ var e = $$i.next();
+ list.add(e);
}
return list;
}
@@ -697,8 +417,8 @@ Object.defineProperty(ListFactory.prototype, "addLast", { value: function(value)
this.push(value);
}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(ListFactory.prototype, "addAll", { value: function(collection) {
- for (var $$i = collection.iterator$0(); $$i.hasNext$0(); ) {
- var item = $$i.next$0();
+ for (var $$i = collection.iterator(); $$i.hasNext(); ) {
+ var item = $$i.next();
this.add(item);
}
}, enumerable: false, writable: true, configurable: true });
@@ -720,30 +440,7 @@ Object.defineProperty(ListFactory.prototype, "isEmpty", { value: function() {
Object.defineProperty(ListFactory.prototype, "iterator", { value: function() {
return new ListIterator(this);
}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "add$1", { value: ListFactory.prototype.add, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "addAll$1", { value: ListFactory.prototype.addAll, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "addLast$1", { value: ListFactory.prototype.addLast, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "filter$1", { value: function($0) {
- return this.filter(to$call$1($0));
-}, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "forEach$1", { value: function($0) {
- return this.forEach(to$call$1($0));
-}, enumerable: false, writable: true, configurable: true });
Object.defineProperty(ListFactory.prototype, "indexOf$1", { value: ListFactory.prototype.indexOf, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "isEmpty$0", { value: ListFactory.prototype.isEmpty, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "iterator$0", { value: ListFactory.prototype.iterator, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "last$0", { value: ListFactory.prototype.last, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "removeLast$0", { value: ListFactory.prototype.removeLast, enumerable: false, writable: true, configurable: true });
-Object.defineProperty(ListFactory.prototype, "sort$1", { value: function($0) {
- return this.sort(to$call$2($0));
-}, enumerable: false, writable: true, configurable: true });
-ListFactory_E = ListFactory;
-ListFactory_Expression = ListFactory;
-ListFactory_K = ListFactory;
-ListFactory_dart_core_String = ListFactory;
-ListFactory_V = ListFactory;
-ListFactory_VariableValue = ListFactory;
-ListFactory_int = ListFactory;
// ********** Code for ListIterator **************
function ListIterator(array) {
this._array = array;
@@ -754,12 +451,10 @@ ListIterator.prototype.hasNext = function() {
}
ListIterator.prototype.next = function() {
if (!this.hasNext()) {
- $throw(const$0005);
+ $throw(const$0001);
}
- return this._array[this._pos++];
+ return this._array.$index(this._pos++);
}
-ListIterator.prototype.hasNext$0 = ListIterator.prototype.hasNext;
-ListIterator.prototype.next$0 = ListIterator.prototype.next;
// ********** Code for ImmutableList **************
/** Implements extends for Dart classes on JavaScript prototypes. */
function $inherits(child, parent) {
@@ -772,7 +467,7 @@ function $inherits(child, parent) {
child.prototype.constructor = child;
}
}
-$inherits(ImmutableList, ListFactory_E);
+$inherits(ImmutableList, ListFactory);
function ImmutableList(length) {
Array.call(this, length);
}
@@ -783,39 +478,32 @@ ImmutableList.prototype.get$length = function() {
return this.length;
}
ImmutableList.prototype.set$length = function(length) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.$setindex = function(index, value) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.sort = function(compare) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.add = function(element) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.addLast = function(element) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.addAll = function(elements) {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.clear = function() {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.removeLast = function() {
- $throw(const$0007);
+ $throw(const$0006);
}
ImmutableList.prototype.toString = function() {
return ListFactory.ListFactory$from$factory(this).toString$0();
}
-ImmutableList.prototype.add$1 = ImmutableList.prototype.add;
-ImmutableList.prototype.addAll$1 = ImmutableList.prototype.addAll;
-ImmutableList.prototype.addLast$1 = ImmutableList.prototype.addLast;
-ImmutableList.prototype.removeLast$0 = ImmutableList.prototype.removeLast;
-ImmutableList.prototype.sort$1 = function($0) {
- return this.sort(to$call$2($0));
-};
ImmutableList.prototype.toString$0 = ImmutableList.prototype.toString;
// ********** Code for NumImplementation **************
NumImplementation = Number;
@@ -865,9 +553,6 @@ NumImplementation.prototype.compareTo = function(other) {
return (-1);
}
}
-NumImplementation.prototype.compareTo$1 = NumImplementation.prototype.compareTo;
-NumImplementation.prototype.hashCode$0 = NumImplementation.prototype.hashCode;
-NumImplementation.prototype.toRadixString$1 = NumImplementation.prototype.toRadixString;
// ********** Code for HashMapImplementation **************
function HashMapImplementation() {
this._numberOfEntries = (0);
@@ -877,7 +562,7 @@ function HashMapImplementation() {
this._values = new Array((8));
}
HashMapImplementation.HashMapImplementation$from$factory = function(other) {
- var result = new HashMapImplementation_K$V();
+ var result = new HashMapImplementation();
other.forEach((function (key, value) {
result.$setindex(key, value);
})
@@ -894,12 +579,12 @@ HashMapImplementation._nextProbe = function(currentProbe, numberOfProbes, length
return (currentProbe + numberOfProbes) & (length - (1));
}
HashMapImplementation.prototype._probeForAdding = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
+ var hash = HashMapImplementation._firstProbe(key.hashCode(), this._keys.get$length());
var numberOfProbes = (1);
var initialHash = hash;
var insertionIndex = (-1);
while (true) {
- var existingKey = this._keys[hash];
+ var existingKey = this._keys.$index(hash);
if (existingKey == null) {
if (insertionIndex < (0)) return hash;
return insertionIndex;
@@ -907,18 +592,18 @@ HashMapImplementation.prototype._probeForAdding = function(key) {
else if ($eq(existingKey, key)) {
return hash;
}
- else if ((insertionIndex < (0)) && (const$0001 == existingKey)) {
+ else if ((insertionIndex < (0)) && (const$0000 == existingKey)) {
insertionIndex = hash;
}
hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
}
}
HashMapImplementation.prototype._probeForLookup = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
+ var hash = HashMapImplementation._firstProbe(key.hashCode(), this._keys.get$length());
var numberOfProbes = (1);
var initialHash = hash;
while (true) {
- var existingKey = this._keys[hash];
+ var existingKey = this._keys.$index(hash);
if (existingKey == null) return (-1);
if ($eq(existingKey, key)) return hash;
hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
@@ -949,11 +634,11 @@ HashMapImplementation.prototype._grow = function(newCapacity) {
this._values = new Array(newCapacity);
for (var i = (0);
i < capacity; i++) {
- var key = oldKeys[i];
- if (key == null || key == const$0001) {
+ var key = oldKeys.$index(i);
+ if (key == null || key == const$0000) {
continue;
}
- var value = oldValues[i];
+ var value = oldValues.$index(i);
var newIndex = this._probeForAdding(key);
this._keys.$setindex(newIndex, key);
this._values.$setindex(newIndex, value);
@@ -963,7 +648,7 @@ HashMapImplementation.prototype._grow = function(newCapacity) {
HashMapImplementation.prototype.$setindex = function(key, value) {
this._ensureCapacity();
var index = this._probeForAdding(key);
- if ((this._keys[index] == null) || (this._keys[index] == const$0001)) {
+ if ((this._keys.$index(index) == null) || (this._keys.$index(index) == const$0000)) {
this._numberOfEntries++;
}
this._keys.$setindex(index, key);
@@ -972,15 +657,27 @@ HashMapImplementation.prototype.$setindex = function(key, value) {
HashMapImplementation.prototype.$index = function(key) {
var index = this._probeForLookup(key);
if (index < (0)) return null;
- return this._values[index];
+ return this._values.$index(index);
}
HashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
var index = this._probeForLookup(key);
- if (index >= (0)) return this._values[index];
- var value = ifAbsent.call$0();
+ if (index >= (0)) return this._values.$index(index);
+ var value = ifAbsent();
this.$setindex(key, value);
return value;
}
+HashMapImplementation.prototype.remove = function(key) {
+ var index = this._probeForLookup(key);
+ if (index >= (0)) {
+ this._numberOfEntries--;
+ var value = this._values.$index(index);
+ this._values.$setindex(index);
+ this._keys.$setindex(index, const$0000);
+ this._numberOfDeleted++;
+ return value;
+ }
+ return null;
+}
HashMapImplementation.prototype.isEmpty = function() {
return this._numberOfEntries == (0);
}
@@ -991,9 +688,9 @@ HashMapImplementation.prototype.forEach = function(f) {
var length = this._keys.get$length();
for (var i = (0);
i < length; i++) {
- var key = this._keys[i];
- if ((key != null) && (key != const$0001)) {
- f.call$2(key, this._values[i]);
+ var key = this._keys.$index(i);
+ if ((key != null) && (key != const$0000)) {
+ f(key, this._values.$index(i));
}
}
}
@@ -1018,429 +715,111 @@ HashMapImplementation.prototype.getValues = function() {
HashMapImplementation.prototype.containsKey = function(key) {
return (this._probeForLookup(key) != (-1));
}
-HashMapImplementation.prototype.containsKey$1 = HashMapImplementation.prototype.containsKey;
-HashMapImplementation.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$2($0));
-};
-HashMapImplementation.prototype.getKeys$0 = HashMapImplementation.prototype.getKeys;
-HashMapImplementation.prototype.getValues$0 = HashMapImplementation.prototype.getValues;
-HashMapImplementation.prototype.isEmpty$0 = HashMapImplementation.prototype.isEmpty;
-// ********** Code for HashMapImplementation_E$E **************
-$inherits(HashMapImplementation_E$E, HashMapImplementation);
-function HashMapImplementation_E$E() {
+HashMapImplementation.prototype.remove$1 = HashMapImplementation.prototype.remove;
+// ********** Code for HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair **************
+$inherits(HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair, HashMapImplementation);
+function HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair() {
this._numberOfEntries = (0);
this._numberOfDeleted = (0);
this._loadLimit = HashMapImplementation._computeLoadLimit((8));
this._keys = new Array((8));
this._values = new Array((8));
}
-HashMapImplementation_E$E._computeLoadLimit = function(capacity) {
- return $truncdiv((capacity * (3)), (4));
-}
-HashMapImplementation_E$E._firstProbe = function(hashCode, length) {
- return hashCode & (length - (1));
+HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair.prototype.remove$1 = HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair.prototype.remove;
+// ********** Code for HashMapImplementation_Library$Library **************
+$inherits(HashMapImplementation_Library$Library, HashMapImplementation);
+function HashMapImplementation_Library$Library() {
+ this._numberOfEntries = (0);
+ this._numberOfDeleted = (0);
+ this._loadLimit = HashMapImplementation._computeLoadLimit((8));
+ this._keys = new Array((8));
+ this._values = new Array((8));
}
-HashMapImplementation_E$E._nextProbe = function(currentProbe, numberOfProbes, length) {
- return (currentProbe + numberOfProbes) & (length - (1));
+// ********** Code for HashMapImplementation_Member$Member **************
+$inherits(HashMapImplementation_Member$Member, HashMapImplementation);
+function HashMapImplementation_Member$Member() {
+ this._numberOfEntries = (0);
+ this._numberOfDeleted = (0);
+ this._loadLimit = HashMapImplementation._computeLoadLimit((8));
+ this._keys = new Array((8));
+ this._values = new Array((8));
}
-HashMapImplementation_E$E.prototype._probeForAdding = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- var insertionIndex = (-1);
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) {
- if (insertionIndex < (0)) return hash;
- return insertionIndex;
- }
- else if ($eq(existingKey, key)) {
- return hash;
- }
- else if ((insertionIndex < (0)) && (const$0001 == existingKey)) {
- insertionIndex = hash;
- }
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
+// ********** Code for HashMapImplementation_dart_core_String$dart_core_String **************
+$inherits(HashMapImplementation_dart_core_String$dart_core_String, HashMapImplementation);
+function HashMapImplementation_dart_core_String$dart_core_String() {
+ this._numberOfEntries = (0);
+ this._numberOfDeleted = (0);
+ this._loadLimit = HashMapImplementation._computeLoadLimit((8));
+ this._keys = new Array((8));
+ this._values = new Array((8));
}
-HashMapImplementation_E$E.prototype._probeForLookup = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) return (-1);
- if ($eq(existingKey, key)) return hash;
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
+HashMapImplementation_dart_core_String$dart_core_String.prototype.remove$1 = HashMapImplementation_dart_core_String$dart_core_String.prototype.remove;
+// ********** Code for HashMapImplementation_dart_core_String$VariableValue **************
+$inherits(HashMapImplementation_dart_core_String$VariableValue, HashMapImplementation);
+function HashMapImplementation_dart_core_String$VariableValue() {
+ this._numberOfEntries = (0);
+ this._numberOfDeleted = (0);
+ this._loadLimit = HashMapImplementation._computeLoadLimit((8));
+ this._keys = new Array((8));
+ this._values = new Array((8));
}
-HashMapImplementation_E$E.prototype._ensureCapacity = function() {
- var newNumberOfEntries = this._numberOfEntries + (1);
- if (newNumberOfEntries >= this._loadLimit) {
- this._grow(this._keys.get$length() * (2));
- return;
- }
- var capacity = this._keys.get$length();
- var numberOfFreeOrDeleted = capacity - newNumberOfEntries;
- var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted;
- if (this._numberOfDeleted > numberOfFree) {
- this._grow(this._keys.get$length());
- }
+HashMapImplementation_dart_core_String$VariableValue.prototype.remove$1 = HashMapImplementation_dart_core_String$VariableValue.prototype.remove;
+// ********** Code for HashMapImplementation_Type$Type **************
+$inherits(HashMapImplementation_Type$Type, HashMapImplementation);
+function HashMapImplementation_Type$Type() {
+ this._numberOfEntries = (0);
+ this._numberOfDeleted = (0);
+ this._loadLimit = HashMapImplementation._computeLoadLimit((8));
+ this._keys = new Array((8));
+ this._values = new Array((8));
}
-HashMapImplementation_E$E._isPowerOfTwo = function(x) {
- return ((x & (x - (1))) == (0));
+// ********** Code for HashSetImplementation **************
+function HashSetImplementation() {
+ this._backingMap = new HashMapImplementation();
}
-HashMapImplementation_E$E.prototype._grow = function(newCapacity) {
- var capacity = this._keys.get$length();
- this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity);
- var oldKeys = this._keys;
- var oldValues = this._values;
- this._keys = new Array(newCapacity);
- this._values = new Array(newCapacity);
- for (var i = (0);
- i < capacity; i++) {
- var key = oldKeys[i];
- if (key == null || key == const$0001) {
- continue;
- }
- var value = oldValues[i];
- var newIndex = this._probeForAdding(key);
- this._keys.$setindex(newIndex, key);
- this._values.$setindex(newIndex, value);
+HashSetImplementation.HashSetImplementation$from$factory = function(other) {
+ var set = new HashSetImplementation();
+ for (var $$i = other.iterator(); $$i.hasNext(); ) {
+ var e = $$i.next();
+ set.add(e);
}
- this._numberOfDeleted = (0);
+ return set;
}
-HashMapImplementation_E$E.prototype.$setindex = function(key, value) {
- this._ensureCapacity();
- var index = this._probeForAdding(key);
- if ((this._keys[index] == null) || (this._keys[index] == const$0001)) {
- this._numberOfEntries++;
- }
- this._keys.$setindex(index, key);
- this._values.$setindex(index, value);
+HashSetImplementation.prototype.add = function(value) {
+ this._backingMap.$setindex(value, value);
}
-HashMapImplementation_E$E.prototype.isEmpty = function() {
- return this._numberOfEntries == (0);
+HashSetImplementation.prototype.contains = function(value) {
+ return this._backingMap.containsKey(value);
}
-HashMapImplementation_E$E.prototype.forEach = function(f) {
- var length = this._keys.get$length();
- for (var i = (0);
- i < length; i++) {
- var key = this._keys[i];
- if ((key != null) && (key != const$0001)) {
- f.call$2(key, this._values[i]);
- }
+HashSetImplementation.prototype.remove = function(value) {
+ if (!this._backingMap.containsKey(value)) return false;
+ this._backingMap.remove(value);
+ return true;
+}
+HashSetImplementation.prototype.addAll = function(collection) {
+ var $this = this; // closure support
+ collection.forEach(function _(value) {
+ $this.add(value);
}
+ );
}
-HashMapImplementation_E$E.prototype.getKeys = function() {
- var list = new Array(this.get$length());
- var i = (0);
- this.forEach(function _(key, value) {
- list.$setindex(i++, key);
+HashSetImplementation.prototype.forEach = function(f) {
+ this._backingMap.forEach(function _(key, value) {
+ f(key);
}
);
- return list;
}
-HashMapImplementation_E$E.prototype.containsKey = function(key) {
- return (this._probeForLookup(key) != (-1));
+HashSetImplementation.prototype.filter = function(f) {
+ var result = new HashSetImplementation();
+ this._backingMap.forEach(function _(key, value) {
+ if (f(key)) result.add(key);
+ }
+ );
+ return result;
}
-// ********** Code for HashMapImplementation_K$DoubleLinkedQueueEntry_KeyValuePair_K$V **************
-$inherits(HashMapImplementation_K$DoubleLinkedQueueEntry_KeyValuePair_K$V, HashMapImplementation);
-function HashMapImplementation_K$DoubleLinkedQueueEntry_KeyValuePair_K$V() {}
-// ********** Code for HashMapImplementation_K$V **************
-$inherits(HashMapImplementation_K$V, HashMapImplementation);
-function HashMapImplementation_K$V() {
- this._numberOfEntries = (0);
- this._numberOfDeleted = (0);
- this._loadLimit = HashMapImplementation._computeLoadLimit((8));
- this._keys = new Array((8));
- this._values = new Array((8));
-}
-HashMapImplementation_K$V._computeLoadLimit = function(capacity) {
- return $truncdiv((capacity * (3)), (4));
-}
-HashMapImplementation_K$V._firstProbe = function(hashCode, length) {
- return hashCode & (length - (1));
-}
-HashMapImplementation_K$V._nextProbe = function(currentProbe, numberOfProbes, length) {
- return (currentProbe + numberOfProbes) & (length - (1));
-}
-HashMapImplementation_K$V.prototype._probeForAdding = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- var insertionIndex = (-1);
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) {
- if (insertionIndex < (0)) return hash;
- return insertionIndex;
- }
- else if ($eq(existingKey, key)) {
- return hash;
- }
- else if ((insertionIndex < (0)) && (const$0001 == existingKey)) {
- insertionIndex = hash;
- }
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
-}
-HashMapImplementation_K$V.prototype._probeForLookup = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) return (-1);
- if ($eq(existingKey, key)) return hash;
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
-}
-HashMapImplementation_K$V.prototype._ensureCapacity = function() {
- var newNumberOfEntries = this._numberOfEntries + (1);
- if (newNumberOfEntries >= this._loadLimit) {
- this._grow(this._keys.get$length() * (2));
- return;
- }
- var capacity = this._keys.get$length();
- var numberOfFreeOrDeleted = capacity - newNumberOfEntries;
- var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted;
- if (this._numberOfDeleted > numberOfFree) {
- this._grow(this._keys.get$length());
- }
-}
-HashMapImplementation_K$V._isPowerOfTwo = function(x) {
- return ((x & (x - (1))) == (0));
-}
-HashMapImplementation_K$V.prototype._grow = function(newCapacity) {
- var capacity = this._keys.get$length();
- this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity);
- var oldKeys = this._keys;
- var oldValues = this._values;
- this._keys = new Array(newCapacity);
- this._values = new Array(newCapacity);
- for (var i = (0);
- i < capacity; i++) {
- var key = oldKeys[i];
- if (key == null || key == const$0001) {
- continue;
- }
- var value = oldValues[i];
- var newIndex = this._probeForAdding(key);
- this._keys.$setindex(newIndex, key);
- this._values.$setindex(newIndex, value);
- }
- this._numberOfDeleted = (0);
-}
-HashMapImplementation_K$V.prototype.$setindex = function(key, value) {
- this._ensureCapacity();
- var index = this._probeForAdding(key);
- if ((this._keys[index] == null) || (this._keys[index] == const$0001)) {
- this._numberOfEntries++;
- }
- this._keys.$setindex(index, key);
- this._values.$setindex(index, value);
-}
-HashMapImplementation_K$V.prototype.$index = function(key) {
- var index = this._probeForLookup(key);
- if (index < (0)) return null;
- return this._values[index];
-}
-HashMapImplementation_K$V.prototype.putIfAbsent = function(key, ifAbsent) {
- var index = this._probeForLookup(key);
- if (index >= (0)) return this._values[index];
- var value = ifAbsent.call$0();
- this.$setindex(key, value);
- return value;
-}
-HashMapImplementation_K$V.prototype.isEmpty = function() {
- return this._numberOfEntries == (0);
-}
-HashMapImplementation_K$V.prototype.forEach = function(f) {
- var length = this._keys.get$length();
- for (var i = (0);
- i < length; i++) {
- var key = this._keys[i];
- if ((key != null) && (key != const$0001)) {
- f.call$2(key, this._values[i]);
- }
- }
-}
-HashMapImplementation_K$V.prototype.getKeys = function() {
- var list = new Array(this.get$length());
- var i = (0);
- this.forEach(function _(key, value) {
- list.$setindex(i++, key);
- }
- );
- return list;
-}
-HashMapImplementation_K$V.prototype.getValues = function() {
- var list = new Array(this.get$length());
- var i = (0);
- this.forEach(function _(key, value) {
- list.$setindex(i++, value);
- }
- );
- return list;
-}
-HashMapImplementation_K$V.prototype.containsKey = function(key) {
- return (this._probeForLookup(key) != (-1));
-}
-// ********** Code for HashMapImplementation_dart_core_String$VariableValue **************
-$inherits(HashMapImplementation_dart_core_String$VariableValue, HashMapImplementation);
-function HashMapImplementation_dart_core_String$VariableValue() {
- this._numberOfEntries = (0);
- this._numberOfDeleted = (0);
- this._loadLimit = HashMapImplementation._computeLoadLimit((8));
- this._keys = new Array((8));
- this._values = new Array((8));
-}
-HashMapImplementation_dart_core_String$VariableValue._computeLoadLimit = function(capacity) {
- return $truncdiv((capacity * (3)), (4));
-}
-HashMapImplementation_dart_core_String$VariableValue._firstProbe = function(hashCode, length) {
- return hashCode & (length - (1));
-}
-HashMapImplementation_dart_core_String$VariableValue._nextProbe = function(currentProbe, numberOfProbes, length) {
- return (currentProbe + numberOfProbes) & (length - (1));
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype._probeForAdding = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- var insertionIndex = (-1);
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) {
- if (insertionIndex < (0)) return hash;
- return insertionIndex;
- }
- else if ($eq(existingKey, key)) {
- return hash;
- }
- else if ((insertionIndex < (0)) && (const$0001 == existingKey)) {
- insertionIndex = hash;
- }
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype._probeForLookup = function(key) {
- var hash = HashMapImplementation._firstProbe(key.hashCode(), this._keys.get$length());
- var numberOfProbes = (1);
- var initialHash = hash;
- while (true) {
- var existingKey = this._keys[hash];
- if (existingKey == null) return (-1);
- if ($eq(existingKey, key)) return hash;
- hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.get$length());
- }
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype._ensureCapacity = function() {
- var newNumberOfEntries = this._numberOfEntries + (1);
- if (newNumberOfEntries >= this._loadLimit) {
- this._grow(this._keys.get$length() * (2));
- return;
- }
- var capacity = this._keys.get$length();
- var numberOfFreeOrDeleted = capacity - newNumberOfEntries;
- var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted;
- if (this._numberOfDeleted > numberOfFree) {
- this._grow(this._keys.get$length());
- }
-}
-HashMapImplementation_dart_core_String$VariableValue._isPowerOfTwo = function(x) {
- return ((x & (x - (1))) == (0));
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype._grow = function(newCapacity) {
- var capacity = this._keys.get$length();
- this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity);
- var oldKeys = this._keys;
- var oldValues = this._values;
- this._keys = new Array(newCapacity);
- this._values = new Array(newCapacity);
- for (var i = (0);
- i < capacity; i++) {
- var key = oldKeys[i];
- if (key == null || key == const$0001) {
- continue;
- }
- var value = oldValues[i];
- var newIndex = this._probeForAdding(key);
- this._keys.$setindex(newIndex, key);
- this._values.$setindex(newIndex, value);
- }
- this._numberOfDeleted = (0);
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype.$setindex = function(key, value) {
- this._ensureCapacity();
- var index = this._probeForAdding(key);
- if ((this._keys[index] == null) || (this._keys[index] == const$0001)) {
- this._numberOfEntries++;
- }
- this._keys.$setindex(index, key);
- this._values.$setindex(index, value);
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype.$index = function(key) {
- var index = this._probeForLookup(key);
- if (index < (0)) return null;
- return this._values[index];
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype.forEach = function(f) {
- var length = this._keys.get$length();
- for (var i = (0);
- i < length; i++) {
- var key = this._keys[i];
- if ((key != null) && (key != const$0001)) {
- f.call$2(key, this._values[i]);
- }
- }
-}
-HashMapImplementation_dart_core_String$VariableValue.prototype.containsKey = function(key) {
- return (this._probeForLookup(key) != (-1));
-}
-// ********** Code for HashSetImplementation **************
-function HashSetImplementation() {
- this._backingMap = new HashMapImplementation_E$E();
-}
-HashSetImplementation.HashSetImplementation$from$factory = function(other) {
- var set = new HashSetImplementation_E();
- for (var $$i = other.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- set.add(e);
- }
- return set;
-}
-HashSetImplementation.prototype.add = function(value) {
- this._backingMap.$setindex(value, value);
-}
-HashSetImplementation.prototype.contains = function(value) {
- return this._backingMap.containsKey(value);
-}
-HashSetImplementation.prototype.addAll = function(collection) {
- var $this = this; // closure support
- collection.forEach(function _(value) {
- $this.add(value);
- }
- );
-}
-HashSetImplementation.prototype.forEach = function(f) {
- this._backingMap.forEach(function _(key, value) {
- f.call$1(key);
- }
- );
-}
-HashSetImplementation.prototype.filter = function(f) {
- var result = new HashSetImplementation();
- this._backingMap.forEach(function _(key, value) {
- if (f.call$1(key)) result.add(key);
- }
- );
- return result;
-}
-HashSetImplementation.prototype.every = function(f) {
- var keys = this._backingMap.getKeys();
- return keys.every(f);
+HashSetImplementation.prototype.every = function(f) {
+ var keys = this._backingMap.getKeys();
+ return keys.every(f);
}
HashSetImplementation.prototype.some = function(f) {
var keys = this._backingMap.getKeys();
@@ -1453,36 +832,33 @@ HashSetImplementation.prototype.get$length = function() {
return this._backingMap.get$length();
}
HashSetImplementation.prototype.iterator = function() {
- return new HashSetIterator_E(this);
+ return new HashSetIterator(this);
}
-HashSetImplementation.prototype.add$1 = HashSetImplementation.prototype.add;
-HashSetImplementation.prototype.addAll$1 = HashSetImplementation.prototype.addAll;
HashSetImplementation.prototype.contains$1 = HashSetImplementation.prototype.contains;
-HashSetImplementation.prototype.filter$1 = function($0) {
- return this.filter(to$call$1($0));
-};
-HashSetImplementation.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$1($0));
-};
-HashSetImplementation.prototype.isEmpty$0 = HashSetImplementation.prototype.isEmpty;
-HashSetImplementation.prototype.iterator$0 = HashSetImplementation.prototype.iterator;
-// ********** Code for HashSetImplementation_E **************
-$inherits(HashSetImplementation_E, HashSetImplementation);
-function HashSetImplementation_E() {
- this._backingMap = new HashMapImplementation_E$E();
-}
+HashSetImplementation.prototype.remove$1 = HashSetImplementation.prototype.remove;
// ********** Code for HashSetImplementation_Library **************
$inherits(HashSetImplementation_Library, HashSetImplementation);
-function HashSetImplementation_Library() {}
+function HashSetImplementation_Library() {
+ this._backingMap = new HashMapImplementation_Library$Library();
+}
+HashSetImplementation_Library.prototype.contains$1 = HashSetImplementation_Library.prototype.contains;
// ********** Code for HashSetImplementation_Member **************
$inherits(HashSetImplementation_Member, HashSetImplementation);
-function HashSetImplementation_Member() {}
+function HashSetImplementation_Member() {
+ this._backingMap = new HashMapImplementation_Member$Member();
+}
// ********** Code for HashSetImplementation_dart_core_String **************
$inherits(HashSetImplementation_dart_core_String, HashSetImplementation);
-function HashSetImplementation_dart_core_String() {}
+function HashSetImplementation_dart_core_String() {
+ this._backingMap = new HashMapImplementation_dart_core_String$dart_core_String();
+}
+HashSetImplementation_dart_core_String.prototype.contains$1 = HashSetImplementation_dart_core_String.prototype.contains;
// ********** Code for HashSetImplementation_Type **************
$inherits(HashSetImplementation_Type, HashSetImplementation);
-function HashSetImplementation_Type() {}
+function HashSetImplementation_Type() {
+ this._backingMap = new HashMapImplementation_Type$Type();
+}
+HashSetImplementation_Type.prototype.contains$1 = HashSetImplementation_Type.prototype.contains;
// ********** Code for HashSetIterator **************
function HashSetIterator(set_) {
this._entries = set_._backingMap._keys;
@@ -1491,45 +867,26 @@ function HashSetIterator(set_) {
}
HashSetIterator.prototype.hasNext = function() {
if (this._nextValidIndex >= this._entries.get$length()) return false;
- if (this._entries[this._nextValidIndex] == const$0001) {
+ if (this._entries.$index(this._nextValidIndex) == const$0000) {
this._advance();
}
return this._nextValidIndex < this._entries.get$length();
}
HashSetIterator.prototype.next = function() {
if (!this.hasNext()) {
- $throw(const$0005);
+ $throw(const$0001);
}
- var res = this._entries[this._nextValidIndex];
+ var res = this._entries.$index(this._nextValidIndex);
this._advance();
return res;
}
HashSetIterator.prototype._advance = function() {
var length = this._entries.get$length();
var entry;
- var deletedKey = const$0001;
- do {
- if (++this._nextValidIndex >= length) break;
- entry = this._entries[this._nextValidIndex];
- }
- while ((entry == null) || (entry == deletedKey))
-}
-HashSetIterator.prototype.hasNext$0 = HashSetIterator.prototype.hasNext;
-HashSetIterator.prototype.next$0 = HashSetIterator.prototype.next;
-// ********** Code for HashSetIterator_E **************
-$inherits(HashSetIterator_E, HashSetIterator);
-function HashSetIterator_E(set_) {
- this._nextValidIndex = (-1);
- this._entries = set_._backingMap._keys;
- this._advance();
-}
-HashSetIterator_E.prototype._advance = function() {
- var length = this._entries.get$length();
- var entry;
- var deletedKey = const$0001;
+ var deletedKey = const$0000;
do {
if (++this._nextValidIndex >= length) break;
- entry = this._entries[this._nextValidIndex];
+ entry = this._entries.$index(this._nextValidIndex);
}
while ((entry == null) || (entry == deletedKey))
}
@@ -1544,23 +901,17 @@ function KeyValuePair(key, value) {
}
KeyValuePair.prototype.get$value = function() { return this.value; };
KeyValuePair.prototype.set$value = function(value) { return this.value = value; };
-// ********** Code for KeyValuePair_K$V **************
-$inherits(KeyValuePair_K$V, KeyValuePair);
-function KeyValuePair_K$V(key, value) {
- this.key = key;
- this.value = value;
-}
// ********** Code for LinkedHashMapImplementation **************
function LinkedHashMapImplementation() {
- this._map = new HashMapImplementation();
- this._list = new DoubleLinkedQueue_KeyValuePair_K$V();
+ this._map = new HashMapImplementation_Dynamic$DoubleLinkedQueueEntry_KeyValuePair();
+ this._list = new DoubleLinkedQueue_KeyValuePair();
}
LinkedHashMapImplementation.prototype.$setindex = function(key, value) {
if (this._map.containsKey(key)) {
this._map.$index(key).get$element().set$value(value);
}
else {
- this._list.addLast(new KeyValuePair_K$V(key, value));
+ this._list.addLast(new KeyValuePair(key, value));
this._map.$setindex(key, this._list.lastEntry());
}
}
@@ -1569,10 +920,16 @@ LinkedHashMapImplementation.prototype.$index = function(key) {
if (entry == null) return null;
return entry.get$element().get$value();
}
+LinkedHashMapImplementation.prototype.remove = function(key) {
+ var entry = this._map.remove(key);
+ if (entry == null) return null;
+ entry.remove();
+ return entry.get$element().get$value();
+}
LinkedHashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
var value = this.$index(key);
if ((this.$index(key) == null) && !(this.containsKey(key))) {
- value = ifAbsent.call$0();
+ value = ifAbsent();
this.$setindex(key, value);
}
return value;
@@ -1597,7 +954,7 @@ LinkedHashMapImplementation.prototype.getValues = function() {
}
LinkedHashMapImplementation.prototype.forEach = function(f) {
this._list.forEach(function _(entry) {
- f.call$2(entry.key, entry.value);
+ f(entry.key, entry.value);
}
);
}
@@ -1610,13 +967,7 @@ LinkedHashMapImplementation.prototype.get$length = function() {
LinkedHashMapImplementation.prototype.isEmpty = function() {
return this.get$length() == (0);
}
-LinkedHashMapImplementation.prototype.containsKey$1 = LinkedHashMapImplementation.prototype.containsKey;
-LinkedHashMapImplementation.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$2($0));
-};
-LinkedHashMapImplementation.prototype.getKeys$0 = LinkedHashMapImplementation.prototype.getKeys;
-LinkedHashMapImplementation.prototype.getValues$0 = LinkedHashMapImplementation.prototype.getValues;
-LinkedHashMapImplementation.prototype.isEmpty$0 = LinkedHashMapImplementation.prototype.isEmpty;
+LinkedHashMapImplementation.prototype.remove$1 = LinkedHashMapImplementation.prototype.remove;
// ********** Code for DoubleLinkedQueueEntry **************
function DoubleLinkedQueueEntry(e) {
this._element = e;
@@ -1628,7 +979,7 @@ DoubleLinkedQueueEntry.prototype._link = function(p, n) {
n._previous = this;
}
DoubleLinkedQueueEntry.prototype.prepend = function(e) {
- new DoubleLinkedQueueEntry_E(e)._link(this._previous, this);
+ new DoubleLinkedQueueEntry(e)._link(this._previous, this);
}
DoubleLinkedQueueEntry.prototype.remove = function() {
this._previous._next = this._next;
@@ -1646,90 +997,40 @@ DoubleLinkedQueueEntry.prototype.previousEntry = function() {
DoubleLinkedQueueEntry.prototype.get$element = function() {
return this._element;
}
-DoubleLinkedQueueEntry.prototype._asNonSentinelEntry$0 = DoubleLinkedQueueEntry.prototype._asNonSentinelEntry;
-// ********** Code for DoubleLinkedQueueEntry_E **************
-$inherits(DoubleLinkedQueueEntry_E, DoubleLinkedQueueEntry);
-function DoubleLinkedQueueEntry_E(e) {
+// ********** Code for DoubleLinkedQueueEntry_KeyValuePair **************
+$inherits(DoubleLinkedQueueEntry_KeyValuePair, DoubleLinkedQueueEntry);
+function DoubleLinkedQueueEntry_KeyValuePair(e) {
this._element = e;
}
-DoubleLinkedQueueEntry_E.prototype._link = function(p, n) {
- this._next = n;
- this._previous = p;
- p._next = this;
- n._previous = this;
-}
-DoubleLinkedQueueEntry_E.prototype.prepend = function(e) {
- new DoubleLinkedQueueEntry_E(e)._link(this._previous, this);
-}
-DoubleLinkedQueueEntry_E.prototype.remove = function() {
- this._previous._next = this._next;
- this._next._previous = this._previous;
- this._next = null;
- this._previous = null;
- return this._element;
-}
-DoubleLinkedQueueEntry_E.prototype._asNonSentinelEntry = function() {
- return this;
-}
-DoubleLinkedQueueEntry_E.prototype.previousEntry = function() {
- return this._previous._asNonSentinelEntry();
-}
-// ********** Code for DoubleLinkedQueueEntry_KeyValuePair_K$V **************
-$inherits(DoubleLinkedQueueEntry_KeyValuePair_K$V, DoubleLinkedQueueEntry);
-function DoubleLinkedQueueEntry_KeyValuePair_K$V(e) {
- this._element = e;
-}
-DoubleLinkedQueueEntry_KeyValuePair_K$V.prototype._link = function(p, n) {
- this._next = n;
- this._previous = p;
- p._next = this;
- n._previous = this;
-}
-DoubleLinkedQueueEntry_KeyValuePair_K$V.prototype.prepend = function(e) {
- new DoubleLinkedQueueEntry_KeyValuePair_K$V(e)._link(this._previous, this);
-}
-DoubleLinkedQueueEntry_KeyValuePair_K$V.prototype._asNonSentinelEntry = function() {
- return this;
-}
-DoubleLinkedQueueEntry_KeyValuePair_K$V.prototype.previousEntry = function() {
- return this._previous._asNonSentinelEntry$0();
-}
// ********** Code for _DoubleLinkedQueueEntrySentinel **************
-$inherits(_DoubleLinkedQueueEntrySentinel, DoubleLinkedQueueEntry_E);
+$inherits(_DoubleLinkedQueueEntrySentinel, DoubleLinkedQueueEntry);
function _DoubleLinkedQueueEntrySentinel() {
- DoubleLinkedQueueEntry_E.call(this, null);
+ DoubleLinkedQueueEntry.call(this, null);
this._link(this, this);
}
_DoubleLinkedQueueEntrySentinel.prototype.remove = function() {
- $throw(const$0000);
+ $throw(const$0002);
}
_DoubleLinkedQueueEntrySentinel.prototype._asNonSentinelEntry = function() {
return null;
}
_DoubleLinkedQueueEntrySentinel.prototype.get$element = function() {
- $throw(const$0000);
-}
-_DoubleLinkedQueueEntrySentinel.prototype._asNonSentinelEntry$0 = _DoubleLinkedQueueEntrySentinel.prototype._asNonSentinelEntry;
-// ********** Code for _DoubleLinkedQueueEntrySentinel_E **************
-$inherits(_DoubleLinkedQueueEntrySentinel_E, _DoubleLinkedQueueEntrySentinel);
-function _DoubleLinkedQueueEntrySentinel_E() {
- DoubleLinkedQueueEntry_E.call(this, null);
- this._link(this, this);
+ $throw(const$0002);
}
-// ********** Code for _DoubleLinkedQueueEntrySentinel_KeyValuePair_K$V **************
-$inherits(_DoubleLinkedQueueEntrySentinel_KeyValuePair_K$V, _DoubleLinkedQueueEntrySentinel);
-function _DoubleLinkedQueueEntrySentinel_KeyValuePair_K$V() {
- DoubleLinkedQueueEntry_KeyValuePair_K$V.call(this, null);
+// ********** Code for _DoubleLinkedQueueEntrySentinel_KeyValuePair **************
+$inherits(_DoubleLinkedQueueEntrySentinel_KeyValuePair, _DoubleLinkedQueueEntrySentinel);
+function _DoubleLinkedQueueEntrySentinel_KeyValuePair() {
+ DoubleLinkedQueueEntry_KeyValuePair.call(this, null);
this._link(this, this);
}
// ********** Code for DoubleLinkedQueue **************
function DoubleLinkedQueue() {
- this._sentinel = new _DoubleLinkedQueueEntrySentinel_E();
+ this._sentinel = new _DoubleLinkedQueueEntrySentinel();
}
DoubleLinkedQueue.DoubleLinkedQueue$from$factory = function(other) {
var list = new DoubleLinkedQueue();
- for (var $$i = other.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
+ for (var $$i = other.iterator(); $$i.hasNext(); ) {
+ var e = $$i.next();
list.addLast(e);
}
return list;
@@ -1741,8 +1042,8 @@ DoubleLinkedQueue.prototype.add = function(value) {
this.addLast(value);
}
DoubleLinkedQueue.prototype.addAll = function(collection) {
- for (var $$i = collection.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
+ for (var $$i = collection.iterator(); $$i.hasNext(); ) {
+ var e = $$i.next();
this.add(e);
}
}
@@ -1773,7 +1074,7 @@ DoubleLinkedQueue.prototype.forEach = function(f) {
var entry = this._sentinel._next;
while (entry != this._sentinel) {
var nextEntry = entry._next;
- f.call$1(entry._element);
+ f(entry._element);
entry = nextEntry;
}
}
@@ -1781,7 +1082,7 @@ DoubleLinkedQueue.prototype.every = function(f) {
var entry = this._sentinel._next;
while (entry != this._sentinel) {
var nextEntry = entry._next;
- if (!f.call$1(entry._element)) return false;
+ if (!f(entry._element)) return false;
entry = nextEntry;
}
return true;
@@ -1790,7 +1091,7 @@ DoubleLinkedQueue.prototype.some = function(f) {
var entry = this._sentinel._next;
while (entry != this._sentinel) {
var nextEntry = entry._next;
- if (f.call$1(entry._element)) return true;
+ if (f(entry._element)) return true;
entry = nextEntry;
}
return false;
@@ -1800,48 +1101,18 @@ DoubleLinkedQueue.prototype.filter = function(f) {
var entry = this._sentinel._next;
while (entry != this._sentinel) {
var nextEntry = entry._next;
- if (f.call$1(entry._element)) other.addLast(entry._element);
+ if (f(entry._element)) other.addLast(entry._element);
entry = nextEntry;
}
return other;
}
DoubleLinkedQueue.prototype.iterator = function() {
- return new _DoubleLinkedQueueIterator_E(this._sentinel);
+ return new _DoubleLinkedQueueIterator(this._sentinel);
}
-DoubleLinkedQueue.prototype.add$1 = DoubleLinkedQueue.prototype.add;
-DoubleLinkedQueue.prototype.addAll$1 = DoubleLinkedQueue.prototype.addAll;
-DoubleLinkedQueue.prototype.addLast$1 = DoubleLinkedQueue.prototype.addLast;
-DoubleLinkedQueue.prototype.filter$1 = function($0) {
- return this.filter(to$call$1($0));
-};
-DoubleLinkedQueue.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$1($0));
-};
-DoubleLinkedQueue.prototype.isEmpty$0 = DoubleLinkedQueue.prototype.isEmpty;
-DoubleLinkedQueue.prototype.iterator$0 = DoubleLinkedQueue.prototype.iterator;
-DoubleLinkedQueue.prototype.last$0 = DoubleLinkedQueue.prototype.last;
-DoubleLinkedQueue.prototype.removeLast$0 = DoubleLinkedQueue.prototype.removeLast;
-// ********** Code for DoubleLinkedQueue_E **************
-$inherits(DoubleLinkedQueue_E, DoubleLinkedQueue);
-function DoubleLinkedQueue_E() {}
-// ********** Code for DoubleLinkedQueue_KeyValuePair_K$V **************
-$inherits(DoubleLinkedQueue_KeyValuePair_K$V, DoubleLinkedQueue);
-function DoubleLinkedQueue_KeyValuePair_K$V() {
- this._sentinel = new _DoubleLinkedQueueEntrySentinel_KeyValuePair_K$V();
-}
-DoubleLinkedQueue_KeyValuePair_K$V.prototype.addLast = function(value) {
- this._sentinel.prepend(value);
-}
-DoubleLinkedQueue_KeyValuePair_K$V.prototype.lastEntry = function() {
- return this._sentinel.previousEntry();
-}
-DoubleLinkedQueue_KeyValuePair_K$V.prototype.forEach = function(f) {
- var entry = this._sentinel._next;
- while (entry != this._sentinel) {
- var nextEntry = entry._next;
- f.call$1(entry._element);
- entry = nextEntry;
- }
+// ********** Code for DoubleLinkedQueue_KeyValuePair **************
+$inherits(DoubleLinkedQueue_KeyValuePair, DoubleLinkedQueue);
+function DoubleLinkedQueue_KeyValuePair() {
+ this._sentinel = new _DoubleLinkedQueueEntrySentinel_KeyValuePair();
}
// ********** Code for _DoubleLinkedQueueIterator **************
function _DoubleLinkedQueueIterator(_sentinel) {
@@ -1853,19 +1124,11 @@ _DoubleLinkedQueueIterator.prototype.hasNext = function() {
}
_DoubleLinkedQueueIterator.prototype.next = function() {
if (!this.hasNext()) {
- $throw(const$0005);
+ $throw(const$0001);
}
this._currentEntry = this._currentEntry._next;
return this._currentEntry.get$element();
}
-_DoubleLinkedQueueIterator.prototype.hasNext$0 = _DoubleLinkedQueueIterator.prototype.hasNext;
-_DoubleLinkedQueueIterator.prototype.next$0 = _DoubleLinkedQueueIterator.prototype.next;
-// ********** Code for _DoubleLinkedQueueIterator_E **************
-$inherits(_DoubleLinkedQueueIterator_E, _DoubleLinkedQueueIterator);
-function _DoubleLinkedQueueIterator_E(_sentinel) {
- this._sentinel = _sentinel;
- this._currentEntry = this._sentinel;
-}
// ********** Code for StopwatchImplementation **************
function StopwatchImplementation() {
this._start = null;
@@ -1903,9 +1166,6 @@ StopwatchImplementation.prototype.elapsedInMs = function() {
StopwatchImplementation.prototype.frequency = function() {
return Clock.frequency();
}
-StopwatchImplementation.prototype.elapsedInMs$0 = StopwatchImplementation.prototype.elapsedInMs;
-StopwatchImplementation.prototype.start$0 = StopwatchImplementation.prototype.start;
-StopwatchImplementation.prototype.stop$0 = StopwatchImplementation.prototype.stop;
// ********** Code for StringBufferImpl **************
function StringBufferImpl(content) {
this.clear();
@@ -1925,8 +1185,8 @@ StringBufferImpl.prototype.add = function(obj) {
return this;
}
StringBufferImpl.prototype.addAll = function(objects) {
- for (var $$i = objects.iterator$0(); $$i.hasNext$0(); ) {
- var obj = $$i.next$0();
+ for (var $$i = objects.iterator(); $$i.hasNext(); ) {
+ var obj = $$i.next();
this.add(obj);
}
return this;
@@ -1944,9 +1204,6 @@ StringBufferImpl.prototype.toString = function() {
this._buffer.add(result);
return result;
}
-StringBufferImpl.prototype.add$1 = StringBufferImpl.prototype.add;
-StringBufferImpl.prototype.addAll$1 = StringBufferImpl.prototype.addAll;
-StringBufferImpl.prototype.isEmpty$0 = StringBufferImpl.prototype.isEmpty;
StringBufferImpl.prototype.toString$0 = StringBufferImpl.prototype.toString;
// ********** Code for StringBase **************
function StringBase() {}
@@ -1961,7 +1218,7 @@ StringBase.join = function(strings, separator) {
var s = strings[(0)];
for (var i = (1);
i < strings.get$length(); i++) {
- s = s + separator + strings[i];
+ s = $add($add(s, separator), strings[i]);
}
return s;
}
@@ -1987,21 +1244,9 @@ StringImplementation.prototype.isEmpty = function() {
StringImplementation.prototype.contains = function(pattern, startIndex) {
'use strict'; return this.indexOf(pattern, startIndex) >= 0;
}
-StringImplementation.prototype._replaceFirst = function(from, to) {
- 'use strict';return this.replace(from, to);
-}
StringImplementation.prototype._replaceRegExp = function(from, to) {
'use strict';return this.replace(from.re, to);
}
-StringImplementation.prototype.replaceFirst = function(from, to) {
- if ((typeof(from) == 'string')) return this._replaceFirst(from, to);
- if (!!(from && from.is$RegExp())) return this._replaceRegExp(from, to);
- var $$list = from.allMatches(this);
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var match = $$i.next$0();
- return this.substring((0), match.start$0()) + to + this.substring(match.end$0());
- }
-}
StringImplementation.prototype._replaceAll = function(from, to) {
'use strict';
from = new RegExp(from.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'g');
@@ -2014,13 +1259,13 @@ StringImplementation.prototype.replaceAll = function(from, to) {
var buffer = new StringBufferImpl("");
var lastMatchEnd = (0);
var $$list = from.allMatches(this);
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var match = $$i.next$0();
- buffer.add$1(this.substring(lastMatchEnd, match.start$0()));
- buffer.add$1(to);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var match = $$i.next();
+ buffer.add(this.substring(lastMatchEnd, match.start()));
+ buffer.add(to);
lastMatchEnd = match.end$0();
}
- buffer.add$1(this.substring(lastMatchEnd));
+ buffer.add(this.substring(lastMatchEnd));
}
StringImplementation.prototype.hashCode = function() {
'use strict';
@@ -2038,46 +1283,11 @@ StringImplementation.prototype.hashCode = function() {
StringImplementation.prototype.compareTo = function(other) {
'use strict'; return this == other ? 0 : this < other ? -1 : 1;
}
-StringImplementation.prototype.compareTo$1 = StringImplementation.prototype.compareTo;
StringImplementation.prototype.contains$1 = StringImplementation.prototype.contains;
-StringImplementation.prototype.endsWith$1 = StringImplementation.prototype.endsWith;
-StringImplementation.prototype.hashCode$0 = StringImplementation.prototype.hashCode;
StringImplementation.prototype.indexOf$1 = StringImplementation.prototype.indexOf;
-StringImplementation.prototype.isEmpty$0 = StringImplementation.prototype.isEmpty;
-StringImplementation.prototype.replaceFirst$2 = StringImplementation.prototype.replaceFirst;
-StringImplementation.prototype.startsWith$1 = StringImplementation.prototype.startsWith;
StringImplementation.prototype.substring$1 = StringImplementation.prototype.substring;
-StringImplementation.prototype.substring$2 = StringImplementation.prototype.substring;
-// ********** Code for Collections **************
-function Collections() {}
-Collections.forEach = function(iterable, f) {
- for (var $$i = iterable.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- f.call$1(e);
- }
-}
-Collections.some = function(iterable, f) {
- for (var $$i = iterable.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- if (f.call$1(e)) return true;
- }
- return false;
-}
-Collections.every = function(iterable, f) {
- for (var $$i = iterable.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- if (!f.call$1(e)) return false;
- }
- return true;
-}
-Collections.filter = function(source, destination, f) {
- for (var $$i = source.iterator$0(); $$i.hasNext$0(); ) {
- var e = $$i.next$0();
- if (f.call$1(e)) destination.add(e);
- }
- return destination;
-}
// ********** Code for _Worker **************
+var _Worker = {};
// ********** Code for _ArgumentMismatchException **************
$inherits(_ArgumentMismatchException, ClosureArgumentMismatchException);
function _ArgumentMismatchException(_message) {
@@ -2163,7 +1373,7 @@ function _map(itemsAndKeys) {
var ret = new LinkedHashMapImplementation();
for (var i = (0);
i < itemsAndKeys.get$length(); ) {
- ret.$setindex(itemsAndKeys[i++], itemsAndKeys[i++]);
+ ret.$setindex(itemsAndKeys.$index(i++), itemsAndKeys.$index(i++));
}
return ret;
}
@@ -2223,7 +1433,9 @@ EnvMap.prototype.$index = function(key) {
return this._process.env[key];
}
// ********** Code for ReadableStream **************
+var ReadableStream = {};
// ********** Code for WritableStream **************
+var WritableStream = {};
Object.defineProperty(Object.prototype, '$typeNameOf', { value: function() {
if ((typeof(window) != 'undefined' && window.constructor.name == 'DOMWindow')
|| typeof(process) != 'undefined') { // fast-path for Chrome and Node
@@ -2259,125 +1471,847 @@ function $dynamic(name) {
}
}
}
- method = method || methods.Object;
- var proto = Object.getPrototypeOf(obj);
- if (!proto.hasOwnProperty(name)) {
- Object.defineProperty(proto, name,
- { value: method, enumerable: false, writable: true,
- configurable: true });
+ method = method || methods.Object;
+ var proto = Object.getPrototypeOf(obj);
+ if (!proto.hasOwnProperty(name)) {
+ Object.defineProperty(proto, name,
+ { value: method, enumerable: false, writable: true,
+ configurable: true });
+ }
+
+ return method.apply(this, Array.prototype.slice.call(arguments));
+ };
+ $dynamicBind.methods = methods;
+ Object.defineProperty(Object.prototype, name, { value: $dynamicBind,
+ enumerable: false, writable: true, configurable: true});
+ return methods;
+}
+if (typeof $dynamicMetadata == 'undefined') $dynamicMetadata = [];
+
+function $dynamicSetMetadata(inputTable) {
+ // TODO: Deal with light isolates.
+ var table = [];
+ for (var i = 0; i < inputTable.length; i++) {
+ var tag = inputTable[i][0];
+ var tags = inputTable[i][1];
+ var map = {};
+ var tagNames = tags.split('|');
+ for (var j = 0; j < tagNames.length; j++) {
+ map[tagNames[j]] = true;
+ }
+ table.push({tag: tag, tags: tags, map: map});
+ }
+ $dynamicMetadata = table;
+}
+$dynamic("end$0").WriteStream = function() {
+ return this.end(null, "utf8");
+};
+$dynamic("write$1").WriteStream = function($0) {
+ return this.write($0, "utf8");
+};
+// ********** Code for vm **************
+vm = require('vm');
+// ********** Code for fs **************
+fs = require('fs');
+// ********** Code for path **************
+path = require('path');
+// ********** Code for top level **************
+function createSandbox() {
+ return {'require': require, 'process': process, 'console': console,
+ 'Buffer' : Buffer,
+ 'setTimeout': setTimeout, 'clearTimeout': clearTimeout};
+}
+function get$_process() {
+ return process;
+}
+function get$process() {
+ return new Process(get$_process());
+}
+// ********** Library file_system **************
+// ********** Code for top level **************
+function canonicalizePath(path) {
+ return path.replaceAll("\\", "/");
+}
+function joinPaths(path1, path2) {
+ path1 = canonicalizePath(path1);
+ path2 = canonicalizePath(path2);
+ var pieces = path1.split("/");
+ var $$list = path2.split("/");
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var piece = $$i.next();
+ if ($eq(piece, "..") && pieces.get$length() > (0) && $ne(pieces.last(), ".") && $ne(pieces.last(), "..")) {
+ pieces.removeLast();
+ }
+ else if ($ne(piece, "")) {
+ if (pieces.get$length() > (0) && $eq(pieces.last(), ".")) {
+ pieces.removeLast();
+ }
+ pieces.add(piece);
+ }
+ }
+ return Strings.join(pieces, "/");
+}
+function dirname(path) {
+ path = canonicalizePath(path);
+ var lastSlash = path.lastIndexOf("/", path.length);
+ if (lastSlash == (-1)) {
+ return ".";
+ }
+ else {
+ return path.substring((0), lastSlash);
+ }
+}
+function basename(path) {
+ path = canonicalizePath(path);
+ var lastSlash = path.lastIndexOf("/", path.length);
+ if (lastSlash == (-1)) {
+ return path;
+ }
+ else {
+ return path.substring(lastSlash + (1));
+ }
+}
+// ********** Library file_system_node **************
+// ********** Code for NodeFileSystem **************
+function NodeFileSystem() {
+
+}
+NodeFileSystem.prototype.writeString = function(outfile, text) {
+ fs.writeFileSync(outfile, text);
+}
+NodeFileSystem.prototype.readAll = function(filename) {
+ return fs.readFileSync(filename, "utf8");
+}
+NodeFileSystem.prototype.fileExists = function(filename) {
+ return path.existsSync(filename);
+}
+// ********** Code for top level **************
+// ********** Library lang **************
+// ********** Code for MethodAnalyzer **************
+function MethodAnalyzer(method, body) {
+ this.method = method;
+ this.body = body;
+ this.hasTypeParams = false;
+}
+MethodAnalyzer.prototype.get$method = function() { return this.method; };
+MethodAnalyzer.prototype.set$method = function(value) { return this.method = value; };
+MethodAnalyzer.prototype.get$body = function() { return this.body; };
+MethodAnalyzer.prototype.set$body = function(value) { return this.body = value; };
+MethodAnalyzer.prototype.get$hasTypeParams = function() { return this.hasTypeParams; };
+MethodAnalyzer.prototype.set$hasTypeParams = function(value) { return this.hasTypeParams = value; };
+MethodAnalyzer.prototype.analyze = function(context) {
+ var thisValue;
+ if (context != null) {
+ thisValue = context.thisValue;
+ }
+ else {
+ thisValue = new PureStaticValue(this.method.declaringType, null, false, false);
+ }
+ var values = [];
+ var $$list = this.method.parameters;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var p = $$i.next();
+ values.add(new PureStaticValue(p.get$type(), null, false, false));
+ }
+ var args = new Arguments(null, values);
+ this._frame = new CallFrame(this, this.method, thisValue, args, context);
+ this._bindArguments(this._frame.args);
+ this.body.visit(this);
+}
+MethodAnalyzer.prototype._hasTypeParams = function(node) {
+ if ((node instanceof NameTypeReference)) {
+ var name = node.get$name().get$name();
+ return (this.method.declaringType.lookupTypeParam(name) != null);
+ }
+ else if ((node instanceof GenericTypeReference)) {
+ var $$list = node.get$typeArguments();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var typeArg = $$i.next();
+ if (this._hasTypeParams(typeArg)) return true;
+ }
+ return false;
+ }
+ else {
+ return false;
+ }
+}
+MethodAnalyzer.prototype.resolveType = function(node, typeErrors, allowTypeParams) {
+ if (!this.hasTypeParams && this._hasTypeParams(node)) {
+ this.hasTypeParams = true;
+ }
+ return this.method.resolveType(node, typeErrors, allowTypeParams);
+}
+MethodAnalyzer.prototype.makeNeutral = function(inValue, span) {
+ return new PureStaticValue(inValue.get$type(), span, false, false);
+}
+MethodAnalyzer.prototype._bindArguments = function(args) {
+ for (var i = (0);
+ i < this.method.parameters.get$length(); i++) {
+ var p = this.method.parameters[i];
+ var currentArg = null;
+ if (i < args.get$bareCount()) {
+ currentArg = args.values.$index(i);
+ }
+ else {
+ currentArg = args.getValue(p.get$name());
+ if (currentArg == null) {
+ p.genValue(this.method, this._frame);
+ if (p.get$value() == null) {
+ $globals.world.warning("missing argument at call - does not match");
+ }
+ currentArg = p.get$value();
+ }
+ }
+ currentArg = this.makeNeutral(currentArg, p.get$definition().get$span());
+ this._frame.declareParameter(p, currentArg);
+ }
+}
+MethodAnalyzer.prototype.visitBool = function(node) {
+ return this.visitTypedValue(node, $globals.world.boolType);
+}
+MethodAnalyzer.prototype.visitValue = function(node) {
+ if (node == null) return null;
+ var value = node.visit(this);
+ value.checkFirstClass(node.span);
+ return value;
+}
+MethodAnalyzer.prototype.visitTypedValue = function(node, expectedType) {
+ var val = this.visitValue(node);
+ return val;
+}
+MethodAnalyzer.prototype.visitVoid = function(node) {
+ return this.visitValue(node);
+}
+MethodAnalyzer.prototype._visitArgs = function(arguments) {
+ var args = [];
+ var seenLabel = false;
+ for (var $$i = arguments.iterator(); $$i.hasNext(); ) {
+ var arg = $$i.next();
+ if (arg.get$label() != null) {
+ seenLabel = true;
+ }
+ else if (seenLabel) {
+ $globals.world.error("bare argument can not follow named arguments", arg.get$span());
+ }
+ args.add(this.visitValue(arg.get$value()));
+ }
+ return new Arguments(arguments, args);
+}
+MethodAnalyzer.prototype._makeLambdaMethod = function(name, func) {
+ var meth = new MethodMember(name, this.method.declaringType, func);
+ meth.set$isLambda(true);
+ meth.set$enclosingElement(this.method);
+ meth.set$_methodData(new MethodData(meth, this._frame));
+ meth.resolve();
+ return meth;
+}
+MethodAnalyzer.prototype._pushBlock = function(node) {
+ this._frame.pushBlock(node);
+}
+MethodAnalyzer.prototype._popBlock = function(node) {
+ this._frame.popBlock(node);
+}
+MethodAnalyzer.prototype._resolveBare = function(name, node) {
+ var type = this._frame.method.declaringType;
+ var member = type.getMember(name);
+ if ($eq(member) || $ne(member.get$declaringType(), type)) {
+ var libMember = this._frame.get$library().lookup(name, node.span);
+ if (libMember != null) return libMember;
+ }
+ if (member != null && !member.get$isStatic() && this._frame.get$isStatic()) {
+ $globals.world.error("can not refer to instance member from static method", node.span);
+ }
+ return member;
+}
+MethodAnalyzer.prototype.visitDietStatement = function(node) {
+ var parser = new Parser(node.span.file, false, false, false, node.span.start);
+ parser.block().visit(this);
+}
+MethodAnalyzer.prototype.visitVariableDefinition = function(node) {
+ var isFinal = false;
+ if (node.modifiers != null && node.modifiers[(0)].kind == (99)) {
+ isFinal = true;
+ }
+ var type = this.resolveType(node.type, false, true);
+ for (var i = (0);
+ i < node.names.get$length(); i++) {
+ var name = node.names[i].name;
+ var value = this.visitValue(node.values[i]);
+ this._frame.create(name, type, node.names[i], isFinal, value);
+ }
+}
+MethodAnalyzer.prototype.visitFunctionDefinition = function(node) {
+ var meth = this._makeLambdaMethod(node.name.name, node);
+ var funcValue = this._frame.create(meth.get$name(), meth.get$functionType(), this.method.definition, true, null);
+ meth.get$methodData().analyze();
+}
+MethodAnalyzer.prototype.visitReturnStatement = function(node) {
+ if (node.value == null) {
+ this._frame.returns(Value.fromNull(node.span));
+ }
+ else {
+ this._frame.returns(this.visitValue(node.value));
+ }
+}
+MethodAnalyzer.prototype.visitThrowStatement = function(node) {
+ if (node.value != null) {
+ var value = this.visitValue(node.value);
+ }
+ else {
+ }
+}
+MethodAnalyzer.prototype.visitAssertStatement = function(node) {
+ var test = this.visitValue(node.test);
+}
+MethodAnalyzer.prototype.visitBreakStatement = function(node) {
+
+}
+MethodAnalyzer.prototype.visitContinueStatement = function(node) {
+
+}
+MethodAnalyzer.prototype.visitIfStatement = function(node) {
+ var test = this.visitBool(node.test);
+ node.trueBranch.visit(this);
+ if (node.falseBranch != null) {
+ node.falseBranch.visit(this);
+ }
+}
+MethodAnalyzer.prototype.visitWhileStatement = function(node) {
+ var test = this.visitBool(node.test);
+ node.body.visit(this);
+}
+MethodAnalyzer.prototype.visitDoStatement = function(node) {
+ node.body.visit(this);
+ var test = this.visitBool(node.test);
+}
+MethodAnalyzer.prototype.visitForStatement = function(node) {
+ this._pushBlock(node);
+ if (node.init != null) node.init.visit(this);
+ if (node.test != null) {
+ var test = this.visitBool(node.test);
+ }
+ var $$list = node.step;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var s = $$i.next();
+ var sv = this.visitVoid(s);
+ }
+ this._pushBlock(node.body);
+ node.body.visit(this);
+ this._popBlock(node.body);
+ this._popBlock(node);
+}
+MethodAnalyzer.prototype.visitForInStatement = function(node) {
+ var itemType = this.resolveType(node.item.type, false, true);
+ var list = node.list.visit(this);
+ this._visitForInBody(node, itemType, list);
+}
+MethodAnalyzer.prototype._isFinal = function(typeRef) {
+ if ((typeRef instanceof GenericTypeReference)) {
+ typeRef = typeRef.get$baseType();
+ }
+ else if ((typeRef instanceof SimpleTypeReference)) {
+ return false;
+ }
+ return $ne(typeRef) && typeRef.get$isFinal();
+}
+MethodAnalyzer.prototype._visitForInBody = function(node, itemType, list) {
+ this._pushBlock(node);
+ var isFinal = this._isFinal(node.item.type);
+ var itemName = node.item.name.name;
+ var item = this._frame.create(itemName, itemType, node.item.name, isFinal, null);
+ var iterator = list.invoke(this._frame, "iterator", node.list, Arguments.get$EMPTY());
+ node.body.visit(this);
+ this._popBlock(node);
+}
+MethodAnalyzer.prototype._createDI = function(di) {
+ this._frame.create(di.name.name, this.resolveType(di.type, false, true), di.name, true, null);
+}
+MethodAnalyzer.prototype.visitTryStatement = function(node) {
+ this._pushBlock(node.body);
+ node.body.visit(this);
+ this._popBlock(node.body);
+ if (node.catches.get$length() > (0)) {
+ for (var i = (0);
+ i < node.catches.get$length(); i++) {
+ var catch_ = node.catches[i];
+ this._pushBlock(catch_);
+ this._createDI(catch_.get$exception());
+ if (catch_.get$trace() != null) {
+ this._createDI(catch_.get$trace());
+ }
+ catch_.get$body().visit(this);
+ this._popBlock(catch_);
+ }
+ }
+ if (node.finallyBlock != null) {
+ node.finallyBlock.visit(this);
+ }
+}
+MethodAnalyzer.prototype.visitSwitchStatement = function(node) {
+ var test = this.visitValue(node.test);
+ var $$list = node.cases;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var case_ = $$i.next();
+ this._pushBlock(case_);
+ for (var i = (0);
+ i < case_.get$cases().get$length(); i++) {
+ var expr = case_.get$cases().$index(i);
+ if ($eq(expr)) {
+ }
+ else {
+ var value = this.visitValue(expr);
+ }
+ }
+ this._visitAllStatements(case_.get$statements());
+ this._popBlock(case_);
+ }
+}
+MethodAnalyzer.prototype._visitAllStatements = function(statementList) {
+ for (var i = (0);
+ i < statementList.get$length(); i++) {
+ var stmt = statementList.$index(i);
+ stmt.visit(this);
+ }
+}
+MethodAnalyzer.prototype.visitBlockStatement = function(node) {
+ this._pushBlock(node);
+ this._visitAllStatements(node.body);
+ this._popBlock(node);
+}
+MethodAnalyzer.prototype.visitLabeledStatement = function(node) {
+ node.body.visit(this);
+}
+MethodAnalyzer.prototype.visitExpressionStatement = function(node) {
+ var value = this.visitVoid(node.body);
+}
+MethodAnalyzer.prototype.visitEmptyStatement = function(node) {
+
+}
+MethodAnalyzer.prototype.visitLambdaExpression = function(node) {
+ var name = (node.func.name != null) ? node.func.name.name : "";
+ var meth = this._makeLambdaMethod(name, node.func);
+ meth.get$methodData().analyze();
+ return this._frame._makeValue($globals.world.functionType, node);
+}
+MethodAnalyzer.prototype.visitCallExpression = function(node) {
+ var target;
+ var position = node.target;
+ var name = ":call";
+ if ((node.target instanceof DotExpression)) {
+ var dot = node.target;
+ target = dot.self.visit(this);
+ name = dot.name.name;
+ position = dot.name;
+ }
+ else if ((node.target instanceof VarExpression)) {
+ var varExpr = node.target;
+ name = varExpr.name.name;
+ target = this._frame.lookup(name);
+ if ($ne(target)) {
+ return target.get().invoke(this._frame, ":call", node, this._visitArgs(node.arguments));
+ }
+ var member = this._resolveBare(name, varExpr.name);
+ if (member != null) {
+ return member.invoke(this._frame, node, this._frame.makeThisValue(node), this._visitArgs(node.arguments));
+ }
+ else {
+ $globals.world.warning(("can not find \"" + name + "\""), node.span);
+ return this._frame._makeValue($globals.world.varType, node);
+ }
+ }
+ else {
+ target = node.target.visit(this);
+ }
+ return target.invoke(this._frame, name, position, this._visitArgs(node.arguments));
+}
+MethodAnalyzer.prototype.visitIndexExpression = function(node) {
+ var target = this.visitValue(node.target);
+ var index = this.visitValue(node.index);
+ return target.invoke(this._frame, ":index", node, new Arguments(null, [index]));
+}
+MethodAnalyzer.prototype.visitBinaryExpression = function(node, isVoid) {
+ var kind = node.op.kind;
+ if ($eq(kind, (35)) || $eq(kind, (34))) {
+ var xb = this.visitBool(node.x);
+ var yb = this.visitBool(node.y);
+ return xb.binop(kind, yb, this._frame, node);
+ }
+ var assignKind = TokenKind.kindFromAssign(node.op.kind);
+ if ($eq(assignKind, (-1))) {
+ var x = this.visitValue(node.x);
+ var y = this.visitValue(node.y);
+ return x.binop(kind, y, this._frame, node);
+ }
+ else {
+ return this._visitAssign(assignKind, node.x, node.y, node);
+ }
+}
+MethodAnalyzer.prototype._visitAssign = function(kind, xn, yn, position) {
+ if ((xn instanceof VarExpression)) {
+ return this._visitVarAssign(kind, xn, yn, position);
+ }
+ else if ((xn instanceof IndexExpression)) {
+ return this._visitIndexAssign(kind, xn, yn, position);
+ }
+ else if ((xn instanceof DotExpression)) {
+ return this._visitDotAssign(kind, xn, yn, position);
+ }
+ else {
+ $globals.world.error("illegal lhs", xn.span);
+ }
+}
+MethodAnalyzer.prototype._visitVarAssign = function(kind, xn, yn, node) {
+ var value = this.visitValue(yn);
+ var name = xn.name.name;
+ var slot = this._frame.lookup(name);
+ if ($ne(slot)) {
+ slot.set(value);
+ }
+ else {
+ var member = this._resolveBare(name, xn.name);
+ if (member != null) {
+ member._set(this._frame, node, this._frame.makeThisValue(node), value);
+ }
+ else {
+ $globals.world.warning(("can not find \"" + name + "\""), node.span);
+ }
+ }
+ return this._frame._makeValue(value.get$type(), node);
+}
+MethodAnalyzer.prototype._visitIndexAssign = function(kind, xn, yn, position) {
+ var target = this.visitValue(xn.target);
+ var index = this.visitValue(xn.index);
+ var y = this.visitValue(yn);
+ return target.setIndex$4$kind(this._frame, index, position, y, kind);
+}
+MethodAnalyzer.prototype._visitDotAssign = function(kind, xn, yn, position) {
+ var target = xn.self.visit(this);
+ var y = this.visitValue(yn);
+ return target.set_$4$kind(this._frame, xn.name.name, xn.name, y, kind);
+}
+MethodAnalyzer.prototype.visitUnaryExpression = function(node) {
+ var value = this.visitValue(node.self);
+ switch (node.op.kind) {
+ case (16):
+ case (17):
+
+ return value.binop((42), this._frame._makeValue($globals.world.intType, node), this._frame, node);
+
+ }
+ return value.unop(node.op.kind, this._frame, node);
+}
+MethodAnalyzer.prototype.visitDeclaredIdentifier = function(node) {
+ $globals.world.error("Expected expression", node.span);
+}
+MethodAnalyzer.prototype.visitAwaitExpression = function(node) {
+ $globals.world.internalError("Await expressions should have been eliminated before code generation", node.span);
+}
+MethodAnalyzer.prototype.visitPostfixExpression = function(node, isVoid) {
+ var value = this.visitValue(node.body);
+ return this._frame._makeValue(value.get$type(), node);
+}
+MethodAnalyzer.prototype.visitNewExpression = function(node) {
+ var typeRef = node.type;
+ var constructorName = "";
+ if (node.name != null) {
+ constructorName = node.name.name;
+ }
+ if ($eq(constructorName, "") && (typeRef instanceof NameTypeReference) && typeRef.get$names() != null) {
+ var names = ListFactory.ListFactory$from$factory(typeRef.get$names());
+ constructorName = names.removeLast().get$name();
+ if (names.get$length() == (0)) names = null;
+ typeRef = new NameTypeReference(typeRef.get$isFinal(), typeRef.get$name(), names, typeRef.get$span());
+ }
+ var type = this.resolveType(typeRef, true, true);
+ if (type.get$isTop()) {
+ type = type.get$library().findTypeByName(constructorName);
+ constructorName = "";
+ }
+ if ((type instanceof ParameterType)) {
+ $globals.world.error("cannot instantiate a type parameter", node.span);
+ return this._frame._makeValue($globals.world.varType, node);
+ }
+ var m = type.getConstructor(constructorName);
+ if ($eq(m)) {
+ var name = type.get$jsname();
+ if (type.get$isVar()) {
+ name = typeRef.get$name().get$name();
+ }
+ $globals.world.warning(("no matching constructor for " + name), node.span);
+ return this._frame._makeValue(type, node);
+ }
+ if (node.isConst) {
+ if (!m.get$isConst()) {
+ $globals.world.error("can't use const on a non-const constructor", node.span);
+ }
+ var $$list = node.arguments;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var arg = $$i.next();
+ if (!this.visitValue(arg.get$value()).get$isConst()) {
+ $globals.world.error("const constructor expects const arguments", arg.get$span());
+ }
+ }
+ }
+ var args = this._visitArgs(node.arguments);
+ var target = new TypeValue(type, typeRef.get$span());
+ return new PureStaticValue(type, node.span, node.isConst, false);
+}
+MethodAnalyzer.prototype.visitListExpression = function(node) {
+ var argValues = [];
+ var listType = $globals.world.listType;
+ var type = $globals.world.varType;
+ if (node.itemType != null) {
+ type = this.resolveType(node.itemType, true, !node.isConst);
+ if (node.isConst && ((type instanceof ParameterType) || type.get$hasTypeParams())) {
+ $globals.world.error("type parameter cannot be used in const list literals");
+ }
+ listType = listType.getOrMakeConcreteType([type]);
+ }
+ var $$list = node.values;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var item = $$i.next();
+ var arg = this.visitTypedValue(item, type);
+ argValues.add(arg);
+ }
+ $globals.world.listFactoryType.markUsed();
+ return new PureStaticValue(listType, node.span, node.isConst, false);
+}
+MethodAnalyzer.prototype.visitMapExpression = function(node) {
+ var values = [];
+ var valueType = $globals.world.varType, keyType = $globals.world.stringType;
+ var mapType = $globals.world.mapType;
+ if (node.valueType != null) {
+ if (node.keyType != null) {
+ keyType = this.method.resolveType(node.keyType, true, !node.isConst);
+ if (!keyType.get$isString()) {
+ $globals.world.error("the key type of a map literal must be \"String\"", keyType.get$span());
+ }
+ if (node.isConst && ((keyType instanceof ParameterType) || keyType.get$hasTypeParams())) {
+ $globals.world.error("type parameter cannot be used in const map literals");
+ }
+ }
+ valueType = this.resolveType(node.valueType, true, !node.isConst);
+ if (node.isConst && ((valueType instanceof ParameterType) || valueType.get$hasTypeParams())) {
+ $globals.world.error("type parameter cannot be used in const map literals");
}
-
- return method.apply(this, Array.prototype.slice.call(arguments));
- };
- $dynamicBind.methods = methods;
- Object.defineProperty(Object.prototype, name, { value: $dynamicBind,
- enumerable: false, writable: true, configurable: true});
- return methods;
+ mapType = mapType.getOrMakeConcreteType([keyType, valueType]);
+ }
+ for (var i = (0);
+ i < node.items.get$length(); i += (2)) {
+ var key = this.visitTypedValue(node.items[i], keyType);
+ values.add(key);
+ var value = this.visitTypedValue(node.items[i + (1)], valueType);
+ if (node.isConst && !value.get$isConst()) {
+ $globals.world.error("const map can only contain const values", value.get$span());
+ }
+ values.add(value);
+ }
+ return new PureStaticValue(mapType, node.span, node.isConst, false);
}
-if (typeof $dynamicMetadata == 'undefined') $dynamicMetadata = [];
-
-function $dynamicSetMetadata(inputTable) {
- // TODO: Deal with light isolates.
- var table = [];
- for (var i = 0; i < inputTable.length; i++) {
- var tag = inputTable[i][0];
- var tags = inputTable[i][1];
- var map = {};
- var tagNames = tags.split('|');
- for (var j = 0; j < tagNames.length; j++) {
- map[tagNames[j]] = true;
+MethodAnalyzer.prototype.visitConditionalExpression = function(node) {
+ var test = this.visitBool(node.test);
+ var trueBranch = this.visitValue(node.trueBranch);
+ var falseBranch = this.visitValue(node.falseBranch);
+ return this._frame._makeValue(Type.union(trueBranch.get$type(), falseBranch.get$type()), node);
+}
+MethodAnalyzer.prototype.visitIsExpression = function(node) {
+ var value = this.visitValue(node.x);
+ var type = this.resolveType(node.type, false, true);
+ return this._frame._makeValue($globals.world.boolType, node);
+}
+MethodAnalyzer.prototype.visitParenExpression = function(node) {
+ return this.visitValue(node.body);
+}
+MethodAnalyzer.prototype.visitDotExpression = function(node) {
+ var target = node.self.visit(this);
+ return target.get_(this._frame, node.name.name, node);
+}
+MethodAnalyzer.prototype.visitVarExpression = function(node) {
+ var name = node.name.name;
+ var slot = this._frame.lookup(name);
+ if ($ne(slot)) {
+ return slot.get();
+ }
+ var member = this._resolveBare(name, node.name);
+ if (member != null) {
+ if ((member instanceof TypeMember)) {
+ return new PureStaticValue(member.get$dynamic().get$type(), node.span, true, true);
+ }
+ else {
+ return member._get(this._frame, node, this._frame.makeThisValue(node));
}
- table.push({tag: tag, tags: tags, map: map});
}
- $dynamicMetadata = table;
+ else {
+ $globals.world.warning(("can not find \"" + name + "\""), node.span);
+ return this._frame._makeValue($globals.world.varType, node);
+ }
}
-$dynamic("get$end").WriteStream = function() {
- return this.end.bind(this);
+MethodAnalyzer.prototype.visitThisExpression = function(node) {
+ return this._frame.makeThisValue(node);
}
-$dynamic("end$0").WriteStream = function() {
- return this.end(null, "utf8");
+MethodAnalyzer.prototype.visitSuperExpression = function(node) {
+ return this._frame.makeSuperValue(node);
+}
+MethodAnalyzer.prototype.visitLiteralExpression = function(node) {
+ return new PureStaticValue(node.value.get$type(), node.span, true, false);
+}
+MethodAnalyzer.prototype.visitStringInterpExpression = function(node) {
+ return this._frame._makeValue($globals.world.stringType, node);
+}
+MethodAnalyzer.prototype._pushBlock$1 = MethodAnalyzer.prototype._pushBlock;
+MethodAnalyzer.prototype.analyze$1 = MethodAnalyzer.prototype.analyze;
+MethodAnalyzer.prototype.visitBinaryExpression$1 = function($0) {
+ return this.visitBinaryExpression($0, false);
};
-$dynamic("write$1").WriteStream = function($0) {
- return this.write($0, "utf8");
+MethodAnalyzer.prototype.visitPostfixExpression$1 = function($0) {
+ return this.visitPostfixExpression($0, false);
};
-// ********** Code for vm **************
-vm = require('vm');
-// ********** Code for fs **************
-fs = require('fs');
-// ********** Code for path **************
-path = require('path');
-// ********** Code for top level **************
-function createSandbox() {
- return {'require': require, 'process': process, 'console': console,
- 'Buffer' : Buffer,
- 'setTimeout': setTimeout, 'clearTimeout': clearTimeout};
+// ********** Code for CallFrame **************
+function CallFrame(analyzer, method, thisValue, args, enclosingFrame) {
+ this.args = args;
+ this.analyzer = analyzer;
+ this.enclosingFrame = enclosingFrame;
+ this.method = method;
+ this.thisValue = thisValue;
+ this._slots = [];
+ this._scope = new AnalyzeScope(null, this, this.analyzer.body);
+ this._returnSlot = new VariableSlot(this._scope, "return", this.method.returnType, this.analyzer.body, false);
}
-function get$_process() {
- return process;
+CallFrame.prototype.findMembers = function(name) {
+ return this.get$library()._findMembers(name);
}
-function get$process() {
- return new Process(get$_process());
+CallFrame.prototype.get$counters = function() {
+ return $globals.world.counters;
}
-// ********** Library file_system **************
-// ********** Code for top level **************
-function canonicalizePath(path) {
- return path.replaceAll("\\", "/");
+CallFrame.prototype.get$library = function() {
+ return this.method.get$library();
}
-function joinPaths(path1, path2) {
- path1 = canonicalizePath(path1);
- path2 = canonicalizePath(path2);
- var pieces = path1.split("/");
- var $$list = path2.split("/");
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var piece = $$list[$$i];
- if ($eq(piece, "..") && pieces.get$length() > (0) && $ne(pieces.last$0(), ".") && $ne(pieces.last$0(), "..")) {
- pieces.removeLast$0();
- }
- else if ($ne(piece, "")) {
- if (pieces.get$length() > (0) && $eq(pieces.last$0(), ".")) {
- pieces.removeLast$0();
- }
- pieces.add$1(piece);
- }
- }
- return Strings.join(pieces, "/");
+CallFrame.prototype.get$method = function() { return this.method; };
+CallFrame.prototype.set$method = function(value) { return this.method = value; };
+CallFrame.prototype.get$needsCode = function() {
+ return false;
}
-function dirname(path) {
- path = canonicalizePath(path);
- var lastSlash = path.lastIndexOf("/", path.length);
- if (lastSlash == (-1)) {
- return ".";
- }
- else {
- return path.substring((0), lastSlash);
+CallFrame.prototype.get$showWarnings = function() {
+ return true;
+}
+CallFrame.prototype._makeThisCode = function() {
+ return null;
+}
+CallFrame.prototype.getTemp = function(value) {
+ return null;
+}
+CallFrame.prototype.forceTemp = function(value) {
+ return null;
+}
+CallFrame.prototype.assignTemp = function(tmp, v) {
+ return null;
+}
+CallFrame.prototype.freeTemp = function(value) {
+ return null;
+}
+CallFrame.prototype.get$isStatic = function() {
+ return this.enclosingFrame != null ? this.enclosingFrame.get$isStatic() : this.method.isStatic;
+}
+CallFrame.prototype.get$_slots = function() { return this._slots; };
+CallFrame.prototype.set$_slots = function(value) { return this._slots = value; };
+CallFrame.prototype.get$_scope = function() { return this._scope; };
+CallFrame.prototype.set$_scope = function(value) { return this._scope = value; };
+CallFrame.prototype.pushBlock = function(node) {
+ this._scope = new AnalyzeScope(this._scope, this, node);
+}
+CallFrame.prototype.popBlock = function(node) {
+ if ($ne(this._scope.node, node)) {
+ $globals.world.internalError("incorrect pop", node.span, this._scope.node.span);
}
+ this._scope = this._scope.parent;
}
-function basename(path) {
- path = canonicalizePath(path);
- var lastSlash = path.lastIndexOf("/", path.length);
- if (lastSlash == (-1)) {
- return path;
+CallFrame.prototype.returns = function(value) {
+ this._returnSlot.set(value);
+}
+CallFrame.prototype.lookup = function(name) {
+ var slot = this._scope._lookup(name);
+ if ($eq(slot) && this.enclosingFrame != null) {
+ return this.enclosingFrame.lookup(name);
}
- else {
- return path.substring(lastSlash + (1));
+ return slot;
+}
+CallFrame.prototype.create = function(name, staticType, node, isFinal, value) {
+ var slot = new VariableSlot(this._scope, name, staticType, node, isFinal, value);
+ var existingSlot = this._scope._lookup(name);
+ if (existingSlot != null) {
+ if ($eq(existingSlot.get$scope(), this)) {
+ $globals.world.error(("duplicate name \"" + name + "\""), node.span);
+ }
+ else {
+ }
}
+ this._slots.add(slot);
+ this._scope._slots.add(slot);
}
-// ********** Library file_system_node **************
-// ********** Code for NodeFileSystem **************
-function NodeFileSystem() {
-
+CallFrame.prototype.declareParameter = function(p, value) {
+ return this.create(p.name, p.type, p.definition, false, value);
}
-NodeFileSystem.prototype.writeString = function(outfile, text) {
- fs.writeFileSync(outfile, text);
+CallFrame.prototype._makeValue = function(type, node) {
+ return new PureStaticValue(type, node == null ? null : node.span, false, false);
}
-NodeFileSystem.prototype.readAll = function(filename) {
- return fs.readFileSync(filename, "utf8");
+CallFrame.prototype.makeSuperValue = function(node) {
+ return this._makeValue(this.thisValue.get$type().get$parent(), node);
}
-NodeFileSystem.prototype.fileExists = function(filename) {
- return path.existsSync(filename);
+CallFrame.prototype.makeThisValue = function(node) {
+ return this._makeValue(this.thisValue.get$type(), node);
+}
+// ********** Code for VariableSlot **************
+function VariableSlot(scope, name, staticType, node, isFinal, value) {
+ this.value = value;
+ this.name = name;
+ this.scope = scope;
+ this.node = node;
+ this.staticType = staticType;
+ this.isFinal = isFinal;
+}
+VariableSlot.prototype.get$scope = function() { return this.scope; };
+VariableSlot.prototype.set$scope = function(value) { return this.scope = value; };
+VariableSlot.prototype.get$name = function() { return this.name; };
+VariableSlot.prototype.get$staticType = function() { return this.staticType; };
+VariableSlot.prototype.set$staticType = function(value) { return this.staticType = value; };
+VariableSlot.prototype.get$isFinal = function() { return this.isFinal; };
+VariableSlot.prototype.set$isFinal = function(value) { return this.isFinal = value; };
+VariableSlot.prototype.get$value = function() { return this.value; };
+VariableSlot.prototype.set$value = function(value) { return this.value = value; };
+VariableSlot.prototype.get = function() {
+ return this.scope.frame._makeValue(this.staticType, null);
+}
+VariableSlot.prototype.set = function(newValue) {
+ if (this.value == null) this.value = newValue;
+ else this.value = Value.union(this.value, newValue);
+}
+VariableSlot.prototype.toString = function() {
+ var valueString = this.value != null ? (" = " + this.value.get$type().name) : "";
+ return ("" + this.staticType.name + " " + this.name + valueString);
+}
+VariableSlot.prototype.toString$0 = VariableSlot.prototype.toString;
+// ********** Code for AnalyzeScope **************
+function AnalyzeScope(parent, frame, node) {
+ this.frame = frame;
+ this.parent = parent;
+ this.node = node;
+ this._slots = [];
+}
+AnalyzeScope.prototype.get$parent = function() { return this.parent; };
+AnalyzeScope.prototype.set$parent = function(value) { return this.parent = value; };
+AnalyzeScope.prototype.get$_slots = function() { return this._slots; };
+AnalyzeScope.prototype.set$_slots = function(value) { return this._slots = value; };
+AnalyzeScope.prototype._lookup = function(name) {
+ for (var s = this;
+ $ne(s); s = s.get$parent()) {
+ for (var i = (0);
+ i < s.get$_slots().get$length(); i++) {
+ var ret = s.get$_slots()[i];
+ if ($eq(ret.get$name(), name)) return ret;
+ }
+ }
+ return null;
}
-// ********** Code for top level **************
-// ********** Library lang **************
// ********** Code for BlockScope **************
function BlockScope(enclosingMethod, parent, node, reentrant) {
this.enclosingMethod = enclosingMethod;
@@ -2385,9 +2319,9 @@ function BlockScope(enclosingMethod, parent, node, reentrant) {
this.parent = parent;
this.node = node;
this.reentrant = reentrant;
- this._jsNames = new HashSetImplementation();
+ this._jsNames = new HashSetImplementation_dart_core_String();
if (this.get$isMethodScope()) {
- this._closedOver = new HashSetImplementation();
+ this._closedOver = new HashSetImplementation_dart_core_String();
}
else {
this.reentrant = reentrant || this.parent.reentrant;
@@ -2427,7 +2361,7 @@ BlockScope.prototype.get$methodScope = function() {
}
BlockScope.prototype.lookup = function(name) {
for (var s = this;
- s != null; s = s.get$parent()) {
+ $ne(s); s = s.get$parent()) {
var ret = s.get$_vars().$index(name);
if (ret != null) return this._capture(s, ret);
}
@@ -2438,10 +2372,10 @@ BlockScope.prototype.inferAssign = function(name, value) {
}
BlockScope.prototype.assign = function(name, value) {
for (var s = this;
- s != null; s = s.get$parent()) {
+ $ne(s); s = s.get$parent()) {
var existing = s.get$_vars().$index(name);
- if (existing != null) {
- s.get$_vars().$setindex(name, existing.replaceValue$1(value));
+ if ($ne(existing)) {
+ s.get$_vars().$setindex(name, existing.replaceValue(value));
return;
}
}
@@ -2459,13 +2393,13 @@ BlockScope.prototype._capture = function(other, value) {
BlockScope.prototype._isDefinedInParent = function(name) {
if (this.get$isMethodScope() && this._closedOver.contains(name)) return true;
for (var s = this.parent;
- s != null; s = s.get$parent()) {
- if (s.get$_vars().containsKey$1(name)) return true;
- if (s.get$_jsNames().contains$1(name)) return true;
- if (s.get$isMethodScope() && s.get$_closedOver().contains$1(name)) return true;
+ $ne(s); s = s.get$parent()) {
+ if (s.get$_vars().containsKey(name)) return true;
+ if (s.get$_jsNames().contains(name)) return true;
+ if (s.get$isMethodScope() && s.get$_closedOver().contains(name)) return true;
}
var type = this.enclosingMethod.method.declaringType;
- if (type.get$library().lookup$2(name) != null) return true;
+ if (type.get$library().lookup(name, null) != null) return true;
return false;
}
BlockScope.prototype.create = function(name, type, span, isFinal, isParameter) {
@@ -2488,12 +2422,12 @@ 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$2(id.type, false);
+ var type = this.enclosingMethod.method.resolveType(id.type, false, true);
return this.create(id.name.name, type, id.span, false, false);
}
BlockScope.prototype.getRethrow = function() {
var scope = this;
- while (scope.get$rethrow() == null && scope.get$parent() != null) {
+ while (scope.get$rethrow() == null && $ne(scope.get$parent())) {
scope = scope.get$parent();
}
return scope.get$rethrow();
@@ -2604,8 +2538,10 @@ function CoreJs() {
this.useSetIndex = false;
this.useIndex = false;
}
+CoreJs.prototype.get$writer = function() { return this.writer; };
+CoreJs.prototype.set$writer = function(value) { return this.writer = value; };
CoreJs.prototype.useOperator = function(name) {
- if (this._usedOperators.$index(name) != null) return;
+ if ($ne(this._usedOperators.$index(name))) return;
var code;
switch (name) {
case ":ne":
@@ -2704,8 +2640,8 @@ CoreJs.prototype.generate = function(w) {
}
}
var $$list = orderValuesByKeys(this._usedOperators);
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var opImpl = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var opImpl = $$i.next();
w.writeln(opImpl);
}
if ($globals.world.dom != null) {
@@ -2713,7 +2649,6 @@ CoreJs.prototype.generate = function(w) {
w.writeln("Object.defineProperty(Object.prototype, \"get$typeName\", { value: Object.prototype.$typeNameOf, enumerable: false, writable: true, configurable: true});");
}
}
-CoreJs.prototype.generate$1 = CoreJs.prototype.generate;
// ********** Code for Element **************
function Element(name, _enclosingElement) {
this.name = name;
@@ -2754,6 +2689,9 @@ Element.prototype.resolve = function() {
Element.prototype.get$typeParameters = function() {
return null;
}
+Element.prototype.get$typeArgsInOrder = function() {
+ return const$0007;
+}
Element.prototype.get$enclosingElement = function() {
return this._enclosingElement == null ? this.get$library() : this._enclosingElement;
}
@@ -2761,49 +2699,61 @@ Element.prototype.set$enclosingElement = function(e) {
var $0;
return (this._enclosingElement = ($0 = e), $0);
}
-Element.prototype.resolveType = function(node, typeErrors) {
+Element.prototype.lookupTypeParam = function(name) {
+ if (this.get$typeParameters() == null) return null;
+ for (var i = (0);
+ i < this.get$typeParameters().get$length(); i++) {
+ if (this.get$typeParameters()[i].name == name) {
+ return this.get$typeArgsInOrder().$index(i);
+ }
+ }
+ return null;
+}
+Element.prototype.resolveType = function(node, typeErrors, allowTypeParams) {
if (node == null) return $globals.world.varType;
- if (node.type != null) return node.type;
- if ((node instanceof NameTypeReference)) {
+ if ((node instanceof SimpleTypeReference)) {
+ var ret = node.get$dynamic().get$type();
+ if ($eq(ret, $globals.world.voidType)) {
+ $globals.world.error("\"void\" only allowed as return type", node.span);
+ return $globals.world.varType;
+ }
+ return ret;
+ }
+ else if ((node instanceof NameTypeReference)) {
var typeRef = node;
var name;
if (typeRef.names != null) {
- name = typeRef.names.last().get$name();
+ name = typeRef.names.last().name;
}
else {
name = typeRef.name.name;
}
- if (this.get$typeParameters() != null) {
- var $$list = this.get$typeParameters();
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var tp = $$list[$$i];
- if ($eq(tp.get$name(), name)) {
- typeRef.type = tp;
- }
+ var typeParamType = this.lookupTypeParam(name);
+ if ($ne(typeParamType)) {
+ if (!allowTypeParams) {
+ $globals.world.error("using type parameter in illegal context.", node.span);
}
+ return typeParamType;
}
- if (typeRef.type != null) {
- return typeRef.type;
- }
- return this.get$enclosingElement().resolveType$2(node, typeErrors);
+ return this.get$enclosingElement().resolveType(node, typeErrors, allowTypeParams);
}
else if ((node instanceof GenericTypeReference)) {
var typeRef = node;
- var baseType = this.resolveType$2(typeRef.baseType, typeErrors);
+ var baseType = this.resolveType(typeRef.baseType, typeErrors, allowTypeParams);
if (!baseType.get$isGeneric()) {
$globals.world.error(("" + baseType.get$name() + " is not generic"), typeRef.span);
- return null;
+ return $globals.world.varType;
}
if (typeRef.typeArguments.get$length() != baseType.get$typeParameters().get$length()) {
$globals.world.error("wrong number of type arguments", typeRef.span);
- return null;
+ return $globals.world.varType;
}
var typeArgs = [];
for (var i = (0);
i < typeRef.typeArguments.get$length(); i++) {
- typeArgs.add$1(this.resolveType$2(typeRef.typeArguments[i], typeErrors));
+ typeArgs.add(this.resolveType(typeRef.typeArguments[i], typeErrors, allowTypeParams));
}
- typeRef.type = baseType.getOrMakeConcreteType$1(typeArgs);
+ return baseType.getOrMakeConcreteType(typeArgs);
}
else if ((node instanceof FunctionTypeReference)) {
var typeRef = node;
@@ -2811,16 +2761,10 @@ Element.prototype.resolveType = function(node, typeErrors) {
if (typeRef.func.name != null) {
name = typeRef.func.name.name;
}
- typeRef.type = this.get$library().getOrAddFunctionType(this, name, typeRef.func);
+ return this.get$library().getOrAddFunctionType(this, name, typeRef.func, null);
}
- else {
- $globals.world.internalError("unknown type reference", node.span);
- }
- return node.type;
+ $globals.world.internalError("unexpected TypeReference", node.span);
}
-Element.prototype.hashCode$0 = Element.prototype.hashCode;
-Element.prototype.resolve$0 = Element.prototype.resolve;
-Element.prototype.resolveType$2 = Element.prototype.resolveType;
// ********** Code for ExistingJsGlobal **************
$inherits(ExistingJsGlobal, Element);
function ExistingJsGlobal(name, declaringElement) {
@@ -2847,10 +2791,37 @@ function WorldGenerator(main, writer) {
this.globals = new HashMapImplementation();
this.writer = writer;
}
+WorldGenerator.prototype.get$writer = function() { return this.writer; };
+WorldGenerator.prototype.set$writer = function(value) { return this.writer = value; };
+WorldGenerator.prototype.analyze = function() {
+ var nlibs = (0), ntypes = (0), nmems = (0), nnews = (0);
+ var $$list = $globals.world.libraries.getValues();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var lib = $$i.next();
+ nlibs += (1);
+ var $list0 = lib.get$types().getValues();
+ for (var $i0 = $list0.iterator(); $i0.hasNext(); ) {
+ var type = $i0.next();
+ ntypes += (1);
+ var allMembers = [];
+ allMembers.addAll(type.get$constructors().getValues());
+ allMembers.addAll(type.get$members().getValues());
+ type.get$factories().forEach((function (allMembers, f) {
+ return allMembers.add(f);
+ }).bind(null, allMembers)
+ );
+ for (var $i1 = allMembers.iterator(); $i1.hasNext(); ) {
+ var m = $i1.next();
+ if (m.get$isAbstract() || !m.get$isMethod()) continue;
+ m.get$methodData().analyze();
+ }
+ }
+ }
+}
WorldGenerator.prototype.run = function() {
- var metaGen = new MethodGenerator(this.main, null);
+ this.mainContext = new MethodGenerator(this.main, null);
var mainTarget = new TypeValue(this.main.declaringType, this.main.get$span());
- var mainCall = this.main.invoke(metaGen, null, mainTarget, Arguments.get$EMPTY(), false);
+ var mainCall = this.main.invoke(this.mainContext, null, mainTarget, Arguments.get$EMPTY());
this.main.declaringType.markUsed();
if ($globals.options.compileAll) {
this.markLibrariesUsed([$globals.world.coreimpl, $globals.world.corelib, this.main.declaringType.get$library()]);
@@ -2859,13 +2830,13 @@ WorldGenerator.prototype.run = function() {
$globals.world.stringImplType.markUsed();
if ($globals.world.corelib.types.$index("Isolate").get$isUsed() || $globals.world.coreimpl.types.$index("ReceivePortImpl").get$isUsed()) {
if (this.corejs.useWrap0 || this.corejs.useWrap1) {
- this.genMethod($globals.world.coreimpl.types.$index("IsolateContext").getMember$1("eval"));
- this.genMethod($globals.world.coreimpl.types.$index("EventLoop").getMember$1("run"));
+ this.genMethod($globals.world.coreimpl.types.$index("IsolateContext").getMember("eval"));
+ this.genMethod($globals.world.coreimpl.types.$index("EventLoop").getMember("run"));
}
this.corejs.useIsolates = true;
var isolateMain = $globals.world.coreimpl.lookup("startRootIsolate", this.main.get$span());
var isolateMainTarget = new TypeValue($globals.world.coreimpl.topType, this.main.get$span());
- mainCall = isolateMain.invoke(metaGen, null, isolateMainTarget, new Arguments(null, [this.main._get(metaGen, this.main.definition, null, false)]), false);
+ mainCall = isolateMain.invoke(this.mainContext, null, isolateMainTarget, new Arguments(null, [this.main._get(this.mainContext, this.main.definition, null)]));
}
this.writeTypes($globals.world.coreimpl);
this.writeTypes($globals.world.corelib);
@@ -2887,13 +2858,13 @@ WorldGenerator.prototype.markTypeUsed = function(type) {
})
));
var members = ListFactory.ListFactory$from$factory(type.get$members().getValues());
- members.addAll$1(type.get$constructors().getValues());
+ members.addAll(type.get$constructors().getValues());
type.get$factories().forEach((function (f) {
- return members.add$1(f);
+ return members.add(f);
})
);
- for (var $$i = members.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
+ for (var $$i = members.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
if ((member instanceof PropertyMember)) {
if (member.get$getter() != null) this.genMethod(member.get$getter());
if (member.get$setter() != null) this.genMethod(member.get$setter());
@@ -2906,19 +2877,19 @@ WorldGenerator.prototype.get$markTypeUsed = function() {
}
WorldGenerator.prototype.getAllTypes = function(libs) {
var types = [];
- var seen = new HashSetImplementation();
- for (var $$i = 0;$$i < libs.get$length(); $$i++) {
- var mainLib = libs[$$i];
+ var seen = new HashSetImplementation_Library();
+ for (var $$i = libs.iterator(); $$i.hasNext(); ) {
+ var mainLib = $$i.next();
var toCheck = DoubleLinkedQueue.DoubleLinkedQueue$from$factory([mainLib]);
while (!toCheck.isEmpty()) {
var lib = toCheck.removeFirst();
if (seen.contains(lib)) continue;
seen.add(lib);
- lib.get$imports().forEach$1((function (lib, toCheck, i) {
+ lib.get$imports().forEach((function (lib, toCheck, i) {
return toCheck.addLast(lib);
}).bind(null, lib, toCheck)
);
- lib.get$types().getValues$0().forEach$1((function (t) {
+ lib.get$types().getValues().forEach((function (t) {
return types.add(t);
})
);
@@ -2937,11 +2908,11 @@ WorldGenerator.prototype.globalForStaticField = function(field, exp, dependencie
return ret;
}
WorldGenerator.prototype.globalForConst = function(exp, dependencies) {
- var key = exp.get$type().get$jsname() + ":" + exp.get$code();
+ var key = $add($add(exp.get$type().get$jsname(), ":"), exp.get$code());
var ret = this.globals.$index(key);
if (ret == null) {
var ns = this.globals.get$length().toString$0();
- while (ns.get$length() < (4)) ns = "0" + ns;
+ while (ns.get$length() < (4)) ns = $add("0", ns);
var name = ("const$" + ns);
ret = new GlobalValue(exp.get$type(), name, true, null, name, exp, exp.span, dependencies);
this.globals.$setindex(key, ret);
@@ -2952,13 +2923,13 @@ WorldGenerator.prototype.writeTypes = function(lib) {
if (lib.isWritten) return;
lib.isWritten = true;
var $$list = lib.imports;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var import_ = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var import_ = $$i.next();
this.writeTypes(import_.get$library());
}
for (var i = (0);
i < lib.sources.get$length(); i++) {
- lib.sources[i].set$orderInLibrary(i);
+ lib.sources[i].orderInLibrary = i;
}
this.writer.comment(("// ********** Library " + lib.name + " **************"));
if (lib.get$isCore()) {
@@ -2966,29 +2937,29 @@ WorldGenerator.prototype.writeTypes = function(lib) {
this.corejs.generate(this.writer);
}
var $$list = lib.natives;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var file = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var file = $$i.next();
var filename = basename(file.get$filename());
this.writer.comment(("// ********** Natives " + filename + " **************"));
this.writer.writeln(file.get$text());
}
lib.topType.markUsed();
var orderedTypes = this._orderValues(lib.types);
- for (var $$i = orderedTypes.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
+ for (var $$i = orderedTypes.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
if ((type.get$library().get$isDom() || type.get$isHiddenNativeType()) && type.get$isClass()) {
- type.markUsed$0();
+ type.markUsed();
}
}
- for (var $$i = orderedTypes.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
+ for (var $$i = orderedTypes.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
if (type.get$isUsed() && type.get$isClass()) {
this.writeType(type);
- if (type.get$isGeneric()) {
+ if (type.get$isGeneric() && type != $globals.world.listFactoryType) {
var $$list = this._orderValues(type.get$_concreteTypes());
- for (var $i0 = 0;$i0 < $$list.get$length(); $i0++) {
- var ct = $$list[$i0];
- this.writeType(ct);
+ for (var $i0 = $$list.iterator(); $i0.hasNext(); ) {
+ var ct = $i0.next();
+ if (ct.get$isUsed()) this.writeType(ct);
}
}
}
@@ -3001,10 +2972,8 @@ WorldGenerator.prototype.writeTypes = function(lib) {
}
}
}
-WorldGenerator.prototype.genMethod = function(meth, enclosingMethod) {
- if (!meth.isGenerated && !meth.get$isAbstract() && meth.get$definition() != null) {
- new MethodGenerator(meth, enclosingMethod).run();
- }
+WorldGenerator.prototype.genMethod = function(meth) {
+ meth.get$methodData().run(meth);
}
WorldGenerator.prototype._prototypeOf = function(type, name) {
if (type.get$isSingletonNative()) {
@@ -3013,13 +2982,14 @@ WorldGenerator.prototype._prototypeOf = function(type, name) {
else if (type.get$isHiddenNativeType()) {
this.corejs.ensureDynamicProto();
this._usedDynamicDispatchOnType(type);
- return ("$dynamic(\"" + name + "\")." + type.get$definition().get$nativeType().get$name());
+ return ("$dynamic(\"" + name + "\")." + type.get$definition().get$nativeType().name);
}
else {
return ("" + type.get$jsname() + ".prototype." + name);
}
}
WorldGenerator.prototype._writePrototypePatch = function(type, name, functionBody, writer, isOneLiner) {
+ var $0;
var writeFunction = writer.get$writeln();
var ending = ";";
if (!isOneLiner) {
@@ -3027,18 +2997,18 @@ WorldGenerator.prototype._writePrototypePatch = function(type, name, functionBod
ending = "";
}
if (type.get$isObject()) {
- $globals.world.counters.objectProtoMembers++;
+ ($0 = $globals.world.counters).objectProtoMembers = $0.objectProtoMembers + (1);
}
if (type.get$isObject() || $eq(type.get$genericType(), $globals.world.listFactoryType)) {
if (isOneLiner) {
- ending = ", enumerable: false, writable: true, configurable: true })" + ending;
+ ending = $add(", enumerable: false, writable: true, configurable: true })", ending);
}
- writeFunction.call$1(("Object.defineProperty(" + type.get$jsname() + ".prototype, \"" + name + "\",") + (" { value: " + functionBody + ending));
+ writeFunction.call$1($add(("Object.defineProperty(" + type.get$jsname() + ".prototype, \"" + name + "\","), (" { value: " + functionBody + ending)));
if (isOneLiner) return "}";
return "}, enumerable: false, writable: true, configurable: true });";
}
else {
- writeFunction.call$1(this._prototypeOf(type, name) + " = " + functionBody + ending);
+ writeFunction.call$1($add($add($add(this._prototypeOf(type, name), " = "), functionBody), ending));
return isOneLiner ? "" : "}";
}
}
@@ -3065,14 +3035,10 @@ WorldGenerator.prototype.writeType = function(type) {
if (type.get$parent() != null && !type.get$isNative()) {
this.writeType(type.get$parent());
}
- if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$library(), $globals.world.coreimpl) && type.name.startsWith("ListFactory")) {
- this.writer.writeln(("" + type.get$jsname() + " = " + type.get$genericType().get$jsname() + ";"));
- return;
- }
var typeName = type.get$jsname() != null ? type.get$jsname() : "top level";
this.writer.comment(("// ********** Code for " + typeName + " **************"));
- if (type.get$isNative() && !type.get$isTop()) {
- var nativeName = type.get$definition().get$nativeType().get$name();
+ if (type.get$isNative() && !type.get$isTop() && !type.get$isConcreteGeneric()) {
+ var nativeName = type.get$definition().get$nativeType().name;
if ($eq(nativeName, "")) {
this.writer.writeln(("function " + type.get$jsname() + "() {}"));
}
@@ -3088,15 +3054,9 @@ WorldGenerator.prototype.writeType = function(type) {
}
}
if (!type.get$isTop()) {
- if ((type instanceof ConcreteType)) {
- var c = type;
+ if (type.get$genericType() != type) {
this.corejs.ensureInheritsHelper();
- this.writer.writeln(("$inherits(" + c.get$jsname() + ", " + c.genericType.get$jsname() + ");"));
- for (var p = c._parent;
- (p instanceof ConcreteType); p = p.get$_parent()) {
- this._ensureInheritMembersHelper();
- this._mixins.writeln(("$inheritsMembers(" + c.get$jsname() + ", " + p.get$jsname() + ");"));
- }
+ this.writer.writeln(("$inherits(" + type.get$jsname() + ", " + type.get$genericType().get$jsname() + ");"));
}
else if (!type.get$isNative()) {
if (type.get$parent() != null && !type.get$parent().get$isObject()) {
@@ -3108,67 +3068,62 @@ WorldGenerator.prototype.writeType = function(type) {
if (type.get$isTop()) {
}
else if (type.get$constructors().get$length() == (0)) {
- if (!type.get$isNative()) {
+ if (!type.get$isNative() || type.get$isConcreteGeneric()) {
this.writer.writeln(("function " + type.get$jsname() + "() {}"));
}
}
else {
- var standardConstructor = type.get$constructors().$index("");
- if (standardConstructor == null || standardConstructor.generator == null) {
- if (!type.get$isNative()) {
- this.writer.writeln(("function " + type.get$jsname() + "() {}"));
- }
- }
- else {
- standardConstructor.generator.writeDefinition(this.writer, null);
- }
+ var wroteStandard = false;
var $$list = type.get$constructors().getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var c = $$i.next$0();
- if (c.get$generator() != null && $ne(c, standardConstructor)) {
- c.get$generator().writeDefinition$2(this.writer);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var c = $$i.next();
+ if (c.get$methodData().writeDefinition(c, this.writer)) {
+ if (c.get$isConstructor() && c.get$constructorName() == "") wroteStandard = true;
}
}
+ if (!wroteStandard && (!type.get$isNative() || type.get$genericType() != type)) {
+ this.writer.writeln(("function " + type.get$jsname() + "() {}"));
+ }
}
- if (!(type instanceof ConcreteType)) {
+ if (!type.get$isConcreteGeneric()) {
this._maybeIsTest(type, type);
}
if (type.get$genericType()._concreteTypes != null) {
var $$list = this._orderValues(type.get$genericType()._concreteTypes);
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var ct = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var ct = $$i.next();
this._maybeIsTest(type, ct);
}
}
if (type.get$interfaces() != null) {
var seen = new HashSetImplementation();
var worklist = [];
- worklist.addAll$1(type.get$interfaces());
- seen.addAll$1(type.get$interfaces());
- while (!worklist.isEmpty$0()) {
- var interface_ = worklist.removeLast$0();
+ worklist.addAll(type.get$interfaces());
+ seen.addAll(type.get$interfaces());
+ while (!worklist.isEmpty()) {
+ var interface_ = worklist.removeLast();
this._maybeIsTest(type, interface_.get$genericType());
- if (interface_.get$genericType().get$_concreteTypes() != null) {
- var $$list = this._orderValues(interface_.get$genericType().get$_concreteTypes());
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var ct = $$list[$$i];
+ if (interface_.get$genericType()._concreteTypes != null) {
+ var $$list = this._orderValues(interface_.get$genericType()._concreteTypes);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var ct = $$i.next();
this._maybeIsTest(type, ct);
}
}
var $$list = interface_.get$interfaces();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var other = $$i.next$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var other = $$i.next();
if (!seen.contains$1(other)) {
- worklist.addLast$1(other);
- seen.add$1(other);
+ worklist.addLast(other);
+ seen.add(other);
}
}
}
}
type.get$factories().forEach(this.get$_writeMethod());
var $$list = this._orderValues(type.get$members());
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var member = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
if ((member instanceof FieldMember)) {
this._writeField(member);
}
@@ -3182,30 +3137,13 @@ WorldGenerator.prototype.writeType = function(type) {
this._writeDynamicStubs(type);
}
WorldGenerator.prototype._typeNeedsHolderForStaticMethods = function(type) {
- var $$list = type.get$members().getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
- if (member.get$isMethod()) {
- if (member.get$isConstructor() || member.get$isStatic()) {
- if (member.get$isGenerated()) {
- return true;
- }
- }
- }
- }
- return false;
-}
-WorldGenerator.prototype._ensureInheritMembersHelper = function() {
- if (this._mixins != null) return;
- this._mixins = new CodeWriter();
- this._mixins.comment("// ********** Generic Type Inheritance **************");
- this._mixins.writeln("/** Implements extends for generic types. */\nfunction $inheritsMembers(child, parent) {\n child = child.prototype;\n parent = parent.prototype;\n Object.getOwnPropertyNames(parent).forEach(function(name) {\n if (typeof(child[name]) == 'undefined') child[name] = parent[name];\n });\n}");
+ return type.get$isUsed();
}
WorldGenerator.prototype._writeDynamicStubs = function(type) {
var $$list = orderValuesByKeys(type.varStubs);
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var stub = $$list[$$i];
- if (!stub.get$isGenerated()) stub.generate$1(this.writer);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var stub = $$i.next();
+ if (!stub.get$isGenerated()) stub.generate(this.writer);
}
}
WorldGenerator.prototype._writeStaticField = function(field) {
@@ -3217,7 +3155,7 @@ WorldGenerator.prototype._writeStaticField = function(field) {
this.writer.writeln(("$globals." + field.get$jsname() + " = " + value.get$exp().get$code() + ";"));
}
else {
- this.writer.writeln(("$globals." + field.declaringType.get$jsname() + "_" + field.get$jsname()) + (" = " + value.get$exp().get$code() + ";"));
+ this.writer.writeln($add(("$globals." + field.declaringType.get$jsname() + "_" + field.get$jsname()), (" = " + value.get$exp().get$code() + ";")));
}
}
}
@@ -3225,7 +3163,7 @@ WorldGenerator.prototype._writeField = function(field) {
if (field.declaringType.get$isTop() && !field.isNative && field.value == null) {
this.writer.writeln(("var " + field.get$jsname() + ";"));
}
- if (field._providePropertySyntax) {
+ if (field._providePropertySyntax && !field.declaringType.get$isConcreteGeneric()) {
this._writePrototypePatch(field.declaringType, ("get$" + field.get$jsname()), ("function() { return this." + field.get$jsname() + "; }"), this.writer, true);
if (!field.isFinal) {
this._writePrototypePatch(field.declaringType, ("set$" + field.get$jsname()), ("function(value) { return this." + field.get$jsname() + " = value; }"), this.writer, true);
@@ -3235,8 +3173,8 @@ WorldGenerator.prototype._writeField = function(field) {
WorldGenerator.prototype._writeProperty = function(property) {
if (property.getter != null) this._writeMethod(property.getter);
if (property.setter != null) this._writeMethod(property.setter);
- if (property._provideFieldSyntax) {
- this.writer.enterBlock("Object.defineProperty(" + ("" + property.declaringType.get$jsname() + ".prototype, \"" + property.get$jsname() + "\", {"));
+ if (property.get$needsFieldSyntax()) {
+ this.writer.enterBlock($add("Object.defineProperty(", ("" + property.declaringType.get$jsname() + ".prototype, \"" + property.get$jsname() + "\", {")));
if (property.getter != null) {
this.writer.write(("get: " + property.declaringType.get$jsname() + ".prototype." + property.getter.get$jsname()));
this.writer.writeln(property.setter == null ? "" : ",");
@@ -3248,10 +3186,8 @@ WorldGenerator.prototype._writeProperty = function(property) {
}
}
WorldGenerator.prototype._writeMethod = function(m) {
- if (m.generator != null) {
- m.generator.writeDefinition(this.writer, null);
- }
- else if ((m instanceof MethodMember) && m.get$isNative() && m._providePropertySyntax && !m._provideFieldSyntax) {
+ m.get$methodData().writeDefinition(m, this.writer);
+ if (m.get$isNative() && m._providePropertySyntax) {
MethodGenerator._maybeGenerateBoundGetter(m, this.writer);
}
}
@@ -3262,20 +3198,20 @@ WorldGenerator.prototype.writeGlobals = function() {
if (this.globals.get$length() > (0)) {
this.writer.comment("// ********** Globals **************");
var list = this.globals.getValues();
- list.sort$1((function (a, b) {
- return a.compareTo$1(b);
+ list.sort((function (a, b) {
+ return a.compareTo(b);
})
);
this.writer.enterBlock("function $static_init(){");
- for (var $$i = list.iterator$0(); $$i.hasNext$0(); ) {
- var global = $$i.next$0();
+ for (var $$i = list.iterator(); $$i.hasNext(); ) {
+ var global = $$i.next();
if (global.get$field() != null) {
this._writeStaticField(global.get$field());
}
}
this.writer.exitBlock("}");
- for (var $$i = list.iterator$0(); $$i.hasNext$0(); ) {
- var global = $$i.next$0();
+ for (var $$i = list.iterator(); $$i.hasNext(); ) {
+ var global = $$i.next();
if (global.get$field() == null) {
this.writer.writeln(("var " + global.get$name() + " = " + global.get$exp().get$code() + ";"));
}
@@ -3302,26 +3238,26 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
var types = [];
function visit(type) {
if (seen.contains$1(type)) return;
- seen.add$1(type);
+ seen.add(type);
var $$list = $this._orderCollectionValues(type.get$directSubtypes());
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var subtype = $$list[$$i];
- visit.call$1(subtype);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var subtype = $$i.next();
+ visit(subtype);
}
- types.add$1(type);
+ types.add(type);
}
var $$list = this._orderCollectionValues(this.typesWithDynamicDispatch);
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var type = $$list[$$i];
- visit.call$1(type);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
+ visit(type);
}
- var dispatchTypes = types.filter$1((function (type) {
- return !type.get$directSubtypes().isEmpty$0() && $this.typesWithDynamicDispatch.contains(type);
+ var dispatchTypes = types.filter((function (type) {
+ return !type.get$directSubtypes().isEmpty() && $this.typesWithDynamicDispatch.contains(type);
})
);
this.writer.comment(("// " + types.get$length() + " types"));
- this.writer.comment(("// " + types.filter$1((function (t) {
- return !t.get$directSubtypes().isEmpty$0();
+ this.writer.comment(("// " + types.filter((function (t) {
+ return !t.get$directSubtypes().isEmpty();
})
).get$length() + " !leaf"));
var varNames = [];
@@ -3332,33 +3268,33 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
var subtags = [type.get$nativeName()];
function walk(type) {
var $$list = $this._orderCollectionValues(type.get$directSubtypes());
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var subtype = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var subtype = $$i.next();
var tag = subtype.get$nativeName();
var existing = tagDefns.$index(tag);
- if (existing == null) {
- subtags.add$1(tag);
- walk.call$1(subtype);
+ if ($eq(existing)) {
+ subtags.add(tag);
+ walk(subtype);
}
else {
- if (varDefns.containsKey$1(existing)) {
- expressions.add$1(existing);
+ if (varDefns.containsKey(existing)) {
+ expressions.add(existing);
}
else {
var varName = ("v" + varNames.get$length() + "/*" + tag + "*/");
- varNames.add$1(varName);
+ varNames.add(varName);
varDefns.$setindex(varName, existing);
tagDefns.$setindex(tag, varName);
- expressions.add$1(varName);
+ expressions.add(varName);
}
}
}
}
- walk.call$1(type);
+ walk(type);
var constantPart = ("'" + Strings.join(subtags, "|") + "'");
- if ($ne(constantPart, "''")) expressions.add$1(constantPart);
+ if ($ne(constantPart, "''")) expressions.add(constantPart);
var expression;
- if ($eq(expressions.get$length(), (1))) {
+ if (expressions.get$length() == (1)) {
expression = expressions.$index((0));
}
else {
@@ -3366,20 +3302,20 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
}
return expression;
}
- for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
- tagDefns.$setindex(type.get$nativeName(), makeExpression.call$1(type));
+ for (var $$i = dispatchTypes.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
+ tagDefns.$setindex(type.get$nativeName(), makeExpression(type));
}
- if (!tagDefns.isEmpty$0()) {
+ if (!tagDefns.isEmpty()) {
this.writer.enterBlock("(function(){");
- for (var $$i = varNames.iterator$0(); $$i.hasNext$0(); ) {
- var varName = $$i.next$0();
+ for (var $$i = varNames.iterator(); $$i.hasNext(); ) {
+ var varName = $$i.next();
this.writer.writeln(("var " + varName + " = " + varDefns.$index(varName) + ";"));
}
this.writer.enterBlock("var table = [");
this.writer.comment("// [dynamic-dispatch-tag, tags of classes implementing dynamic-dispatch-tag]");
- for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
+ for (var $$i = dispatchTypes.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
this.writer.writeln(("['" + type.get$nativeName() + "', " + tagDefns.$index(type.get$nativeName()) + "],"));
}
this.writer.exitBlock("];");
@@ -3399,12 +3335,12 @@ WorldGenerator.prototype._orderCollectionValues = function(collection) {
}
WorldGenerator.prototype._compareMembers = function(x, y) {
if (x.get$span() != null && y.get$span() != null) {
- var spans = x.get$span().compareTo$1(y.get$span());
+ var spans = x.get$span().compareTo(y.get$span());
if (spans != (0)) return spans;
}
if (x.get$span() == null) return (1);
if (y.get$span() == null) return (-1);
- return x.get$name().compareTo$1(y.get$name());
+ return x.get$name().compareTo(y.get$name());
}
WorldGenerator.prototype.get$_compareMembers = function() {
return this._compareMembers.bind(this);
@@ -3429,18 +3365,30 @@ function MethodGenerator(method, enclosingMethod) {
}
MethodGenerator.prototype.get$method = function() { return this.method; };
MethodGenerator.prototype.set$method = function(value) { return this.method = value; };
+MethodGenerator.prototype.get$writer = function() { return this.writer; };
+MethodGenerator.prototype.set$writer = function(value) { return this.writer = value; };
MethodGenerator.prototype.get$_scope = function() { return this._scope; };
MethodGenerator.prototype.set$_scope = function(value) { return this._scope = value; };
MethodGenerator.prototype.get$enclosingMethod = function() { return this.enclosingMethod; };
MethodGenerator.prototype.set$enclosingMethod = function(value) { return this.enclosingMethod = value; };
MethodGenerator.prototype.get$needsThis = function() { return this.needsThis; };
MethodGenerator.prototype.set$needsThis = function(value) { return this.needsThis = value; };
+MethodGenerator.prototype.get$_paramCode = function() { return this._paramCode; };
+MethodGenerator.prototype.set$_paramCode = function(value) { return this._paramCode = value; };
+MethodGenerator.prototype.get$counters = function() { return this.counters; };
+MethodGenerator.prototype.set$counters = function(value) { return this.counters = value; };
MethodGenerator.prototype.get$library = function() {
return this.method.get$library();
}
MethodGenerator.prototype.findMembers = function(name) {
return this.get$library()._findMembers(name);
}
+MethodGenerator.prototype.get$needsCode = function() {
+ return true;
+}
+MethodGenerator.prototype.get$showWarnings = function() {
+ return false;
+}
MethodGenerator.prototype.get$isClosure = function() {
return (this.enclosingMethod != null);
}
@@ -3473,50 +3421,34 @@ MethodGenerator.prototype.freeTemp = function(value) {
}
MethodGenerator.prototype.run = function() {
- if (this.method.isGenerated) return;
- this.method.isGenerated = true;
- this.method.generator = this;
var thisObject;
if (this.method.get$isConstructor()) {
thisObject = new ObjectValue(false, this.method.declaringType, this.method.get$span());
- thisObject.initFields$0();
+ thisObject.initFields();
}
else {
thisObject = new Value(this.method.declaringType, "this", null);
}
var values = [];
var $$list = this.method.get$parameters();
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var p = $$list[$$i];
- values.add$1(new Value(p.get$type(), p.get$name(), null));
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var p = $$i.next();
+ values.add(new Value(p.get$type(), p.get$name(), null));
}
var args = new Arguments(null, values);
this.evalBody(thisObject, args);
- if (this.method.get$definition().get$nativeBody() != null) {
- this.writer = new CodeWriter();
- if ($eq(this.method.get$definition().get$nativeBody(), "")) {
- this.method.generator = null;
- }
- else {
- this._paramCode = map(this.method.get$parameters(), (function (p) {
- return p.get$name();
- })
- );
- this.writer.write(this.method.get$definition().get$nativeBody());
- }
- }
}
MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
var paramCode = this._paramCode;
var names = null;
if (this.captures != null && this.captures.get$length() > (0)) {
names = ListFactory.ListFactory$from$factory(this.captures);
- names.sort$1((function (x, y) {
- return x.compareTo$1(y);
+ names.sort((function (x, y) {
+ return x.compareTo(y);
})
);
paramCode = ListFactory.ListFactory$from$factory(names);
- paramCode.addAll$1(this._paramCode);
+ paramCode.addAll(this._paramCode);
}
var _params = ("(" + Strings.join(this._paramCode, ", ") + ")");
var params = ("(" + Strings.join(paramCode, ", ") + ")");
@@ -3528,7 +3460,7 @@ MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
if (this.method.name == "") {
defWriter.enterBlock(("(function " + params + " {"));
}
- else if (names != null) {
+ else if ($ne(names)) {
if (lambda == null) {
defWriter.enterBlock(("var " + this.method.get$jsname() + " = (function" + params + " {"));
}
@@ -3563,13 +3495,13 @@ MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
if (this._usedTemps.get$length() > (0) || this._freeTemps.get$length() > (0)) {
this._freeTemps.addAll(this._usedTemps);
this._freeTemps.sort((function (x, y) {
- return x.compareTo$1(y);
+ return x.compareTo(y);
})
);
defWriter.writeln(("var " + Strings.join(this._freeTemps, ", ") + ";"));
}
defWriter.writeln(this.writer.get$text());
- if (names != null) {
+ if ($ne(names)) {
defWriter.exitBlock(("}).bind(null, " + Strings.join(names, ", ") + ")"));
}
else if (this.get$isClosure() && this.method.name == "") {
@@ -3579,7 +3511,7 @@ MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
defWriter.exitBlock(suffix);
}
if (this.method.get$isConstructor() && this.method.get$constructorName() != "") {
- defWriter.writeln(("" + this.method.declaringType.get$jsname() + "." + this.method.get$constructorName() + "$ctor.prototype = ") + ("" + this.method.declaringType.get$jsname() + ".prototype;"));
+ defWriter.writeln($add(("" + this.method.declaringType.get$jsname() + "." + this.method.get$constructorName() + "$ctor.prototype = "), ("" + this.method.declaringType.get$jsname() + ".prototype;")));
}
this._provideOptionalParamInfo(defWriter);
if ((this.method instanceof MethodMember)) {
@@ -3588,12 +3520,9 @@ MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
}
MethodGenerator._maybeGenerateBoundGetter = function(m, defWriter) {
if (m._providePropertySyntax) {
- var suffix = $globals.world.gen._writePrototypePatch(m.declaringType, "get$" + m.get$jsname(), "function() {", defWriter, false);
+ var suffix = $globals.world.gen._writePrototypePatch(m.declaringType, $add("get$", m.get$jsname()), "function() {", defWriter, false);
defWriter.writeln(("return this." + m.get$jsname() + ".bind(this);"));
defWriter.exitBlock(suffix);
- if (m._provideFieldSyntax) {
- $globals.world.internalError(("bound \"" + m.name + "\" accessed with field syntax"), m.definition.span);
- }
}
}
MethodGenerator.prototype._provideOptionalParamInfo = function(defWriter) {
@@ -3602,27 +3531,27 @@ MethodGenerator.prototype._provideOptionalParamInfo = function(defWriter) {
if (meth._provideOptionalParamInfo) {
var optNames = [];
var optValues = [];
- meth.genParameterValues();
+ meth.genParameterValues(this);
var $$list = meth.parameters;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var param = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var param = $$i.next();
if (param.get$isOptional()) {
- optNames.add$1(param.get$name());
- optValues.add$1(MethodGenerator._escapeString(param.get$value().get$code()));
+ optNames.add(param.get$name());
+ optValues.add(MethodGenerator._escapeString(param.get$value().get$code()));
}
}
if (optNames.get$length() > (0)) {
var start = "";
if (meth.isStatic) {
if (!meth.declaringType.get$isTop()) {
- start = meth.declaringType.get$jsname() + ".";
+ start = $add(meth.declaringType.get$jsname(), ".");
}
}
else {
- start = meth.declaringType.get$jsname() + ".prototype.";
+ start = $add(meth.declaringType.get$jsname(), ".prototype.");
}
- optNames.addAll$1(optValues);
- var optional = "['" + Strings.join(optNames, "', '") + "']";
+ optNames.addAll(optValues);
+ var optional = $add($add("['", Strings.join(optNames, "', '")), "']");
defWriter.writeln(("" + start + meth.get$jsname() + ".$optional = " + optional));
}
}
@@ -3630,7 +3559,7 @@ MethodGenerator.prototype._provideOptionalParamInfo = function(defWriter) {
}
MethodGenerator.prototype._initField = function(newObject, name, value, span) {
var field = this.method.declaringType.getMember(name);
- if (field == null) {
+ if ($eq(field)) {
$globals.world.error("bad initializer - no matching field", span);
}
if (!field.get$isField()) {
@@ -3649,12 +3578,12 @@ MethodGenerator.prototype.evalBody = function(newObject, args) {
var p = this.method.get$parameters()[i];
var currentArg = null;
if (i < args.get$bareCount()) {
- currentArg = args.values[i];
+ currentArg = args.values.$index(i);
}
else {
currentArg = args.getValue(p.get$name());
if (currentArg == null) {
- p.genValue$2(this.method, this.method.generator);
+ p.genValue(this.method, this);
currentArg = p.get$value();
}
}
@@ -3667,22 +3596,22 @@ MethodGenerator.prototype.evalBody = function(newObject, args) {
var paramValue = this._scope.declareParameter(p);
this._paramCode.add(paramValue.get$code());
if (newObject != null && newObject.get$isConst()) {
- this._scope.assign(p.get$name(), currentArg.convertTo(this, p.get$type(), false));
+ this._scope.assign(p.get$name(), currentArg.convertTo(this, p.get$type()));
}
}
}
var initializerCall = null;
- var declaredInitializers = this.method.get$definition().get$initializers();
- if (declaredInitializers != null) {
- for (var $$i = declaredInitializers.iterator$0(); $$i.hasNext$0(); ) {
- var init = $$i.next$0();
+ var declaredInitializers = this.method.get$definition().get$dynamic().get$initializers();
+ if ($ne(declaredInitializers)) {
+ for (var $$i = declaredInitializers.iterator(); $$i.hasNext(); ) {
+ var init = $$i.next();
if ((init instanceof CallExpression)) {
- if (initializerCall != null) {
+ if ($ne(initializerCall)) {
$globals.world.error("only one initializer redirecting call is allowed", init.get$span());
}
initializerCall = init;
}
- else if ((init instanceof BinaryExpression) && TokenKind.kindFromAssign(init.get$op().get$kind()) == (0)) {
+ else if ((init instanceof BinaryExpression) && TokenKind.kindFromAssign(init.get$op().kind) == (0)) {
var left = init.get$x();
if (!((left instanceof DotExpression) && (left.get$self() instanceof ThisExpression) || (left instanceof VarExpression))) {
$globals.world.error("invalid left side of initializer", left.get$span());
@@ -3697,24 +3626,24 @@ MethodGenerator.prototype.evalBody = function(newObject, args) {
}
}
}
- if (this.method.get$isConstructor() && initializerCall == null && !this.method.get$isNative()) {
+ if (this.method.get$isConstructor() && $eq(initializerCall) && !this.method.get$isNative()) {
var parentType = this.method.declaringType.get$parent();
- if (parentType != null && !parentType.get$isObject()) {
+ if ($ne(parentType) && !parentType.get$isObject()) {
initializerCall = new CallExpression(new SuperExpression(this.method.get$span()), [], this.method.get$span());
}
}
if (this.method.get$isConstructor() && (newObject instanceof ObjectValue)) {
var fields = newObject.get$dynamic().get$fields();
- var $$list = fields.getKeys$0();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var field = $$i.next$0();
+ var $$list = fields.getKeys();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var field = $$i.next();
var value = fields.$index(field);
if (value != null) {
this.writer.writeln(("this." + field.get$jsname() + " = " + value.get$code() + ";"));
}
}
}
- if (initializerCall != null) {
+ if ($ne(initializerCall)) {
this.evalInitializerCall(newObject, initializerCall, fieldsSet);
}
if (this.method.get$isConstructor() && newObject != null && newObject.get$isConst()) {
@@ -3722,16 +3651,16 @@ MethodGenerator.prototype.evalBody = function(newObject, args) {
}
else if (this.method.get$isConstructor()) {
var fields = newObject.get$dynamic().get$fields();
- var $$list = fields.getKeys$0();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var field = $$i.next$0();
+ var $$list = fields.getKeys();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var field = $$i.next();
var value = fields.$index(field);
if (value == null && field.get$isFinal() && $eq(field.get$declaringType(), this.method.declaringType) && !newObject.get$dynamic().get$seenNativeInitializer()) {
$globals.world.error(("uninitialized final field \"" + field.get$name() + "\""), field.get$span(), this.method.get$span());
}
}
}
- var body = this.method.get$definition().get$body();
+ var body = this.method.get$definition().get$dynamic().get$body();
if (body == null) {
if (!this.method.get$isConstructor() && !this.method.get$isNative()) {
$globals.world.error(("unexpected empty body for " + this.method.name), this.method.get$definition().get$span());
@@ -3765,13 +3694,13 @@ MethodGenerator.prototype.evalInitializerCall = function(newObject, node, fields
else {
$globals.world.error("bad call in initializers", node.span);
}
- var m = targetType.getConstructor$1(contructorName);
- if (m == null) {
+ var m = targetType.getConstructor(contructorName);
+ if ($eq(m)) {
$globals.world.error(("no matching constructor for " + targetType.name), node.span);
}
this.method.set$initDelegate(m);
var other = m;
- while (other != null) {
+ while ($ne(other)) {
if ($eq(other, this.method)) {
$globals.world.error("initialization cycle", node.span);
break;
@@ -3780,9 +3709,9 @@ MethodGenerator.prototype.evalInitializerCall = function(newObject, node, fields
}
var newArgs = this._makeArgs(node.arguments);
$globals.world.gen.genMethod(m);
- m._evalConstConstructor$2(newObject, newArgs);
+ m._evalConstConstructor(newObject, newArgs);
if (!newObject.isConst) {
- var value = m.invoke$4(this, node, target, newArgs);
+ var value = m.invoke(this, node, target, newArgs);
if ($ne(target.get$type(), $globals.world.objectType)) {
this.writer.writeln(("" + value.get$code() + ";"));
}
@@ -3791,15 +3720,15 @@ MethodGenerator.prototype.evalInitializerCall = function(newObject, node, fields
MethodGenerator.prototype._makeArgs = function(arguments) {
var args = [];
var seenLabel = false;
- for (var $$i = 0;$$i < arguments.get$length(); $$i++) {
- var arg = arguments[$$i];
+ for (var $$i = arguments.iterator(); $$i.hasNext(); ) {
+ var arg = $$i.next();
if (arg.get$label() != null) {
seenLabel = true;
}
else if (seenLabel) {
$globals.world.error("bare argument can not follow named arguments", arg.get$span());
}
- args.add$1(this.visitValue(arg.get$value()));
+ args.add(this.visitValue(arg.get$value()));
}
return new Arguments(arguments, args);
}
@@ -3809,7 +3738,7 @@ MethodGenerator.prototype._invokeNative = function(name, arguments) {
args = new Arguments(null, arguments);
}
var method = $globals.world.corelib.topType.members.$index(name);
- return method.invoke$4(this, method.get$definition(), new Value($globals.world.corelib.topType, null, null), args);
+ return method.invoke(this, method.get$definition(), new Value($globals.world.corelib.topType, null, null), args);
}
MethodGenerator._escapeString = function(text) {
return text.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"").replaceAll("\n", "\\n").replaceAll("\r", "\\r");
@@ -3818,9 +3747,9 @@ MethodGenerator.prototype.visitStatementsInBlock = function(body) {
if ((body instanceof BlockStatement)) {
var block = body;
var $$list = block.body;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var stmt = $$list[$$i];
- stmt.visit$1(this);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var stmt = $$i.next();
+ stmt.visit(this);
}
}
else {
@@ -3834,9 +3763,9 @@ MethodGenerator.prototype._pushBlock = function(node, reentrant) {
MethodGenerator.prototype._popBlock = function(node) {
if (this._scope.node != node) {
function spanOf(n) {
- return n != null ? n.get$span() : null;
+ return $ne(n) ? n.get$span() : null;
}
- $globals.world.internalError(("scope mismatch. Trying to pop \"" + node + "\" but found ") + (" \"" + this._scope.node + "\""), spanOf.call$1(node), spanOf.call$1(this._scope.node));
+ $globals.world.internalError($add(("scope mismatch. Trying to pop \"" + node + "\" but found "), (" \"" + this._scope.node + "\"")), spanOf(node), spanOf(this._scope.node));
}
this._scope = this._scope.parent;
}
@@ -3846,7 +3775,7 @@ MethodGenerator.prototype._visitLoop = function(node, visitBody) {
}
else {
this._pushBlock(node, true);
- visitBody.call$0();
+ visitBody();
this._popBlock(node);
}
}
@@ -3863,7 +3792,7 @@ MethodGenerator.prototype._loopFixedPoint = function(node, visitBody) {
if (tries++ >= $globals.options.maxInferenceIterations) {
this._scope.inferTypes = false;
}
- visitBody.call$0();
+ visitBody();
this._popBlock(node);
if (!this._scope.inferTypes || !this._scope.unionWith(s)) {
break;
@@ -3872,66 +3801,67 @@ MethodGenerator.prototype._loopFixedPoint = function(node, visitBody) {
}
savedWriter.write$1(this.writer.get$text());
this.writer = savedWriter;
- savedCounters.add$1(this.counters);
+ savedCounters.add(this.counters);
this.counters = savedCounters;
}
MethodGenerator.prototype._makeLambdaMethod = function(name, func) {
var meth = new MethodMember(name, this.method.declaringType, func);
meth.set$isLambda(true);
meth.set$enclosingElement(this.method);
- meth.resolve$0();
+ meth.set$_methodData(new MethodData(meth, this));
+ meth.resolve();
return meth;
}
MethodGenerator.prototype.visitBool = function(node) {
- return this.visitValue(node).convertTo$2(this, $globals.world.nonNullBool);
+ return this.visitValue(node).convertTo(this, $globals.world.nonNullBool);
}
MethodGenerator.prototype.visitValue = function(node) {
if (node == null) return null;
var value = node.visit(this);
- value.checkFirstClass$1(node.span);
+ value.checkFirstClass(node.span);
return value;
}
MethodGenerator.prototype.visitTypedValue = function(node, expectedType) {
var val = this.visitValue(node);
- return expectedType == null ? val : val.convertTo$2(this, expectedType);
+ return expectedType == null ? val : val.convertTo(this, expectedType);
}
MethodGenerator.prototype.visitVoid = function(node) {
if ((node instanceof PostfixExpression)) {
var value = this.visitPostfixExpression(node, true);
- value.checkFirstClass$1(node.span);
+ value.checkFirstClass(node.span);
return value;
}
else if ((node instanceof BinaryExpression)) {
var value = this.visitBinaryExpression(node, true);
- value.checkFirstClass$1(node.span);
+ value.checkFirstClass(node.span);
return value;
}
return this.visitValue(node);
}
MethodGenerator.prototype.visitDietStatement = function(node) {
var parser = new Parser(node.span.file, false, false, false, node.span.start);
- this.visitStatementsInBlock(parser.block$0());
+ this.visitStatementsInBlock(parser.block());
return false;
}
MethodGenerator.prototype.visitVariableDefinition = function(node) {
var isFinal = false;
- if (node.modifiers != null && $eq(node.modifiers[(0)].get$kind(), (99))) {
+ if (node.modifiers != null && node.modifiers[(0)].kind == (99)) {
isFinal = true;
}
this.writer.write("var ");
- var type = this.method.resolveType$2(node.type, false);
+ var type = this.method.resolveType(node.type, false, true);
for (var i = (0);
i < node.names.get$length(); i++) {
if (i > (0)) {
this.writer.write(", ");
}
- var name = node.names[i].get$name();
+ var name = node.names[i].name;
var value = this.visitValue(node.values[i]);
- if (isFinal && value == null) {
+ if (isFinal && $eq(value)) {
$globals.world.error("no value specified for final variable", node.span);
}
- var val = this._scope.create(name, type, node.names[i].get$span(), isFinal, false);
- if (value == null) {
+ var val = this._scope.create(name, type, node.names[i].span, isFinal, false);
+ if ($eq(value)) {
if (this._scope.reentrant) {
this.writer.write(("" + val.get$code() + " = null"));
}
@@ -3940,7 +3870,7 @@ MethodGenerator.prototype.visitVariableDefinition = function(node) {
}
}
else {
- value = value.convertTo$2(this, type);
+ value = value.convertTo(this, type);
this._scope.inferAssign(name, value);
this.writer.write(("" + val.get$code() + " = " + value.get$code()));
}
@@ -3951,8 +3881,7 @@ MethodGenerator.prototype.visitVariableDefinition = function(node) {
MethodGenerator.prototype.visitFunctionDefinition = function(node) {
var meth = this._makeLambdaMethod(node.name.name, node);
var funcValue = this._scope.create(meth.get$name(), meth.get$functionType(), this.method.get$definition().get$span(), true, false);
- $globals.world.gen.genMethod(meth, this);
- meth.get$generator().writeDefinition$2(this.writer);
+ meth.get$methodData().createFunction(this.writer);
return false;
}
MethodGenerator.prototype.visitReturnStatement = function(node) {
@@ -3971,13 +3900,13 @@ MethodGenerator.prototype.visitReturnStatement = function(node) {
MethodGenerator.prototype.visitThrowStatement = function(node) {
if (node.value != null) {
var value = this.visitValue(node.value);
- value.invoke$4(this, "toString", node, Arguments.get$EMPTY());
+ value.invoke(this, "toString", node, Arguments.get$EMPTY());
this.writer.writeln(("$throw(" + value.get$code() + ");"));
$globals.world.gen.corejs.useThrow = true;
}
else {
var rethrow = this._scope.getRethrow();
- if (rethrow == null) {
+ if ($eq(rethrow)) {
$globals.world.error("rethrow outside of catch", node.span);
}
else {
@@ -3990,12 +3919,12 @@ MethodGenerator.prototype.visitAssertStatement = function(node) {
var test = this.visitValue(node.test);
if ($globals.options.enableAsserts) {
var span = node.test.span;
- var line = $add(span.get$file().getLine$1(span.get$start()), (1));
- var column = $add(span.get$file().getColumn$2(line - (1), span.get$start()), (1));
- var args = [test, Value.fromString(span.get$text(), node.span), Value.fromString(span.get$file().get$filename(), node.span), Value.fromInt(line, node.span), Value.fromInt(column, node.span)];
+ var line = span.get$file().getLine(span.get$start()) + (1);
+ var column = span.get$file().getColumn($sub(line, (1)), span.get$start()) + (1);
+ var args = [test, Value.fromString(span.get$text(), node.span), Value.fromString(span.get$file().filename, node.span), Value.fromInt(line, node.span), Value.fromInt(column, node.span)];
var tp = $globals.world.corelib.topType;
- var f = tp.getMember$1("_assert");
- var value = f.invoke(this, node, new TypeValue(tp, null), new Arguments(null, args), false);
+ var f = tp.getMember("_assert");
+ var value = f.invoke(this, node, new TypeValue(tp, null), new Arguments(null, args));
this.writer.writeln(("" + value.get$code() + ";"));
}
return false;
@@ -4071,8 +4000,8 @@ MethodGenerator.prototype.visitForStatement = function(node) {
}
var needsComma = false;
var $$list = node.step;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var s = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var s = $$i.next();
if (needsComma) $this.writer.write(", ");
var sv = $this.visitVoid(s);
$this.writer.write(sv.get$code());
@@ -4091,11 +4020,14 @@ MethodGenerator.prototype._isFinal = function(typeRef) {
if ((typeRef instanceof GenericTypeReference)) {
typeRef = typeRef.get$baseType();
}
- return typeRef != null && typeRef.get$isFinal();
+ else if ((typeRef instanceof SimpleTypeReference)) {
+ return false;
+ }
+ return $ne(typeRef) && typeRef.get$isFinal();
}
MethodGenerator.prototype.visitForInStatement = function(node) {
var $this = this; // closure support
- var itemType = this.method.resolveType$2(node.item.type, false);
+ var itemType = this.method.resolveType(node.item.type, false, true);
var list = node.list.visit(this);
this._visitLoop(node, (function () {
$this._visitForInBody(node, itemType, list);
@@ -4112,18 +4044,18 @@ MethodGenerator.prototype._visitForInBody = function(node, itemType, list) {
this.writer.writeln(("var " + listVar.get$code() + " = " + list.get$code() + ";"));
list = listVar;
}
- if (list.get$type().get$isList()) {
+ if ($eq(list.get$type().get$genericType(), $globals.world.listFactoryType)) {
var tmpi = this._scope.create("$i", $globals.world.numType, null, false, false);
var listLength = list.get_(this, "length", node.list);
- this.writer.enterBlock(("for (var " + tmpi.get$code() + " = 0;") + ("" + tmpi.get$code() + " < " + listLength.get$code() + "; " + tmpi.get$code() + "++) {"));
- var value = list.invoke(this, ":index", node.list, new Arguments(null, [tmpi]), false);
+ this.writer.enterBlock($add(("for (var " + tmpi.get$code() + " = 0;"), ("" + tmpi.get$code() + " < " + listLength.get$code() + "; " + tmpi.get$code() + "++) {")));
+ var value = list.invoke(this, ":index", node.list, new Arguments(null, [tmpi]));
this.writer.writeln(("var " + item.get$code() + " = " + value.get$code() + ";"));
}
else {
- var iterator = list.invoke(this, "iterator", node.list, Arguments.get$EMPTY(), false);
+ var iterator = list.invoke(this, "iterator", node.list, Arguments.get$EMPTY());
var tmpi = this._scope.create("$i", iterator.get$type(), null, false, false);
- var hasNext = tmpi.invoke$4(this, "hasNext", node.list, Arguments.get$EMPTY());
- var next = tmpi.invoke$4(this, "next", node.list, Arguments.get$EMPTY());
+ var hasNext = tmpi.invoke(this, "hasNext", node.list, Arguments.get$EMPTY());
+ var next = tmpi.invoke(this, "next", node.list, Arguments.get$EMPTY());
this.writer.enterBlock(("for (var " + tmpi.get$code() + " = " + iterator.get$code() + "; " + hasNext.get$code() + "; ) {"));
this.writer.writeln(("var " + item.get$code() + " = " + next.get$code() + ";"));
}
@@ -4146,11 +4078,11 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
if (node.catches.get$length() == (1)) {
var catch_ = node.catches[(0)];
this._pushBlock(catch_, false);
- var exType = this.method.resolveType$2(catch_.get$exception().get$type(), false);
+ var exType = this.method.resolveType(catch_.get$exception().get$type(), false, true);
var ex = this._scope.declare(catch_.get$exception());
this._scope.rethrow = ex.get$code();
this.writer.nextBlock(("} catch (" + ex.get$code() + ") {"));
- if (catch_.get$trace() != null) {
+ if ($ne(catch_.get$trace())) {
var trace = this._scope.declare(catch_.get$trace());
this._genStackTraceOf(trace, ex);
}
@@ -4159,7 +4091,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
var test = ex.instanceOf$3$isTrue$forceCheck(this, exType, catch_.get$exception().get$span(), false, true);
this.writer.writeln(("if (" + test.get$code() + ") throw " + ex.get$code() + ";"));
}
- this.visitStatementsInBlock(node.catches[(0)].get$body());
+ this.visitStatementsInBlock(node.catches[(0)].body);
this._popBlock(catch_);
}
else if (node.catches.get$length() > (0)) {
@@ -4169,7 +4101,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
this.writer.nextBlock(("} catch (" + ex.get$code() + ") {"));
var trace = null;
if (node.catches.some((function (c) {
- return c.get$trace() != null;
+ return $ne(c.get$trace());
})
)) {
trace = this._scope.create("$trace", $globals.world.varType, null, false, false);
@@ -4181,7 +4113,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
i < node.catches.get$length(); i++) {
var catch_ = node.catches[i];
this._pushBlock(catch_, false);
- var tmpType = this.method.resolveType$2(catch_.get$exception().get$type(), false);
+ var tmpType = this.method.resolveType(catch_.get$exception().get$type(), false, true);
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);
@@ -4196,7 +4128,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
this.writer.nextBlock("} else {");
}
this.writer.writeln(("var " + tmp.get$code() + " = " + ex.get$code() + ";"));
- if (catch_.get$trace() != null) {
+ if ($ne(catch_.get$trace())) {
var tmptrace = this._scope.declare(catch_.get$trace());
this.writer.writeln(("var " + tmptrace.get$code() + " = " + trace.get$code() + ";"));
}
@@ -4204,7 +4136,7 @@ MethodGenerator.prototype.visitTryStatement = function(node) {
this._popBlock(catch_);
if (tmpType.get$isVarOrObject()) {
if (i + (1) < node.catches.get$length()) {
- $globals.world.error("Unreachable catch clause", node.catches[i + (1)].get$span());
+ $globals.world.error("Unreachable catch clause", node.catches[i + (1)].span);
}
if (i > (0)) {
this.writer.exitBlock("}");
@@ -4233,8 +4165,8 @@ MethodGenerator.prototype.visitSwitchStatement = function(node) {
var test = this.visitValue(node.test);
this.writer.enterBlock(("switch (" + test.get$code() + ") {"));
var $$list = node.cases;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var case_ = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var case_ = $$i.next();
if (case_.get$label() != null) {
$globals.world.error("unimplemented: labeled case statement", case_.get$span());
}
@@ -4242,7 +4174,7 @@ MethodGenerator.prototype.visitSwitchStatement = function(node) {
for (var i = (0);
i < case_.get$cases().get$length(); i++) {
var expr = case_.get$cases().$index(i);
- if (expr == null) {
+ if ($eq(expr)) {
if (i < case_.get$cases().get$length() - (1)) {
$globals.world.error("default clause must be the last case", case_.get$span());
}
@@ -4270,7 +4202,7 @@ MethodGenerator.prototype._visitAllStatements = function(statementList, exits) {
for (var i = (0);
i < statementList.get$length(); i++) {
var stmt = statementList.$index(i);
- exits = stmt.visit$1(this);
+ exits = stmt.visit(this);
if ($ne(stmt, statementList.$index(statementList.get$length() - (1))) && exits) {
$globals.world.warning("unreachable code", statementList.$index(i + (1)).get$span());
}
@@ -4310,7 +4242,7 @@ MethodGenerator.prototype._checkNonStatic = function(node) {
MethodGenerator.prototype._makeSuperValue = function(node) {
var parentType = this.method.declaringType.get$parent();
this._checkNonStatic(node);
- if (parentType == null) {
+ if ($eq(parentType)) {
$globals.world.error("no super class", node.span);
}
return new SuperValue(parentType, node.span);
@@ -4334,7 +4266,7 @@ MethodGenerator.prototype._makeThisCode = function() {
MethodGenerator.prototype._makeThisValue = function(node) {
if (this.enclosingMethod != null) {
var outermostMethod = this._getOutermostMethod();
- outermostMethod._checkNonStatic$1(node);
+ outermostMethod._checkNonStatic(node);
outermostMethod.set$needsThis(true);
return new ThisValue(outermostMethod.get$method().get$declaringType(), "$this", node != null ? node.span : null);
}
@@ -4346,15 +4278,7 @@ MethodGenerator.prototype._makeThisValue = function(node) {
MethodGenerator.prototype.visitLambdaExpression = function(node) {
var name = (node.func.name != null) ? node.func.name.name : "";
var meth = this._makeLambdaMethod(name, node.func);
- var lambdaGen = new MethodGenerator(meth, this);
- if ($ne(name, "")) {
- lambdaGen.get$_scope().create$3$isFinal(name, meth.get$functionType(), meth.definition.span, true);
- lambdaGen._pushBlock$1(node);
- }
- lambdaGen.run$0();
- var w = new CodeWriter();
- meth.generator.writeDefinition(w, node);
- return new Value(meth.get$functionType(), w.get$text(), node.span);
+ return meth.get$methodData().createLambda(node, this);
}
MethodGenerator.prototype.visitCallExpression = function(node) {
var target;
@@ -4370,21 +4294,21 @@ MethodGenerator.prototype.visitCallExpression = function(node) {
var varExpr = node.target;
name = varExpr.name.name;
target = this._scope.lookup(name);
- if (target != null) {
- return target.invoke$4(this, ":call", node, this._makeArgs(node.arguments));
+ if ($ne(target)) {
+ return target.invoke(this, ":call", node, this._makeArgs(node.arguments));
}
target = this._makeThisOrType(varExpr.span);
- return target.invoke$4(this, name, node, this._makeArgs(node.arguments));
+ return target.invoke(this, name, node, this._makeArgs(node.arguments));
}
else {
target = node.target.visit(this);
}
- return target.invoke$4(this, name, position, this._makeArgs(node.arguments));
+ return target.invoke(this, name, position, this._makeArgs(node.arguments));
}
MethodGenerator.prototype.visitIndexExpression = function(node) {
var target = this.visitValue(node.target);
var index = this.visitValue(node.index);
- return target.invoke$4(this, ":index", node, new Arguments(null, [index]));
+ return target.invoke(this, ":index", node, new Arguments(null, [index]));
}
MethodGenerator.prototype._expressionNeedsParens = function(e) {
return ((e instanceof BinaryExpression) || (e instanceof ConditionalExpression) || (e instanceof PostfixExpression) || this._isUnaryIncrement(e));
@@ -4394,18 +4318,18 @@ MethodGenerator.prototype.visitBinaryExpression = function(node, isVoid) {
if ($eq(kind, (35)) || $eq(kind, (34))) {
var x = this.visitTypedValue(node.x, $globals.world.nonNullBool);
var y = this.visitTypedValue(node.y, $globals.world.nonNullBool);
- return x.binop$4(kind, y, this, node);
+ return x.binop(kind, y, this, node);
}
else if ($eq(kind, (50)) || $eq(kind, (51))) {
var x = this.visitValue(node.x);
var y = this.visitValue(node.y);
- return x.binop$4(kind, y, this, node);
+ return x.binop(kind, y, this, node);
}
var assignKind = TokenKind.kindFromAssign(node.op.kind);
if ($eq(assignKind, (-1))) {
var x = this.visitValue(node.x);
var y = this.visitValue(node.y);
- return x.binop$4(kind, y, this, node);
+ return x.binop(kind, y, this, node);
}
else if (($ne(assignKind, (0))) && this._expressionNeedsParens(node.y)) {
return this._visitAssign(assignKind, node.x, new ParenExpression(node.y, node.y.span), node, isVoid ? (1) : (2));
@@ -4432,8 +4356,8 @@ MethodGenerator.prototype._visitVarAssign = function(kind, xn, yn, position, ret
var name = xn.name.name;
var x = this._scope.lookup(name);
var y = this.visitValue(yn);
- if (x != null) {
- y = y.convertTo$2(this, x.get$staticType());
+ if ($ne(x)) {
+ y = y.convertTo(this, x.get$staticType());
this._scope.inferAssign(name, Value.union(x, y));
if (x.get$isFinal()) {
$globals.world.error(("final variable \"" + x.get$code() + "\" is not assignable"), position.span);
@@ -4450,7 +4374,7 @@ MethodGenerator.prototype._visitVarAssign = function(kind, xn, yn, position, ret
}
else {
var right = x;
- y = right.binop$4(kind, y, this, position);
+ y = right.binop(kind, y, this, position);
if (returnKind == (3)) {
var tmp = this.forceTemp(x);
var ret = new Value(x.get$type(), ("(" + tmp.get$code() + " = " + x.get$code() + ", " + x.get$code() + " = " + y.get$code() + ", " + tmp.get$code() + ")"), position.span);
@@ -4484,7 +4408,7 @@ MethodGenerator.prototype.visitUnaryExpression = function(node) {
case (16):
case (17):
- if (value.get$type().get$isNum()) {
+ if (value.get$type().get$isNum() && !value.get$isFinal() && (node.self instanceof VarExpression)) {
return new Value(value.get$type(), ("" + node.op + value.get$code()), node.span);
}
else {
@@ -4495,7 +4419,7 @@ MethodGenerator.prototype.visitUnaryExpression = function(node) {
}
}
- return value.unop$3(node.op.kind, this, node);
+ return value.unop(node.op.kind, this, node);
}
MethodGenerator.prototype.visitDeclaredIdentifier = function(node) {
$globals.world.error("Expected expression", node.span);
@@ -4505,7 +4429,7 @@ MethodGenerator.prototype.visitAwaitExpression = function(node) {
}
MethodGenerator.prototype.visitPostfixExpression = function(node, isVoid) {
var value = this.visitValue(node.body);
- if (value.get$type().get$isNum() && !value.get$isFinal()) {
+ if (value.get$type().get$isNum() && !value.get$isFinal() && (node.body instanceof VarExpression)) {
return new Value(value.get$type(), ("" + value.get$code() + node.op), node.span);
}
var kind = ((16) == node.op.kind) ? (42) : (43);
@@ -4519,23 +4443,23 @@ MethodGenerator.prototype.visitNewExpression = function(node) {
if (node.name != null) {
constructorName = node.name.name;
}
- if ($eq(constructorName, "") && !(typeRef instanceof GenericTypeReference) && typeRef.get$names() != null) {
+ if ($eq(constructorName, "") && (typeRef instanceof NameTypeReference) && typeRef.get$names() != null) {
var names = ListFactory.ListFactory$from$factory(typeRef.get$names());
- constructorName = names.removeLast$0().get$name();
- if ($eq(names.get$length(), (0))) names = null;
+ constructorName = names.removeLast().get$name();
+ if (names.get$length() == (0)) names = null;
typeRef = new NameTypeReference(typeRef.get$isFinal(), typeRef.get$name(), names, typeRef.get$span());
}
- var type = this.method.resolveType$2(typeRef, true);
+ var type = this.method.resolveType(typeRef, true, true);
if (type.get$isTop()) {
- type = type.get$library().findTypeByName$1(constructorName);
+ type = type.get$library().findTypeByName(constructorName);
constructorName = "";
}
if ((type instanceof ParameterType)) {
$globals.world.error("cannot instantiate a type parameter", node.span);
return this._makeMissingValue(constructorName);
}
- var m = type.getConstructor$1(constructorName);
- if (m == null) {
+ var m = type.getConstructor(constructorName);
+ if ($eq(m)) {
var name = type.get$jsname();
if (type.get$isVar()) {
name = typeRef.get$name().get$name();
@@ -4548,51 +4472,51 @@ MethodGenerator.prototype.visitNewExpression = function(node) {
$globals.world.error("can't use const on a non-const constructor", node.span);
}
var $$list = node.arguments;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var arg = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var arg = $$i.next();
if (!this.visitValue(arg.get$value()).get$isConst()) {
$globals.world.error("const constructor expects const arguments", arg.get$span());
}
}
}
var target = new TypeValue(type, typeRef.get$span());
- return m.invoke$4(this, node, target, this._makeArgs(node.arguments));
+ return m.invoke(this, node, target, this._makeArgs(node.arguments));
}
MethodGenerator.prototype.visitListExpression = function(node) {
var argValues = [];
var listType = $globals.world.listType;
var type = $globals.world.varType;
if (node.itemType != null) {
- type = this.method.resolveType$2(node.itemType, true);
+ type = this.method.resolveType(node.itemType, true, !node.isConst);
if (node.isConst && ((type instanceof ParameterType) || type.get$hasTypeParams())) {
$globals.world.error("type parameter cannot be used in const list literals");
}
- listType = listType.getOrMakeConcreteType$1([type]);
+ listType = listType.getOrMakeConcreteType([type]);
}
var $$list = node.values;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var item = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var item = $$i.next();
var arg = this.visitTypedValue(item, type);
- argValues.add$1(arg);
+ argValues.add(arg);
if (node.isConst && !arg.get$isConst()) {
$globals.world.error("const list can only contain const values", arg.get$span());
}
}
$globals.world.listFactoryType.markUsed();
var ret = new ListValue(argValues, node.isConst, listType, node.span);
- if (ret.get$isConst()) return ret.getGlobalValue$0();
+ if (ret.get$isConst()) return ret.getGlobalValue();
return ret;
}
MethodGenerator.prototype.visitMapExpression = function(node) {
if (node.items.get$length() == (0) && !node.isConst) {
- return $globals.world.mapType.getConstructor("").invoke$4(this, node, new TypeValue($globals.world.mapType, node.span), Arguments.get$EMPTY());
+ return $globals.world.mapType.getConstructor("").invoke(this, node, new TypeValue($globals.world.mapType, node.span), Arguments.get$EMPTY());
}
var values = [];
var valueType = $globals.world.varType, keyType = $globals.world.stringType;
var mapType = $globals.world.mapType;
if (node.valueType != null) {
if (node.keyType != null) {
- keyType = this.method.resolveType$2(node.keyType, true);
+ keyType = this.method.resolveType(node.keyType, true, !node.isConst);
if (!keyType.get$isString()) {
$globals.world.error("the key type of a map literal must be \"String\"", keyType.get$span());
}
@@ -4600,11 +4524,11 @@ MethodGenerator.prototype.visitMapExpression = function(node) {
$globals.world.error("type parameter cannot be used in const map literals");
}
}
- valueType = this.method.resolveType$2(node.valueType, true);
+ valueType = this.method.resolveType(node.valueType, true, !node.isConst);
if (node.isConst && ((valueType instanceof ParameterType) || valueType.get$hasTypeParams())) {
$globals.world.error("type parameter cannot be used in const map literals");
}
- mapType = mapType.getOrMakeConcreteType$1([keyType, valueType]);
+ mapType = mapType.getOrMakeConcreteType([keyType, valueType]);
}
for (var i = (0);
i < node.items.get$length(); i += (2)) {
@@ -4612,15 +4536,15 @@ MethodGenerator.prototype.visitMapExpression = function(node) {
if (node.isConst && !key.get$isConst()) {
$globals.world.error("const map can only contain const keys", key.get$span());
}
- values.add$1(key);
+ values.add(key);
var value = this.visitTypedValue(node.items[i + (1)], valueType);
if (node.isConst && !value.get$isConst()) {
$globals.world.error("const map can only contain const values", value.get$span());
}
- values.add$1(value);
+ values.add(value);
}
var ret = new MapValue(values, node.isConst, mapType, node.span);
- if (ret.get$isConst()) return ret.getGlobalValue$0();
+ if (ret.get$isConst()) return ret.getGlobalValue();
return ret;
}
MethodGenerator.prototype.visitConditionalExpression = function(node) {
@@ -4631,7 +4555,10 @@ MethodGenerator.prototype.visitConditionalExpression = function(node) {
}
MethodGenerator.prototype.visitIsExpression = function(node) {
var value = this.visitValue(node.x);
- var type = this.method.resolveType$2(node.type, false);
+ var type = this.method.resolveType(node.type, true, true);
+ if (type.get$isVar()) {
+ return Value.comma(value, Value.fromBool(true, node.span));
+ }
return value.instanceOf$4(this, type, node.span, node.isTrue);
}
MethodGenerator.prototype.visitParenExpression = function(node) {
@@ -4641,13 +4568,13 @@ MethodGenerator.prototype.visitParenExpression = function(node) {
}
MethodGenerator.prototype.visitDotExpression = function(node) {
var target = node.self.visit(this);
- return target.get_$3(this, node.name.name, node.name);
+ return target.get_(this, node.name.name, node.name);
}
MethodGenerator.prototype.visitVarExpression = function(node) {
var name = node.name.name;
var ret = this._scope.lookup(name);
- if (ret != null) return ret;
- return this._makeThisOrType(node.span).get_$3(this, name, node);
+ if ($ne(ret)) return ret;
+ return this._makeThisOrType(node.span).get_(this, name, node);
}
MethodGenerator.prototype._makeMissingValue = function(name) {
return new Value($globals.world.varType, ("" + name + "()/*NotFound*/"), null);
@@ -4676,58 +4603,30 @@ MethodGenerator.prototype._isUnaryIncrement = function(item) {
MethodGenerator.prototype.visitStringInterpExpression = function(node) {
var items = [];
var $$list = node.pieces;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var item = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var item = $$i.next();
var val = this.visitValue(item);
- val.invoke$4(this, "toString", item, Arguments.get$EMPTY());
+ val.invoke(this, "toString", item, Arguments.get$EMPTY());
var code = val.get$code();
if (this._expressionNeedsParens(item)) {
code = ("(" + code + ")");
}
- if ($eq(items.get$length(), (0)) || ($ne(code, "''") && $ne(code, "\"\""))) {
- items.add$1(code);
+ if (items.get$length() == (0) || ($ne(code, "''") && $ne(code, "\"\""))) {
+ items.add(code);
}
}
return new Value($globals.world.stringType, ("(" + Strings.join(items, " + ") + ")"), node.span);
}
-MethodGenerator.prototype._checkNonStatic$1 = MethodGenerator.prototype._checkNonStatic;
MethodGenerator.prototype._pushBlock$1 = function($0) {
return this._pushBlock($0, false);
};
-MethodGenerator.prototype.evalBody$2 = MethodGenerator.prototype.evalBody;
MethodGenerator.prototype.run$0 = MethodGenerator.prototype.run;
-MethodGenerator.prototype.visitAssertStatement$1 = MethodGenerator.prototype.visitAssertStatement;
MethodGenerator.prototype.visitBinaryExpression$1 = function($0) {
return this.visitBinaryExpression($0, false);
};
-MethodGenerator.prototype.visitBlockStatement$1 = MethodGenerator.prototype.visitBlockStatement;
-MethodGenerator.prototype.visitBreakStatement$1 = MethodGenerator.prototype.visitBreakStatement;
-MethodGenerator.prototype.visitContinueStatement$1 = MethodGenerator.prototype.visitContinueStatement;
-MethodGenerator.prototype.visitDeclaredIdentifier$1 = MethodGenerator.prototype.visitDeclaredIdentifier;
-MethodGenerator.prototype.visitDietStatement$1 = MethodGenerator.prototype.visitDietStatement;
-MethodGenerator.prototype.visitDoStatement$1 = MethodGenerator.prototype.visitDoStatement;
-MethodGenerator.prototype.visitEmptyStatement$1 = MethodGenerator.prototype.visitEmptyStatement;
-MethodGenerator.prototype.visitExpressionStatement$1 = MethodGenerator.prototype.visitExpressionStatement;
-MethodGenerator.prototype.visitForInStatement$1 = MethodGenerator.prototype.visitForInStatement;
-MethodGenerator.prototype.visitForStatement$1 = MethodGenerator.prototype.visitForStatement;
-MethodGenerator.prototype.visitFunctionDefinition$1 = MethodGenerator.prototype.visitFunctionDefinition;
-MethodGenerator.prototype.visitIfStatement$1 = MethodGenerator.prototype.visitIfStatement;
-MethodGenerator.prototype.visitIndexExpression$1 = MethodGenerator.prototype.visitIndexExpression;
-MethodGenerator.prototype.visitLabeledStatement$1 = MethodGenerator.prototype.visitLabeledStatement;
-MethodGenerator.prototype.visitLambdaExpression$1 = MethodGenerator.prototype.visitLambdaExpression;
-MethodGenerator.prototype.visitLiteralExpression$1 = MethodGenerator.prototype.visitLiteralExpression;
-MethodGenerator.prototype.visitMapExpression$1 = MethodGenerator.prototype.visitMapExpression;
-MethodGenerator.prototype.visitNewExpression$1 = MethodGenerator.prototype.visitNewExpression;
MethodGenerator.prototype.visitPostfixExpression$1 = function($0) {
return this.visitPostfixExpression($0, false);
};
-MethodGenerator.prototype.visitReturnStatement$1 = MethodGenerator.prototype.visitReturnStatement;
-MethodGenerator.prototype.visitSwitchStatement$1 = MethodGenerator.prototype.visitSwitchStatement;
-MethodGenerator.prototype.visitThrowStatement$1 = MethodGenerator.prototype.visitThrowStatement;
-MethodGenerator.prototype.visitTryStatement$1 = MethodGenerator.prototype.visitTryStatement;
-MethodGenerator.prototype.visitVariableDefinition$1 = MethodGenerator.prototype.visitVariableDefinition;
-MethodGenerator.prototype.visitWhileStatement$1 = MethodGenerator.prototype.visitWhileStatement;
-MethodGenerator.prototype.writeDefinition$2 = MethodGenerator.prototype.writeDefinition;
// ********** Code for Arguments **************
function Arguments(nodes, values) {
this.nodes = nodes;
@@ -4737,7 +4636,7 @@ Arguments.Arguments$bare$factory = function(arity) {
var values = [];
for (var i = (0);
i < arity; i++) {
- values.add$1(new VariableValue($globals.world.varType, ("$" + i), null, false));
+ values.add(new VariableValue($globals.world.varType, ("$" + i), null, false));
}
return new Arguments(null, values);
}
@@ -4757,7 +4656,7 @@ Arguments.prototype.get$length = function() {
return this.values.get$length();
}
Arguments.prototype.getName = function(i) {
- return this.nodes[i].get$label().get$name();
+ return this.nodes[i].label.name;
}
Arguments.prototype.getIndexOfName = function(name) {
for (var i = this.get$bareCount();
@@ -4770,7 +4669,7 @@ Arguments.prototype.getIndexOfName = function(name) {
}
Arguments.prototype.getValue = function(name) {
var i = this.getIndexOfName(name);
- return i >= (0) ? this.values[i] : null;
+ return i >= (0) ? this.values.$index(i) : null;
}
Arguments.prototype.get$bareCount = function() {
if (this._bareCount == null) {
@@ -4778,7 +4677,7 @@ Arguments.prototype.get$bareCount = function() {
if (this.nodes != null) {
for (var i = (0);
i < this.nodes.get$length(); i++) {
- if (this.nodes[i].get$label() != null) {
+ if (this.nodes[i].label != null) {
this._bareCount = i;
break;
}
@@ -4791,7 +4690,7 @@ Arguments.prototype.getCode = function() {
var argsCode = [];
for (var i = (0);
i < this.get$length(); i++) {
- argsCode.add$1(this.values[i].get$code());
+ argsCode.add(this.values.$index(i).get$code());
}
Arguments.removeTrailingNulls(argsCode);
return Strings.join(argsCode, ", ");
@@ -4805,7 +4704,7 @@ Arguments.prototype.getNames = function() {
var names = [];
for (var i = this.get$bareCount();
i < this.get$length(); i++) {
- names.add$1(this.getName(i));
+ names.add(this.getName(i));
}
return names;
}
@@ -4813,16 +4712,25 @@ Arguments.prototype.toCallStubArgs = function() {
var result = [];
for (var i = (0);
i < this.get$bareCount(); i++) {
- result.add$1(new VariableValue($globals.world.varType, ("$" + i), null, false));
+ result.add(new VariableValue($globals.world.varType, ("$" + i), null, false));
}
for (var i = this.get$bareCount();
i < this.get$length(); i++) {
var name = this.getName(i);
- if (name == null) name = ("$" + i);
- result.add$1(new VariableValue($globals.world.varType, name, null, false));
+ if ($eq(name)) name = ("$" + i);
+ result.add(new VariableValue($globals.world.varType, name, null, false));
}
return new Arguments(this.nodes, result);
}
+Arguments.prototype.matches = function(other) {
+ if (this.get$length() != other.get$length()) return false;
+ if (this.get$bareCount() != other.get$bareCount()) return false;
+ for (var i = (0);
+ i < this.get$bareCount(); i++) {
+ if ($ne(this.values.$index(i).get$type(), other.values.$index(i).get$type())) return false;
+ }
+ return true;
+}
// ********** Code for ReturnKind **************
function ReturnKind() {}
// ********** Code for LibraryImport **************
@@ -4837,17 +4745,13 @@ 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$genericMember = function() { return this.genericMember; };
+Member.prototype.set$genericMember = function(value) { return this.genericMember = value; };
Member.prototype.get$library = function() {
return this.declaringType.get$library();
}
@@ -4884,21 +4788,12 @@ Member.prototype.get$isOperator = function() {
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() {
}
@@ -4932,30 +4827,38 @@ Member.prototype.get$preciseMemberSet = function() {
}
Member.prototype.get$potentialMemberSet = function() {
if (this._potentialMemberSet == null) {
- if (this.declaringType.get$isObject()) {
- this._potentialMemberSet = $globals.world._members.$index(this.name);
+ if (this.name == ":call") {
+ this._potentialMemberSet = this.get$preciseMemberSet();
return this._potentialMemberSet;
}
- var mems = new HashSetImplementation();
- if (this.declaringType.get$isClass()) mems.add$1(this);
- var $$list = this.declaringType.get$subtypes();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var subtype = $$i.next$0();
+ var mems = new HashSetImplementation_Member();
+ if (this.declaringType.get$isClass()) mems.add(this);
+ var $$list = this.declaringType.get$genericType().get$subtypes();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var subtype = $$i.next();
if (!subtype.get$isClass()) continue;
var mem = subtype.get$members().$index(this.name);
if (mem != null) {
- mems.add$1(mem);
+ if (mem.isDefinedOn(this.declaringType)) {
+ mems.add(mem);
+ }
}
else if (!this.declaringType.get$isClass()) {
- mem = subtype.getMember$1(this.name);
- if (mem != null) {
- mems.add$1(mem);
+ mem = subtype.getMember(this.name);
+ if (mem != null && mem.isDefinedOn(this.declaringType)) {
+ mems.add(mem);
}
}
}
- if ($ne(mems.get$length(), (0))) {
- for (var $$i = mems.iterator$0(); $$i.hasNext$0(); ) {
- var mem = $$i.next$0();
+ if (mems.get$length() != (0)) {
+ for (var $$i = mems.iterator(); $$i.hasNext(); ) {
+ var mem = $$i.next();
+ if ($ne(this.declaringType.get$genericType(), this.declaringType) && mem.get$genericMember() != null && mems.contains$1(mem.get$genericMember())) {
+ mems.remove$1(mem.get$genericMember());
+ }
+ }
+ for (var $$i = mems.iterator(); $$i.hasNext(); ) {
+ var mem = $$i.next();
if (this._potentialMemberSet == null) {
this._potentialMemberSet = new MemberSet(mem, false);
}
@@ -4967,12 +4870,43 @@ Member.prototype.get$potentialMemberSet = function() {
}
return this._potentialMemberSet;
}
+Member.prototype.isDefinedOn = function(type) {
+ if (type.get$isClass()) {
+ if (this.declaringType.isSubtypeOf(type)) {
+ return true;
+ }
+ else if (type.isSubtypeOf(this.declaringType)) {
+ return $eq(type.getMember(this.name), this);
+ }
+ else {
+ return false;
+ }
+ }
+ else {
+ if (this.declaringType.isSubtypeOf(type)) {
+ return true;
+ }
+ else {
+ var $$list = this.declaringType.get$subtypes();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var t = $$i.next();
+ if (t.isSubtypeOf(type) && $eq(t.getMember(this.name), this)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+}
Member.prototype.canInvoke = function(context, args) {
- return this.get$canGet() && new Value(this.get$returnType(), null, null).canInvoke(context, ":call", args);
+ if (this.get$canGet() && (this.get$isField() || this.get$isProperty())) {
+ return this.get$returnType().get$isFunction() || this.get$returnType().get$isVar() || this.get$returnType().getCallMethod() != null;
+ }
+ return false;
}
-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.invoke = function(context, node, target, args) {
+ var newTarget = this._get(context, node, target);
+ return newTarget.invoke(context, ":call", node, args);
}
Member.prototype.override = function(other) {
if (this.get$isStatic()) {
@@ -4986,7 +4920,7 @@ Member.prototype.override = function(other) {
return true;
}
Member.prototype.get$generatedFactoryName = function() {
- var prefix = ("" + this.declaringType.get$jsname() + "." + this.get$constructorName() + "$");
+ var prefix = ("" + this.declaringType.get$genericType().get$jsname() + "." + this.get$constructorName() + "$");
if (this.name == "") {
return ("" + prefix + "factory");
}
@@ -4997,26 +4931,18 @@ Member.prototype.get$generatedFactoryName = function() {
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;
+ return $bit_xor(($shl(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$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;
+Member.prototype.resolveType = function(node, typeErrors, allowTypeParams) {
+ allowTypeParams = allowTypeParams && !(this.get$isStatic() && !this.get$isFactory());
+ return Element.prototype.resolveType.call(this, node, typeErrors, allowTypeParams);
+}
+Member.prototype.makeConcrete = function(concreteType) {
+ $globals.world.internalError("can not make this concrete", this.get$span());
+}
// ********** Code for AmbiguousMember **************
$inherits(AmbiguousMember, Member);
function AmbiguousMember(name, members) {
@@ -5046,8 +4972,6 @@ Library.prototype.get$imports = function() { return this.imports; };
Library.prototype.set$imports = function(value) { return this.imports = value; };
Library.prototype.get$_privateMembers = function() { return this._privateMembers; };
Library.prototype.set$_privateMembers = function(value) { return this._privateMembers = value; };
-Library.prototype.get$topType = function() { return this.topType; };
-Library.prototype.set$topType = function(value) { return this.topType = value; };
Library.prototype.get$enclosingElement = function() {
return null;
}
@@ -5102,11 +5026,11 @@ Library.prototype._addMember = function(member) {
return;
}
var mset = this._privateMembers.$index(member.name);
- if (mset == null) {
+ if ($eq(mset)) {
var $$list = $globals.world.libraries.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var lib = $$i.next$0();
- if (lib.get$_privateMembers().containsKey$1(member.get$jsname())) {
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var lib = $$i.next();
+ if (lib.get$_privateMembers().containsKey(member.get$jsname())) {
member._jsname = ("_" + this.get$jsname() + member.get$jsname());
break;
}
@@ -5115,28 +5039,29 @@ Library.prototype._addMember = function(member) {
this._privateMembers.$setindex(member.name, mset);
}
else {
- mset.get$members().add$1(member);
+ mset.get$members().add(member);
}
}
else {
$globals.world._addMember(member);
}
}
-Library.prototype.getOrAddFunctionType = function(enclosingElement, name, func) {
+Library.prototype.getOrAddFunctionType = function(enclosingElement, name, func, data) {
var def = new FunctionTypeDefinition(func, null, func.span);
var type = new DefinedType(name, this, def, false);
- type.addMethod$2(":call", func);
+ type.addMethod(":call", func);
var m = type.get$members().$index(":call");
m.set$enclosingElement(enclosingElement);
- m.resolve$0();
+ m.resolve();
+ m.set$_methodData(data);
type.set$interfaces([$globals.world.functionType]);
return type;
}
Library.prototype.addType = function(name, definition, isClass) {
if (this.types.containsKey(name)) {
var existingType = this.types.$index(name);
- if ((this.get$isCore() || this.get$isCoreImpl()) && existingType.get$definition() == null) {
- existingType.setDefinition$1(definition);
+ if ((this.get$isCore() || this.get$isCoreImpl()) && $eq(existingType.get$definition())) {
+ existingType.setDefinition(definition);
}
else {
$globals.world.warning(("duplicate definition of " + name), definition.span, existingType.get$span());
@@ -5157,24 +5082,24 @@ Library.prototype.findType = function(type) {
if (!result.get$isTop()) {
return null;
}
- return result.get$library().findTypeByName(type.names[(0)].get$name());
+ return result.get$library().findTypeByName(type.names[(0)].name);
}
return result;
}
Library.prototype.findTypeByName = function(name) {
var ret = this.types.$index(name);
var $$list = this.imports;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var imported = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var imported = $$i.next();
var newRet = null;
if (imported.get$prefix() == null) {
- newRet = imported.get$library().get$types().$index(name);
+ newRet = imported.get$library().types.$index(name);
}
- else if ($eq(imported.get$prefix(), name)) {
- newRet = imported.get$library().get$topType();
+ else if (imported.get$prefix() == name) {
+ newRet = imported.get$library().topType;
}
- if (newRet != null) {
- if (ret != null && $ne(ret, newRet)) {
+ if ($ne(newRet)) {
+ if ($ne(ret) && $ne(ret, newRet)) {
$globals.world.error(("conflicting types for \"" + name + "\""), ret.get$span(), newRet.get$span());
}
else {
@@ -5184,22 +5109,21 @@ Library.prototype.findTypeByName = function(name) {
}
return ret;
}
-Library.prototype.resolveType = function(node, typeErrors) {
+Library.prototype.resolveType = function(node, typeErrors, allowTypeParams) {
if (node == null) return $globals.world.varType;
- if (node.type != null) return node.type;
- node.type = this.findType(node);
- if (node.type == null) {
+ var ret = this.findType(node);
+ if ($eq(ret)) {
var message = ("cannot find type " + Library._getDottedName(node));
if (typeErrors) {
$globals.world.error(message, node.span);
- node.type = $globals.world.objectType;
+ return $globals.world.objectType;
}
else {
$globals.world.warning(message, node.span);
- node.type = $globals.world.varType;
+ return $globals.world.varType;
}
}
- return node.type;
+ return ret;
}
Library._getDottedName = function(type) {
if (type.names != null) {
@@ -5207,7 +5131,7 @@ Library._getDottedName = function(type) {
return n.get$name();
})
);
- return type.name.name + "." + Strings.join(names, ".");
+ return $add($add(type.name.name, "."), Strings.join(names, "."));
}
else {
return type.name.name;
@@ -5220,19 +5144,19 @@ Library.prototype.resolve = function() {
if (this.name == null) {
this.name = this.baseSource.filename;
var index = this.name.lastIndexOf("/", this.name.length);
- if (index >= (0)) {
+ if ($gte(index, (0))) {
this.name = this.name.substring($add(index, (1)));
}
index = this.name.indexOf(".");
- if (index > (0)) {
+ if ($gt(index, (0))) {
this.name = this.name.substring((0), index);
}
}
this._jsname = this.name.replaceAll(".", "_").replaceAll(":", "_").replaceAll(" ", "_");
var $$list = this.types.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
- type.resolve$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
+ type.resolve();
}
}
Library.prototype._addTopName = function(name, member, localSpan) {
@@ -5242,7 +5166,7 @@ Library.prototype._addTopName = function(name, member, localSpan) {
}
else {
if ((existing instanceof AmbiguousMember)) {
- existing.get$members().add$1(member);
+ existing.get$members().add(member);
}
else {
var newMember = new AmbiguousMember(name, [existing, member]);
@@ -5253,14 +5177,14 @@ Library.prototype._addTopName = function(name, member, localSpan) {
}
Library.prototype._addTopNames = function(lib) {
var $$list = lib.topType.members.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
if (member.get$isPrivate() && $ne(lib, this)) continue;
this._addTopName(member.get$name(), member);
}
var $$list = lib.types.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var type = $$i.next$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
if (!type.get$isTop()) {
if ($ne(lib, this) && type.get$typeMember().get$isPrivate()) continue;
this._addTopName(type.get$name(), type.get$typeMember());
@@ -5271,19 +5195,19 @@ 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[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var imported = $$i.next();
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());
+ this._addTopName(imported.get$prefix(), imported.get$library().topType.get$typeMember(), imported.get$span());
}
}
}
Library.prototype.visitSources = function() {
var visitor = new _LibraryVisitor(this);
- visitor.addSource$1(this.baseSource);
+ visitor.addSource(this.baseSource);
}
Library.prototype.toString = function() {
return this.baseSource.filename;
@@ -5292,16 +5216,9 @@ Library.prototype.hashCode = function() {
return this.baseSource.filename.hashCode();
}
Library.prototype.$eq = function(other) {
- return (other instanceof Library) && $eq(other.get$baseSource().get$filename(), this.baseSource.filename);
-}
-Library.prototype.findTypeByName$1 = Library.prototype.findTypeByName;
-Library.prototype.hashCode$0 = Library.prototype.hashCode;
-Library.prototype.lookup$2 = Library.prototype.lookup;
-Library.prototype.postResolveChecks$0 = Library.prototype.postResolveChecks;
-Library.prototype.resolve$0 = Library.prototype.resolve;
-Library.prototype.resolveType$2 = Library.prototype.resolveType;
+ return (other instanceof Library) && other.get$baseSource().filename == this.baseSource.filename;
+}
Library.prototype.toString$0 = Library.prototype.toString;
-Library.prototype.visitSources$0 = Library.prototype.visitSources;
// ********** Code for _LibraryVisitor **************
function _LibraryVisitor(library) {
this.library = library;
@@ -5322,7 +5239,7 @@ _LibraryVisitor.prototype.addSourceFromName = function(name, span) {
return;
}
else if (this.sources.some((function (s) {
- return $eq(s.get$filename(), filename);
+ return s.get$filename() == filename;
})
)) {
$globals.world.error(("file \"" + filename + "\" has already been sourced"), span);
@@ -5334,7 +5251,7 @@ _LibraryVisitor.prototype.addSourceFromName = function(name, span) {
_LibraryVisitor.prototype.addSource = function(source) {
var $this = this; // closure support
if (this.library.sources.some((function (s) {
- return $eq(s.get$filename(), source.filename);
+ return s.get$filename() == source.filename;
})
)) {
$globals.world.error(("duplicate source file \"" + source.filename + "\""));
@@ -5342,17 +5259,17 @@ _LibraryVisitor.prototype.addSource = function(source) {
}
this.library.sources.add(source);
var parser = new Parser(source, $globals.options.dietParse, false, false, (0));
- var unit = parser.compilationUnit$0();
- unit.forEach$1((function (def) {
- return def.visit$1($this);
+ var unit = parser.compilationUnit();
+ unit.forEach((function (def) {
+ return def.visit($this);
})
);
this.isTop = false;
var newSources = this.sources;
this.sources = [];
- for (var $$i = newSources.iterator$0(); $$i.hasNext$0(); ) {
- var source0 = $$i.next$0();
- this.addSource(source0);
+ for (var $$i = newSources.iterator(); $$i.hasNext(); ) {
+ var newSource = $$i.next();
+ this.addSource(newSource);
}
}
_LibraryVisitor.prototype.visitDirectiveDefinition = function(node) {
@@ -5384,10 +5301,10 @@ _LibraryVisitor.prototype.visitDirectiveDefinition = function(node) {
this.seenImport = true;
name = this.getFirstStringArg(node);
var prefix = this.tryGetNamedStringArg(node, "prefix");
- if (node.arguments.get$length() > (2) || node.arguments.get$length() == (2) && prefix == null) {
- $globals.world.error("expected at most one \"name\" argument and one optional \"prefix\"" + (" but found " + node.arguments.get$length()), node.span);
+ if (node.arguments.get$length() > (2) || node.arguments.get$length() == (2) && $eq(prefix)) {
+ $globals.world.error($add("expected at most one \"name\" argument and one optional \"prefix\"", (" but found " + node.arguments.get$length())), node.span);
}
- else if (prefix != null && prefix.indexOf$1(".") >= (0)) {
+ else if ($ne(prefix) && $gte(prefix.indexOf$1("."), (0))) {
$globals.world.error("library prefix canot contain \".\"", node.span);
}
else if (this.seenSource || this.seenResource) {
@@ -5396,7 +5313,7 @@ _LibraryVisitor.prototype.visitDirectiveDefinition = function(node) {
if ($eq(prefix, "")) prefix = null;
var filename = this.library.makeFullPath(name);
if (this.library.imports.some((function (li) {
- return $eq(li.get$library().get$baseSource(), filename);
+ return $eq(li.get$library().baseSource, filename);
})
)) {
$globals.world.error(("duplicate import of \"" + name + "\""), node.span);
@@ -5450,18 +5367,18 @@ _LibraryVisitor.prototype.getFirstStringArg = function(node) {
return this._parseStringArgument(arg);
}
_LibraryVisitor.prototype.tryGetNamedStringArg = function(node, argName) {
- var args = node.arguments.filter$1((function (a) {
- return a.get$label() != null && $eq(a.get$label().get$name(), argName);
+ var args = node.arguments.filter((function (a) {
+ return a.get$label() != null && a.get$label().name == argName;
})
);
- if ($eq(args.get$length(), (0))) {
+ if (args.get$length() == (0)) {
return null;
}
if (args.get$length() > (1)) {
$globals.world.error(("expected at most one \"" + argName + "\" argument but found ") + node.arguments.get$length(), node.span);
}
- for (var $$i = args.iterator$0(); $$i.hasNext$0(); ) {
- var arg = $$i.next$0();
+ for (var $$i = args.iterator(); $$i.hasNext(); ) {
+ var arg = $$i.next();
return this._parseStringArgument(arg);
}
}
@@ -5476,9 +5393,9 @@ _LibraryVisitor.prototype.visitTypeDefinition = function(node) {
var oldType = this.currentType;
this.currentType = this.library.addType(node.name.name, node, node.isClass);
var $$list = node.body;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var member = $$list[$$i];
- member.visit$1(this);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
+ member.visit(this);
}
this.currentType = oldType;
}
@@ -5490,11 +5407,8 @@ _LibraryVisitor.prototype.visitFunctionDefinition = function(node) {
}
_LibraryVisitor.prototype.visitFunctionTypeDefinition = function(node) {
var type = this.library.addType(node.func.name.name, node, false);
- type.addMethod$2(":call", node.func);
+ type.addMethod(":call", node.func);
}
-_LibraryVisitor.prototype.addSource$1 = _LibraryVisitor.prototype.addSource;
-_LibraryVisitor.prototype.visitFunctionDefinition$1 = _LibraryVisitor.prototype.visitFunctionDefinition;
-_LibraryVisitor.prototype.visitVariableDefinition$1 = _LibraryVisitor.prototype.visitVariableDefinition;
// ********** Code for Parameter **************
function Parameter(definition, method) {
this.method = method;
@@ -5519,12 +5433,12 @@ Parameter.prototype.resolve = function() {
this.name = this.name.substring((5));
this.isInitializer = true;
}
- this.type = this.method.resolveType$2(this.definition.type, false);
+ this.type = this.method.resolveType(this.definition.type, false, true);
if (this.definition.value != null) {
if (!this.get$hasDefaultValue()) return;
if (this.method.name == ":call") {
var methodDef = this.method.get$definition();
- if (methodDef.get$body() == null && !this.method.get$isNative()) {
+ if ($eq(methodDef.get$body()) && !this.method.get$isNative()) {
$globals.world.error("default value not allowed on function type", this.definition.span);
}
}
@@ -5545,14 +5459,7 @@ Parameter.prototype.genValue = function(method, context) {
if (!this.value.get$isConst()) {
$globals.world.error("default parameter values must be constant", this.value.span);
}
- this.value = this.value.convertTo(context, this.type, false);
-}
-Parameter.prototype.copyWithNewType = function(newMethod, newType) {
- var ret = new Parameter(this.definition, newMethod);
- ret.set$type(newType);
- ret.set$name(this.name);
- ret.set$isInitializer(this.isInitializer);
- return ret;
+ this.value = this.value.convertTo(context, this.type);
}
Parameter.prototype.get$isOptional = function() {
return this.definition != null && this.definition.value != null;
@@ -5560,9 +5467,6 @@ Parameter.prototype.get$isOptional = function() {
Parameter.prototype.get$hasDefaultValue = function() {
return this.definition.value.span.start != this.definition.span.start;
}
-Parameter.prototype.copyWithNewType$2 = Parameter.prototype.copyWithNewType;
-Parameter.prototype.genValue$2 = Parameter.prototype.genValue;
-Parameter.prototype.resolve$0 = Parameter.prototype.resolve;
// ********** Code for TypeMember **************
$inherits(TypeMember, Member);
function TypeMember(type) {
@@ -5588,31 +5492,15 @@ TypeMember.prototype.get$canGet = function() {
TypeMember.prototype.get$canSet = function() {
return false;
}
-TypeMember.prototype.get$requiresFieldSyntax = function() {
- return true;
-}
-TypeMember.prototype._get = function(context, node, target, isDynamic) {
+TypeMember.prototype._get = function(context, node, target) {
return new TypeValue(this.type, node.span);
}
-TypeMember.prototype._set = function(context, node, target, value, isDynamic) {
+TypeMember.prototype._set = function(context, node, target, value) {
$globals.world.error("cannot set type", node.span);
}
-TypeMember.prototype.invoke = function(context, node, target, args, isDynamic) {
+TypeMember.prototype.invoke = function(context, node, target, args) {
$globals.world.error("cannot invoke type", node.span);
}
-TypeMember.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-TypeMember.prototype._get$3$isDynamic = TypeMember.prototype._get;
-TypeMember.prototype._get$4 = TypeMember.prototype._get;
-TypeMember.prototype._set$4$isDynamic = TypeMember.prototype._set;
-TypeMember.prototype._set$5 = TypeMember.prototype._set;
-TypeMember.prototype.canInvoke$2 = TypeMember.prototype.canInvoke;
-TypeMember.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
-};
-TypeMember.prototype.invoke$4$isDynamic = TypeMember.prototype.invoke;
-TypeMember.prototype.invoke$5 = TypeMember.prototype.invoke;
// ********** Code for FieldMember **************
$inherits(FieldMember, Member);
function FieldMember(name, declaringType, definition, value) {
@@ -5642,11 +5530,17 @@ FieldMember.prototype.override = function(other) {
return false;
}
}
-FieldMember.prototype.provideFieldSyntax = function() {
-
-}
FieldMember.prototype.providePropertySyntax = function() {
this._providePropertySyntax = true;
+ if (this.genericMember != null) {
+ this.genericMember.providePropertySyntax();
+ }
+}
+FieldMember.prototype.makeConcrete = function(concreteType) {
+ var ret = new FieldMember(this.name, concreteType, this.definition, this.value);
+ ret.set$genericMember(this);
+ ret.set$_jsname(this._jsname);
+ return ret;
}
FieldMember.prototype.get$span = function() {
return this.definition == null ? null : this.definition.span;
@@ -5668,15 +5562,15 @@ FieldMember.prototype.resolve = function() {
this.isFinal = false;
if (this.definition.modifiers != null) {
var $$list = this.definition.modifiers;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var mod = $$list[$$i];
- if ($eq(mod.get$kind(), (85))) {
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var mod = $$i.next();
+ if (mod.get$kind() == (85)) {
if (this.isStatic) {
$globals.world.error("duplicate static modifier", mod.get$span());
}
this.isStatic = true;
}
- else if ($eq(mod.get$kind(), (99))) {
+ else if (mod.get$kind() == (99)) {
if (this.isFinal) {
$globals.world.error("duplicate final modifier", mod.get$span());
}
@@ -5687,14 +5581,11 @@ FieldMember.prototype.resolve = function() {
}
}
}
- this.type = this.resolveType$2(this.definition.type, false);
- if (this.isStatic && !this.get$isFactory() && this.type.get$hasTypeParams()) {
- $globals.world.error("using type parameter in static context", this.definition.type.span);
- }
+ this.type = this.resolveType(this.definition.type, false, true);
if (this.isStatic && this.isFinal && this.value == null) {
$globals.world.error("static final field is missing initializer", this.get$span());
}
- this.get$library()._addMember(this);
+ if (this.declaringType.get$isClass()) this.get$library()._addMember(this);
}
FieldMember.prototype.computeValue = function() {
if (this.value == null) return null;
@@ -5728,13 +5619,16 @@ FieldMember.prototype.computeValue = function() {
}
return this._computedValue;
}
-FieldMember.prototype._get = function(context, node, target, isDynamic) {
+FieldMember.prototype._get = function(context, node, target) {
+ if (!context.get$needsCode()) {
+ return new PureStaticValue(this.type, node.span, this.isStatic && this.isFinal, false);
+ }
if (this.isNative && this.get$returnType() != null) {
this.get$returnType().markUsed();
if ((this.get$returnType() instanceof DefinedType)) {
var defaultType = this.get$returnType().get$genericType().defaultType;
- if (defaultType != null && defaultType.get$isNative()) {
- defaultType.markUsed$0();
+ if ($ne(defaultType) && defaultType.get$isNative()) {
+ defaultType.markUsed();
}
}
}
@@ -5765,22 +5659,14 @@ FieldMember.prototype._get = function(context, node, target, isDynamic) {
}
return new Value(this.type, ("" + target.get$code() + "." + this.get$jsname()), node.span);
}
-FieldMember.prototype._set = function(context, node, target, value, isDynamic) {
- var lhs = this._get(context, node, target, isDynamic);
- value = value.convertTo(context, this.type, isDynamic);
+FieldMember.prototype._set = function(context, node, target, value) {
+ if (!context.get$needsCode()) {
+ return new PureStaticValue(this.type, node.span, false, false);
+ }
+ var lhs = this._get(context, node, target);
+ value = value.convertTo(context, this.type);
return new Value(this.type, ("" + lhs.get$code() + " = " + value.get$code()), node.span);
}
-FieldMember.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-FieldMember.prototype._get$3$isDynamic = FieldMember.prototype._get;
-FieldMember.prototype._get$4 = FieldMember.prototype._get;
-FieldMember.prototype._set$4$isDynamic = FieldMember.prototype._set;
-FieldMember.prototype._set$5 = FieldMember.prototype._set;
-FieldMember.prototype.computeValue$0 = FieldMember.prototype.computeValue;
-FieldMember.prototype.provideFieldSyntax$0 = FieldMember.prototype.provideFieldSyntax;
-FieldMember.prototype.providePropertySyntax$0 = FieldMember.prototype.providePropertySyntax;
-FieldMember.prototype.resolve$0 = FieldMember.prototype.resolve;
// ********** Code for PropertyMember **************
$inherits(PropertyMember, Member);
function PropertyMember(name, declaringType) {
@@ -5799,16 +5685,8 @@ PropertyMember.prototype.get$canGet = function() {
PropertyMember.prototype.get$canSet = function() {
return this.setter != null;
}
-PropertyMember.prototype.get$requiresPropertySyntax = function() {
- return this.declaringType.get$isClass();
-}
-PropertyMember.prototype.provideFieldSyntax = function() {
- this._provideFieldSyntax = true;
-}
-PropertyMember.prototype.providePropertySyntax = function() {
- if (this._overriddenField != null && this._overriddenField.get$isNative()) {
- this.provideFieldSyntax();
- }
+PropertyMember.prototype.get$needsFieldSyntax = function() {
+ return this._overriddenField != null && this._overriddenField.get$isNative();
}
PropertyMember.prototype.get$isStatic = function() {
return this.getter == null ? this.setter.isStatic : this.getter.isStatic;
@@ -5819,6 +5697,13 @@ PropertyMember.prototype.get$isProperty = function() {
PropertyMember.prototype.get$returnType = function() {
return this.getter == null ? this.setter.returnType : this.getter.returnType;
}
+PropertyMember.prototype.makeConcrete = function(concreteType) {
+ var ret = new PropertyMember(this.name, concreteType);
+ if (this.getter != null) ret.set$getter(this.getter.makeConcrete(concreteType));
+ if (this.setter != null) ret.set$setter(this.setter.makeConcrete(concreteType));
+ ret.set$_jsname(this._jsname);
+ return ret;
+}
PropertyMember.prototype.override = function(other) {
if (!Member.prototype.override.call(this, other)) return false;
if (other.get$isProperty() || other.get$isField()) {
@@ -5831,35 +5716,28 @@ PropertyMember.prototype.override = function(other) {
return false;
}
}
-PropertyMember.prototype._get = function(context, node, target, isDynamic) {
+PropertyMember.prototype._get = function(context, node, target) {
if (this.getter == null) {
if (this._overriddenField != null) {
- return this._overriddenField._get(context, node, target, isDynamic);
+ return this._overriddenField._get(context, node, target);
}
return target.invokeNoSuchMethod(context, ("get:" + this.name), node);
}
- return this.getter.invoke(context, node, target, Arguments.get$EMPTY(), false);
+ return this.getter.invoke(context, node, target, Arguments.get$EMPTY());
}
-PropertyMember.prototype._set = function(context, node, target, value, isDynamic) {
+PropertyMember.prototype._set = function(context, node, target, value) {
if (this.setter == null) {
if (this._overriddenField != null) {
- return this._overriddenField._set(context, node, target, value, isDynamic);
+ return this._overriddenField._set(context, node, target, value);
}
return target.invokeNoSuchMethod(context, ("set:" + this.name), node, new Arguments(null, [value]));
}
- return this.setter.invoke(context, node, target, new Arguments(null, [value]), isDynamic);
+ return this.setter.invoke(context, node, target, new Arguments(null, [value]));
}
PropertyMember.prototype.addFromParent = function(parentMember) {
- var parent;
- if ((parentMember instanceof ConcreteMember)) {
- var c = parentMember;
- parent = c.baseMember;
- }
- else {
- parent = parentMember;
- }
- if (this.getter == null) this.getter = parent.getter;
- if (this.setter == null) this.setter = parent.setter;
+ var parent = parentMember;
+ if (this.getter == null) this.getter = parent.get$getter();
+ if (this.setter == null) this.setter = parent.get$setter();
}
PropertyMember.prototype.resolve = function() {
if (this.getter != null) {
@@ -5880,160 +5758,8 @@ PropertyMember.prototype.resolve = function() {
$globals.world.warning("setter methods should be void", this.setter.definition.returnType.span);
}
}
- this.get$library()._addMember(this);
-}
-PropertyMember.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-PropertyMember.prototype._get$3$isDynamic = PropertyMember.prototype._get;
-PropertyMember.prototype._get$4 = PropertyMember.prototype._get;
-PropertyMember.prototype._set$4$isDynamic = PropertyMember.prototype._set;
-PropertyMember.prototype._set$5 = PropertyMember.prototype._set;
-PropertyMember.prototype.provideFieldSyntax$0 = PropertyMember.prototype.provideFieldSyntax;
-PropertyMember.prototype.providePropertySyntax$0 = PropertyMember.prototype.providePropertySyntax;
-PropertyMember.prototype.resolve$0 = PropertyMember.prototype.resolve;
-// ********** Code for ConcreteMember **************
-$inherits(ConcreteMember, Member);
-function ConcreteMember(name, declaringType, baseMember) {
- this.baseMember = baseMember;
- Member.call(this, name, declaringType);
- this.parameters = [];
- this.returnType = this.baseMember.get$returnType().resolveTypeParams(declaringType);
- var $$list = this.baseMember.get$parameters();
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var p = $$list[$$i];
- var newType = p.get$type().resolveTypeParams$1(declaringType);
- if ($ne(newType, p.get$type())) {
- this.parameters.add(p.copyWithNewType$2(this, newType));
- }
- else {
- this.parameters.add(p);
- }
- }
-}
-ConcreteMember.prototype.get$returnType = function() { return this.returnType; };
-ConcreteMember.prototype.set$returnType = function(value) { return this.returnType = value; };
-ConcreteMember.prototype.get$parameters = function() { return this.parameters; };
-ConcreteMember.prototype.set$parameters = function(value) { return this.parameters = value; };
-ConcreteMember.prototype.get$span = function() {
- return this.baseMember.get$span();
-}
-ConcreteMember.prototype.get$isStatic = function() {
- return this.baseMember.get$isStatic();
-}
-ConcreteMember.prototype.get$isAbstract = function() {
- return this.baseMember.get$isAbstract();
-}
-ConcreteMember.prototype.get$isConst = function() {
- return this.baseMember.get$isConst();
-}
-ConcreteMember.prototype.get$isFactory = function() {
- return this.baseMember.get$isFactory();
-}
-ConcreteMember.prototype.get$isFinal = function() {
- return this.baseMember.get$isFinal();
-}
-ConcreteMember.prototype.get$isNative = function() {
- return this.baseMember.get$isNative();
-}
-ConcreteMember.prototype.get$jsname = function() {
- return this.baseMember.get$jsname();
-}
-ConcreteMember.prototype.get$canGet = function() {
- return this.baseMember.get$canGet();
-}
-ConcreteMember.prototype.get$canSet = function() {
- return this.baseMember.get$canSet();
-}
-ConcreteMember.prototype.canInvoke = function(context, args) {
- return this.baseMember.canInvoke(context, args);
-}
-ConcreteMember.prototype.get$isField = function() {
- return this.baseMember.get$isField();
-}
-ConcreteMember.prototype.get$isMethod = function() {
- return this.baseMember.get$isMethod();
-}
-ConcreteMember.prototype.get$isProperty = function() {
- return this.baseMember.get$isProperty();
-}
-ConcreteMember.prototype.get$requiresPropertySyntax = function() {
- return this.baseMember.get$requiresPropertySyntax();
-}
-ConcreteMember.prototype.get$requiresFieldSyntax = function() {
- return this.baseMember.get$requiresFieldSyntax();
-}
-ConcreteMember.prototype.provideFieldSyntax = function() {
- return this.baseMember.provideFieldSyntax();
-}
-ConcreteMember.prototype.providePropertySyntax = function() {
- return this.baseMember.providePropertySyntax();
-}
-ConcreteMember.prototype.get$isConstructor = function() {
- return this.name == this.declaringType.name;
-}
-ConcreteMember.prototype.get$constructorName = function() {
- return this.baseMember.get$constructorName();
-}
-ConcreteMember.prototype.get$definition = function() {
- return this.baseMember.get$definition();
-}
-ConcreteMember.prototype.get$initDelegate = function() {
- return this.baseMember.get$initDelegate();
-}
-ConcreteMember.prototype.set$initDelegate = function(ctor) {
- this.baseMember.set$initDelegate(ctor);
-}
-ConcreteMember.prototype.resolveType = function(node, isRequired) {
- var type = this.baseMember.resolveType$2(node, isRequired);
- return type.resolveTypeParams$1(this.declaringType);
-}
-ConcreteMember.prototype.computeValue = function() {
- return this.baseMember.computeValue();
-}
-ConcreteMember.prototype.override = function(other) {
- return this.baseMember.override(other);
-}
-ConcreteMember.prototype._get = function(context, node, target, isDynamic) {
- var ret = this.baseMember._get(context, node, target, isDynamic);
- return new Value(this.get$inferredResult(), ret.get$code(), node.span);
-}
-ConcreteMember.prototype._set = function(context, node, target, value, isDynamic) {
- var ret = this.baseMember._set(context, node, target, value, isDynamic);
- return new Value(this.returnType, ret.get$code(), node.span);
-}
-ConcreteMember.prototype._evalConstConstructor = function(newObject, args) {
- return this.baseMember.get$dynamic()._evalConstConstructor$2(newObject, args);
-}
-ConcreteMember.prototype.invoke = function(context, node, target, args, isDynamic) {
- var ret = this.baseMember.invoke(context, node, target, args, isDynamic);
- var code = ret.get$code();
- if (this.get$isConstructor()) {
- code = code.replaceFirst$2(this.declaringType.get$genericType().get$jsname(), this.declaringType.get$jsname());
- }
- if ((this.baseMember instanceof MethodMember)) {
- this.declaringType.genMethod(this);
- }
- return new Value(this.get$inferredResult(), code, node.span);
+ if (this.declaringType.get$isClass()) this.get$library()._addMember(this);
}
-ConcreteMember.prototype._evalConstConstructor$2 = ConcreteMember.prototype._evalConstConstructor;
-ConcreteMember.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-ConcreteMember.prototype._get$3$isDynamic = ConcreteMember.prototype._get;
-ConcreteMember.prototype._get$4 = ConcreteMember.prototype._get;
-ConcreteMember.prototype._set$4$isDynamic = ConcreteMember.prototype._set;
-ConcreteMember.prototype._set$5 = ConcreteMember.prototype._set;
-ConcreteMember.prototype.canInvoke$2 = ConcreteMember.prototype.canInvoke;
-ConcreteMember.prototype.computeValue$0 = ConcreteMember.prototype.computeValue;
-ConcreteMember.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
-};
-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) {
@@ -6052,6 +5778,8 @@ MethodMember.prototype.get$returnType = function() { return this.returnType; };
MethodMember.prototype.set$returnType = function(value) { return this.returnType = value; };
MethodMember.prototype.get$parameters = function() { return this.parameters; };
MethodMember.prototype.set$parameters = function(value) { return this.parameters = value; };
+MethodMember.prototype.get$_methodData = function() { return this._methodData; };
+MethodMember.prototype.set$_methodData = function(value) { return this._methodData = value; };
MethodMember.prototype.get$isStatic = function() { return this.isStatic; };
MethodMember.prototype.set$isStatic = function(value) { return this.isStatic = value; };
MethodMember.prototype.get$isAbstract = function() { return this.isAbstract; };
@@ -6064,6 +5792,20 @@ MethodMember.prototype.get$isLambda = function() { return this.isLambda; };
MethodMember.prototype.set$isLambda = function(value) { return this.isLambda = value; };
MethodMember.prototype.get$initDelegate = function() { return this.initDelegate; };
MethodMember.prototype.set$initDelegate = function(value) { return this.initDelegate = value; };
+MethodMember.prototype.makeConcrete = function(concreteType) {
+ var _name = this.get$isConstructor() ? concreteType.name : this.name;
+ var ret = new MethodMember(_name, concreteType, this.definition);
+ ret.set$genericMember(this);
+ ret.set$_jsname(this._jsname);
+ return ret;
+}
+MethodMember.prototype.get$methodData = function() {
+ if (this.genericMember != null) return this.genericMember.get$dynamic().get$methodData();
+ if (this._methodData == null) {
+ this._methodData = new MethodData(this);
+ }
+ return this._methodData;
+}
MethodMember.prototype.get$isConstructor = function() {
return this.name == this.declaringType.name;
}
@@ -6079,29 +5821,26 @@ MethodMember.prototype.get$canGet = function() {
MethodMember.prototype.get$canSet = function() {
return false;
}
-MethodMember.prototype.get$requiresPropertySyntax = function() {
- return true;
-}
MethodMember.prototype.get$span = function() {
return this.definition == null ? null : this.definition.span;
}
MethodMember.prototype.get$constructorName = function() {
var returnType = this.definition.returnType;
- if (returnType == null) return "";
+ if ($eq(returnType)) return "";
if ((returnType instanceof GenericTypeReference)) {
return "";
}
if (returnType.get$names() != null) {
- return returnType.get$names().$index((0)).get$name();
+ return returnType.get$names()[(0)].name;
}
- else if (returnType.get$name() != null) {
+ else if ($ne(returnType.get$name())) {
return returnType.get$name().get$name();
}
$globals.world.internalError("no valid constructor name", this.definition.span);
}
MethodMember.prototype.get$functionType = function() {
if (this._functionType == null) {
- this._functionType = this.get$library().getOrAddFunctionType(this.declaringType, this.name, this.definition);
+ this._functionType = this.get$library().getOrAddFunctionType(this.declaringType, this.name, this.definition, this.get$methodData());
if (this.parameters == null) {
this.resolve();
}
@@ -6145,16 +5884,16 @@ MethodMember.prototype.indexOfParameter = function(name) {
}
return (-1);
}
-MethodMember.prototype.provideFieldSyntax = function() {
- this._provideFieldSyntax = true;
-}
MethodMember.prototype.providePropertySyntax = function() {
this._providePropertySyntax = true;
}
-MethodMember.prototype._set = function(context, node, target, value, isDynamic) {
+MethodMember.prototype._set = function(context, node, target, value) {
$globals.world.error("cannot set method", node.span);
}
-MethodMember.prototype._get = function(context, node, target, isDynamic) {
+MethodMember.prototype._get = function(context, node, target) {
+ if (!context.get$needsCode()) {
+ return new PureStaticValue(this.get$functionType(), node.span, false, false);
+ }
this.declaringType.genMethod(this);
this._provideOptionalParamInfo = true;
if (this.isStatic) {
@@ -6172,7 +5911,7 @@ MethodMember.prototype.namesInHomePositions = function(args) {
if (i >= this.parameters.get$length()) {
return false;
}
- if (args.getName(i) != this.parameters[i].get$name()) {
+ if (args.getName(i) != this.parameters[i].name) {
return false;
}
}
@@ -6183,9 +5922,9 @@ MethodMember.prototype.namesInOrder = function(args) {
var lastParameter = null;
for (var i = args.get$bareCount();
i < this.parameters.get$length(); i++) {
- var p = args.getIndexOfName(this.parameters[i].get$name());
- if (p >= (0) && args.values[p].get$needsTemp()) {
- if (lastParameter != null && lastParameter > p) {
+ var p = args.getIndexOfName(this.parameters[i].name);
+ if ($gte(p, (0)) && args.values.$index(p).get$needsTemp()) {
+ if (lastParameter != null && $gt(lastParameter, p)) {
return false;
}
lastParameter = p;
@@ -6197,17 +5936,16 @@ MethodMember.prototype.needsArgumentConversion = function(args) {
var bareCount = args.get$bareCount();
for (var i = (0);
i < bareCount; i++) {
- var arg = args.values[i];
- if (arg.needsConversion$1(this.parameters[i].get$type())) {
+ var arg = args.values.$index(i);
+ if (arg.needsConversion(this.parameters[i].type)) {
return true;
}
}
if (bareCount < this.parameters.get$length()) {
- this.genParameterValues();
for (var i = bareCount;
i < this.parameters.get$length(); i++) {
- var arg = args.getValue(this.parameters[i].get$name());
- if (arg != null && arg.needsConversion$1(this.parameters[i].get$type())) {
+ var arg = args.getValue(this.parameters[i].name);
+ if ($ne(arg) && arg.needsConversion(this.parameters[i].type)) {
return true;
}
}
@@ -6215,7 +5953,7 @@ MethodMember.prototype.needsArgumentConversion = function(args) {
return false;
}
MethodMember._argCountMsg = function(actual, expected, atLeast) {
- return "wrong number of positional arguments, expected " + ("" + (atLeast ? "at least " : "") + expected + " but found " + actual);
+ return $add("wrong number of positional arguments, expected ", ("" + (atLeast ? "at least " : "") + expected + " but found " + actual));
}
MethodMember.prototype._argError = function(context, node, target, args, msg, argIndex) {
var span;
@@ -6223,7 +5961,7 @@ MethodMember.prototype._argError = function(context, node, target, args, msg, ar
span = node.span;
}
else {
- span = args.nodes[argIndex].get$span();
+ span = args.nodes[argIndex].span;
}
if (this.isStatic || this.get$isConstructor()) {
$globals.world.error(msg, span);
@@ -6233,17 +5971,16 @@ MethodMember.prototype._argError = function(context, node, target, args, msg, ar
}
return target.invokeNoSuchMethod(context, this.name, node, args);
}
-MethodMember.prototype.genParameterValues = function() {
+MethodMember.prototype.genParameterValues = function(context) {
var $$list = this.parameters;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var p = $$list[$$i];
- p.genValue$2(this, this.generator);
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var p = $$i.next();
+ p.genValue(this, context);
}
}
-MethodMember.prototype.invoke = function(context, node, target, args, isDynamic) {
- if (this.parameters == null) {
- $globals.world.info(("surprised to need to resolve: " + this.declaringType.name + "." + this.name));
- this.resolve();
+MethodMember.prototype.invoke = function(context, node, target, args) {
+ if (!context.get$needsCode()) {
+ return new PureStaticValue(this.returnType, node.span, false, false);
}
this.declaringType.genMethod(this);
if (this.isStatic || this.isFactory) {
@@ -6255,51 +5992,51 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
}
var argsCode = [];
if (!target.get$isType() && (this.get$isConstructor() || target.get$isSuper())) {
- argsCode.add$1("this");
+ argsCode.add("this");
}
var bareCount = args.get$bareCount();
for (var i = (0);
i < bareCount; i++) {
- var arg = args.values[i];
+ var arg = args.values.$index(i);
if (i >= this.parameters.get$length()) {
var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.get$length(), false);
return this._argError(context, node, target, args, msg, i);
}
- arg = arg.convertTo$3(context, this.parameters[i].get$type(), isDynamic);
- argsCode.add$1(arg.get$code());
+ arg = arg.convertTo(context, this.parameters[i].type);
+ argsCode.add(arg.get$code());
}
var namedArgsUsed = (0);
if (bareCount < this.parameters.get$length()) {
- this.genParameterValues();
+ this.genParameterValues(context);
for (var i = bareCount;
i < this.parameters.get$length(); i++) {
- var arg = args.getValue(this.parameters[i].get$name());
- if (arg == null) {
- arg = this.parameters[i].get$value();
+ var arg = args.getValue(this.parameters[i].name);
+ if ($eq(arg)) {
+ arg = this.parameters[i].value;
}
else {
- arg = arg.convertTo$3(context, this.parameters[i].get$type(), isDynamic);
+ arg = arg.convertTo(context, this.parameters[i].type);
namedArgsUsed++;
}
- if (arg == null || !this.parameters[i].get$isOptional()) {
+ if ($eq(arg) || !this.parameters[i].get$isOptional()) {
var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + (1), true);
return this._argError(context, node, target, args, msg, i);
}
else {
- argsCode.add$1(arg.get$code());
+ argsCode.add(arg.get$code());
}
}
Arguments.removeTrailingNulls(argsCode);
}
if (namedArgsUsed < args.get$nameCount()) {
- var seen = new HashSetImplementation();
+ var seen = new HashSetImplementation_dart_core_String();
for (var i = bareCount;
i < args.get$length(); i++) {
var name = args.getName(i);
if (seen.contains$1(name)) {
return this._argError(context, node, target, args, ("duplicate argument \"" + name + "\""), i);
}
- seen.add$1(name);
+ seen.add(name);
var p = this.indexOfParameter(name);
if (p < (0)) {
return this._argError(context, node, target, args, ("method does not have optional parameter \"" + name + "\""), i);
@@ -6318,7 +6055,7 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
return new Value(this.get$inferredResult(), ("" + this.declaringType.get$jsname() + ".prototype." + this.get$jsname() + ".call(" + argsString + ")"), node.span);
}
if (this.get$isOperator()) {
- return this._invokeBuiltin(context, node, target, args, argsCode, isDynamic);
+ return this._invokeBuiltin(context, node, target, args, argsCode);
}
if (this.isFactory) {
return new Value(target.get$type(), ("" + this.get$generatedFactoryName() + "(" + argsString + ")"), node != null ? node.span : null);
@@ -6352,7 +6089,7 @@ MethodMember.prototype._invokeConstructor = function(context, node, target, args
}
var newType = this.declaringType;
var newObject = new ObjectValue(true, newType, span);
- newObject.initFields$0();
+ newObject.initFields();
this._evalConstConstructor(newObject, args);
return $globals.world.gen.globalForConst(newObject, [args.values]);
}
@@ -6364,48 +6101,55 @@ MethodMember.prototype._invokeConstructor = function(context, node, target, args
}
MethodMember.prototype._evalConstConstructor = function(newObject, args) {
this.declaringType.markUsed();
- var generator = new MethodGenerator(this, null);
- generator.evalBody$2(newObject, args);
+ this.get$methodData().eval(this, newObject, args);
}
-MethodMember.prototype._invokeBuiltin = function(context, node, target, args, argsCode, isDynamic) {
- if (this.declaringType.get$isNum()) {
- var code;
- if (this.name == ":negate") {
- code = ("-" + target.get$code());
- }
- else if (this.name == ":bit_not") {
- code = ("~" + target.get$code());
+MethodMember.prototype._invokeBuiltin = function(context, node, target, args, argsCode) {
+ if (target.get$type().get$isNum()) {
+ var code = null;
+ if (args.get$length() == (0)) {
+ if (this.name == ":negate") {
+ code = ("-" + target.get$code());
+ }
+ else if (this.name == ":bit_not") {
+ code = ("~" + target.get$code());
+ }
}
- else if (this.name == ":truncdiv" || this.name == ":mod") {
- $globals.world.gen.corejs.useOperator(this.name);
- code = ("" + this.get$jsname() + "(" + target.get$code() + ", " + argsCode.$index((0)) + ")");
+ else if (args.get$length() == (1) && args.values.$index((0)).get$type().get$isNum()) {
+ if (this.name == ":truncdiv" || this.name == ":mod") {
+ $globals.world.gen.corejs.useOperator(this.name);
+ code = ("" + this.get$jsname() + "(" + target.get$code() + ", " + argsCode.$index((0)) + ")");
+ }
+ else {
+ var op = TokenKind.rawOperatorFromMethod(this.name);
+ code = ("" + target.get$code() + " " + op + " " + argsCode.$index((0)));
+ }
}
- else {
- var op = TokenKind.rawOperatorFromMethod(this.name);
- code = ("" + target.get$code() + " " + op + " " + argsCode.$index((0)));
+ if (code != null) {
+ return new Value(this.get$inferredResult(), code, node.span);
}
- return new Value(this.get$inferredResult(), code, node.span);
}
- else if (this.declaringType.get$isString()) {
- if (this.name == ":index") {
+ else if (target.get$type().get$isString()) {
+ if (this.name == ":index" && args.values.$index((0)).get$type().get$isNum()) {
return new Value(this.declaringType, ("" + target.get$code() + "[" + argsCode.$index((0)) + "]"), node.span);
}
- else if (this.name == ":add") {
+ else if (this.name == ":add" && args.values.$index((0)).get$type().get$isNum()) {
return new Value(this.declaringType, ("" + target.get$code() + " + " + argsCode.$index((0))), node.span);
}
}
else if (this.declaringType.get$isNative()) {
- if (this.name == ":index") {
- return new Value(this.returnType, ("" + target.get$code() + "[" + argsCode.$index((0)) + "]"), node.span);
- }
- else if (this.name == ":setindex") {
- return new Value(this.returnType, ("" + target.get$code() + "[" + argsCode.$index((0)) + "] = " + argsCode.$index((1))), node.span);
+ if (args.get$length() > (0) && args.values.$index((0)).get$type().get$isNum()) {
+ if (this.name == ":index") {
+ return new Value(this.returnType, ("" + target.get$code() + "[" + argsCode.$index((0)) + "]"), node.span);
+ }
+ else if (this.name == ":setindex") {
+ return new Value(this.returnType, ("" + target.get$code() + "[" + argsCode.$index((0)) + "] = " + argsCode.$index((1))), node.span);
+ }
}
}
if (this.name == ":eq" || this.name == ":ne") {
var op = this.name == ":eq" ? "==" : "!=";
if (this.name == ":ne") {
- target.invoke(context, ":eq", node, args, isDynamic);
+ target.invoke(context, ":eq", node, args);
}
if ($eq(argsCode.$index((0)), "null")) {
return new Value(this.get$inferredResult(), ("" + target.get$code() + " " + op + " null"), node.span);
@@ -6426,6 +6170,11 @@ MethodMember.prototype._invokeBuiltin = function(context, node, target, args, ar
else if (this.name == ":setindex") {
$globals.world.gen.corejs.useSetIndex = true;
}
+ else {
+ $globals.world.gen.corejs.useOperator(this.name);
+ var argsString = argsCode.get$length() == (0) ? "" : (", " + argsCode.$index((0)));
+ return new Value(this.returnType, ("" + this.get$jsname() + "(" + target.get$code() + argsString + ")"), node.span);
+ }
var argsString = Strings.join(argsCode, ", ");
return new Value(this.get$inferredResult(), ("" + target.get$code() + "." + this.get$jsname() + "(" + argsString + ")"), node.span);
}
@@ -6436,15 +6185,15 @@ MethodMember.prototype.resolve = function() {
this.isAbstract = !this.declaringType.get$isClass();
if (this.definition.modifiers != null) {
var $$list = this.definition.modifiers;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var mod = $$list[$$i];
- if ($eq(mod.get$kind(), (85))) {
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var mod = $$i.next();
+ if (mod.get$kind() == (85)) {
if (this.isStatic) {
$globals.world.error("duplicate static modifier", mod.get$span());
}
this.isStatic = true;
}
- else if (this.get$isConstructor() && $eq(mod.get$kind(), (92))) {
+ else if (this.get$isConstructor() && mod.get$kind() == (92)) {
if (this.isConst) {
$globals.world.error("duplicate const modifier", mod.get$span());
}
@@ -6453,7 +6202,7 @@ MethodMember.prototype.resolve = function() {
}
this.isConst = true;
}
- else if ($eq(mod.get$kind(), (74))) {
+ else if (mod.get$kind() == (74)) {
if (this.isFactory) {
$globals.world.error("duplicate factory modifier", mod.get$span());
}
@@ -6465,7 +6214,7 @@ MethodMember.prototype.resolve = function() {
}
this.isFactory = true;
}
- else if ($eq(mod.get$kind(), (71))) {
+ else if (mod.get$kind() == (71)) {
if (this.isAbstract) {
if (this.declaringType.get$isClass()) {
$globals.world.error("duplicate abstract modifier", mod.get$span());
@@ -6504,55 +6253,59 @@ MethodMember.prototype.resolve = function() {
this.returnType = this.declaringType;
}
else {
- this.returnType = this.resolveType(this.definition.returnType, false, true);
+ if ((this.definition.returnType instanceof SimpleTypeReference) && $eq(this.definition.returnType.get$dynamic().get$type(), $globals.world.voidType)) {
+ this.returnType = $globals.world.voidType;
+ }
+ else {
+ this.returnType = this.resolveType(this.definition.returnType, false, !this.isStatic);
+ }
}
this.parameters = [];
var $$list = this.definition.formals;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var formal = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var formal = $$i.next();
var param = new Parameter(formal, this);
- param.resolve$0();
+ param.resolve();
this.parameters.add(param);
}
- if (!this.isLambda) {
+ if (!this.isLambda && this.declaringType.get$isClass()) {
this.get$library()._addMember(this);
}
}
-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);
+// ********** Code for FactoryMap **************
+function FactoryMap() {
+ this.factories = new HashMapImplementation();
+}
+FactoryMap.prototype.get$factories = function() { return this.factories; };
+FactoryMap.prototype.set$factories = function(value) { return this.factories = value; };
+FactoryMap.prototype.getFactoriesFor = function(typeName) {
+ var ret = this.factories.$index(typeName);
+ if ($eq(ret)) {
+ ret = new HashMapImplementation();
+ this.factories.$setindex(typeName, ret);
}
- return t;
+ return ret;
+}
+FactoryMap.prototype.addFactory = function(typeName, name, member) {
+ this.getFactoriesFor(typeName).$setindex(name, member);
+}
+FactoryMap.prototype.getFactory = function(typeName, name) {
+ return this.getFactoriesFor(typeName).$index(name);
+}
+FactoryMap.prototype.forEach = function(f) {
+ this.factories.forEach((function (_, constructors) {
+ constructors.forEach((function (_, member) {
+ f(member);
+ })
+ );
+ })
+ );
}
-MethodMember.prototype._evalConstConstructor$2 = MethodMember.prototype._evalConstConstructor;
-MethodMember.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-MethodMember.prototype._get$3$isDynamic = MethodMember.prototype._get;
-MethodMember.prototype._get$4 = MethodMember.prototype._get;
-MethodMember.prototype._set$4$isDynamic = MethodMember.prototype._set;
-MethodMember.prototype._set$5 = MethodMember.prototype._set;
-MethodMember.prototype.canInvoke$2 = MethodMember.prototype.canInvoke;
-MethodMember.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
-};
-MethodMember.prototype.invoke$4$isDynamic = MethodMember.prototype.invoke;
-MethodMember.prototype.invoke$5 = MethodMember.prototype.invoke;
-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();
this.name = member.name;
+ this._preparedForSet = false;
this.isVar = isVar;
this.members = [member];
}
@@ -6564,172 +6317,109 @@ MemberSet.prototype.toString = function() {
return ("" + this.name + ":" + this.members.get$length());
}
MemberSet.prototype.add = function(member) {
- return this.members.add(member);
-}
-MemberSet.prototype.get$isStatic = function() {
- return this.members.get$length() == (1) && this.members[(0)].get$isStatic();
+ this.members.add(member);
}
MemberSet.prototype.get$isOperator = function() {
return this.members[(0)].get$isOperator();
}
-MemberSet.prototype.canInvoke = function(context, args) {
- return this.members.some((function (m) {
- return m.canInvoke$2(context, args);
- })
- );
-}
-MemberSet.prototype._makeError = function(node, target, action) {
- if (!target.get$type().get$isVar()) {
- $globals.world.warning(("could not find applicable " + action + " for \"" + this.name + "\""), node.span);
- }
- return new Value($globals.world.varType, ("" + target.get$code() + "." + this.jsname + "() /*no applicable " + action + "*/"), node.span);
-}
MemberSet.prototype.get$treatAsField = function() {
if (this._treatAsField == null) {
- this._treatAsField = !this.isVar && (this.members.some((function (m) {
- return m.get$requiresFieldSyntax();
- })
- ) || this.members.every((function (m) {
- return !m.get$requiresPropertySyntax();
+ this._treatAsField = !this.isVar && this.members.every((function (m) {
+ return m.get$isField();
})
- ));
- var $$list = this.members;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var member = $$list[$$i];
- if (this._treatAsField) {
- member.provideFieldSyntax$0();
- }
- else {
- member.providePropertySyntax$0();
- }
- }
+ );
}
return this._treatAsField;
}
-MemberSet.prototype._get = function(context, node, target, isDynamic) {
- var returnValue;
+MemberSet.unionTypes = function(t1, t2) {
+ if (t1 == null) return t2;
+ if (t2 == null) return t1;
+ return Type.union(t1, t2);
+}
+MemberSet.prototype._get = function(context, node, target) {
if (this.members.get$length() == (1) && !this.isVar) {
- return this.members[(0)]._get$4(context, node, target, isDynamic);
- }
- var targets = this.members.filter$1((function (m) {
- return m.get$canGet();
- })
- );
- if (this.isVar) {
- targets.forEach$1((function (m) {
- return m._get$3$isDynamic(context, node, target, true);
- })
- );
- returnValue = new Value(this._foldTypes(targets), null, node.span);
+ return this.members[(0)]._get(context, node, target);
}
- else {
- if (this.members.get$length() == (1)) {
- return this.members[(0)]._get$4(context, node, target, isDynamic);
- }
- else if ($eq(targets.get$length(), (1))) {
- return targets.$index((0))._get$4(context, node, target, isDynamic);
- }
- for (var $$i = targets.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
- var value = member._get$3$isDynamic(context, node, target, true);
- returnValue = this._tryUnion(returnValue, value, node);
+ if (this._returnTypeForGet == null) {
+ var $$list = this.members;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
+ if (!member.get$canGet()) continue;
+ if (!this.get$treatAsField()) member.providePropertySyntax();
+ var r = member._get(context, node, target);
+ this._returnTypeForGet = MemberSet.unionTypes(this._returnTypeForGet, r.get$type());
}
- if (returnValue == null) {
- return this._makeError(node, target, "getter");
+ if (this._returnTypeForGet == null) {
+ $globals.world.error(("no valid getters for \"" + this.name + "\""), node.span);
}
}
- if (returnValue.get$code() == null) {
- if (this.get$treatAsField()) {
- return new Value(returnValue.get$type(), ("" + target.get$code() + "." + this.jsname), node.span);
- }
- else {
- return new Value(returnValue.get$type(), ("" + target.get$code() + ".get$" + this.jsname + "()"), node.span);
- }
+ if (this._treatAsField) {
+ return new Value(this._returnTypeForGet, ("" + target.get$code() + "." + this.jsname), node.span);
+ }
+ else {
+ return new Value(this._returnTypeForGet, ("" + target.get$code() + ".get$" + this.jsname + "()"), node.span);
}
- return returnValue;
}
-MemberSet.prototype._set = function(context, node, target, value, isDynamic) {
+MemberSet.prototype._set = function(context, node, target, value) {
if (this.members.get$length() == (1) && !this.isVar) {
- return this.members[(0)]._set$5(context, node, target, value, isDynamic);
- }
- var returnValue;
- var targets = this.members.filter$1((function (m) {
- return m.get$canSet();
- })
- );
- if (this.isVar) {
- targets.forEach$1((function (m) {
- return m._set$4$isDynamic(context, node, target, value, true);
- })
- );
- returnValue = new Value(this._foldTypes(targets), null, node.span);
+ return this.members[(0)]._set(context, node, target, value);
}
- else {
- if (this.members.get$length() == (1)) {
- return this.members[(0)]._set$5(context, node, target, value, isDynamic);
- }
- else if ($eq(targets.get$length(), (1))) {
- return targets.$index((0))._set$5(context, node, target, value, isDynamic);
- }
- for (var $$i = targets.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
- var res = member._set$4$isDynamic(context, node, target, value, true);
- returnValue = this._tryUnion(returnValue, res, node);
- }
- if (returnValue == null) {
- return this._makeError(node, target, "setter");
+ if (!this._preparedForSet) {
+ this._preparedForSet = true;
+ var $$list = this.members;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
+ if (!member.get$canSet()) continue;
+ if (!this.get$treatAsField()) member.providePropertySyntax();
+ var r = member._set(context, node, target, value);
}
}
- if (returnValue.get$code() == null) {
- if (this.get$treatAsField()) {
- return new Value(returnValue.get$type(), ("" + target.get$code() + "." + this.jsname + " = " + value.get$code()), node.span);
- }
- else {
- return new Value(returnValue.get$type(), ("" + target.get$code() + ".set$" + this.jsname + "(" + value.get$code() + ")"), node.span);
- }
+ if (this.get$treatAsField()) {
+ return new Value(value.get$type(), ("" + target.get$code() + "." + this.jsname + " = " + value.get$code()), node.span);
}
- return returnValue;
-}
-MemberSet.prototype.invoke = function(context, node, target, args, isDynamic) {
- if (this.isVar && !this.get$isOperator()) {
- return this.invokeOnVar(context, node, target, args);
+ else {
+ return new Value(value.get$type(), ("" + target.get$code() + ".set$" + this.jsname + "(" + value.get$code() + ")"), node.span);
}
+}
+MemberSet.prototype.invoke = function(context, node, target, args) {
if (this.members.get$length() == (1) && !this.isVar) {
- return this.members[(0)].invoke$5(context, node, target, args, isDynamic);
+ return this.members[(0)].invoke(context, node, target, args);
}
- var targets = this.members.filter$1((function (m) {
- return m.canInvoke$2(context, args);
- })
- );
- if ($eq(targets.get$length(), (1))) {
- return targets.$index((0)).invoke$5(context, node, target, args, isDynamic);
+ var invokeKey = null;
+ if (this._invokes == null) {
+ this._invokes = [];
+ invokeKey = null;
}
- var returnValue = null;
- if (targets.get$length() < (1000)) {
- for (var $$i = targets.iterator$0(); $$i.hasNext$0(); ) {
- var member = $$i.next$0();
- var res = member.invoke$4$isDynamic(context, node, target, args, true);
- returnValue = this._tryUnion(returnValue, res, node);
- }
- if (returnValue == null) {
- return this._makeError(node, target, "method");
+ else {
+ var $$list = this._invokes;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var ik = $$i.next();
+ if (ik.matches(args)) {
+ invokeKey = ik;
+ break;
+ }
}
}
- else {
- returnValue = new Value($globals.world.varType, null, node.span);
+ if ($eq(invokeKey)) {
+ invokeKey = new InvokeKey(args);
+ this._invokes.add(invokeKey);
+ invokeKey.addMembers(this.members, context, target, args);
}
- if (returnValue.get$code() == null) {
+ if (invokeKey.get$needsVarCall() || this.get$isOperator()) {
if (this.name == ":call") {
return target._varCall(context, node, args);
}
else if (this.get$isOperator()) {
- return this.invokeSpecial(target, args, returnValue.get$type());
+ return this.invokeSpecial(target, args, invokeKey.get$returnType());
}
else {
return this.invokeOnVar(context, node, target, args);
}
}
- return returnValue;
+ else {
+ var code = ("" + target.get$code() + "." + this.jsname + "(" + args.getCode() + ")");
+ return new Value(invokeKey.get$returnType(), code, node.span);
+ }
}
MemberSet.prototype.invokeSpecial = function(target, args, returnType) {
var argsString = args.getCode();
@@ -6749,27 +6439,10 @@ MemberSet.prototype.invokeSpecial = function(target, args, returnType) {
}
}
MemberSet.prototype.invokeOnVar = function(context, node, target, args) {
- context.counters.dynamicMethodCalls++;
+ var $0;
+ ($0 = context.get$counters()).dynamicMethodCalls = $0.dynamicMethodCalls + (1);
var member = this.getVarMember(context, node, args);
- return member.invoke$4(context, node, target, args);
-}
-MemberSet.prototype._tryUnion = function(x, y, node) {
- if (x == null) return y;
- var type = Type.union(x.get$type(), y.get$type());
- if (x.get$code() == y.get$code()) {
- if ($eq(type, x.get$type())) {
- return x;
- }
- else if (x.get$isConst() || y.get$isConst()) {
- $globals.world.internalError("unexpected: union of const values ");
- }
- else {
- return Value.union(x, y);
- }
- }
- else {
- return new Value(type, null, node.span);
- }
+ return member.invoke(context, node, target, args);
}
MemberSet.prototype.getVarMember = function(context, node, args) {
if ($globals.world.objectType.varStubs == null) {
@@ -6777,10 +6450,10 @@ MemberSet.prototype.getVarMember = function(context, node, args) {
}
var stubName = _getCallStubName(this.name, args);
var stub = $globals.world.objectType.varStubs.$index(stubName);
- if (stub == null) {
+ if ($eq(stub)) {
var mset = context.findMembers(this.name).members;
- var targets = mset.filter$1((function (m) {
- return m.canInvoke$2(context, args);
+ var targets = mset.filter((function (m) {
+ return m.canInvoke(context, args);
})
);
stub = new VarMethodSet(this.name, stubName, targets, args, this._foldTypes(targets));
@@ -6794,52 +6467,163 @@ MemberSet.prototype._foldTypes = function(targets) {
})
), Type.union, $globals.world.varType);
}
-MemberSet.prototype._get$3 = function($0, $1, $2) {
- return this._get($0, $1, $2, false);
-};
-MemberSet.prototype._get$3$isDynamic = MemberSet.prototype._get;
-MemberSet.prototype._get$4 = MemberSet.prototype._get;
-MemberSet.prototype._set$4$isDynamic = MemberSet.prototype._set;
-MemberSet.prototype._set$5 = MemberSet.prototype._set;
-MemberSet.prototype.add$1 = MemberSet.prototype.add;
-MemberSet.prototype.canInvoke$2 = MemberSet.prototype.canInvoke;
-MemberSet.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
-};
-MemberSet.prototype.invoke$4$isDynamic = MemberSet.prototype.invoke;
-MemberSet.prototype.invoke$5 = MemberSet.prototype.invoke;
MemberSet.prototype.toString$0 = MemberSet.prototype.toString;
-// ********** Code for FactoryMap **************
-function FactoryMap() {
- this.factories = new HashMapImplementation();
+// ********** Code for InvokeKey **************
+function InvokeKey(args) {
+ this.needsVarCall = false;
+ this.bareArgs = args.get$bareCount();
+ if (this.bareArgs != args.get$length()) {
+ this.namedArgs = args.getNames();
+ }
+}
+InvokeKey.prototype.get$returnType = function() { return this.returnType; };
+InvokeKey.prototype.set$returnType = function(value) { return this.returnType = value; };
+InvokeKey.prototype.get$needsVarCall = function() { return this.needsVarCall; };
+InvokeKey.prototype.set$needsVarCall = function(value) { return this.needsVarCall = value; };
+InvokeKey.prototype.matches = function(args) {
+ if (this.namedArgs == null) {
+ if (this.bareArgs != args.get$length()) return false;
+ }
+ else {
+ if (this.bareArgs + this.namedArgs.get$length() != args.get$length()) return false;
+ }
+ if (this.bareArgs != args.get$bareCount()) return false;
+ if (this.namedArgs == null) return true;
+ for (var i = (0);
+ i < this.namedArgs.get$length(); i++) {
+ if (this.namedArgs[i] != args.getName(this.bareArgs + i)) return false;
+ }
+ return true;
}
-FactoryMap.prototype.getFactoriesFor = function(typeName) {
- var ret = this.factories.$index(typeName);
- if (ret == null) {
- ret = new HashMapImplementation();
- this.factories.$setindex(typeName, ret);
+InvokeKey.prototype.addMembers = function(members, context, target, args) {
+ for (var $$i = members.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
+ if (!(member.get$parameters().get$length() == this.bareArgs && this.namedArgs == null)) {
+ this.needsVarCall = true;
+ }
+ if (member.canInvoke(context, args)) {
+ if (member.get$isMethod()) {
+ this.returnType = MemberSet.unionTypes(this.returnType, member.get$returnType());
+ member.get$declaringType().genMethod(member);
+ }
+ else {
+ this.needsVarCall = true;
+ this.returnType = $globals.world.varType;
+ }
+ }
+ }
+ if (this.returnType == null) {
+ this.returnType = $globals.world.varType;
}
- return ret;
}
-FactoryMap.prototype.addFactory = function(typeName, name, member) {
- this.getFactoriesFor(typeName).$setindex(name, member);
+// ********** Code for MethodCallData **************
+function MethodCallData(data, method) {
+ this.method = method;
+ this.data = data;
+}
+MethodCallData.prototype.get$method = function() { return this.method; };
+MethodCallData.prototype.set$method = function(value) { return this.method = value; };
+MethodCallData.prototype.get$_methodGenerator = function() { return this._methodGenerator; };
+MethodCallData.prototype.set$_methodGenerator = function(value) { return this._methodGenerator = value; };
+MethodCallData.prototype.matches = function(other) {
+ return $eq(this.method, other.method);
+}
+MethodCallData.prototype.run = function() {
+ if (this._methodGenerator != null) return;
+ this._methodGenerator = new MethodGenerator(this.method, this.data.context);
+ this._methodGenerator.run();
+}
+MethodCallData.prototype.run$0 = MethodCallData.prototype.run;
+// ********** Code for MethodData **************
+function MethodData(baseMethod, context) {
+ this.needsTypeParams = false;
+ this._calls = [];
+ this.baseMethod = baseMethod;
+ this.context = context;
+ this.body = this.baseMethod.definition.body;
+ if (this.baseMethod.get$isConstructor()) {
+ this.needsTypeParams = true;
+ }
+}
+MethodData.prototype.get$body = function() { return this.body; };
+MethodData.prototype.set$body = function(value) { return this.body = value; };
+MethodData.prototype.analyze = function() {
+ if (this.body == null) return;
+ var ma = new MethodAnalyzer(this.baseMethod, this.body);
+ ma.analyze$1(this.context);
+}
+MethodData.prototype.eval = function(method, newObject, args) {
+ if (method != this.baseMethod) {
+ if (!this.needsTypeParams) method = this.baseMethod;
+ }
+ var gen = new MethodGenerator(method, this.context);
+ return gen.evalBody(newObject, args);
+}
+MethodData.prototype.invokeCall = function(callData) {
+ var $$list = this._calls;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var cd = $$i.next();
+ if (cd.matches(callData)) {
+ return cd.run$0();
+ }
+ }
+ this._calls.add(callData);
+ callData.run();
+}
+MethodData.prototype.run = function(method) {
+ if (this.body == null && !method.get$isConstructor() && !method.get$isNative()) return;
+ if (method != this.baseMethod) {
+ if (!this.needsTypeParams) method = this.baseMethod;
+ }
+ var callData = new MethodCallData(this, method);
+ method.declaringType.get$genericType().markUsed();
+ this.invokeCall(callData);
+}
+MethodData.prototype.writeDefinition = function(method, writer) {
+ var gen = null;
+ var $$list = this._calls;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var cd = $$i.next();
+ if ($eq(cd.get$method(), method)) {
+ gen = cd.get$_methodGenerator();
+ }
+ }
+ if ($ne(gen)) {
+ if (method.definition.nativeBody != null && $eq(method, this.baseMethod)) {
+ if (method.definition.nativeBody == "") return true;
+ gen.set$writer(new CodeWriter());
+ gen.get$writer().write(method.definition.nativeBody);
+ gen.set$_paramCode(map(method.parameters, (function (p) {
+ return p.get$name();
+ })
+ ));
+ }
+ gen.writeDefinition(writer);
+ return true;
+ }
+ else {
+ return false;
+ }
}
-FactoryMap.prototype.getFactory = function(typeName, name) {
- return this.getFactoriesFor(typeName).$index(name);
+MethodData.prototype.createFunction = function(writer) {
+ this.run(this.baseMethod);
+ this.writeDefinition(this.baseMethod, writer);
}
-FactoryMap.prototype.forEach = function(f) {
- this.factories.forEach((function (_, constructors) {
- constructors.forEach((function (_, member) {
- f.call$1(member);
- })
- );
- })
- );
+MethodData.prototype.createLambda = function(node, context) {
+ var lambdaGen = new MethodGenerator(this.baseMethod, context);
+ if (this.baseMethod.name != "") {
+ lambdaGen.get$_scope().create$3$isFinal(this.baseMethod.name, this.baseMethod.get$functionType(), this.baseMethod.definition.span, true);
+ lambdaGen._pushBlock$1(this.baseMethod.definition);
+ }
+ this._calls.add(new MethodCallData(this, this.baseMethod));
+ lambdaGen.run();
+ if (this.baseMethod.name != "") {
+ lambdaGen._popBlock(this.baseMethod.definition);
+ }
+ var writer = new CodeWriter();
+ lambdaGen.writeDefinition(writer, node);
+ return new Value(this.baseMethod.get$functionType(), writer.get$text(), this.baseMethod.definition.span);
}
-FactoryMap.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$1($0));
-};
-FactoryMap.prototype.getFactory$2 = FactoryMap.prototype.getFactory;
// ********** Code for Token **************
function Token(kind, source, start, end) {
this.end = end;
@@ -6848,7 +6632,6 @@ function Token(kind, source, start, end) {
this.source = source;
}
Token.prototype.get$kind = function() { return this.kind; };
-Token.prototype.get$end = function() { return this.end; };
Token.prototype.get$start = function() { return this.start; };
Token.prototype.get$text = function() {
return this.source.get$text().substring(this.start, this.end);
@@ -6858,7 +6641,7 @@ Token.prototype.toString = function() {
var actualText = this.get$text();
if ($ne(kindText, actualText)) {
if (actualText.get$length() > (10)) {
- actualText = $add(actualText.substring$2((0), (8)), "...");
+ actualText = $add(actualText.substring((0), (8)), "...");
}
return ("" + kindText + "(" + actualText + ")");
}
@@ -6869,12 +6652,6 @@ Token.prototype.toString = function() {
Token.prototype.get$span = function() {
return new SourceSpan(this.source, this.start, this.end);
}
-Token.prototype.end$0 = function() {
- return this.end.call$0();
-};
-Token.prototype.start$0 = function() {
- return this.start.call$0();
-};
Token.prototype.toString$0 = Token.prototype.toString;
// ********** Code for LiteralToken **************
$inherits(LiteralToken, Token);
@@ -6898,8 +6675,6 @@ function SourceFile(filename, _text) {
this.filename = filename;
}
SourceFile.prototype.get$filename = function() { return this.filename; };
-SourceFile.prototype.get$orderInLibrary = function() { return this.orderInLibrary; };
-SourceFile.prototype.set$orderInLibrary = function(value) { return this.orderInLibrary = value; };
SourceFile.prototype.get$text = function() {
return this._text;
}
@@ -6907,12 +6682,12 @@ SourceFile.prototype.get$lineStarts = function() {
if (this._lineStarts == null) {
var starts = [(0)];
var index = (0);
- while (index < this.get$text().length) {
+ while ($lt(index, this.get$text().length)) {
index = this.get$text().indexOf("\n", index) + (1);
- if (index <= (0)) break;
- starts.add$1(index);
+ if ($lte(index, (0))) break;
+ starts.add(index);
}
- starts.add$1(this.get$text().length + (1));
+ starts.add(this.get$text().length + (1));
this._lineStarts = starts;
}
return this._lineStarts;
@@ -6921,7 +6696,7 @@ SourceFile.prototype.getLine = function(position) {
var starts = this.get$lineStarts();
for (var i = (0);
i < starts.get$length(); i++) {
- if (starts.$index(i) > position) return i - (1);
+ if ($gt(starts.$index(i), position)) return i - (1);
}
$globals.world.internalError("bad position");
}
@@ -6933,34 +6708,34 @@ SourceFile.prototype.getLocationMessage = function(message, start, end, includeT
var column = this.getColumn(line, start);
var buf = new StringBufferImpl(("" + this.filename + ":" + ($add(line, (1))) + ":" + ($add(column, (1))) + ": " + message));
if (includeText) {
- buf.add$1("\n");
+ buf.add("\n");
var textLine;
- if (($add(line, (2))) < this._lineStarts.get$length()) {
- textLine = this.get$text().substring(this._lineStarts[line], this._lineStarts[$add(line, (1))]);
+ if ($lt(($add(line, (2))), this._lineStarts.get$length())) {
+ textLine = this.get$text().substring(this._lineStarts.$index(line), this._lineStarts.$index($add(line, (1))));
}
else {
- textLine = this.get$text().substring(this._lineStarts[line]) + "\n";
+ textLine = $add(this.get$text().substring(this._lineStarts.$index(line)), "\n");
}
var toColumn = Math.min($add(column, (end - start)), textLine.get$length());
if ($globals.options.useColors) {
- buf.add$1(textLine.substring$2((0), column));
- buf.add$1($globals._RED_COLOR);
- buf.add$1(textLine.substring$2(column, toColumn));
- buf.add$1($globals._NO_COLOR);
- buf.add$1(textLine.substring$1(toColumn));
+ buf.add(textLine.substring((0), column));
+ buf.add($globals._RED_COLOR);
+ buf.add(textLine.substring(column, toColumn));
+ buf.add($globals._NO_COLOR);
+ buf.add(textLine.substring$1(toColumn));
}
else {
- buf.add$1(textLine);
+ buf.add(textLine);
}
var i = (0);
- for (; i < column; i++) {
- buf.add$1(" ");
+ for (; $lt(i, column); i++) {
+ buf.add(" ");
}
- if ($globals.options.useColors) buf.add$1($globals._RED_COLOR);
+ if ($globals.options.useColors) buf.add($globals._RED_COLOR);
for (; i < toColumn; i++) {
- buf.add$1("^");
+ buf.add("^");
}
- if ($globals.options.useColors) buf.add$1($globals._NO_COLOR);
+ if ($globals.options.useColors) buf.add($globals._NO_COLOR);
}
return buf.toString$0();
}
@@ -6972,9 +6747,6 @@ SourceFile.prototype.compareTo = function(other) {
return this.filename.compareTo(other.filename);
}
}
-SourceFile.prototype.compareTo$1 = SourceFile.prototype.compareTo;
-SourceFile.prototype.getColumn$2 = SourceFile.prototype.getColumn;
-SourceFile.prototype.getLine$1 = SourceFile.prototype.getLine;
// ********** Code for SourceSpan **************
function SourceSpan(file, start, end) {
this.file = file;
@@ -6983,7 +6755,6 @@ function SourceSpan(file, start, end) {
}
SourceSpan.prototype.get$file = function() { return this.file; };
SourceSpan.prototype.get$start = function() { return this.start; };
-SourceSpan.prototype.get$end = function() { return this.end; };
SourceSpan.prototype.get$text = function() {
return this.file.get$text().substring(this.start, this.end);
}
@@ -7002,13 +6773,6 @@ SourceSpan.prototype.compareTo = function(other) {
}
return this.file.compareTo(other.file);
}
-SourceSpan.prototype.compareTo$1 = SourceSpan.prototype.compareTo;
-SourceSpan.prototype.end$0 = function() {
- return this.end.call$0();
-};
-SourceSpan.prototype.start$0 = function() {
- return this.start.call$0();
-};
// ********** Code for InterpStack **************
function InterpStack(previous, quote, isMultiline) {
this.quote = quote;
@@ -7030,9 +6794,6 @@ InterpStack.push = function(stack, quote, isMultiline) {
if (stack != null) newStack.set$previous(stack);
return newStack;
}
-InterpStack.prototype.next$0 = function() {
- return this.next.call$0();
-};
// ********** Code for TokenizerHelpers **************
function TokenizerHelpers() {
@@ -7209,7 +6970,7 @@ TokenizerBase.prototype.readHex = function(hexLength) {
}
}
TokenizerBase._hexDigit(this._text.charCodeAt(this._lang_index));
- result = (result * (16)) + digit;
+ result = $add(($mul(result, (16))), digit);
this._lang_index++;
}
return result;
@@ -7274,9 +7035,9 @@ TokenizerBase.prototype.finishMultilineString = function(quote) {
if (this._maybeEatChar(quote)) {
return this._makeStringToken(buf, false);
}
- buf.add$1(quote);
+ buf.add(quote);
}
- buf.add$1(quote);
+ buf.add(quote);
}
else if (ch == (36)) {
this._interpStack = InterpStack.push(this._interpStack, quote, true);
@@ -7288,11 +7049,11 @@ TokenizerBase.prototype.finishMultilineString = function(quote) {
return this._errorToken("invalid hex escape sequence");
}
else {
- buf.add$1(escapeVal);
+ buf.add(escapeVal);
}
}
else {
- buf.add$1(ch);
+ buf.add(ch);
}
}
}
@@ -7377,11 +7138,11 @@ TokenizerBase.prototype.finishStringBody = function(quote) {
return this._errorToken("invalid hex escape sequence");
}
else {
- buf.add$1(escapeVal);
+ buf.add(escapeVal);
}
}
else {
- buf.add$1(ch);
+ buf.add(ch);
}
}
}
@@ -7489,7 +7250,6 @@ TokenizerBase.prototype.finishIdentifier = function(ch) {
return this._finishToken(kind);
}
}
-TokenizerBase.prototype.next$0 = TokenizerBase.prototype.next;
// ********** Code for Tokenizer **************
$inherits(Tokenizer, TokenizerBase);
function Tokenizer(source, skipWhitespace, index) {
@@ -7832,7 +7592,7 @@ Tokenizer.prototype.next = function() {
Tokenizer.prototype.getIdentifierKind = function() {
var i0 = this._startIndex;
var ch;
- switch (this._lang_index - i0) {
+ switch ($sub(this._lang_index, i0)) {
case (2):
ch = this._text.charCodeAt(i0);
@@ -8043,7 +7803,6 @@ Tokenizer.prototype.getIdentifierKind = function() {
}
}
-Tokenizer.prototype.next$0 = Tokenizer.prototype.next;
// ********** Code for TokenKind **************
function TokenKind() {}
TokenKind.kindToString = function(kind) {
@@ -8514,7 +8273,7 @@ TokenKind.kindToString = function(kind) {
default:
- return "TokenKind(" + kind.toString$0() + ")";
+ return $add($add("TokenKind(", kind.toString$0()), ")");
}
}
@@ -8866,7 +8625,7 @@ function Parser(source, diet, throwOnIncomplete, optionalSemicolons, startOffset
this.diet = diet;
this._afterParensIndex = (0);
this.tokenizer = new Tokenizer(this.source, true, startOffset);
- this._peekToken = this.tokenizer.next$0();
+ this._peekToken = this.tokenizer.next();
this._afterParens = [];
}
Parser.prototype.get$enableAwait = function() {
@@ -8900,7 +8659,7 @@ Parser.prototype._peek = function() {
}
Parser.prototype._lang_next = function() {
this._previousToken = this._peekToken;
- this._peekToken = this.tokenizer.next$0();
+ this._peekToken = this.tokenizer.next();
return this._previousToken;
}
Parser.prototype._peekKind = function(kind) {
@@ -8915,7 +8674,7 @@ Parser.prototype._isIdentifier = function(kind) {
Parser.prototype._maybeEat = function(kind) {
if (this._peekToken.kind == kind) {
this._previousToken = this._peekToken;
- this._peekToken = this.tokenizer.next$0();
+ this._peekToken = this.tokenizer.next();
return true;
}
else {
@@ -8954,14 +8713,14 @@ Parser.prototype._skipBlock = function() {
this._eat((6));
while (true) {
var tok = this._lang_next();
- if ($eq(tok.get$kind(), (6))) {
+ if (tok.get$kind() == (6)) {
depth += (1);
}
- else if ($eq(tok.get$kind(), (7))) {
+ else if (tok.get$kind() == (7)) {
depth -= (1);
if (depth == (0)) return;
}
- else if ($eq(tok.get$kind(), (1))) {
+ else if (tok.get$kind() == (1)) {
this._lang_error("unexpected end of file during diet parse", tok.get$span());
return;
}
@@ -8974,11 +8733,11 @@ Parser.prototype.compilationUnit = function() {
var ret = [];
this._maybeEat((13));
while (this._peekKind((12))) {
- ret.add$1(this.directive());
+ ret.add(this.directive());
}
this._recover = false;
while (!this._maybeEat((1))) {
- ret.add$1(this.topLevelDefinition());
+ ret.add(this.topLevelDefinition());
}
this._recover = false;
return ret;
@@ -9030,7 +8789,7 @@ Parser.prototype.classDefinition = function(kind) {
var _native = null;
if (this._maybeEat((80))) {
_native = this.maybeStringLiteral();
- if (_native != null) _native = new NativeType(_native);
+ if ($ne(_native)) _native = new NativeType(_native);
}
var oldFactory = this._maybeEat((74));
var defaultType = null;
@@ -9039,16 +8798,16 @@ Parser.prototype.classDefinition = function(kind) {
$globals.world.warning("factory no longer supported, use \"default\" instead", this._previousToken.get$span());
}
var baseType = this.nameTypeReference();
- var typeParams0 = null;
+ var factTypeParams = null;
if (this._peekKind((52))) {
- typeParams0 = this.typeParameters();
+ factTypeParams = this.typeParameters();
}
- defaultType = new DefaultTypeReference(oldFactory, baseType, typeParams0, this._makeSpan(baseType.get$span().get$start()));
+ defaultType = new DefaultTypeReference(oldFactory, baseType, factTypeParams, this._makeSpan(baseType.get$span().start));
}
var body = [];
if (this._maybeEat((6))) {
while (!this._maybeEat((7))) {
- body.add$1(this.declaration(true));
+ body.add(this.declaration(true));
if (this._recover) {
if (!this._recoverTo((7), (10))) break;
this._maybeEat((10));
@@ -9077,7 +8836,7 @@ Parser.prototype.initializers = function() {
this._inhibitLambda = true;
var ret = [];
do {
- ret.add$1(this.expression());
+ ret.add(this.expression());
}
while (this._maybeEat((11)))
this._inhibitLambda = false;
@@ -9115,12 +8874,12 @@ Parser.prototype.finishField = function(start, modifiers, type, name, value) {
var names = [name];
var values = [value];
while (this._maybeEat((11))) {
- names.add$1(this.identifier());
+ names.add(this.identifier());
if (this._maybeEat((20))) {
- values.add$1(this.expression());
+ values.add(this.expression());
}
else {
- values.add$1();
+ values.add();
}
}
this._eatSemicolon();
@@ -9137,10 +8896,10 @@ Parser.prototype.finishDefinition = function(start, modifiers, di) {
}
if (this._maybeEat((80))) {
native_ = this.maybeStringLiteral();
- if (native_ == null) native_ = "";
+ if ($eq(native_)) native_ = "";
}
var body = this.functionBody(false);
- if (di.get$name() == null) {
+ if ($eq(di.get$name())) {
di.set$name(di.get$type().get$name());
}
return new FunctionDefinition(modifiers, di.get$type(), di.get$name(), formals, inits, native_, body, this._makeSpan(start));
@@ -9176,11 +8935,11 @@ Parser.prototype.factoryConstructorDeclaration = function() {
var factoryToken = this._lang_next();
var names = [this.identifier()];
while (this._maybeEat((14))) {
- names.add$1(this.identifier());
+ names.add(this.identifier());
}
if (this._peekKind((52))) {
var tp = this.typeParameters();
- $globals.world.warning("type parameters on factories are no longer supported, place them on the class instead", this._makeSpan(tp.$index((0)).get$span().get$start()));
+ $globals.world.warning("type parameters on factories are no longer supported, place them on the class instead", this._makeSpan(tp.$index((0)).get$span().start));
}
var name = null;
var type = null;
@@ -9189,7 +8948,7 @@ Parser.prototype.factoryConstructorDeclaration = function() {
}
else {
if (names.get$length() > (1)) {
- name = names.removeLast$0();
+ name = names.removeLast();
}
else {
name = new Identifier("", names.$index((0)).get$span());
@@ -9271,15 +9030,15 @@ Parser.prototype.statement = function() {
}
}
Parser.prototype.finishExpressionAsStatement = function(expr) {
- var start = expr.get$span().get$start();
+ var start = expr.get$span().start;
if (this._maybeEat((8))) {
var label = this._makeLabel(expr);
return new LabeledStatement(label, this.statement(), this._makeSpan(start));
}
if ((expr instanceof LambdaExpression)) {
- if (!(expr.get$func().get$body() instanceof BlockStatement)) {
+ if (!(expr.get$func().body instanceof BlockStatement)) {
this._eatSemicolon();
- expr.get$func().set$span(this._makeSpan(start));
+ expr.get$func().span = this._makeSpan(start);
}
return expr.get$func();
}
@@ -9303,11 +9062,11 @@ Parser.prototype.finishExpressionAsStatement = function(expr) {
if (this._maybeEat((20))) {
value = this.expression();
}
- return this.finishField(expr.get$span().get$start(), null, gt, name, value);
+ return this.finishField(expr.get$span().start, null, gt, name, value);
}
else {
this._eatSemicolon();
- return new ExpressionStatement(expr, this._makeSpan(expr.get$span().get$start()));
+ return new ExpressionStatement(expr, this._makeSpan(expr.get$span().start));
}
}
Parser.prototype.testCondition = function() {
@@ -9321,7 +9080,7 @@ Parser.prototype.block = function() {
this._eat((6));
var stmts = [];
while (!this._maybeEat((7))) {
- stmts.add$1(this.statement());
+ stmts.add(this.statement());
if (this._recover && !this._recoverTo((7), (10))) break;
}
this._recover = false;
@@ -9374,9 +9133,9 @@ Parser.prototype.forStatement = function() {
}
var step = [];
if (!this._maybeEat((3))) {
- step.add$1(this.expression());
+ step.add(this.expression());
while (this._maybeEat((11))) {
- step.add$1(this.expression());
+ step.add(this.expression());
}
this._eat((3));
}
@@ -9395,7 +9154,7 @@ Parser.prototype.forInitializerStatement = function(start) {
var typeArgs = [this._makeType(init.get$y())];
var gt = this._finishTypeArguments(baseType, (0), typeArgs);
var name = this.identifier();
- init = new DeclaredIdentifier(gt, name, this._makeSpan(init.get$span().get$start()));
+ init = new DeclaredIdentifier(gt, name, this._makeSpan(init.get$span().start));
}
if (this._maybeEat((103))) {
return this._finishForIn(start, this._makeDeclaredIdentifier(init));
@@ -9417,7 +9176,7 @@ Parser.prototype.tryStatement = function() {
var body = this.block();
var catches = [];
while (this._peekKind((90))) {
- catches.add$1(this.catchNode());
+ catches.add(this.catchNode());
}
var finallyBlock = null;
if (this._maybeEat((100))) {
@@ -9445,7 +9204,7 @@ Parser.prototype.switchStatement = function() {
var cases = [];
this._eat((6));
while (!this._maybeEat((7))) {
- cases.add$1(this.caseNode());
+ cases.add(this.caseNode());
}
return new SwitchStatement(test, cases, this._makeSpan(start));
}
@@ -9463,23 +9222,23 @@ Parser.prototype.caseNode = function() {
var cases = [];
while (true) {
if (this._maybeEat((89))) {
- cases.add$1(this.expression());
+ cases.add(this.expression());
this._eat((8));
}
else if (this._maybeEat((94))) {
- cases.add$1();
+ cases.add();
this._eat((8));
}
else {
break;
}
}
- if ($eq(cases.get$length(), (0))) {
+ if (cases.get$length() == (0)) {
this._lang_error("case or default");
}
var stmts = [];
while (!this._peekCaseEnd()) {
- stmts.add$1(this.statement());
+ stmts.add(this.statement());
if (this._recover && !this._recoverTo((7), (89), (94))) {
break;
}
@@ -9554,7 +9313,7 @@ Parser.prototype._makeType = function(expr) {
type.set$names([expr.get$name()]);
}
else {
- type.get$names().add$1(expr.get$name());
+ type.get$names().add(expr.get$name());
}
type.set$span(expr.get$span());
return type;
@@ -9569,7 +9328,7 @@ Parser.prototype.infixExpression = function(precedence) {
}
Parser.prototype._finishDeclaredId = function(type) {
var name = this.identifier();
- return this.finishPostfixExpression(new DeclaredIdentifier(type, name, this._makeSpan(type.get$span().get$start())));
+ return this.finishPostfixExpression(new DeclaredIdentifier(type, name, this._makeSpan(type.get$span().start)));
}
Parser.prototype._fixAsType = function(x) {
if (this._maybeEat((53))) {
@@ -9600,21 +9359,21 @@ Parser.prototype.finishInfixExpression = function(x, precedence) {
while (true) {
var kind = this._peek();
var prec = TokenKind.infixPrecedence(this._peek());
- if (prec >= precedence) {
+ if ($gte(prec, precedence)) {
if (kind == (52) || kind == (53)) {
if (this._isBin(x, (52))) {
return this._fixAsType(x);
}
}
var op = this._lang_next();
- if ($eq(op.get$kind(), (104))) {
+ if (op.get$kind() == (104)) {
var isTrue = !this._maybeEat((19));
var typeRef = this.type((0));
x = new IsExpression(isTrue, x, typeRef, this._makeSpan(x.span.start));
continue;
}
var y = this.infixExpression($eq(prec, (2)) ? prec : $add(prec, (1)));
- if ($eq(op.get$kind(), (33))) {
+ if (op.get$kind() == (33)) {
this._eat((8));
var z = this.infixExpression(prec);
x = new ConditionalExpression(x, y, z, this._makeSpan(x.span.start));
@@ -9667,7 +9426,7 @@ Parser.prototype.argument = function() {
label = new Identifier("...", this._makeSpan(start));
}
expr = this.expression();
- if (label == null && this._maybeEat((8))) {
+ if ($eq(label) && this._maybeEat((8))) {
label = this._makeLabel(expr);
expr = this.expression();
}
@@ -9680,7 +9439,7 @@ Parser.prototype.arguments = function() {
this._inhibitLambda = false;
if (!this._maybeEat((3))) {
do {
- args.add$1(this.argument());
+ args.add(this.argument());
}
while (this._maybeEat((11)))
this._eat((3));
@@ -9699,20 +9458,20 @@ Parser.prototype.finishPostfixExpression = function(expr) {
this._eat((4));
var index = this.expression();
this._eat((5));
- return this.finishPostfixExpression(new IndexExpression(expr, index, this._makeSpan(expr.get$span().get$start())));
+ return this.finishPostfixExpression(new IndexExpression(expr, index, this._makeSpan(expr.get$span().start)));
case (14):
this._eat((14));
var name = this.identifier();
- var ret = new DotExpression(expr, name, this._makeSpan(expr.get$span().get$start()));
+ var ret = new DotExpression(expr, name, this._makeSpan(expr.get$span().start));
return this.finishPostfixExpression(ret);
case (16):
case (17):
var tok = this._lang_next();
- return new PostfixExpression(expr, tok, this._makeSpan(expr.get$span().get$start()));
+ return new PostfixExpression(expr, tok, this._makeSpan(expr.get$span().start));
case (9):
case (6):
@@ -9722,7 +9481,7 @@ Parser.prototype.finishPostfixExpression = function(expr) {
default:
if (this._peekIdentifier()) {
- return this.finishPostfixExpression(new DeclaredIdentifier(this._makeType(expr), this.identifier(), this._makeSpan(expr.get$span().get$start())));
+ return this.finishPostfixExpression(new DeclaredIdentifier(this._makeType(expr), this.identifier(), this._makeSpan(expr.get$span().start)));
}
else {
return expr;
@@ -9741,11 +9500,11 @@ Parser.prototype.finishCallOrLambdaExpression = function(expr) {
this._lang_error("illegal target for call, did you mean to declare a function?", expr.get$span());
}
var args = this.arguments();
- return this.finishPostfixExpression(new CallExpression(expr, args, this._makeSpan(expr.get$span().get$start())));
+ return this.finishPostfixExpression(new CallExpression(expr, args, this._makeSpan(expr.get$span().start)));
}
}
Parser.prototype._isBin = function(expr, kind) {
- return (expr instanceof BinaryExpression) && $eq(expr.get$op().get$kind(), kind);
+ return (expr instanceof BinaryExpression) && expr.get$op().kind == kind;
}
Parser.prototype._makeLiteral = function(value) {
return new LiteralExpression(value, value.span);
@@ -9861,24 +9620,24 @@ Parser.prototype.stringInterpolation = function() {
var startQuote = null, endQuote = null;
while (this._peekKind((59))) {
var token = this._lang_next();
- pieces.add$1(this._makeLiteral(Value.fromString(token.get$value(), token.get$span())));
+ pieces.add(this._makeLiteral(Value.fromString(token.get$value(), token.get$span())));
if (this._maybeEat((6))) {
- pieces.add$1(this.expression());
+ pieces.add(this.expression());
this._eat((7));
}
else if (this._maybeEat((110))) {
- pieces.add$1(new ThisExpression(this._previousToken.get$span()));
+ pieces.add(new ThisExpression(this._previousToken.get$span()));
}
else {
var id = this.identifier();
- pieces.add$1(new VarExpression(id, id.get$span()));
+ pieces.add(new VarExpression(id, id.get$span()));
}
}
var tok = this._lang_next();
- if ($ne(tok.get$kind(), (58))) {
+ if (tok.get$kind() != (58)) {
this._errorExpected("interpolated string");
}
- pieces.add$1(this._makeLiteral(Value.fromString(tok.get$value(), tok.get$span())));
+ pieces.add(this._makeLiteral(Value.fromString(tok.get$value(), tok.get$span())));
var span = this._makeSpan(start);
return new StringInterpExpression(pieces, span);
}
@@ -9930,14 +9689,14 @@ Parser.prototype._peekAfterCloseParen = function() {
var tokens = [this._lang_next()];
this._lookaheadAfterParens(tokens);
var after = this._peekToken;
- tokens.add$1(after);
+ tokens.add(after);
this.tokenizer = new DivertedTokenSource(tokens, this, this.tokenizer);
this._lang_next();
return after;
}
Parser.prototype._lookaheadAfterParens = function(tokens) {
var saved = this._afterParens.get$length();
- this._afterParens.add(null);
+ this._afterParens.add();
while (true) {
var token = this._lang_next();
tokens.add(token);
@@ -10030,10 +9789,10 @@ Parser.prototype.declaredIdentifier = function(includeOperators) {
var start = this._peekToken.start;
var myType = null;
var name = this._specialIdentifier(includeOperators);
- if (name == null) {
+ if ($eq(name)) {
myType = this.type((0));
name = this._specialIdentifier(includeOperators);
- if (name == null) {
+ if ($eq(name)) {
if (this._peekIdentifier()) {
name = this.identifier();
}
@@ -10063,7 +9822,7 @@ Parser.prototype.finishListLiteral = function(start, isConst, itemType) {
var values = [];
this._eat((4));
while (!this._maybeEat((5))) {
- values.add$1(this.expression());
+ values.add(this.expression());
if (this._recover && !this._recoverTo((5), (11))) break;
if (!this._maybeEat((11))) {
this._eat((5));
@@ -10076,9 +9835,9 @@ Parser.prototype.finishMapLiteral = function(start, isConst, keyType, valueType)
var items = [];
this._eat((6));
while (!this._maybeEat((7))) {
- items.add$1(this.expression());
+ items.add(this.expression());
this._eat((8));
- items.add$1(this.expression());
+ items.add(this.expression());
if (this._recover && !this._recoverTo((7), (11))) break;
if (!this._maybeEat((11))) {
this._eat((7));
@@ -10093,20 +9852,20 @@ Parser.prototype.finishTypedLiteral = function(start, isConst) {
var genericType = this.addTypeArguments(typeToBeNamedLater, (0));
var typeArgs = genericType.get$typeArguments();
if (this._peekKind((4)) || this._peekKind((56))) {
- if ($ne(typeArgs.get$length(), (1))) {
+ if (typeArgs.get$length() != (1)) {
$globals.world.error("exactly one type argument expected for list", genericType.get$span());
}
return this.finishListLiteral(start, isConst, typeArgs.$index((0)));
}
else if (this._peekKind((6))) {
var keyType, valueType;
- if ($eq(typeArgs.get$length(), (1))) {
+ if (typeArgs.get$length() == (1)) {
keyType = null;
valueType = typeArgs.$index((0));
}
- else if ($eq(typeArgs.get$length(), (2))) {
- var keyType0 = typeArgs.$index((0));
- $globals.world.warning("a map literal takes one type argument specifying the value type", keyType0.get$span());
+ else if (typeArgs.get$length() == (2)) {
+ keyType = typeArgs.$index((0));
+ $globals.world.warning("a map literal takes one type argument specifying the value type", keyType.get$span());
valueType = typeArgs.$index((1));
}
return this.finishMapLiteral(start, isConst, keyType, valueType);
@@ -10125,8 +9884,8 @@ Parser.prototype._readModifiers = function() {
case (71):
case (74):
- if (modifiers == null) modifiers = [];
- modifiers.add$1(this._lang_next());
+ if ($eq(modifiers)) modifiers = [];
+ modifiers.add(this._lang_next());
break;
default:
@@ -10156,8 +9915,8 @@ Parser.prototype.typeParameters = function() {
var ret = [];
do {
var tp = this.typeParameter();
- ret.add$1(tp);
- if ((tp.get$typeParameter().get$extendsType() instanceof GenericTypeReference) && $eq(tp.get$typeParameter().get$extendsType().get$dynamic().get$depth(), (0))) {
+ ret.add(tp);
+ if ((tp.get$typeParameter().get$extendsType() instanceof GenericTypeReference) && tp.get$typeParameter().get$extendsType().get$dynamic().get$depth() == (0)) {
closed = true;
break;
}
@@ -10194,15 +9953,15 @@ Parser.prototype._finishTypeArguments = function(baseType, depth, types) {
var delta = (-1);
do {
var myType = this.type(depth + (1));
- types.add$1(myType);
+ types.add(myType);
if ((myType instanceof GenericTypeReference) && myType.get$depth() <= depth) {
delta = depth - myType.get$depth();
break;
}
}
while (this._maybeEat((11)))
- if (delta >= (0)) {
- depth = depth - delta;
+ if ($gte(delta, (0))) {
+ depth = $sub(depth, delta);
}
else {
depth = this._eatClosingAngle(depth);
@@ -10213,7 +9972,7 @@ Parser.prototype._finishTypeArguments = function(baseType, depth, types) {
Parser.prototype.typeList = function() {
var types = [];
do {
- types.add$1(this.type((0)));
+ types.add(this.type((0)));
}
while (this._maybeEat((11)))
return types;
@@ -10227,11 +9986,11 @@ Parser.prototype.nameTypeReference = function() {
switch (this._peek()) {
case (115):
- return new TypeReference(this._lang_next().get$span(), $globals.world.voidType);
+ return new SimpleTypeReference($globals.world.voidType, this._lang_next().get$span());
case (114):
- return new TypeReference(this._lang_next().get$span(), $globals.world.varType);
+ return new SimpleTypeReference($globals.world.varType, this._lang_next().get$span());
case (99):
@@ -10247,8 +10006,8 @@ Parser.prototype.nameTypeReference = function() {
}
while (this._maybeEat((14))) {
- if (names == null) names = [];
- names.add$1(this.identifier());
+ if ($eq(names)) names = [];
+ names.add(this.identifier());
}
return new NameTypeReference(isFinal, name, names, this._makeSpan(start));
}
@@ -10272,7 +10031,7 @@ Parser.prototype.formalParameter = function(inOptionalBlock) {
var di = this.declaredIdentifier(false);
var type = di.get$type();
var name = di.get$name();
- if (name == null) {
+ if ($eq(name)) {
this._lang_error("Formal parameter invalid", this._makeSpan(start));
}
var value = null;
@@ -10287,7 +10046,7 @@ Parser.prototype.formalParameter = function(inOptionalBlock) {
var func = new FunctionDefinition(null, type, name, formals, null, null, null, this._makeSpan(start));
type = new FunctionTypeReference(false, func, func.get$span());
}
- if (inOptionalBlock && value == null) {
+ if (inOptionalBlock && $eq(value)) {
value = this._makeLiteral(Value.fromNull(this._makeSpan(start)));
}
return new FormalNode(isThis, isRest, type, name, value, this._makeSpan(start));
@@ -10300,7 +10059,7 @@ Parser.prototype.formalParameterList = function() {
if (this._maybeEat((4))) {
inOptionalBlock = true;
}
- formals.add$1(this.formalParameter(inOptionalBlock));
+ formals.add(this.formalParameter(inOptionalBlock));
while (this._maybeEat((11))) {
if (this._maybeEat((4))) {
if (inOptionalBlock) {
@@ -10308,7 +10067,7 @@ Parser.prototype.formalParameterList = function() {
}
inOptionalBlock = true;
}
- formals.add$1(this.formalParameter(inOptionalBlock));
+ formals.add(this.formalParameter(inOptionalBlock));
}
if (inOptionalBlock) {
this._eat((5));
@@ -10322,7 +10081,7 @@ Parser.prototype.identifierForType = function() {
if (!this._isIdentifier(tok.get$kind())) {
this._lang_error(("expected identifier, but found " + tok), tok.get$span());
}
- if (tok.get$kind() != (70) && $ne(tok.get$kind(), (80))) {
+ if (tok.get$kind() != (70) && tok.get$kind() != (80)) {
this._lang_error(("" + tok + " may not be used as a type name"), tok.get$span());
}
return new Identifier(tok.get$text(), this._makeSpan(tok.get$start()));
@@ -10343,14 +10102,14 @@ Parser.prototype._makeFunction = function(expr, formals, body) {
else if ((expr instanceof DeclaredIdentifier)) {
name = expr.get$name();
type = expr.get$type();
- if (name == null) {
+ if ($eq(name)) {
this._lang_error("expected name and type", expr.get$span());
}
}
else {
this._lang_error("bad function body", expr.get$span());
}
- var span = new SourceSpan(expr.get$span().get$file(), expr.get$span().get$start(), body.get$span().get$end());
+ var span = new SourceSpan(expr.get$span().file, expr.get$span().start, body.get$span().end);
var func = new FunctionDefinition(null, type, name, formals, null, null, body, span);
return new LambdaExpression(func, func.get$span());
}
@@ -10375,8 +10134,6 @@ Parser.prototype._makeLabel = function(expr) {
return null;
}
}
-Parser.prototype.block$0 = Parser.prototype.block;
-Parser.prototype.compilationUnit$0 = Parser.prototype.compilationUnit;
// ********** Code for IncompleteSourceException **************
function IncompleteSourceException(token) {
this.token = token;
@@ -10401,14 +10158,12 @@ DivertedTokenSource.prototype.next = function() {
}
return token;
}
-DivertedTokenSource.prototype.next$0 = DivertedTokenSource.prototype.next;
// ********** Code for Node **************
function Node(span) {
this.span = span;
}
Node.prototype.get$span = function() { return this.span; };
Node.prototype.set$span = function(value) { return this.span = value; };
-Node.prototype.visit$1 = Node.prototype.visit;
// ********** Code for Statement **************
$inherits(Statement, Node);
function Statement(span) {
@@ -10432,19 +10187,9 @@ function Expression(span) {
}
// ********** Code for TypeReference **************
$inherits(TypeReference, Node);
-function TypeReference(span, type) {
- this.type = type;
+function TypeReference(span) {
Node.call(this, span);
}
-TypeReference.prototype.get$type = function() { return this.type; };
-TypeReference.prototype.set$type = function(value) { return this.type = value; };
-TypeReference.prototype.visit = function(visitor) {
- return visitor.visitTypeReference(this);
-}
-TypeReference.prototype.get$isFinal = function() {
- return false;
-}
-TypeReference.prototype.visit$1 = TypeReference.prototype.visit;
// ********** Code for DirectiveDefinition **************
$inherits(DirectiveDefinition, Definition);
function DirectiveDefinition(name, arguments, span) {
@@ -10457,7 +10202,6 @@ DirectiveDefinition.prototype.set$name = function(value) { return this.name = va
DirectiveDefinition.prototype.visit = function(visitor) {
return visitor.visitDirectiveDefinition(this);
}
-DirectiveDefinition.prototype.visit$1 = DirectiveDefinition.prototype.visit;
// ********** Code for TypeDefinition **************
$inherits(TypeDefinition, Definition);
function TypeDefinition(isClass, name, typeParameters, extendsTypes, implementsTypes, nativeType, defaultType, body, span) {
@@ -10484,7 +10228,6 @@ TypeDefinition.prototype.set$body = function(value) { return this.body = value;
TypeDefinition.prototype.visit = function(visitor) {
return visitor.visitTypeDefinition(this);
}
-TypeDefinition.prototype.visit$1 = TypeDefinition.prototype.visit;
// ********** Code for FunctionTypeDefinition **************
$inherits(FunctionTypeDefinition, Definition);
function FunctionTypeDefinition(func, typeParameters, span) {
@@ -10499,7 +10242,6 @@ FunctionTypeDefinition.prototype.set$typeParameters = function(value) { return t
FunctionTypeDefinition.prototype.visit = function(visitor) {
return visitor.visitFunctionTypeDefinition(this);
}
-FunctionTypeDefinition.prototype.visit$1 = FunctionTypeDefinition.prototype.visit;
// ********** Code for VariableDefinition **************
$inherits(VariableDefinition, Definition);
function VariableDefinition(modifiers, type, names, values, span) {
@@ -10514,9 +10256,8 @@ VariableDefinition.prototype.set$type = function(value) { return this.type = val
VariableDefinition.prototype.get$names = function() { return this.names; };
VariableDefinition.prototype.set$names = function(value) { return this.names = value; };
VariableDefinition.prototype.visit = function(visitor) {
- return visitor.visitVariableDefinition$1(this);
+ return visitor.visitVariableDefinition(this);
}
-VariableDefinition.prototype.visit$1 = VariableDefinition.prototype.visit;
// ********** Code for FunctionDefinition **************
$inherits(FunctionDefinition, Definition);
function FunctionDefinition(modifiers, returnType, name, formals, initializers, nativeBody, body, span) {
@@ -10535,14 +10276,11 @@ FunctionDefinition.prototype.get$name = function() { return this.name; };
FunctionDefinition.prototype.set$name = function(value) { return this.name = value; };
FunctionDefinition.prototype.get$initializers = function() { return this.initializers; };
FunctionDefinition.prototype.set$initializers = function(value) { return this.initializers = value; };
-FunctionDefinition.prototype.get$nativeBody = function() { return this.nativeBody; };
-FunctionDefinition.prototype.set$nativeBody = function(value) { return this.nativeBody = value; };
FunctionDefinition.prototype.get$body = function() { return this.body; };
FunctionDefinition.prototype.set$body = function(value) { return this.body = value; };
FunctionDefinition.prototype.visit = function(visitor) {
- return visitor.visitFunctionDefinition$1(this);
+ return visitor.visitFunctionDefinition(this);
}
-FunctionDefinition.prototype.visit$1 = FunctionDefinition.prototype.visit;
// ********** Code for ReturnStatement **************
$inherits(ReturnStatement, Statement);
function ReturnStatement(value, span) {
@@ -10552,9 +10290,8 @@ function ReturnStatement(value, span) {
ReturnStatement.prototype.get$value = function() { return this.value; };
ReturnStatement.prototype.set$value = function(value) { return this.value = value; };
ReturnStatement.prototype.visit = function(visitor) {
- return visitor.visitReturnStatement$1(this);
+ return visitor.visitReturnStatement(this);
}
-ReturnStatement.prototype.visit$1 = ReturnStatement.prototype.visit;
// ********** Code for ThrowStatement **************
$inherits(ThrowStatement, Statement);
function ThrowStatement(value, span) {
@@ -10564,9 +10301,8 @@ function ThrowStatement(value, span) {
ThrowStatement.prototype.get$value = function() { return this.value; };
ThrowStatement.prototype.set$value = function(value) { return this.value = value; };
ThrowStatement.prototype.visit = function(visitor) {
- return visitor.visitThrowStatement$1(this);
+ return visitor.visitThrowStatement(this);
}
-ThrowStatement.prototype.visit$1 = ThrowStatement.prototype.visit;
// ********** Code for AssertStatement **************
$inherits(AssertStatement, Statement);
function AssertStatement(test, span) {
@@ -10574,9 +10310,8 @@ function AssertStatement(test, span) {
Statement.call(this, span);
}
AssertStatement.prototype.visit = function(visitor) {
- return visitor.visitAssertStatement$1(this);
+ return visitor.visitAssertStatement(this);
}
-AssertStatement.prototype.visit$1 = AssertStatement.prototype.visit;
// ********** Code for BreakStatement **************
$inherits(BreakStatement, Statement);
function BreakStatement(label, span) {
@@ -10586,9 +10321,8 @@ function BreakStatement(label, span) {
BreakStatement.prototype.get$label = function() { return this.label; };
BreakStatement.prototype.set$label = function(value) { return this.label = value; };
BreakStatement.prototype.visit = function(visitor) {
- return visitor.visitBreakStatement$1(this);
+ return visitor.visitBreakStatement(this);
}
-BreakStatement.prototype.visit$1 = BreakStatement.prototype.visit;
// ********** Code for ContinueStatement **************
$inherits(ContinueStatement, Statement);
function ContinueStatement(label, span) {
@@ -10598,9 +10332,8 @@ function ContinueStatement(label, span) {
ContinueStatement.prototype.get$label = function() { return this.label; };
ContinueStatement.prototype.set$label = function(value) { return this.label = value; };
ContinueStatement.prototype.visit = function(visitor) {
- return visitor.visitContinueStatement$1(this);
+ return visitor.visitContinueStatement(this);
}
-ContinueStatement.prototype.visit$1 = ContinueStatement.prototype.visit;
// ********** Code for IfStatement **************
$inherits(IfStatement, Statement);
function IfStatement(test, trueBranch, falseBranch, span) {
@@ -10610,9 +10343,8 @@ function IfStatement(test, trueBranch, falseBranch, span) {
Statement.call(this, span);
}
IfStatement.prototype.visit = function(visitor) {
- return visitor.visitIfStatement$1(this);
+ return visitor.visitIfStatement(this);
}
-IfStatement.prototype.visit$1 = IfStatement.prototype.visit;
// ********** Code for WhileStatement **************
$inherits(WhileStatement, Statement);
function WhileStatement(test, body, span) {
@@ -10623,9 +10355,8 @@ function WhileStatement(test, body, span) {
WhileStatement.prototype.get$body = function() { return this.body; };
WhileStatement.prototype.set$body = function(value) { return this.body = value; };
WhileStatement.prototype.visit = function(visitor) {
- return visitor.visitWhileStatement$1(this);
+ return visitor.visitWhileStatement(this);
}
-WhileStatement.prototype.visit$1 = WhileStatement.prototype.visit;
// ********** Code for DoStatement **************
$inherits(DoStatement, Statement);
function DoStatement(body, test, span) {
@@ -10636,9 +10367,8 @@ function DoStatement(body, test, span) {
DoStatement.prototype.get$body = function() { return this.body; };
DoStatement.prototype.set$body = function(value) { return this.body = value; };
DoStatement.prototype.visit = function(visitor) {
- return visitor.visitDoStatement$1(this);
+ return visitor.visitDoStatement(this);
}
-DoStatement.prototype.visit$1 = DoStatement.prototype.visit;
// ********** Code for ForStatement **************
$inherits(ForStatement, Statement);
function ForStatement(init, test, step, body, span) {
@@ -10651,9 +10381,8 @@ function ForStatement(init, test, step, body, span) {
ForStatement.prototype.get$body = function() { return this.body; };
ForStatement.prototype.set$body = function(value) { return this.body = value; };
ForStatement.prototype.visit = function(visitor) {
- return visitor.visitForStatement$1(this);
+ return visitor.visitForStatement(this);
}
-ForStatement.prototype.visit$1 = ForStatement.prototype.visit;
// ********** Code for ForInStatement **************
$inherits(ForInStatement, Statement);
function ForInStatement(item, list, body, span) {
@@ -10665,9 +10394,8 @@ function ForInStatement(item, list, body, span) {
ForInStatement.prototype.get$body = function() { return this.body; };
ForInStatement.prototype.set$body = function(value) { return this.body = value; };
ForInStatement.prototype.visit = function(visitor) {
- return visitor.visitForInStatement$1(this);
+ return visitor.visitForInStatement(this);
}
-ForInStatement.prototype.visit$1 = ForInStatement.prototype.visit;
// ********** Code for TryStatement **************
$inherits(TryStatement, Statement);
function TryStatement(body, catches, finallyBlock, span) {
@@ -10679,9 +10407,8 @@ function TryStatement(body, catches, finallyBlock, span) {
TryStatement.prototype.get$body = function() { return this.body; };
TryStatement.prototype.set$body = function(value) { return this.body = value; };
TryStatement.prototype.visit = function(visitor) {
- return visitor.visitTryStatement$1(this);
+ return visitor.visitTryStatement(this);
}
-TryStatement.prototype.visit$1 = TryStatement.prototype.visit;
// ********** Code for SwitchStatement **************
$inherits(SwitchStatement, Statement);
function SwitchStatement(test, cases, span) {
@@ -10692,9 +10419,8 @@ function SwitchStatement(test, cases, span) {
SwitchStatement.prototype.get$cases = function() { return this.cases; };
SwitchStatement.prototype.set$cases = function(value) { return this.cases = value; };
SwitchStatement.prototype.visit = function(visitor) {
- return visitor.visitSwitchStatement$1(this);
+ return visitor.visitSwitchStatement(this);
}
-SwitchStatement.prototype.visit$1 = SwitchStatement.prototype.visit;
// ********** Code for BlockStatement **************
$inherits(BlockStatement, Statement);
function BlockStatement(body, span) {
@@ -10704,9 +10430,8 @@ function BlockStatement(body, span) {
BlockStatement.prototype.get$body = function() { return this.body; };
BlockStatement.prototype.set$body = function(value) { return this.body = value; };
BlockStatement.prototype.visit = function(visitor) {
- return visitor.visitBlockStatement$1(this);
+ return visitor.visitBlockStatement(this);
}
-BlockStatement.prototype.visit$1 = BlockStatement.prototype.visit;
// ********** Code for LabeledStatement **************
$inherits(LabeledStatement, Statement);
function LabeledStatement(name, body, span) {
@@ -10719,9 +10444,8 @@ LabeledStatement.prototype.set$name = function(value) { return this.name = value
LabeledStatement.prototype.get$body = function() { return this.body; };
LabeledStatement.prototype.set$body = function(value) { return this.body = value; };
LabeledStatement.prototype.visit = function(visitor) {
- return visitor.visitLabeledStatement$1(this);
+ return visitor.visitLabeledStatement(this);
}
-LabeledStatement.prototype.visit$1 = LabeledStatement.prototype.visit;
// ********** Code for ExpressionStatement **************
$inherits(ExpressionStatement, Statement);
function ExpressionStatement(body, span) {
@@ -10731,27 +10455,24 @@ function ExpressionStatement(body, span) {
ExpressionStatement.prototype.get$body = function() { return this.body; };
ExpressionStatement.prototype.set$body = function(value) { return this.body = value; };
ExpressionStatement.prototype.visit = function(visitor) {
- return visitor.visitExpressionStatement$1(this);
+ return visitor.visitExpressionStatement(this);
}
-ExpressionStatement.prototype.visit$1 = ExpressionStatement.prototype.visit;
// ********** Code for EmptyStatement **************
$inherits(EmptyStatement, Statement);
function EmptyStatement(span) {
Statement.call(this, span);
}
EmptyStatement.prototype.visit = function(visitor) {
- return visitor.visitEmptyStatement$1(this);
+ return visitor.visitEmptyStatement(this);
}
-EmptyStatement.prototype.visit$1 = EmptyStatement.prototype.visit;
// ********** Code for DietStatement **************
$inherits(DietStatement, Statement);
function DietStatement(span) {
Statement.call(this, span);
}
DietStatement.prototype.visit = function(visitor) {
- return visitor.visitDietStatement$1(this);
+ return visitor.visitDietStatement(this);
}
-DietStatement.prototype.visit$1 = DietStatement.prototype.visit;
// ********** Code for LambdaExpression **************
$inherits(LambdaExpression, Expression);
function LambdaExpression(func, span) {
@@ -10761,9 +10482,8 @@ function LambdaExpression(func, span) {
LambdaExpression.prototype.get$func = function() { return this.func; };
LambdaExpression.prototype.set$func = function(value) { return this.func = value; };
LambdaExpression.prototype.visit = function(visitor) {
- return visitor.visitLambdaExpression$1(this);
+ return visitor.visitLambdaExpression(this);
}
-LambdaExpression.prototype.visit$1 = LambdaExpression.prototype.visit;
// ********** Code for CallExpression **************
$inherits(CallExpression, Expression);
function CallExpression(target, arguments, span) {
@@ -10774,7 +10494,6 @@ function CallExpression(target, arguments, span) {
CallExpression.prototype.visit = function(visitor) {
return visitor.visitCallExpression(this);
}
-CallExpression.prototype.visit$1 = CallExpression.prototype.visit;
// ********** Code for IndexExpression **************
$inherits(IndexExpression, Expression);
function IndexExpression(target, index, span) {
@@ -10783,9 +10502,8 @@ function IndexExpression(target, index, span) {
Expression.call(this, span);
}
IndexExpression.prototype.visit = function(visitor) {
- return visitor.visitIndexExpression$1(this);
+ return visitor.visitIndexExpression(this);
}
-IndexExpression.prototype.visit$1 = IndexExpression.prototype.visit;
// ********** Code for BinaryExpression **************
$inherits(BinaryExpression, Expression);
function BinaryExpression(op, x, y, span) {
@@ -10803,7 +10521,6 @@ BinaryExpression.prototype.set$y = function(value) { return this.y = value; };
BinaryExpression.prototype.visit = function(visitor) {
return visitor.visitBinaryExpression$1(this);
}
-BinaryExpression.prototype.visit$1 = BinaryExpression.prototype.visit;
// ********** Code for UnaryExpression **************
$inherits(UnaryExpression, Expression);
function UnaryExpression(op, self, span) {
@@ -10818,7 +10535,6 @@ UnaryExpression.prototype.set$self = function(value) { return this.self = value;
UnaryExpression.prototype.visit = function(visitor) {
return visitor.visitUnaryExpression(this);
}
-UnaryExpression.prototype.visit$1 = UnaryExpression.prototype.visit;
// ********** Code for PostfixExpression **************
$inherits(PostfixExpression, Expression);
function PostfixExpression(body, op, span) {
@@ -10833,7 +10549,6 @@ PostfixExpression.prototype.set$op = function(value) { return this.op = value; }
PostfixExpression.prototype.visit = function(visitor) {
return visitor.visitPostfixExpression$1(this);
}
-PostfixExpression.prototype.visit$1 = PostfixExpression.prototype.visit;
// ********** Code for NewExpression **************
$inherits(NewExpression, Expression);
function NewExpression(isConst, type, name, arguments, span) {
@@ -10850,9 +10565,8 @@ NewExpression.prototype.set$type = function(value) { return this.type = value; }
NewExpression.prototype.get$name = function() { return this.name; };
NewExpression.prototype.set$name = function(value) { return this.name = value; };
NewExpression.prototype.visit = function(visitor) {
- return visitor.visitNewExpression$1(this);
+ return visitor.visitNewExpression(this);
}
-NewExpression.prototype.visit$1 = NewExpression.prototype.visit;
// ********** Code for ListExpression **************
$inherits(ListExpression, Expression);
function ListExpression(isConst, itemType, values, span) {
@@ -10866,7 +10580,6 @@ ListExpression.prototype.set$isConst = function(value) { return this.isConst = v
ListExpression.prototype.visit = function(visitor) {
return visitor.visitListExpression(this);
}
-ListExpression.prototype.visit$1 = ListExpression.prototype.visit;
// ********** Code for MapExpression **************
$inherits(MapExpression, Expression);
function MapExpression(isConst, keyType, valueType, items, span) {
@@ -10879,9 +10592,8 @@ function MapExpression(isConst, keyType, valueType, items, span) {
MapExpression.prototype.get$isConst = function() { return this.isConst; };
MapExpression.prototype.set$isConst = function(value) { return this.isConst = value; };
MapExpression.prototype.visit = function(visitor) {
- return visitor.visitMapExpression$1(this);
+ return visitor.visitMapExpression(this);
}
-MapExpression.prototype.visit$1 = MapExpression.prototype.visit;
// ********** Code for ConditionalExpression **************
$inherits(ConditionalExpression, Expression);
function ConditionalExpression(test, trueBranch, falseBranch, span) {
@@ -10893,7 +10605,6 @@ function ConditionalExpression(test, trueBranch, falseBranch, span) {
ConditionalExpression.prototype.visit = function(visitor) {
return visitor.visitConditionalExpression(this);
}
-ConditionalExpression.prototype.visit$1 = ConditionalExpression.prototype.visit;
// ********** Code for IsExpression **************
$inherits(IsExpression, Expression);
function IsExpression(isTrue, x, type, span) {
@@ -10909,7 +10620,6 @@ IsExpression.prototype.set$type = function(value) { return this.type = value; };
IsExpression.prototype.visit = function(visitor) {
return visitor.visitIsExpression(this);
}
-IsExpression.prototype.visit$1 = IsExpression.prototype.visit;
// ********** Code for ParenExpression **************
$inherits(ParenExpression, Expression);
function ParenExpression(body, span) {
@@ -10921,7 +10631,6 @@ ParenExpression.prototype.set$body = function(value) { return this.body = value;
ParenExpression.prototype.visit = function(visitor) {
return visitor.visitParenExpression(this);
}
-ParenExpression.prototype.visit$1 = ParenExpression.prototype.visit;
// ********** Code for AwaitExpression **************
$inherits(AwaitExpression, Expression);
function AwaitExpression(body, span) {
@@ -10933,7 +10642,6 @@ AwaitExpression.prototype.set$body = function(value) { return this.body = value;
AwaitExpression.prototype.visit = function(visitor) {
return visitor.visitAwaitExpression(this);
}
-AwaitExpression.prototype.visit$1 = AwaitExpression.prototype.visit;
// ********** Code for DotExpression **************
$inherits(DotExpression, Expression);
function DotExpression(self, name, span) {
@@ -10948,7 +10656,6 @@ DotExpression.prototype.set$name = function(value) { return this.name = value; }
DotExpression.prototype.visit = function(visitor) {
return visitor.visitDotExpression(this);
}
-DotExpression.prototype.visit$1 = DotExpression.prototype.visit;
// ********** Code for VarExpression **************
$inherits(VarExpression, Expression);
function VarExpression(name, span) {
@@ -10960,7 +10667,6 @@ VarExpression.prototype.set$name = function(value) { return this.name = value; }
VarExpression.prototype.visit = function(visitor) {
return visitor.visitVarExpression(this);
}
-VarExpression.prototype.visit$1 = VarExpression.prototype.visit;
// ********** Code for ThisExpression **************
$inherits(ThisExpression, Expression);
function ThisExpression(span) {
@@ -10969,7 +10675,6 @@ function ThisExpression(span) {
ThisExpression.prototype.visit = function(visitor) {
return visitor.visitThisExpression(this);
}
-ThisExpression.prototype.visit$1 = ThisExpression.prototype.visit;
// ********** Code for SuperExpression **************
$inherits(SuperExpression, Expression);
function SuperExpression(span) {
@@ -10978,7 +10683,6 @@ function SuperExpression(span) {
SuperExpression.prototype.visit = function(visitor) {
return visitor.visitSuperExpression(this);
}
-SuperExpression.prototype.visit$1 = SuperExpression.prototype.visit;
// ********** Code for LiteralExpression **************
$inherits(LiteralExpression, Expression);
function LiteralExpression(value, span) {
@@ -10988,9 +10692,8 @@ function LiteralExpression(value, span) {
LiteralExpression.prototype.get$value = function() { return this.value; };
LiteralExpression.prototype.set$value = function(value) { return this.value = value; };
LiteralExpression.prototype.visit = function(visitor) {
- return visitor.visitLiteralExpression$1(this);
+ return visitor.visitLiteralExpression(this);
}
-LiteralExpression.prototype.visit$1 = LiteralExpression.prototype.visit;
// ********** Code for StringInterpExpression **************
$inherits(StringInterpExpression, Expression);
function StringInterpExpression(pieces, span) {
@@ -11000,7 +10703,17 @@ function StringInterpExpression(pieces, span) {
StringInterpExpression.prototype.visit = function(visitor) {
return visitor.visitStringInterpExpression(this);
}
-StringInterpExpression.prototype.visit$1 = StringInterpExpression.prototype.visit;
+// ********** Code for SimpleTypeReference **************
+$inherits(SimpleTypeReference, TypeReference);
+function SimpleTypeReference(type, span) {
+ this.type = type;
+ TypeReference.call(this, span);
+}
+SimpleTypeReference.prototype.get$type = function() { return this.type; };
+SimpleTypeReference.prototype.set$type = function(value) { return this.type = value; };
+SimpleTypeReference.prototype.visit = function(visitor) {
+ return visitor.visitSimpleTypeReference(this);
+}
// ********** Code for NameTypeReference **************
$inherits(NameTypeReference, TypeReference);
function NameTypeReference(isFinal, name, names, span) {
@@ -11018,7 +10731,6 @@ NameTypeReference.prototype.set$names = function(value) { return this.names = va
NameTypeReference.prototype.visit = function(visitor) {
return visitor.visitNameTypeReference(this);
}
-NameTypeReference.prototype.visit$1 = NameTypeReference.prototype.visit;
// ********** Code for GenericTypeReference **************
$inherits(GenericTypeReference, TypeReference);
function GenericTypeReference(baseType, typeArguments, depth, span) {
@@ -11036,7 +10748,6 @@ GenericTypeReference.prototype.set$depth = function(value) { return this.depth =
GenericTypeReference.prototype.visit = function(visitor) {
return visitor.visitGenericTypeReference(this);
}
-GenericTypeReference.prototype.visit$1 = GenericTypeReference.prototype.visit;
// ********** Code for FunctionTypeReference **************
$inherits(FunctionTypeReference, TypeReference);
function FunctionTypeReference(isFinal, func, span) {
@@ -11051,7 +10762,6 @@ FunctionTypeReference.prototype.set$func = function(value) { return this.func =
FunctionTypeReference.prototype.visit = function(visitor) {
return visitor.visitFunctionTypeReference(this);
}
-FunctionTypeReference.prototype.visit$1 = FunctionTypeReference.prototype.visit;
// ********** Code for DefaultTypeReference **************
$inherits(DefaultTypeReference, TypeReference);
function DefaultTypeReference(oldFactory, baseType, typeParameters, span) {
@@ -11067,7 +10777,6 @@ DefaultTypeReference.prototype.set$typeParameters = function(value) { return thi
DefaultTypeReference.prototype.visit = function(visitor) {
return visitor.visitDefaultTypeReference(this);
}
-DefaultTypeReference.prototype.visit$1 = DefaultTypeReference.prototype.visit;
// ********** Code for ArgumentNode **************
$inherits(ArgumentNode, Node);
function ArgumentNode(label, value, span) {
@@ -11082,7 +10791,6 @@ ArgumentNode.prototype.set$value = function(value) { return this.value = value;
ArgumentNode.prototype.visit = function(visitor) {
return visitor.visitArgumentNode(this);
}
-ArgumentNode.prototype.visit$1 = ArgumentNode.prototype.visit;
// ********** Code for FormalNode **************
$inherits(FormalNode, Node);
function FormalNode(isThis, isRest, type, name, value, span) {
@@ -11102,7 +10810,6 @@ FormalNode.prototype.set$value = function(value) { return this.value = value; };
FormalNode.prototype.visit = function(visitor) {
return visitor.visitFormalNode(this);
}
-FormalNode.prototype.visit$1 = FormalNode.prototype.visit;
// ********** Code for CatchNode **************
$inherits(CatchNode, Node);
function CatchNode(exception, trace, body, span) {
@@ -11120,7 +10827,6 @@ CatchNode.prototype.set$body = function(value) { return this.body = value; };
CatchNode.prototype.visit = function(visitor) {
return visitor.visitCatchNode(this);
}
-CatchNode.prototype.visit$1 = CatchNode.prototype.visit;
// ********** Code for CaseNode **************
$inherits(CaseNode, Node);
function CaseNode(label, cases, statements, span) {
@@ -11138,7 +10844,6 @@ CaseNode.prototype.set$statements = function(value) { return this.statements = v
CaseNode.prototype.visit = function(visitor) {
return visitor.visitCaseNode(this);
}
-CaseNode.prototype.visit$1 = CaseNode.prototype.visit;
// ********** Code for TypeParameter **************
$inherits(TypeParameter, Node);
function TypeParameter(name, extendsType, span) {
@@ -11153,7 +10858,6 @@ TypeParameter.prototype.set$extendsType = function(value) { return this.extendsT
TypeParameter.prototype.visit = function(visitor) {
return visitor.visitTypeParameter(this);
}
-TypeParameter.prototype.visit$1 = TypeParameter.prototype.visit;
// ********** Code for Identifier **************
$inherits(Identifier, Node);
function Identifier(name, span) {
@@ -11165,7 +10869,6 @@ Identifier.prototype.set$name = function(value) { return this.name = value; };
Identifier.prototype.visit = function(visitor) {
return visitor.visitIdentifier(this);
}
-Identifier.prototype.visit$1 = Identifier.prototype.visit;
// ********** Code for DeclaredIdentifier **************
$inherits(DeclaredIdentifier, Expression);
function DeclaredIdentifier(type, name, span) {
@@ -11178,9 +10881,8 @@ DeclaredIdentifier.prototype.set$type = function(value) { return this.type = val
DeclaredIdentifier.prototype.get$name = function() { return this.name; };
DeclaredIdentifier.prototype.set$name = function(value) { return this.name = value; };
DeclaredIdentifier.prototype.visit = function(visitor) {
- return visitor.visitDeclaredIdentifier$1(this);
+ return visitor.visitDeclaredIdentifier(this);
}
-DeclaredIdentifier.prototype.visit$1 = DeclaredIdentifier.prototype.visit;
// ********** Code for Type **************
$inherits(Type, Element);
function Type(name) {
@@ -11225,10 +10927,7 @@ Type.prototype.get$isString = function() {
Type.prototype.get$isBool = function() {
return false;
}
-Type.prototype.get$isFunction = function() {
- return false;
-}
-Type.prototype.get$isList = function() {
+Type.prototype.get$isFunction = function() {
return false;
}
Type.prototype.get$isNum = function() {
@@ -11286,22 +10985,22 @@ Type.prototype.get$factories = function() {
return null;
}
Type.prototype.get$typeArgsInOrder = function() {
- return null;
+ return const$0007;
}
Type.prototype.get$genericType = function() {
return this;
}
+Type.prototype.get$isConcreteGeneric = function() {
+ return $ne(this.get$genericType(), this);
+}
Type.prototype.get$interfaces = function() {
return null;
}
Type.prototype.get$parent = function() {
return null;
}
-Type.prototype.getAllMembers = function() {
- return new HashMapImplementation();
-}
Type.prototype.get$nativeName = function() {
- return this.get$isNative() ? this.get$definition().get$nativeType().get$name() : this.get$jsname();
+ return this.get$isNative() ? this.get$definition().get$nativeType().name : this.get$jsname();
}
Type.prototype.get$avoidNativeName = function() {
return this.get$isHiddenNativeType();
@@ -11317,28 +11016,25 @@ Type.prototype.get$hasNativeSubtypes = function() {
}
Type.prototype._checkExtends = function() {
var typeParams = this.get$genericType().typeParameters;
- if (typeParams != null && this.get$typeArgsInOrder() != null) {
- var args = this.get$typeArgsInOrder().iterator$0();
- var params = typeParams.iterator$0();
- while (args.hasNext$0() && params.hasNext$0()) {
- var typeParam = params.next$0();
- var typeArg = args.next$0();
- if (typeParam.get$extendsType() != null && typeArg != null) {
- typeArg.ensureSubtypeOf$3(typeParam.get$extendsType(), typeParam.get$span(), true);
+ if ($ne(typeParams)) {
+ for (var i = (0);
+ i < typeParams.get$length(); i++) {
+ if ($ne(typeParams.$index(i).get$extendsType())) {
+ this.get$typeArgsInOrder().$index(i).get$dynamic().ensureSubtypeOf(typeParams.$index(i).get$extendsType(), typeParams.$index(i).get$span(), false);
}
}
}
if (this.get$interfaces() != null) {
var $$list = this.get$interfaces();
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var i = $$list[$$i];
- i._checkExtends$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var i = $$i.next();
+ i._checkExtends();
}
}
}
Type.prototype._checkOverride = function(member) {
var parentMember = this._getMemberInParents(member.name);
- if (parentMember != null) {
+ if ($ne(parentMember)) {
if (!member.get$isPrivate() || $eq(member.get$library(), parentMember.get$library())) {
member.override(parentMember);
}
@@ -11350,7 +11046,6 @@ Type.prototype._createNotEqualMember = function() {
return;
}
var ne = new MethodMember(":ne", this, eq.definition);
- ne.set$isGenerated(true);
ne.set$returnType(eq.returnType);
ne.set$parameters(eq.parameters);
ne.set$isStatic(eq.isStatic);
@@ -11369,10 +11064,10 @@ Type.prototype._getMemberInParents = function(memberName) {
else {
if (this.get$interfaces() != null && this.get$interfaces().get$length() > (0)) {
var $$list = this.get$interfaces();
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var i = $$list[$$i];
- var ret = i.getMember$1(memberName);
- if (ret != null) {
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var i = $$i.next();
+ var ret = i.getMember(memberName);
+ if ($ne(ret)) {
return ret;
}
}
@@ -11396,13 +11091,16 @@ Type.prototype.needsVarCall = function(args) {
return true;
}
var call = this.getCallMethod();
- if (call != null) {
- if (args.get$length() != call.get$parameters().get$length() || !call.namesInOrder$1(args)) {
+ if ($ne(call)) {
+ if (args.get$length() != call.get$parameters().get$length() || !call.namesInOrder(args)) {
return true;
}
}
return false;
}
+Type.prototype.get$needsVarCall = function() {
+ return this.needsVarCall.bind(this);
+}
Type.union = function(x, y) {
if ($eq(x, y)) return x;
if (x.get$isNum() && y.get$isNum()) return $globals.world.numType;
@@ -11430,23 +11128,20 @@ Type.prototype._isDirectSupertypeOf = function(other) {
}
}
Type.prototype.isSubtypeOf = function(other) {
- if ((other instanceof ParameterType)) {
- return true;
- }
if ($eq(this, other)) return true;
- if (this.get$isVar()) return true;
- if (other.get$isVar()) return true;
+ if (this.get$isVar() || other.get$isVar()) return true;
if (other._isDirectSupertypeOf(this)) return true;
var call = this.getCallMethod();
var otherCall = other.getCallMethod();
- if (call != null && otherCall != null) {
+ if ($ne(call) && $ne(otherCall)) {
return Type._isFunctionSubtypeOf(call, otherCall);
}
- if ($eq(this.get$genericType(), other.get$genericType()) && this.get$typeArgsInOrder() != null && other.get$typeArgsInOrder() != null && $eq(this.get$typeArgsInOrder().get$length(), other.get$typeArgsInOrder().get$length())) {
- var t = this.get$typeArgsInOrder().iterator$0();
- var s = other.get$typeArgsInOrder().iterator$0();
- while (t.hasNext$0()) {
- if (!t.next$0().isSubtypeOf$1(s.next$0())) return false;
+ if (this.get$genericType() == other.get$genericType()) {
+ for (var i = (0);
+ i < this.get$typeArgsInOrder().get$length(); i++) {
+ if (!this.get$typeArgsInOrder().$index(i).get$dynamic().isSubtypeOf(other.get$typeArgsInOrder().$index(i))) {
+ return false;
+ }
}
return true;
}
@@ -11454,7 +11149,7 @@ Type.prototype.isSubtypeOf = function(other) {
return true;
}
if (this.get$interfaces() != null && this.get$interfaces().some((function (i) {
- return i.isSubtypeOf$1(other);
+ return i.isSubtypeOf(other);
})
)) {
return true;
@@ -11464,7 +11159,7 @@ Type.prototype.isSubtypeOf = function(other) {
Type.prototype.hashCode = function() {
var libraryCode = this.get$library() == null ? (1) : this.get$library().hashCode();
var nameCode = this.name == null ? (1) : this.name.hashCode();
- return (libraryCode << (4)) ^ nameCode;
+ return $bit_xor(($shl(libraryCode, (4))), nameCode);
}
Type.prototype.$eq = function(other) {
return (other instanceof Type) && $eq(other.get$name(), this.name) && $eq(this.get$library(), other.get$library());
@@ -11480,23 +11175,11 @@ Type._isFunctionSubtypeOf = function(t, s) {
i < sp.get$length(); i++) {
if ($ne(tp.$index(i).get$isOptional(), sp.$index(i).get$isOptional())) return false;
if (tp.$index(i).get$isOptional() && $ne(tp.$index(i).get$name(), sp.$index(i).get$name())) return false;
- if (!tp.$index(i).get$type().isAssignable$1(sp.$index(i).get$type())) return false;
+ if (!tp.$index(i).get$type().isAssignable(sp.$index(i).get$type())) return false;
}
if (tp.get$length() > sp.get$length() && !tp.$index(sp.get$length()).get$isOptional()) return false;
return true;
}
-Type.prototype._checkExtends$0 = Type.prototype._checkExtends;
-Type.prototype.addDirectSubtype$1 = Type.prototype.addDirectSubtype;
-Type.prototype.ensureSubtypeOf$3 = Type.prototype.ensureSubtypeOf;
-Type.prototype.getConstructor$1 = Type.prototype.getConstructor;
-Type.prototype.getFactory$2 = Type.prototype.getFactory;
-Type.prototype.getMember$1 = Type.prototype.getMember;
-Type.prototype.getOrMakeConcreteType$1 = Type.prototype.getOrMakeConcreteType;
-Type.prototype.hashCode$0 = Type.prototype.hashCode;
-Type.prototype.isAssignable$1 = Type.prototype.isAssignable;
-Type.prototype.isSubtypeOf$1 = Type.prototype.isSubtypeOf;
-Type.prototype.markUsed$0 = Type.prototype.markUsed;
-Type.prototype.resolveTypeParams$1 = Type.prototype.resolveTypeParams;
// ********** Code for ParameterType **************
$inherits(ParameterType, Type);
function ParameterType(name, typeParameter) {
@@ -11534,26 +11217,17 @@ ParameterType.prototype.getConstructor = function(constructorName) {
ParameterType.prototype.getOrMakeConcreteType = function(typeArgs) {
$globals.world.internalError("no concrete types of type parameters yet", this.get$span());
}
-ParameterType.prototype.resolveTypeParams = function(inType) {
- return inType.typeArguments.$index(this.name);
-}
ParameterType.prototype.addDirectSubtype = function(type) {
$globals.world.internalError("no subtypes of type parameters yet", this.get$span());
}
ParameterType.prototype.resolve = function() {
if (this.typeParameter.extendsType != null) {
- this.extendsType = this.get$enclosingElement().resolveType$2(this.typeParameter.extendsType, true);
+ this.extendsType = this.get$enclosingElement().resolveType(this.typeParameter.extendsType, true, true);
}
else {
this.extendsType = $globals.world.objectType;
}
}
-ParameterType.prototype.addDirectSubtype$1 = ParameterType.prototype.addDirectSubtype;
-ParameterType.prototype.getConstructor$1 = ParameterType.prototype.getConstructor;
-ParameterType.prototype.getOrMakeConcreteType$1 = ParameterType.prototype.getOrMakeConcreteType;
-ParameterType.prototype.isSubtypeOf$1 = ParameterType.prototype.isSubtypeOf;
-ParameterType.prototype.resolve$0 = ParameterType.prototype.resolve;
-ParameterType.prototype.resolveTypeParams$1 = ParameterType.prototype.resolveTypeParams;
// ********** Code for NonNullableType **************
$inherits(NonNullableType, Type);
function NonNullableType(type) {
@@ -11573,14 +11247,11 @@ NonNullableType.prototype.get$isUsed = function() {
NonNullableType.prototype.isSubtypeOf = function(other) {
return $eq(this, other) || $eq(this.type, other) || this.type.isSubtypeOf(other);
}
-NonNullableType.prototype.resolveType = function(node, isRequired) {
- return this.type.resolveType$2(node, isRequired);
-}
-NonNullableType.prototype.resolveTypeParams = function(inType) {
- return this.type.resolveTypeParams(inType);
+NonNullableType.prototype.resolveType = function(node, isRequired, allowTypeParams) {
+ return this.type.resolveType(node, isRequired, allowTypeParams);
}
NonNullableType.prototype.addDirectSubtype = function(subtype) {
- this.type.addDirectSubtype$1(subtype);
+ this.type.addDirectSubtype(subtype);
}
NonNullableType.prototype.markUsed = function() {
this.type.markUsed();
@@ -11595,10 +11266,7 @@ NonNullableType.prototype.getMember = function(name) {
return this.type.getMember(name);
}
NonNullableType.prototype.getConstructor = function(name) {
- return this.type.getConstructor$1(name);
-}
-NonNullableType.prototype.getFactory = function(t, name) {
- return this.type.getFactory$2(t, name);
+ return this.type.getConstructor(name);
}
NonNullableType.prototype.getOrMakeConcreteType = function(typeArgs) {
return this.type.getOrMakeConcreteType(typeArgs);
@@ -11648,201 +11316,14 @@ NonNullableType.prototype.get$interfaces = function() {
NonNullableType.prototype.get$parent = function() {
return this.type.get$parent();
}
-NonNullableType.prototype.getAllMembers = function() {
- return this.type.getAllMembers();
-}
NonNullableType.prototype.get$isNative = function() {
return this.type.get$isNative();
}
-NonNullableType.prototype.addDirectSubtype$1 = NonNullableType.prototype.addDirectSubtype;
-NonNullableType.prototype.getConstructor$1 = NonNullableType.prototype.getConstructor;
-NonNullableType.prototype.getFactory$2 = NonNullableType.prototype.getFactory;
-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);
-function ConcreteType(name, genericType, typeArguments, typeArgsInOrder) {
- this.isUsed = false;
- this.constructors = new HashMapImplementation();
- this.genericType = genericType;
- this.factories = new FactoryMap();
- this.members = new HashMapImplementation();
- this.typeArguments = typeArguments;
- this.typeArgsInOrder = typeArgsInOrder;
- Type.call(this, name);
-}
-ConcreteType.prototype.get$genericType = function() { return this.genericType; };
-ConcreteType.prototype.get$typeArguments = function() { return this.typeArguments; };
-ConcreteType.prototype.set$typeArguments = function(value) { return this.typeArguments = value; };
-ConcreteType.prototype.get$_parent = function() { return this._parent; };
-ConcreteType.prototype.set$_parent = function(value) { return this._parent = value; };
-ConcreteType.prototype.get$typeArgsInOrder = function() { return this.typeArgsInOrder; };
-ConcreteType.prototype.set$typeArgsInOrder = function(value) { return this.typeArgsInOrder = value; };
-ConcreteType.prototype.get$isList = function() {
- return this.genericType.get$isList();
-}
-ConcreteType.prototype.get$isClass = function() {
- return this.genericType.isClass;
-}
-ConcreteType.prototype.get$library = function() {
- return this.genericType.library;
-}
-ConcreteType.prototype.get$span = function() {
- return this.genericType.get$span();
-}
-ConcreteType.prototype.get$hasTypeParams = function() {
- return this.typeArguments.getValues().some((function (e) {
- return (e instanceof ParameterType);
- })
- );
-}
-ConcreteType.prototype.get$isUsed = function() { return this.isUsed; };
-ConcreteType.prototype.set$isUsed = function(value) { return this.isUsed = value; };
-ConcreteType.prototype.get$members = function() { return this.members; };
-ConcreteType.prototype.set$members = function(value) { return this.members = value; };
-ConcreteType.prototype.get$constructors = function() { return this.constructors; };
-ConcreteType.prototype.set$constructors = function(value) { return this.constructors = value; };
-ConcreteType.prototype.get$factories = function() { return this.factories; };
-ConcreteType.prototype.set$factories = function(value) { return this.factories = value; };
-ConcreteType.prototype.resolveTypeParams = function(inType) {
- var newTypeArgs = [];
- var needsNewType = false;
- var $$list = this.typeArgsInOrder;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var t = $$list[$$i];
- var newType = t.resolveTypeParams$1(inType);
- if ($ne(newType, t)) needsNewType = true;
- newTypeArgs.add$1(newType);
- }
- if (!needsNewType) return this;
- return this.genericType.getOrMakeConcreteType(newTypeArgs);
-}
-ConcreteType.prototype.getOrMakeConcreteType = function(typeArgs) {
- return this.genericType.getOrMakeConcreteType(typeArgs);
-}
-ConcreteType.prototype.get$parent = function() {
- if (this._parent == null && this.genericType.get$parent() != null) {
- this._parent = this.genericType.get$parent().resolveTypeParams(this);
- }
- return this._parent;
-}
-ConcreteType.prototype.get$interfaces = function() {
- if (this._interfaces == null && this.genericType.interfaces != null) {
- this._interfaces = [];
- var $$list = this.genericType.interfaces;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var i = $$list[$$i];
- this._interfaces.add(i.resolveTypeParams$1(this));
- }
- }
- 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 = $$list.iterator$0(); $$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();
-}
-ConcreteType.prototype.getAllMembers = function() {
- var result = this.genericType.getAllMembers();
- var $$list = result.getKeys$0();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var memberName = $$i.next$0();
- var myMember = this.members.$index(memberName);
- if (myMember != null) {
- result.$setindex(memberName, myMember);
- }
- }
- return result;
-}
-ConcreteType.prototype.markUsed = function() {
- if (this.isUsed) return;
- this.isUsed = true;
- this._checkExtends();
- this.genericType.markUsed();
-}
-ConcreteType.prototype.genMethod = function(method) {
- return this.genericType.genMethod(method);
-}
-ConcreteType.prototype.getFactory = function(type, constructorName) {
- return this.genericType.getFactory(type, constructorName);
-}
-ConcreteType.prototype.getConstructor = function(constructorName) {
- var ret = this.constructors.$index(constructorName);
- if (ret != null) return ret;
- ret = this.factories.getFactory(this.name, constructorName);
- if (ret != null) return ret;
- var genericMember = this.genericType.getConstructor(constructorName);
- if (genericMember == null) return null;
- if ($ne(genericMember.get$declaringType(), this.genericType)) {
- if (!genericMember.get$declaringType().get$isGeneric()) return genericMember;
- var newDeclaringType = genericMember.get$declaringType().getOrMakeConcreteType$1(this.typeArgsInOrder);
- var factory = newDeclaringType.getFactory$2(this.genericType, constructorName);
- if (factory != null) return factory;
- return newDeclaringType.getConstructor$1(constructorName);
- }
- if (genericMember.get$isFactory()) {
- ret = new ConcreteMember(genericMember.get$name(), this, genericMember);
- this.factories.addFactory(this.name, constructorName, ret);
- }
- else {
- ret = new ConcreteMember(this.name, this, genericMember);
- this.constructors.$setindex(constructorName, ret);
- }
- return ret;
-}
-ConcreteType.prototype.getMember = function(memberName) {
- var member = this._foundMembers.$index(memberName);
- if (member != null) return member;
- member = this.members.$index(memberName);
- if (member != null) {
- this._checkOverride(member);
- this._foundMembers.$setindex(memberName, member);
- return member;
- }
- var genericMember = this.genericType.members.$index(memberName);
- if (genericMember != null) {
- member = new ConcreteMember(genericMember.get$name(), this, genericMember);
- this.members.$setindex(memberName, member);
- this._foundMembers.$setindex(memberName, member);
- return member;
- }
- member = this._getMemberInParents(memberName);
- this._foundMembers.$setindex(memberName, member);
- return member;
-}
-ConcreteType.prototype.resolveType = function(node, isRequired) {
- var ret = this.genericType.resolveType$2(node, isRequired);
- return ret;
-}
-ConcreteType.prototype.addDirectSubtype = function(type) {
- this.genericType.addDirectSubtype(type);
-}
-ConcreteType.prototype.addDirectSubtype$1 = ConcreteType.prototype.addDirectSubtype;
-ConcreteType.prototype.getConstructor$1 = ConcreteType.prototype.getConstructor;
-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);
function DefinedType(name, library, definition, isClass) {
this.isUsed = false;
- this.directSubtypes = new HashSetImplementation();
+ this.directSubtypes = new HashSetImplementation_Type();
this.isNative = false;
this.library = library;
this.isClass = isClass;
@@ -11856,8 +11337,6 @@ DefinedType.prototype.get$definition = function() { return this.definition; };
DefinedType.prototype.set$definition = function(value) { return this.definition = value; };
DefinedType.prototype.get$library = function() { return this.library; };
DefinedType.prototype.get$isClass = function() { return this.isClass; };
-DefinedType.prototype.get$_parent = function() { return this._parent; };
-DefinedType.prototype.set$_parent = function(value) { return this._parent = value; };
DefinedType.prototype.get$parent = function() {
return this._parent;
}
@@ -11870,6 +11349,8 @@ DefinedType.prototype.get$directSubtypes = function() { return this.directSubtyp
DefinedType.prototype.set$directSubtypes = function(value) { return this.directSubtypes = value; };
DefinedType.prototype.get$typeParameters = function() { return this.typeParameters; };
DefinedType.prototype.set$typeParameters = function(value) { return this.typeParameters = value; };
+DefinedType.prototype.get$typeArgsInOrder = function() { return this.typeArgsInOrder; };
+DefinedType.prototype.set$typeArgsInOrder = function(value) { return this.typeArgsInOrder = value; };
DefinedType.prototype.get$constructors = function() { return this.constructors; };
DefinedType.prototype.set$constructors = function(value) { return this.constructors = value; };
DefinedType.prototype.get$members = function() { return this.members; };
@@ -11882,26 +11363,32 @@ DefinedType.prototype.get$isUsed = function() { return this.isUsed; };
DefinedType.prototype.set$isUsed = function(value) { return this.isUsed = value; };
DefinedType.prototype.get$isNative = function() { return this.isNative; };
DefinedType.prototype.set$isNative = function(value) { return this.isNative = value; };
+DefinedType.prototype.get$baseGenericType = function() { return this.baseGenericType; };
+DefinedType.prototype.set$baseGenericType = function(value) { return this.baseGenericType = value; };
+DefinedType.prototype.get$genericType = function() {
+ return this.baseGenericType == null ? this : this.baseGenericType;
+}
DefinedType.prototype.setDefinition = function(def) {
this.definition = def;
if ((this.definition instanceof TypeDefinition) && this.definition.get$nativeType() != null) {
this.isNative = true;
}
- if (this.definition != null && this.definition.get$typeParameters() != null) {
+ if (this.definition != null && $ne(this.definition.get$typeParameters())) {
this._concreteTypes = new HashMapImplementation();
this.typeParameters = this.definition.get$typeParameters();
+ this.typeArgsInOrder = new Array(this.typeParameters.get$length());
+ for (var i = (0);
+ i < this.typeArgsInOrder.get$length(); i++) {
+ this.typeArgsInOrder.$setindex(i, $globals.world.varType);
+ }
+ }
+ else {
+ this.typeArgsInOrder = const$0007;
}
}
DefinedType.prototype.get$nativeType = function() {
return (this.definition != null ? this.definition.get$nativeType() : null);
}
-DefinedType.prototype.get$typeArgsInOrder = function() {
- if (this.typeParameters == null) return null;
- if (this._typeArgsInOrder == null) {
- this._typeArgsInOrder = new FixedCollection_Type($globals.world.varType, this.typeParameters.get$length());
- }
- return this._typeArgsInOrder;
-}
DefinedType.prototype.get$isVar = function() {
return $eq(this, $globals.world.varType);
}
@@ -11912,19 +11399,16 @@ DefinedType.prototype.get$isTop = function() {
return this.name == null;
}
DefinedType.prototype.get$isObject = function() {
- return this.library.get$isCore() && this.name == "Object";
+ return $eq(this, $globals.world.objectType);
}
DefinedType.prototype.get$isString = function() {
- return this.library.get$isCore() && this.name == "String" || this.library.get$isCoreImpl() && this.name == "StringImplementation";
+ return $eq(this, $globals.world.stringType) || $eq(this, $globals.world.stringImplType);
}
DefinedType.prototype.get$isBool = function() {
- return this.library.get$isCore() && this.name == "bool";
+ return $eq(this, $globals.world.boolType);
}
DefinedType.prototype.get$isFunction = function() {
- return this.library.get$isCore() && this.name == "Function";
-}
-DefinedType.prototype.get$isList = function() {
- return this.library.get$isCore() && this.name == "List";
+ return $eq(this, $globals.world.functionType) || $eq(this, $globals.world.functionImplType);
}
DefinedType.prototype.get$isGeneric = function() {
return this.typeParameters != null;
@@ -11944,7 +11428,7 @@ DefinedType.prototype.get$isNum = function() {
return $eq(this, $globals.world.numType) || $eq(this, $globals.world.intType) || $eq(this, $globals.world.doubleType) || $eq(this, $globals.world.numImplType);
}
DefinedType.prototype.getCallMethod = function() {
- return this.members.$index(":call");
+ return this.get$genericType().members.$index(":call");
}
DefinedType.prototype.getAllMembers = function() {
return HashMapImplementation.HashMapImplementation$from$factory(this.members);
@@ -11955,8 +11439,8 @@ DefinedType.prototype.markUsed = function() {
this._checkExtends();
if (this._lazyGenMethods != null) {
var $$list = orderValuesByKeys(this._lazyGenMethods);
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var method = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var method = $$i.next();
$globals.world.gen.genMethod(method);
}
this._lazyGenMethods = null;
@@ -11964,7 +11448,7 @@ DefinedType.prototype.markUsed = function() {
if (this.get$parent() != null) this.get$parent().markUsed();
}
DefinedType.prototype.genMethod = function(method) {
- if (this.isUsed) {
+ if (this.isUsed || this.baseGenericType != null) {
$globals.world.gen.genMethod(method);
}
else if (this.isClass) {
@@ -11975,26 +11459,29 @@ DefinedType.prototype.genMethod = function(method) {
DefinedType.prototype._resolveInterfaces = function(types) {
if (types == null) return [];
var interfaces = [];
- for (var $$i = 0;$$i < types.get$length(); $$i++) {
- var type = types[$$i];
- var resolvedInterface = this.resolveType$2(type, true);
+ for (var $$i = types.iterator(); $$i.hasNext(); ) {
+ var type = $$i.next();
+ var resolvedInterface = this.resolveType(type, true, true);
if (resolvedInterface.get$isClosed() && !(this.library.get$isCore() || this.library.get$isCoreImpl())) {
- $globals.world.error(("can not implement \"" + resolvedInterface.get$name() + "\": ") + "only native implementation allowed", type.get$span());
+ $globals.world.error($add(("can not implement \"" + resolvedInterface.get$name() + "\": "), "only native implementation allowed"), type.get$span());
}
- resolvedInterface.addDirectSubtype$1(this);
- interfaces.add$1(resolvedInterface);
+ resolvedInterface.addDirectSubtype(this);
+ interfaces.add(resolvedInterface);
}
return interfaces;
}
DefinedType.prototype.addDirectSubtype = function(type) {
this.directSubtypes.add(type);
+ if (this.baseGenericType != null) {
+ this.baseGenericType.addDirectSubtype(type);
+ }
}
DefinedType.prototype.get$subtypes = function() {
if (this._subtypes == null) {
- this._subtypes = new HashSetImplementation();
+ this._subtypes = new HashSetImplementation_Type();
var $$list = this.directSubtypes;
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var st = $$i.next$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var st = $$i.next();
this._subtypes.add(st);
this._subtypes.addAll(st.get$subtypes());
}
@@ -12003,16 +11490,16 @@ DefinedType.prototype.get$subtypes = function() {
}
DefinedType.prototype._cycleInClassExtends = function() {
var seen = new HashSetImplementation();
- seen.add$1(this);
+ seen.add(this);
var ancestor = this.get$parent();
- while (ancestor != null) {
+ while ($ne(ancestor)) {
if (ancestor == this) {
return true;
}
if (seen.contains$1(ancestor)) {
return false;
}
- seen.add$1(ancestor);
+ seen.add(ancestor);
ancestor = ancestor.get$parent();
}
return false;
@@ -12020,26 +11507,26 @@ DefinedType.prototype._cycleInClassExtends = function() {
DefinedType.prototype._cycleInInterfaceExtends = function() {
var $this = this; // closure support
var seen = new HashSetImplementation();
- seen.add$1(this);
+ seen.add(this);
function _helper(ancestor) {
- if (ancestor == null) return false;
+ if ($eq(ancestor)) return false;
if (ancestor == $this) return true;
if (seen.contains$1(ancestor)) {
return false;
}
- seen.add$1(ancestor);
+ seen.add(ancestor);
if (ancestor.get$interfaces() != null) {
var $$list = ancestor.get$interfaces();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var parent = $$i.next$0();
- if (_helper.call$1(parent)) return true;
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var parent = $$i.next();
+ if (_helper(parent)) return true;
}
}
return false;
}
for (var i = (0);
i < this.interfaces.get$length(); i++) {
- if (_helper.call$1(this.interfaces[i])) return i;
+ if (_helper(this.interfaces.$index(i))) return i;
}
return (-1);
}
@@ -12049,18 +11536,18 @@ DefinedType.prototype.resolve = function() {
if (this.isClass) {
if (typeDef.extendsTypes != null && typeDef.extendsTypes.get$length() > (0)) {
if (typeDef.extendsTypes.get$length() > (1)) {
- $globals.world.error("more than one base class", typeDef.extendsTypes[(1)].get$span());
+ $globals.world.error("more than one base class", typeDef.extendsTypes[(1)].span);
}
var extendsTypeRef = typeDef.extendsTypes[(0)];
if ((extendsTypeRef instanceof GenericTypeReference)) {
var g = extendsTypeRef;
- this.set$parent(this.resolveType$2(g.baseType, true));
+ this.set$parent(this.resolveType(g.baseType, true, true));
}
- this.set$parent(this.resolveType$2(extendsTypeRef, true));
+ this.set$parent(this.resolveType(extendsTypeRef, true, true));
if (!this.get$parent().get$isClass()) {
- $globals.world.error("class may not extend an interface - use implements", typeDef.extendsTypes[(0)].get$span());
+ $globals.world.error("class may not extend an interface - use implements", typeDef.extendsTypes[(0)].span);
}
- this.get$parent().addDirectSubtype$1(this);
+ this.get$parent().addDirectSubtype(this);
if (this._cycleInClassExtends()) {
$globals.world.error(("class \"" + this.name + "\" has a cycle in its inheritance chain"), extendsTypeRef.get$span());
}
@@ -12068,7 +11555,7 @@ DefinedType.prototype.resolve = function() {
else {
if (!this.get$isObject()) {
this.set$parent($globals.world.objectType);
- this.get$parent().addDirectSubtype$1(this);
+ this.get$parent().addDirectSubtype(this);
}
}
this.interfaces = this._resolveInterfaces(typeDef.implementsTypes);
@@ -12078,20 +11565,25 @@ DefinedType.prototype.resolve = function() {
}
else {
if (typeDef.implementsTypes != null && typeDef.implementsTypes.get$length() > (0)) {
- $globals.world.error("implements not allowed on interfaces (use extends)", typeDef.implementsTypes[(0)].get$span());
+ $globals.world.error("implements not allowed on interfaces (use extends)", typeDef.implementsTypes[(0)].span);
}
this.interfaces = this._resolveInterfaces(typeDef.extendsTypes);
var res = this._cycleInInterfaceExtends();
- if (res >= (0)) {
- $globals.world.error(("interface \"" + this.name + "\" has a cycle in its inheritance chain"), typeDef.extendsTypes[res].get$span());
+ if ($gte(res, (0))) {
+ $globals.world.error(("interface \"" + this.name + "\" has a cycle in its inheritance chain"), typeDef.extendsTypes.$index(res).span);
}
if (typeDef.defaultType != null) {
- this.defaultType = this.resolveType$2(typeDef.defaultType.baseType, true);
+ this.defaultType = this.resolveType(typeDef.defaultType.baseType, true, true);
if (this.defaultType == null) {
$globals.world.warning("unresolved default class", typeDef.defaultType.span);
}
else {
- this.defaultType._resolveTypeParams(typeDef.defaultType.typeParameters);
+ if (this.baseGenericType != null) {
+ if (!this.defaultType.get$isGeneric()) {
+ $globals.world.error("default type of generic interface must be generic", typeDef.defaultType.span);
+ }
+ this.defaultType = this.defaultType.getOrMakeConcreteType(this.typeArgsInOrder);
+ }
}
}
}
@@ -12101,35 +11593,35 @@ DefinedType.prototype.resolve = function() {
}
this._resolveTypeParams(this.typeParameters);
if (this.get$isObject()) this._createNotEqualMember();
- $globals.world._addType(this);
+ if ($ne(this.baseGenericType, $globals.world.listFactoryType)) $globals.world._addType(this);
var $$list = this.constructors.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var c = $$i.next$0();
- c.resolve$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var c = $$i.next();
+ c.resolve();
}
var $$list = this.members.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var m = $$i.next$0();
- m.resolve$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var m = $$i.next();
+ m.resolve();
}
this.factories.forEach((function (f) {
- return f.resolve$0();
+ return f.resolve();
})
);
if (this.get$isJsGlobalObject()) {
var $$list = this.members.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var m = $$i.next$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var m = $$i.next();
if (!m.get$isStatic()) $globals.world._addTopName(new ExistingJsGlobal(m.get$name(), m));
}
}
}
DefinedType.prototype._resolveTypeParams = function(params) {
if (params == null) return;
- for (var $$i = 0;$$i < params.get$length(); $$i++) {
- var tp = params[$$i];
+ for (var $$i = params.iterator(); $$i.hasNext(); ) {
+ var tp = $$i.next();
tp.set$enclosingElement(this);
- tp.resolve$0();
+ tp.resolve();
}
}
DefinedType.prototype.addMethod = function(methodName, definition) {
@@ -12143,7 +11635,7 @@ DefinedType.prototype.addMethod = function(methodName, definition) {
this.constructors.$setindex(method.get$constructorName(), method);
return;
}
- if (definition.modifiers != null && definition.modifiers.get$length() == (1) && $eq(definition.modifiers[(0)].get$kind(), (74))) {
+ if (definition.modifiers != null && definition.modifiers.get$length() == (1) && definition.modifiers[(0)].kind == (74)) {
if (this.factories.getFactory(method.get$constructorName(), method.get$name()) != null) {
$globals.world.error(("duplicate factory definition of \"" + method.get$name() + "\""), definition.span);
return;
@@ -12154,7 +11646,7 @@ DefinedType.prototype.addMethod = function(methodName, definition) {
if (methodName.startsWith("get:") || methodName.startsWith("set:")) {
var propName = methodName.substring((4));
var prop = this.members.$index(propName);
- if (prop == null) {
+ if ($eq(prop)) {
prop = new PropertyMember(propName, this);
this.members.$setindex(propName, prop);
}
@@ -12185,7 +11677,7 @@ DefinedType.prototype.addMethod = function(methodName, definition) {
DefinedType.prototype.addField = function(definition) {
for (var i = (0);
i < definition.names.get$length(); i++) {
- var name = definition.names[i].get$name();
+ var name = definition.names[i].name;
if (this.members.containsKey(name)) {
$globals.world.error(("duplicate field definition of \"" + name + "\""), definition.span);
return;
@@ -12202,59 +11694,59 @@ DefinedType.prototype.addField = function(definition) {
}
}
DefinedType.prototype.getFactory = function(type, constructorName) {
- var ret = this.factories.getFactory(type.name, constructorName);
- if (ret != null) return ret;
+ if (this.baseGenericType != null) {
+ var rr = this.baseGenericType.get$factories().getFactory(type.get$genericType().name, constructorName);
+ if ($ne(rr)) {
+ $globals.world.info(("need to remap factory on " + this.name + " from " + rr.get$declaringType().name));
+ return rr;
+ }
+ else {
+ var ret = this.getConstructor(constructorName);
+ return ret;
+ }
+ }
+ var ret = this.factories.getFactory(type.get$genericType().name, constructorName);
+ if ($ne(ret)) return ret;
ret = this.factories.getFactory(this.name, constructorName);
- if (ret != null) return ret;
+ if ($ne(ret)) return ret;
ret = this.constructors.$index(constructorName);
- if (ret != null) return ret;
+ if ($ne(ret)) return ret;
return this._tryCreateDefaultConstructor(constructorName);
}
DefinedType.prototype.getConstructor = function(constructorName) {
+ if (this.baseGenericType != null) {
+ var rr = this.constructors.$index(constructorName);
+ if ($ne(rr)) return rr;
+ rr = this.baseGenericType.get$constructors().$index(constructorName);
+ if ($ne(rr)) {
+ if (this.defaultType != null) {
+ var ret = this.defaultType.getFactory(this, constructorName);
+ return ret;
+ }
+ }
+ else {
+ rr = this.baseGenericType.get$factories().getFactory(this.baseGenericType.name, constructorName);
+ }
+ if ($eq(rr)) {
+ rr = this.baseGenericType.get$dynamic()._tryCreateDefaultConstructor(constructorName);
+ }
+ if ($eq(rr)) return null;
+ var rr1 = rr.makeConcrete(this);
+ rr1.resolve();
+ this.constructors.$setindex(constructorName, rr1);
+ return rr1;
+ }
var ret = this.constructors.$index(constructorName);
- if (ret != null) {
+ if ($ne(ret)) {
if (this.defaultType != null) {
- this._checkDefaultTypeParams();
return this.defaultType.getFactory(this, constructorName);
}
return ret;
}
ret = this.factories.getFactory(this.name, constructorName);
- if (ret != null) return ret;
+ if ($ne(ret)) return ret;
return this._tryCreateDefaultConstructor(constructorName);
}
-DefinedType.prototype._checkDefaultTypeParams = function() {
- function toList(list) {
- return (list != null ? list : const$0008);
- }
- var typeDef = this.definition;
- if (typeDef.defaultType.oldFactory) {
- return;
- }
- var interfaceParams = toList.call$1(this.typeParameters);
- var defaultParams = toList.call$1(typeDef.defaultType.typeParameters);
- var classParams = toList.call$1(this.defaultType.typeParameters);
- if ($ne(interfaceParams.get$length(), defaultParams.get$length()) || $ne(defaultParams.get$length(), classParams.get$length())) {
- $globals.world.error("\"default\" must have the same number of type parameters as the class and interface do", this.get$span(), typeDef.defaultType.span, this.defaultType.get$span());
- return;
- }
- for (var i = (0);
- i < interfaceParams.get$length(); i++) {
- var ip = interfaceParams.$index(i);
- var dp = defaultParams.$index(i);
- var cp = classParams.$index(i);
- dp.resolve$0();
- if ($ne(ip.get$name(), dp.get$name()) || $ne(dp.get$name(), cp.get$name())) {
- $globals.world.error("default class must have the same type parameter names as the class and interface", ip.get$span(), dp.get$span(), cp.get$span());
- }
- else if ($ne(dp.get$extendsType(), cp.get$extendsType())) {
- $globals.world.error("default class type parameters must have the same extends as the class does", dp.get$span(), cp.get$span());
- }
- else if (!dp.get$extendsType().isSubtypeOf$1(ip.get$extendsType())) {
- $globals.world.warning("\"default\" can only have tighter type parameter \"extends\" than the interface", dp.get$span(), ip.get$span());
- }
- }
-}
DefinedType.prototype._tryCreateDefaultConstructor = function(name) {
if (name == "" && this.definition != null && this.isClass && this.constructors.get$length() == (0)) {
var span = this.definition.span;
@@ -12270,7 +11762,7 @@ DefinedType.prototype._tryCreateDefaultConstructor = function(name) {
var typeDef = this.definition;
var c = new FunctionDefinition(null, null, typeDef.name, [], inits, native_, body, span);
this.addMethod(null, c);
- this.constructors.$index("").resolve$0();
+ this.constructors.$index("").resolve();
return this.constructors.$index("");
}
return null;
@@ -12278,6 +11770,24 @@ DefinedType.prototype._tryCreateDefaultConstructor = function(name) {
DefinedType.prototype.getMember = function(memberName) {
var member = this._foundMembers.$index(memberName);
if (member != null) return member;
+ if (this.baseGenericType != null) {
+ member = this.baseGenericType.getMember(memberName);
+ if (member == null) return null;
+ if (member.get$isStatic() || $ne(member.declaringType, this.baseGenericType)) {
+ this._foundMembers.$setindex(memberName, member);
+ return member;
+ }
+ var rr = member.makeConcrete(this);
+ if (member.get$definition() != null || (member instanceof PropertyMember)) {
+ rr.resolve();
+ }
+ else {
+ $globals.world.info(("no definition for " + member.name + " on " + this.name));
+ }
+ this.members.$setindex(memberName, rr);
+ this._foundMembers.$setindex(memberName, rr);
+ return rr;
+ }
member = this.members.$index(memberName);
if (member != null) {
this._checkOverride(member);
@@ -12286,7 +11796,7 @@ DefinedType.prototype.getMember = function(memberName) {
}
if (this.get$isTop()) {
var libType = this.library.findTypeByName(memberName);
- if (libType != null) {
+ if ($ne(libType)) {
member = libType.get$typeMember();
this._foundMembers.$setindex(memberName, member);
return member;
@@ -12296,50 +11806,48 @@ DefinedType.prototype.getMember = function(memberName) {
this._foundMembers.$setindex(memberName, member);
return member;
}
-DefinedType.prototype.resolveTypeParams = function(inType) {
- return this;
-}
DefinedType.prototype.getOrMakeConcreteType = function(typeArgs) {
var jsnames = [];
var names = [];
var typeMap = new HashMapImplementation();
+ var allVar = true;
for (var i = (0);
i < typeArgs.get$length(); i++) {
- var paramName = this.typeParameters[i].get$name();
- typeMap.$setindex(paramName, typeArgs[i]);
- names.add$1(typeArgs[i].get$name());
- jsnames.add$1(typeArgs[i].get$jsname());
- }
+ var typeArg = typeArgs.$index(i);
+ if ((typeArg instanceof ParameterType)) {
+ typeArg = $globals.world.varType;
+ typeArgs.$setindex(i, typeArg);
+ }
+ if (!typeArg.get$isVar()) allVar = false;
+ var paramName = this.typeParameters[i].name;
+ typeMap.$setindex(paramName, typeArg);
+ names.add(typeArg.get$name());
+ jsnames.add(typeArg.get$jsname());
+ }
+ if (allVar) return this;
var jsname = ("" + this.get$jsname() + "_" + Strings.join(jsnames, "$"));
var simpleName = ("" + this.name + "<" + Strings.join(names, ", ") + ">");
var key = Strings.join(names, "$");
var ret = this._concreteTypes.$index(key);
- if (ret == null) {
- ret = new ConcreteType(simpleName, this, typeMap, typeArgs);
+ if ($eq(ret)) {
+ ret = new DefinedType(simpleName, this.library, this.definition, this.isClass);
+ ret.set$baseGenericType(this);
+ ret.set$typeArgsInOrder(typeArgs);
ret.set$_jsname(jsname);
this._concreteTypes.$setindex(key, ret);
+ ret.resolve();
}
return ret;
}
DefinedType.prototype.getCallStub = function(args) {
var name = _getCallStubName("call", args);
var stub = this.varStubs.$index(name);
- if (stub == null) {
+ if ($eq(stub)) {
stub = new VarFunctionStub(name, args);
this.varStubs.$setindex(name, stub);
}
return stub;
}
-DefinedType.prototype.addDirectSubtype$1 = DefinedType.prototype.addDirectSubtype;
-DefinedType.prototype.addMethod$2 = DefinedType.prototype.addMethod;
-DefinedType.prototype.getConstructor$1 = DefinedType.prototype.getConstructor;
-DefinedType.prototype.getFactory$2 = DefinedType.prototype.getFactory;
-DefinedType.prototype.getMember$1 = DefinedType.prototype.getMember;
-DefinedType.prototype.getOrMakeConcreteType$1 = DefinedType.prototype.getOrMakeConcreteType;
-DefinedType.prototype.markUsed$0 = DefinedType.prototype.markUsed;
-DefinedType.prototype.resolve$0 = DefinedType.prototype.resolve;
-DefinedType.prototype.resolveTypeParams$1 = DefinedType.prototype.resolveTypeParams;
-DefinedType.prototype.setDefinition$1 = DefinedType.prototype.setDefinition;
// ********** Code for NativeType **************
function NativeType(name) {
this.isConstructorHidden = false;
@@ -12366,91 +11874,14 @@ function NativeType(name) {
}
NativeType.prototype.get$name = function() { return this.name; };
NativeType.prototype.set$name = function(value) { return this.name = value; };
-// ********** Code for FixedCollection **************
-function FixedCollection(value, length) {
- this.length = length;
- this.value = value;
-}
-FixedCollection.prototype.get$value = function() { return this.value; };
-FixedCollection.prototype.get$length = function() { return this.length; };
-FixedCollection.prototype.iterator = function() {
- return new FixedIterator_E(this.value, this.length);
-}
-FixedCollection.prototype.forEach = function(f) {
- Collections.forEach(this, f);
-}
-FixedCollection.prototype.filter = function(f) {
- return Collections.filter(this, new Array(), f);
-}
-FixedCollection.prototype.every = function(f) {
- return Collections.every(this, f);
-}
-FixedCollection.prototype.some = function(f) {
- return Collections.some(this, f);
-}
-FixedCollection.prototype.isEmpty = function() {
- return this.length == (0);
-}
-FixedCollection.prototype.filter$1 = function($0) {
- return this.filter(to$call$1($0));
-};
-FixedCollection.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$1($0));
-};
-FixedCollection.prototype.isEmpty$0 = FixedCollection.prototype.isEmpty;
-FixedCollection.prototype.iterator$0 = FixedCollection.prototype.iterator;
-// ********** Code for FixedCollection_Type **************
-$inherits(FixedCollection_Type, FixedCollection);
-function FixedCollection_Type(value, length) {
- this.value = value;
- this.length = length;
-}
-// ********** Code for FixedIterator **************
-function FixedIterator(value, length) {
- this.length = length;
- this._index = (0);
- this.value = value;
-}
-FixedIterator.prototype.get$value = function() { return this.value; };
-FixedIterator.prototype.get$length = function() { return this.length; };
-FixedIterator.prototype.hasNext = function() {
- return this._index < this.length;
-}
-FixedIterator.prototype.next = function() {
- this._index++;
- return this.value;
-}
-FixedIterator.prototype.hasNext$0 = FixedIterator.prototype.hasNext;
-FixedIterator.prototype.next$0 = FixedIterator.prototype.next;
-// ********** Code for FixedIterator_E **************
-$inherits(FixedIterator_E, FixedIterator);
-function FixedIterator_E(value, length) {
- this._index = (0);
- this.value = value;
- this.length = length;
-}
// ********** Code for _SharedBackingMap **************
-$inherits(_SharedBackingMap, HashMapImplementation_K$V);
+$inherits(_SharedBackingMap, HashMapImplementation);
function _SharedBackingMap() {
this.shared = (0);
- HashMapImplementation_K$V.call(this);
+ HashMapImplementation.call(this);
}
_SharedBackingMap._SharedBackingMap$from$factory = function(other) {
- var result = new _SharedBackingMap_K$V();
- other.forEach((function (k, v) {
- result.$setindex(k, v);
- })
- );
- return result;
-}
-// ********** Code for _SharedBackingMap_K$V **************
-$inherits(_SharedBackingMap_K$V, _SharedBackingMap);
-function _SharedBackingMap_K$V() {
- this.shared = (0);
- HashMapImplementation_K$V.call(this);
-}
-_SharedBackingMap_K$V._SharedBackingMap$from$factory = function(other) {
- var result = new _SharedBackingMap_K$V();
+ var result = new _SharedBackingMap();
other.forEach((function (k, v) {
result.$setindex(k, v);
})
@@ -12463,29 +11894,21 @@ function _SharedBackingMap_dart_core_String$VariableValue() {
this.shared = (0);
HashMapImplementation_dart_core_String$VariableValue.call(this);
}
-_SharedBackingMap_dart_core_String$VariableValue._SharedBackingMap$from$factory = function(other) {
- var result = new _SharedBackingMap_dart_core_String$VariableValue();
- other.forEach((function (k, v) {
- result.$setindex(k, v);
- })
- );
- return result;
-}
// ********** Code for CopyOnWriteMap **************
-function CopyOnWriteMap() {
- this._lang_map = new _SharedBackingMap_K$V();
-}
CopyOnWriteMap._wrap$ctor = function(_map) {
this._lang_map = _map;
}
CopyOnWriteMap._wrap$ctor.prototype = CopyOnWriteMap.prototype;
+function CopyOnWriteMap() {}
CopyOnWriteMap.prototype.clone = function() {
- this._lang_map.shared++;
- return new CopyOnWriteMap_K$V._wrap$ctor(this._lang_map);
+ var $0;
+ ($0 = this._lang_map).shared = $0.shared + (1);
+ return new CopyOnWriteMap._wrap$ctor(this._lang_map);
}
CopyOnWriteMap.prototype._ensureWritable = function() {
+ var $0;
if (this._lang_map.shared > (0)) {
- this._lang_map.shared--;
+ ($0 = this._lang_map).shared = $0.shared - (1);
this._lang_map = _SharedBackingMap._SharedBackingMap$from$factory(this._lang_map);
}
}
@@ -12497,6 +11920,10 @@ CopyOnWriteMap.prototype.putIfAbsent = function(key, ifAbsent) {
this._ensureWritable();
return this._lang_map.putIfAbsent(key, ifAbsent);
}
+CopyOnWriteMap.prototype.remove = function(key) {
+ this._ensureWritable();
+ return this._lang_map.remove(key);
+}
CopyOnWriteMap.prototype.$index = function(key) {
return this._lang_map.$index(key);
}
@@ -12518,52 +11945,13 @@ CopyOnWriteMap.prototype.getValues = function() {
CopyOnWriteMap.prototype.containsKey = function(key) {
return this._lang_map.containsKey(key);
}
-CopyOnWriteMap.prototype.containsKey$1 = CopyOnWriteMap.prototype.containsKey;
-CopyOnWriteMap.prototype.forEach$1 = function($0) {
- return this.forEach(to$call$2($0));
-};
-CopyOnWriteMap.prototype.getKeys$0 = CopyOnWriteMap.prototype.getKeys;
-CopyOnWriteMap.prototype.getValues$0 = CopyOnWriteMap.prototype.getValues;
-CopyOnWriteMap.prototype.isEmpty$0 = CopyOnWriteMap.prototype.isEmpty;
-// ********** Code for CopyOnWriteMap_K$V **************
-$inherits(CopyOnWriteMap_K$V, CopyOnWriteMap);
-function CopyOnWriteMap_K$V() {}
-CopyOnWriteMap_K$V._wrap$ctor = function(_map) {
- this._lang_map = _map;
-}
-CopyOnWriteMap_K$V._wrap$ctor.prototype = CopyOnWriteMap_K$V.prototype;
+CopyOnWriteMap.prototype.remove$1 = CopyOnWriteMap.prototype.remove;
// ********** Code for CopyOnWriteMap_dart_core_String$VariableValue **************
$inherits(CopyOnWriteMap_dart_core_String$VariableValue, CopyOnWriteMap);
function CopyOnWriteMap_dart_core_String$VariableValue() {
this._lang_map = new _SharedBackingMap_dart_core_String$VariableValue();
}
-CopyOnWriteMap_dart_core_String$VariableValue._wrap$ctor = function(_map) {
- this._lang_map = _map;
-}
-CopyOnWriteMap_dart_core_String$VariableValue._wrap$ctor.prototype = CopyOnWriteMap_dart_core_String$VariableValue.prototype;
-CopyOnWriteMap_dart_core_String$VariableValue.prototype.clone = function() {
- this._lang_map.shared++;
- return new CopyOnWriteMap_dart_core_String$VariableValue._wrap$ctor(this._lang_map);
-}
-CopyOnWriteMap_dart_core_String$VariableValue.prototype._ensureWritable = function() {
- if (this._lang_map.shared > (0)) {
- this._lang_map.shared--;
- this._lang_map = _SharedBackingMap._SharedBackingMap$from$factory(this._lang_map);
- }
-}
-CopyOnWriteMap_dart_core_String$VariableValue.prototype.$setindex = function(key, value) {
- this._ensureWritable();
- this._lang_map.$setindex(key, value);
-}
-CopyOnWriteMap_dart_core_String$VariableValue.prototype.$index = function(key) {
- return this._lang_map.$index(key);
-}
-CopyOnWriteMap_dart_core_String$VariableValue.prototype.forEach = function(f) {
- return this._lang_map.forEach(f);
-}
-CopyOnWriteMap_dart_core_String$VariableValue.prototype.containsKey = function(key) {
- return this._lang_map.containsKey(key);
-}
+CopyOnWriteMap_dart_core_String$VariableValue.prototype.remove$1 = CopyOnWriteMap_dart_core_String$VariableValue.prototype.remove;
// ********** Code for Value **************
function Value(type, code, span) {
this.type = type;
@@ -12599,9 +11987,9 @@ Value.union = function(x, y) {
if (y == null || $eq(x, y)) return x;
if (x == null) return y;
var ret = x._tryUnion(y);
- if (ret != null) return ret;
+ if ($ne(ret)) return ret;
ret = y._tryUnion(x);
- if (ret != null) return ret;
+ if ($ne(ret)) return ret;
return new Value(Type.union(x.get$type(), y.get$type()), null, null);
}
Value.prototype._tryUnion = function(right) {
@@ -12611,37 +11999,37 @@ Value.prototype.validateInitialized = function(span) {
}
Value.prototype.get_ = function(context, name, node) {
- var member = this._resolveMember(context, name, node, false);
- if (member != null) {
- return member._get$3(context, node, this);
+ var member = this._resolveMember(context, name, node);
+ if ($ne(member)) {
+ return member._get(context, node, this);
}
else {
return this.invokeNoSuchMethod(context, ("get:" + name), node);
}
}
-Value.prototype.set_ = function(context, name, node, value, isDynamic, kind, returnKind) {
- var member = this._resolveMember(context, name, node, isDynamic);
- if (member != null) {
+Value.prototype.set_ = function(context, name, node, value, kind, returnKind) {
+ var member = this._resolveMember(context, name, node);
+ if ($ne(member)) {
var thisValue = this;
var thisTmp = null;
var retTmp = null;
if (kind != (0)) {
thisTmp = context.getTemp(thisValue);
thisValue = context.assignTemp(thisTmp, thisValue);
- var lhs = member._get$3(context, node, thisTmp);
+ var lhs = member._get(context, node, thisTmp);
if (returnKind == (3)) {
retTmp = context.forceTemp(lhs);
lhs = context.assignTemp(retTmp, lhs);
}
- value = lhs.binop$4(kind, value, context, node);
+ value = lhs.binop(kind, value, context, node);
}
if (returnKind == (2)) {
retTmp = context.forceTemp(value);
value = context.assignTemp(retTmp, value);
}
- var ret = member._set$5(context, node, thisValue, value, isDynamic);
- if (thisTmp != null && $ne(thisTmp, this)) context.freeTemp(thisTmp);
- if (retTmp != null) {
+ var ret = member._set(context, node, thisValue, value);
+ if ($ne(thisTmp) && $ne(thisTmp, this)) context.freeTemp(thisTmp);
+ if ($ne(retTmp)) {
context.freeTemp(retTmp);
return Value.comma(ret, retTmp);
}
@@ -12653,9 +12041,9 @@ Value.prototype.set_ = function(context, name, node, value, isDynamic, kind, ret
return this.invokeNoSuchMethod(context, ("set:" + name), node, new Arguments(null, [value]));
}
}
-Value.prototype.setIndex = function(context, index, node, value, isDynamic, kind, returnKind) {
- var member = this._resolveMember(context, ":setindex", node, isDynamic);
- if (member != null) {
+Value.prototype.setIndex = function(context, index, node, value, kind, returnKind) {
+ var member = this._resolveMember(context, ":setindex", node);
+ if ($ne(member)) {
var thisValue = this;
var indexValue = index;
var thisTmp = null;
@@ -12672,19 +12060,19 @@ Value.prototype.setIndex = function(context, index, node, value, isDynamic, kind
if (returnKind == (3)) {
retTmp = context.forceTemp(value);
}
- var lhs = thisTmp.invoke$4(context, ":index", node, new Arguments(null, [indexTmp]));
+ var lhs = thisTmp.invoke(context, ":index", node, new Arguments(null, [indexTmp]));
if (returnKind == (3)) {
lhs = context.assignTemp(retTmp, lhs);
}
- value = lhs.binop$4(kind, value, context, node);
+ value = lhs.binop(kind, value, context, node);
}
if (returnKind == (2)) {
value = context.assignTemp(retTmp, value);
}
- var ret = member.invoke$5(context, node, thisValue, new Arguments(null, [indexValue, value]), isDynamic);
- if (thisTmp != null && $ne(thisTmp, this)) context.freeTemp(thisTmp);
- if (indexTmp != null && $ne(indexTmp, index)) context.freeTemp(indexTmp);
- if (retTmp != null) {
+ var ret = member.invoke(context, node, thisValue, new Arguments(null, [indexValue, value]));
+ if ($ne(thisTmp) && $ne(thisTmp, this)) context.freeTemp(thisTmp);
+ if ($ne(indexTmp) && $ne(indexTmp, index)) context.freeTemp(indexTmp);
+ if ($ne(retTmp)) {
context.freeTemp(retTmp);
return Value.comma(ret, retTmp);
}
@@ -12700,7 +12088,7 @@ Value.prototype.unop = function(kind, context, node) {
switch (kind) {
case (19):
- var newVal = this.convertTo(context, $globals.world.nonNullBool, false);
+ var newVal = this.convertTo(context, $globals.world.nonNullBool);
return new Value(newVal.get$type(), ("!" + newVal.get$code()), node.get$span());
case (42):
@@ -12710,15 +12098,18 @@ Value.prototype.unop = function(kind, context, node) {
case (43):
- return this.invoke(context, ":negate", node, Arguments.get$EMPTY(), false);
+ return this.invoke(context, ":negate", node, Arguments.get$EMPTY());
case (18):
- return this.invoke(context, ":bit_not", node, Arguments.get$EMPTY(), false);
+ return this.invoke(context, ":bit_not", node, Arguments.get$EMPTY());
}
$globals.world.internalError(("unimplemented: " + node.get$op()), node.get$span());
}
+Value.prototype._mayOverrideEqual = function() {
+ return this.get$type().get$isVar() || this.get$type().get$isObject() || !this.get$type().getMember(":eq").declaringType.get$isObject();
+}
Value.prototype.binop = function(kind, other, context, node) {
switch (kind) {
case (35):
@@ -12735,11 +12126,35 @@ Value.prototype.binop = function(kind, other, context, node) {
return new Value($globals.world.nonNullBool, ("" + this.get$code() + " != " + other.get$code()), node.get$span());
+ case (48):
+
+ if (other.get$code() == "null") {
+ if (!this._mayOverrideEqual()) {
+ return new Value($globals.world.nonNullBool, ("" + this.get$code() + " == " + other.get$code()), node.get$span());
+ }
+ }
+ else if (this.get$code() == "null") {
+ return new Value($globals.world.nonNullBool, ("" + this.get$code() + " == " + other.get$code()), node.get$span());
+ }
+ break;
+
+ case (49):
+
+ if (other.get$code() == "null") {
+ if (!this._mayOverrideEqual()) {
+ return new Value($globals.world.nonNullBool, ("" + this.get$code() + " != " + other.get$code()), node.get$span());
+ }
+ }
+ else if (this.get$code() == "null") {
+ return new Value($globals.world.nonNullBool, ("" + this.get$code() + " != " + other.get$code()), node.get$span());
+ }
+ break;
+
}
var name = kind == (49) ? ":ne" : TokenKind.binaryMethodName(kind);
- return this.invoke(context, name, node, new Arguments(null, [other]), false);
+ return this.invoke(context, name, node, new Arguments(null, [other]));
}
-Value.prototype.invoke = function(context, name, node, args, isDynamic) {
+Value.prototype.invoke = function(context, name, node, args) {
if (name == ":call") {
if (this.get$isType()) {
$globals.world.error("must use \"new\" or \"const\" to construct a new instance", node.span);
@@ -12748,36 +12163,29 @@ Value.prototype.invoke = function(context, name, node, args, isDynamic) {
return this._varCall(context, node, args);
}
}
- var member = this._resolveMember(context, name, node, isDynamic);
- if (member == null) {
+ var member = this._resolveMember(context, name, node);
+ if ($eq(member)) {
return this.invokeNoSuchMethod(context, name, node, args);
}
else {
- return member.invoke$5(context, node, this, args, isDynamic);
- }
-}
-Value.prototype.canInvoke = function(context, name, args) {
- if (this.get$type().get$isVarOrFunction() && name == ":call") {
- return true;
+ return member.invoke(context, node, this, args);
}
- var member = this._resolveMember(context, name, null, true);
- return member != null && member.canInvoke$2(context, args);
}
Value.prototype._hasOverriddenNoSuchMethod = function() {
var m = this.get$type().getMember("noSuchMethod");
- return m != null && !m.get$declaringType().get$isObject();
+ return $ne(m) && !m.get$declaringType().get$isObject();
}
Value.prototype.get$isPreciseType = function() {
return this.get$isSuper() || this.get$isType();
}
-Value.prototype._missingMemberError = function(context, name, isDynamic, node) {
+Value.prototype._missingMemberError = function(context, name, node) {
var onStaticType = false;
if ($ne(this.get$type(), this.get$staticType())) {
onStaticType = this.get$staticType().getMember(name) != null;
}
- if (!onStaticType && !isDynamic && !this._isVarOrParameterType(this.get$staticType()) && !this._hasOverriddenNoSuchMethod()) {
+ if (!onStaticType && context.get$showWarnings() && !this._isVarOrParameterType(this.get$staticType()) && !this._hasOverriddenNoSuchMethod()) {
var typeName = this.get$staticType().name;
- if (typeName == null) typeName = this.get$staticType().get$library().name;
+ if ($eq(typeName)) typeName = this.get$staticType().get$library().name;
var message = ("can not resolve \"" + name + "\" on \"" + typeName + "\"");
if (this.get$isType()) {
$globals.world.error(message, node.span);
@@ -12787,17 +12195,15 @@ Value.prototype._missingMemberError = function(context, name, isDynamic, node) {
}
}
}
-Value.prototype._tryResolveMember = function(context, name, isDynamic, node) {
+Value.prototype._tryResolveMember = function(context, name, node) {
var member = this.get$type().getMember(name);
- if (member == null) {
- this._missingMemberError(context, name, isDynamic, node);
+ if ($eq(member)) {
+ this._missingMemberError(context, name, node);
return null;
}
else {
- if (this.get$isType() && !member.get$isStatic()) {
- if (!isDynamic) {
- $globals.world.error("can not refer to instance member as static", node.span);
- }
+ if (this.get$isType() && !member.get$isStatic() && context.get$showWarnings()) {
+ $globals.world.error("can not refer to instance member as static", node.span);
return null;
}
}
@@ -12814,14 +12220,14 @@ Value.prototype._isVarOrParameterType = function(t) {
Value.prototype._shouldBindDynamically = function() {
return this._isVarOrParameterType(this.get$type()) || $globals.options.forceDynamic && !this.get$isConst();
}
-Value.prototype._resolveMember = function(context, name, node, isDynamic) {
+Value.prototype._resolveMember = function(context, name, node) {
var member = null;
if (!this._shouldBindDynamically()) {
- member = this._tryResolveMember(context, name, isDynamic, node);
+ member = this._tryResolveMember(context, name, node);
}
- if (member == null && !this.get$isSuper() && !this.get$isType()) {
+ if ($eq(member) && !this.get$isSuper() && !this.get$isType()) {
member = context.findMembers(name);
- if (member == null && !isDynamic) {
+ if ($eq(member) && context.get$showWarnings()) {
var where = "the world";
if (name.startsWith("_")) {
where = ("library \"" + context.get$library().name + "\"");
@@ -12838,16 +12244,16 @@ Value.prototype.checkFirstClass = function(span) {
}
Value.prototype._varCall = function(context, node, args) {
var stub = $globals.world.functionType.getCallStub(args);
- return stub.invoke$4(context, node, this, args);
+ return stub.invoke(context, node, this, args);
}
Value.prototype.needsConversion = function(toType) {
- var c = this.convertTo(null, toType, true);
- return c == null || this.get$code() != c.get$code();
+ var c = this.convertTo(null, toType);
+ return $eq(c) || this.get$code() != c.get$code();
}
-Value.prototype.convertTo = function(context, toType, isDynamic) {
- var checked = !isDynamic;
+Value.prototype.convertTo = function(context, toType) {
+ var checked = context != null && context.get$showWarnings();
var callMethod = toType.getCallMethod();
- if (callMethod != null) {
+ if ($ne(callMethod)) {
if (checked && !toType.isAssignable(this.get$type())) {
this.convertWarning(toType);
}
@@ -12865,10 +12271,10 @@ Value.prototype.convertTo = function(context, toType, isDynamic) {
this.convertWarning(toType);
}
if ($globals.options.enableTypeChecks) {
- if (context == null && isDynamic) {
+ if (context == null) {
return null;
}
- return this._typeAssert(context, toType, isDynamic);
+ return this._typeAssert(context, toType);
}
else {
return this.changeStaticType(toType);
@@ -12881,7 +12287,7 @@ Value.prototype._maybeWrapFunction = function(toType, callMethod) {
var arity = callMethod.parameters.get$length();
var myCall = this.get$type().getCallMethod();
var result = this;
- if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
+ if ($eq(myCall) || myCall.get$parameters().get$length() != arity) {
var stub = $globals.world.functionType.getCallStub(Arguments.Arguments$bare$factory(arity));
result = new Value(toType, ("to$" + stub.get$name() + "(" + this.get$code() + ")"), this.span);
}
@@ -12897,7 +12303,8 @@ Value.prototype._maybeWrapFunction = function(toType, callMethod) {
if (result == this) result = this.changeStaticType(toType);
return result;
}
-Value.prototype._typeAssert = function(context, toType, isDynamic) {
+Value.prototype._typeAssert = function(context, toType) {
+ var $0;
if ((toType instanceof ParameterType)) {
var p = toType;
toType = p.extendsType;
@@ -12909,7 +12316,7 @@ Value.prototype._typeAssert = function(context, toType, isDynamic) {
return $globals.world.withoutForceDynamic((function () {
var typeErrorCtor = $globals.world.typeErrorType.getConstructor("_internal");
$globals.world.gen.corejs.ensureTypeNameOf();
- var result = typeErrorCtor.invoke$5(context, null, new TypeValue($globals.world.typeErrorType, null), new Arguments(null, [new Value($globals.world.objectType, paramName, null), new Value($globals.world.stringType, ("\"" + toType.name + "\""), null)]), isDynamic);
+ var result = typeErrorCtor.invoke(context, null, new TypeValue($globals.world.typeErrorType, null), new Arguments(null, [new Value($globals.world.objectType, paramName, null), new Value($globals.world.stringType, ("\"" + toType.name + "\""), null)]));
$globals.world.gen.corejs.useThrow = true;
return ("$throw(" + result.get$code() + ")");
})
@@ -12920,7 +12327,7 @@ Value.prototype._typeAssert = function(context, toType, isDynamic) {
if (toType.get$isVoid()) {
check = ("$assert_void(" + this.get$code() + ")");
if (toType.typeCheckCode == null) {
- toType.typeCheckCode = ("function $assert_void(x) {\n if (x == null) return null;\n " + throwTypeError.call$1("x") + "\n}");
+ toType.typeCheckCode = ("function $assert_void(x) {\n if (x == null) return null;\n " + throwTypeError("x") + "\n}");
}
}
else if ($eq(toType, $globals.world.nonNullBool)) {
@@ -12930,22 +12337,22 @@ Value.prototype._typeAssert = function(context, toType, isDynamic) {
else if (toType.get$library().get$isCore() && toType.get$typeofName() != null) {
check = ("$assert_" + toType.name + "(" + this.get$code() + ")");
if (toType.typeCheckCode == null) {
- toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if (x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n " + throwTypeError.call$1("x") + "\n}");
+ toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if (x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n " + throwTypeError("x") + "\n}");
}
}
else {
toType.isChecked = true;
- var checkName = "assert$" + toType.get$jsname();
+ var checkName = $add("assert$", toType.get$jsname());
var temp = context.getTemp(this);
check = ("(" + context.assignTemp(temp, this).get$code() + " == null ? null :");
- check = check + (" " + temp.get$code() + "." + checkName + "())");
+ check = $add(check, (" " + temp.get$code() + "." + checkName + "())"));
if ($ne(this, temp)) context.freeTemp(temp);
$globals.world.objectType.varStubs.putIfAbsent(checkName, (function () {
- return new VarMethodStub(checkName, null, Arguments.get$EMPTY(), throwTypeError.call$1("this"));
+ return new VarMethodStub(checkName, null, Arguments.get$EMPTY(), throwTypeError("this"));
})
);
}
- context.counters.typeAsserts++;
+ ($0 = context.get$counters()).typeAsserts = $0.typeAsserts + (1);
return new Value(toType, check, this.span);
}
Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck) {
@@ -12963,15 +12370,15 @@ Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck)
}
if (toType.get$library().get$isCore()) {
var typeofName = toType.get$typeofName();
- if (typeofName != null) {
+ if ($ne(typeofName)) {
testCode = ("(typeof(" + this.get$code() + ") " + (isTrue ? "==" : "!=") + " '" + typeofName + "')");
}
}
- if (toType.get$isClass() && !(toType instanceof ConcreteType) && !toType.get$isHiddenNativeType()) {
+ if (toType.get$isClass() && !toType.get$isHiddenNativeType() && !toType.get$isConcreteGeneric()) {
toType.markUsed();
testCode = ("(" + this.get$code() + " instanceof " + toType.get$jsname() + ")");
if (!isTrue) {
- testCode = "!" + testCode;
+ testCode = $add("!", testCode);
}
}
if (testCode == null) {
@@ -12979,12 +12386,12 @@ Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck)
var temp = context.getTemp(this);
var checkName = ("is$" + toType.get$jsname());
testCode = ("(" + context.assignTemp(temp, this).get$code() + " &&");
- testCode = testCode + (" " + temp.get$code() + "." + checkName + "())");
+ testCode = $add(testCode, (" " + temp.get$code() + "." + checkName + "())"));
if (isTrue) {
- testCode = "!!" + testCode;
+ testCode = $add("!!", testCode);
}
else {
- testCode = "!" + testCode;
+ testCode = $add("!", testCode);
}
if ($ne(this, temp)) context.freeTemp(temp);
if (!$globals.world.objectType.varStubs.containsKey(checkName)) {
@@ -13005,12 +12412,12 @@ Value.prototype.invokeNoSuchMethod = function(context, name, node, args) {
var argsCode = [];
for (var i = (0);
i < args.get$length(); i++) {
- argsCode.add$1(args.values[i].get$code());
+ argsCode.add(args.values.$index(i).get$code());
}
pos = Strings.join(argsCode, ", ");
}
var noSuchArgs = [new Value($globals.world.stringType, ("\"" + name + "\""), node.span), new Value($globals.world.listType, ("[" + pos + "]"), node.span)];
- return this._resolveMember(context, "noSuchMethod", node, false).invoke(context, node, this, new Arguments(null, noSuchArgs), false);
+ return this._resolveMember(context, "noSuchMethod", node).invoke(context, node, this, new Arguments(null, noSuchArgs));
}
Value.fromBool = function(value, span) {
return new BoolValue(value, true, span);
@@ -13027,31 +12434,121 @@ Value.fromString = function(value, span) {
Value.fromNull = function(span) {
return new NullValue(true, span);
}
-Value.prototype.binop$4 = Value.prototype.binop;
-Value.prototype.checkFirstClass$1 = Value.prototype.checkFirstClass;
-Value.prototype.convertTo$2 = function($0, $1) {
- return this.convertTo($0, $1, false);
-};
-Value.prototype.convertTo$3 = Value.prototype.convertTo;
-Value.prototype.get_$3 = Value.prototype.get_;
Value.prototype.instanceOf$3$isTrue$forceCheck = Value.prototype.instanceOf;
Value.prototype.instanceOf$4 = function($0, $1, $2, $3) {
return this.instanceOf($0, $1, $2, $3, false);
};
-Value.prototype.invoke$4 = function($0, $1, $2, $3) {
- return this.invoke($0, $1, $2, $3, false);
+Value.prototype.setIndex$4$kind = function($0, $1, $2, $3, kind) {
+ return this.setIndex($0, $1, $2, $3, kind, (1));
+};
+Value.prototype.setIndex$4$kind$returnKind = Value.prototype.setIndex;
+Value.prototype.set_$4$kind = function($0, $1, $2, $3, kind) {
+ return this.set_($0, $1, $2, $3, kind, (1));
};
-Value.prototype.invoke$4$isDynamic = Value.prototype.invoke;
-Value.prototype.invoke$5 = Value.prototype.invoke;
-Value.prototype.invokeNoSuchMethod$4 = Value.prototype.invokeNoSuchMethod;
-Value.prototype.needsConversion$1 = Value.prototype.needsConversion;
-Value.prototype.setIndex$4$kind$returnKind = function($0, $1, $2, $3, kind, returnKind) {
- return this.setIndex($0, $1, $2, $3, false, kind, returnKind);
+Value.prototype.set_$4$kind$returnKind = Value.prototype.set_;
+// ********** Code for PureStaticValue **************
+$inherits(PureStaticValue, Value);
+function PureStaticValue(type, span, isConst, isType) {
+ this.isType = isType;
+ this.isConst = isConst;
+ Value.call(this, type, null, span);
+}
+PureStaticValue.prototype.get$isConst = function() { return this.isConst; };
+PureStaticValue.prototype.set$isConst = function(value) { return this.isConst = value; };
+PureStaticValue.prototype.get$isType = function() { return this.isType; };
+PureStaticValue.prototype.set$isType = function(value) { return this.isType = value; };
+PureStaticValue.prototype.getMem = function(context, name, node) {
+ var member = this.get$type().getMember(name);
+ if ($eq(member)) {
+ $globals.world.warning(("can not find \"" + name + "\" on \"" + this.get$type().name + "\""), node.span);
+ }
+ if (this.isType && !member.get$isStatic()) {
+ $globals.world.error("can not refer to instance member as static", node.span);
+ }
+ return member;
+}
+PureStaticValue.prototype.get_ = function(context, name, node) {
+ if (this.get$type().get$isVar()) return new PureStaticValue($globals.world.varType, node.span, false, false);
+ var member = this.getMem(context, name, node);
+ if ($eq(member)) return new PureStaticValue($globals.world.varType, node.span, false, false);
+ return member._get(context, node, this);
+}
+PureStaticValue.prototype.set_ = function(context, name, node, value, kind, returnKind) {
+ if (this.get$type().get$isVar()) return new PureStaticValue($globals.world.varType, node.span, false, false);
+ var member = this.getMem(context, name, node);
+ if ($ne(member)) {
+ member._set(context, node, this, value);
+ }
+ return new PureStaticValue(value.get$type(), node.span, false, false);
+}
+PureStaticValue.prototype.setIndex = function(context, index, node, value, kind, returnKind) {
+ return this.invoke(context, ":setindex", node, new Arguments(null, [index, value]));
+}
+PureStaticValue.prototype.unop = function(kind, context, node) {
+ switch (kind) {
+ case (19):
+
+ return new PureStaticValue($globals.world.boolType, node.get$span(), false, false);
+
+ case (42):
+
+ if (!this.isConst && !this.get$type().get$isNum()) {
+ $globals.world.error("no unary add operator in dart", node.get$span());
+ }
+ return new PureStaticValue($globals.world.numType, node.get$span(), false, false);
+
+ case (43):
+
+ return this.invoke(context, ":negate", node, Arguments.get$EMPTY());
+
+ case (18):
+
+ return this.invoke(context, ":bit_not", node, Arguments.get$EMPTY());
+
+ }
+ $globals.world.internalError(("unimplemented: " + node.get$op()), node.get$span());
+}
+PureStaticValue.prototype.binop = function(kind, other, context, node) {
+ var isConst = this.isConst && other.get$isConst();
+ switch (kind) {
+ case (35):
+ case (34):
+
+ return new PureStaticValue($globals.world.boolType, node.get$span(), isConst, false);
+
+ case (50):
+
+ return new PureStaticValue($globals.world.boolType, node.get$span(), isConst, false);
+
+ case (51):
+
+ return new PureStaticValue($globals.world.boolType, node.get$span(), isConst, false);
+
+ }
+ var name = kind == (49) ? ":ne" : TokenKind.binaryMethodName(kind);
+ var ret = this.invoke(context, name, node, new Arguments(null, [other]));
+ if (isConst) {
+ ret = new PureStaticValue(ret.get$type(), node.get$span(), isConst, false);
+ }
+ return ret;
+}
+PureStaticValue.prototype.invoke = function(context, name, node, args) {
+ if (this.get$type().get$isVar()) return new PureStaticValue($globals.world.varType, node.span, false, false);
+ if (this.get$type().get$isFunction() && name == ":call") {
+ return new PureStaticValue($globals.world.varType, node.span, false, false);
+ }
+ var member = this.getMem(context, name, node);
+ if ($eq(member)) return new PureStaticValue($globals.world.varType, node.span, false, false);
+ return member.invoke(context, node, this, args);
+}
+PureStaticValue.prototype.setIndex$4$kind = function($0, $1, $2, $3, kind) {
+ return this.setIndex($0, $1, $2, $3, kind, (1));
};
-Value.prototype.set_$4$kind$returnKind = function($0, $1, $2, $3, kind, returnKind) {
- return this.set_($0, $1, $2, $3, false, kind, returnKind);
+PureStaticValue.prototype.setIndex$4$kind$returnKind = PureStaticValue.prototype.setIndex;
+PureStaticValue.prototype.set_$4$kind = function($0, $1, $2, $3, kind) {
+ return this.set_($0, $1, $2, $3, kind, (1));
};
-Value.prototype.unop$3 = Value.prototype.unop;
+PureStaticValue.prototype.set_$4$kind$returnKind = PureStaticValue.prototype.set_;
// ********** Code for EvaluatedValue **************
$inherits(EvaluatedValue, Value);
function EvaluatedValue(isConst, type, span) {
@@ -13071,7 +12568,6 @@ EvaluatedValue.prototype.hashCode = function() {
EvaluatedValue.prototype.$eq = function(other) {
return (other instanceof EvaluatedValue) && $eq(other.get$type(), this.get$type()) && $eq(other.get$code(), this.get$code());
}
-EvaluatedValue.prototype.hashCode$0 = EvaluatedValue.prototype.hashCode;
// ********** Code for NullValue **************
$inherits(NullValue, EvaluatedValue);
function NullValue(isConst, span) {
@@ -13101,7 +12597,6 @@ NullValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-NullValue.prototype.binop$4 = NullValue.prototype.binop;
// ********** Code for BoolValue **************
$inherits(BoolValue, EvaluatedValue);
function BoolValue(actualValue, isConst, span) {
@@ -13148,8 +12643,6 @@ BoolValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-BoolValue.prototype.binop$4 = BoolValue.prototype.binop;
-BoolValue.prototype.unop$3 = BoolValue.prototype.unop;
// ********** Code for IntValue **************
$inherits(IntValue, EvaluatedValue);
function IntValue(actualValue, isConst, span) {
@@ -13314,8 +12807,6 @@ IntValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-IntValue.prototype.binop$4 = IntValue.prototype.binop;
-IntValue.prototype.unop$3 = IntValue.prototype.unop;
// ********** Code for DoubleValue **************
$inherits(DoubleValue, EvaluatedValue);
function DoubleValue(actualValue, isConst, span) {
@@ -13456,8 +12947,6 @@ DoubleValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-DoubleValue.prototype.binop$4 = DoubleValue.prototype.binop;
-DoubleValue.prototype.unop$3 = DoubleValue.prototype.unop;
// ********** Code for StringValue **************
$inherits(StringValue, EvaluatedValue);
function StringValue(actualValue, isConst, span) {
@@ -13483,7 +12972,7 @@ StringValue.prototype.binop = function(kind, other, context, node) {
case (42):
- return new StringValue(x + y, c, s);
+ return new StringValue($add(x, y), c, s);
}
return Value.prototype.binop.call(this, kind, other, context, node);
@@ -13522,11 +13011,11 @@ StringValue.prototype.get$code = function() {
default:
- if (ch >= (32) && ch <= (126)) {
+ if ($gte(ch, (32)) && $lte(ch, (126))) {
buf.add(this.actualValue[i]);
}
else {
- var hex = ch.toRadixString$1((16));
+ var hex = ch.toRadixString((16));
switch (hex.get$length()) {
case (1):
@@ -13566,7 +13055,6 @@ StringValue.prototype.get$code = function() {
buf.add("\"");
return buf.toString();
}
-StringValue.prototype.binop$4 = StringValue.prototype.binop;
// ********** Code for ListValue **************
$inherits(ListValue, EvaluatedValue);
function ListValue(values, isConst, type, span) {
@@ -13575,18 +13063,18 @@ function ListValue(values, isConst, type, span) {
}
ListValue.prototype.get$code = function() {
var buf = new StringBufferImpl("");
- buf.add$1("[");
+ buf.add("[");
for (var i = (0);
- i < this.values.get$length(); i = $add(i, (1))) {
- if (i > (0)) buf.add$1(", ");
- buf.add$1(this.values[i].get$code());
+ $lt(i, this.values.get$length()); i = $add(i, (1))) {
+ if ($gt(i, (0))) buf.add(", ");
+ buf.add(this.values.$index(i).get$code());
}
- buf.add$1("]");
+ buf.add("]");
var listCode = buf.toString$0();
if (!this.isConst) return listCode;
var v = new Value($globals.world.listType, listCode, this.span);
var immutableListCtor = $globals.world.immutableListType.getConstructor("from");
- var result = immutableListCtor.invoke$4(null, null, new TypeValue(v.get$type(), this.span), new Arguments(null, [v]));
+ var result = immutableListCtor.invoke($globals.world.gen.mainContext, null, new TypeValue(v.get$type(), this.span), new Arguments(null, [v]));
return result.get$code();
}
ListValue.prototype.binop = function(kind, other, context, node) {
@@ -13606,8 +13094,6 @@ ListValue.prototype.binop = function(kind, other, context, node) {
ListValue.prototype.getGlobalValue = function() {
return $globals.world.gen.globalForConst(this, this.values);
}
-ListValue.prototype.binop$4 = ListValue.prototype.binop;
-ListValue.prototype.getGlobalValue$0 = ListValue.prototype.getGlobalValue;
// ********** Code for MapValue **************
$inherits(MapValue, EvaluatedValue);
function MapValue(values, isConst, type, span) {
@@ -13617,8 +13103,8 @@ 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.coreimpl.topType;
- var f = this.isConst ? tp.getMember$1("_constMap") : tp.getMember$1("_map");
- var value = f.invoke(null, null, new TypeValue(tp, null), new Arguments(null, [items]), false);
+ var f = this.isConst ? tp.getMember("_constMap") : tp.getMember("_map");
+ var value = f.invoke($globals.world.gen.mainContext, null, new TypeValue(tp, null), new Arguments(null, [items]));
return value.get$code();
}
MapValue.prototype.getGlobalValue = function() {
@@ -13638,8 +13124,6 @@ MapValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-MapValue.prototype.binop$4 = MapValue.prototype.binop;
-MapValue.prototype.getGlobalValue$0 = MapValue.prototype.getGlobalValue;
// ********** Code for ObjectValue **************
$inherits(ObjectValue, EvaluatedValue);
function ObjectValue(isConst, type, span) {
@@ -13655,11 +13139,11 @@ ObjectValue.prototype.get$code = function() {
return this._code;
}
ObjectValue.prototype.initFields = function() {
- var allMembers = $globals.world.gen._orderValues(this.get$type().getAllMembers());
- for (var $$i = allMembers.iterator$0(); $$i.hasNext$0(); ) {
- var f = $$i.next$0();
+ var allMembers = $globals.world.gen._orderValues(this.get$type().get$genericType().getAllMembers());
+ for (var $$i = allMembers.iterator(); $$i.hasNext(); ) {
+ var f = $$i.next();
if (f.get$isField() && !f.get$isStatic() && f.get$declaringType().get$isClass()) {
- this.fields.$setindex(f, f.computeValue$0());
+ this.fields.$setindex(f, f.computeValue());
}
}
}
@@ -13688,25 +13172,25 @@ ObjectValue.prototype.setField = function(field, value, duringInit) {
}
ObjectValue.prototype.validateInitialized = function(span) {
var buf = new StringBufferImpl("");
- buf.add$1("Object.create(");
- buf.add$1(("" + this.get$type().get$jsname() + ".prototype, "));
- buf.add$1("{");
+ buf.add("Object.create(");
+ buf.add(("" + this.get$type().get$jsname() + ".prototype, "));
+ buf.add("{");
var $$list = this.fields.getKeys();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var field = $$i.next$0();
- buf.add$1(field.get$name());
- buf.add$1(": ");
- buf.add$1("{\"value\": ");
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var field = $$i.next();
+ buf.add(field.get$name());
+ buf.add(": ");
+ buf.add("{\"value\": ");
if (this.fields.$index(field) == null) {
$globals.world.error(("Required field \"" + field.get$name() + "\" was not initialized"), span, field.get$span());
- buf.add$1("null");
+ buf.add("null");
}
else {
- buf.add$1(this.fields.$index(field).get$code());
+ buf.add(this.fields.$index(field).get$code());
}
- buf.add$1(", writeable: false}, ");
+ buf.add(", writeable: false}, ");
}
- buf.add$1("})");
+ buf.add("})");
this._code = buf.toString$0();
}
ObjectValue.prototype.binop = function(kind, other, context, node) {
@@ -13725,8 +13209,6 @@ ObjectValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-ObjectValue.prototype.binop$4 = ObjectValue.prototype.binop;
-ObjectValue.prototype.initFields$0 = ObjectValue.prototype.initFields;
// ********** Code for GlobalValue **************
$inherits(GlobalValue, Value);
function GlobalValue(type, code, isConst, field, name, exp, span, deps) {
@@ -13736,8 +13218,8 @@ function GlobalValue(type, code, isConst, field, name, exp, span, deps) {
this.dependencies = [];
this.isConst = isConst;
Value.call(this, type, code, span);
- for (var $$i = 0;$$i < deps.get$length(); $$i++) {
- var dep = deps[$$i];
+ for (var $$i = deps.iterator(); $$i.hasNext(); ) {
+ var dep = $$i.next();
if ((dep instanceof GlobalValue)) {
this.dependencies.add(dep);
this.dependencies.addAll(dep.get$dependencies());
@@ -13784,13 +13266,12 @@ GlobalValue.prototype.compareTo = function(other) {
return this.field.name.compareTo(other.field.name);
}
}
-GlobalValue.prototype.compareTo$1 = GlobalValue.prototype.compareTo;
// ********** Code for BareValue **************
$inherits(BareValue, Value);
function BareValue(home, outermost, span) {
this.isType = outermost.get$isStatic();
this.home = home;
- Value.call(this, outermost.method.declaringType, null, span);
+ Value.call(this, outermost.method.get$declaringType(), null, span);
}
BareValue.prototype.get$isType = function() { return this.isType; };
BareValue.prototype.get$needsTemp = function() {
@@ -13805,16 +13286,16 @@ BareValue.prototype.get$code = function() {
BareValue.prototype._ensureCode = function() {
if (this._code == null) this._code = this.isType ? this.get$type().get$jsname() : this.home._makeThisCode();
}
-BareValue.prototype._tryResolveMember = function(context, name, isDynamic, node) {
+BareValue.prototype._tryResolveMember = function(context, name, node) {
var member = this.get$type().getMember(name);
- if (member == null || $ne(member.get$declaringType(), this.get$type())) {
+ if ($eq(member) || $ne(member.get$declaringType(), this.get$type())) {
var libMember = this.home.get$library().lookup(name, this.span);
if (libMember != null) {
return libMember.get$preciseMemberSet();
}
}
this._ensureCode();
- return Value.prototype._tryResolveMember.call(this, context, name, isDynamic, node);
+ return Value.prototype._tryResolveMember.call(this, context, name, node);
}
// ********** Code for SuperValue **************
$inherits(SuperValue, Value);
@@ -13934,9 +13415,6 @@ VariableValue.prototype.binop = function(kind, other, context, node) {
}
return Value.prototype.binop.call(this, kind, other, context, node);
}
-VariableValue.prototype.binop$4 = VariableValue.prototype.binop;
-VariableValue.prototype.replaceValue$1 = VariableValue.prototype.replaceValue;
-VariableValue.prototype.unop$3 = VariableValue.prototype.unop;
// ********** Code for CompilerException **************
function CompilerException(_message, _location) {
this._lang_message = _message;
@@ -13973,7 +13451,6 @@ CounterLog.prototype.add = function(other) {
this.invokeCalls = this.invokeCalls + other.invokeCalls;
this.msetN = this.msetN + other.msetN;
}
-CounterLog.prototype.add$1 = CounterLog.prototype.add;
// ********** Code for World **************
function World(files) {
this.files = files;
@@ -14024,12 +13501,12 @@ World.prototype._addMember = function(member) {
return;
}
var mset = this._members.$index(member.name);
- if (mset == null) {
+ if ($eq(mset)) {
mset = new MemberSet(member, true);
this._members.$setindex(mset.get$name(), mset);
}
else {
- mset.get$members().add$1(member);
+ mset.get$members().add(member);
}
}
World.prototype._addTopName = function(named) {
@@ -14045,14 +13522,14 @@ World.prototype._addTopName = function(named) {
}
World.prototype._addJavascriptTopName = function(named, name) {
var existing = this._topNames.$index(name);
- if (existing == null) {
+ if ($eq(existing)) {
this._topNames.$setindex(name, named);
return;
}
if (existing == named) {
return;
}
- this.info(("mangling matching top level name \"" + named.get$jsname() + "\" in ") + ("both \"" + named.get$library().get$jsname() + "\" and \"" + existing.get$library().get$jsname() + "\""));
+ this.info($add(("mangling matching top level name \"" + named.get$jsname() + "\" in "), ("both \"" + named.get$library().get$jsname() + "\" and \"" + existing.get$library().get$jsname() + "\"")));
var existingPri = existing.get$jsnamePriority();
var namedPri = named.get$jsnamePriority();
if (existingPri > namedPri || namedPri == (0)) {
@@ -14062,7 +13539,7 @@ World.prototype._addJavascriptTopName = function(named, name) {
this._renameJavascriptTopName(existing);
}
else {
- var msg = ("conflicting JS name \"" + name + "\" of same ") + ("priority " + existingPri + ": (already defined in) ") + ("" + existing.get$span().get$locationText() + " with priority " + namedPri + ")");
+ var msg = $add($add(("conflicting JS name \"" + name + "\" of same "), ("priority " + existingPri + ": (already defined in) ")), ("" + existing.get$span().get$locationText() + " with priority " + namedPri + ")"));
if (named.get$isNative()) {
$globals.world.info(msg, named.get$span(), existing.get$span());
}
@@ -14074,8 +13551,8 @@ World.prototype._addJavascriptTopName = function(named, name) {
World.prototype._renameJavascriptTopName = function(named) {
named._jsname = ("" + named.get$library().get$jsname() + "_" + named.get$jsname());
var existing = this._topNames.$index(named.get$jsname());
- if (existing != null && $ne(existing, named)) {
- $globals.world.internalError(("name mangling failed for \"" + named.get$jsname() + "\" ") + ("(\"" + named.get$jsname() + "\" defined also in " + existing.get$span().get$locationText() + ")"), named.get$span());
+ if ($ne(existing) && $ne(existing, named)) {
+ $globals.world.internalError($add(("name mangling failed for \"" + named.get$jsname() + "\" "), ("(\"" + named.get$jsname() + "\" defined also in " + existing.get$span().get$locationText() + ")")), named.get$span());
}
this._topNames.$setindex(named.get$jsname(), named);
}
@@ -14088,7 +13565,7 @@ World.prototype.toJsIdentifier = function(name) {
this._jsKeywords = HashSetImplementation.HashSetImplementation$from$factory(["break", "case", "catch", "continue", "debugger", "default", "delete", "do", "else", "finally", "for", "function", "if", "in", "instanceof", "new", "return", "switch", "this", "throw", "try", "typeof", "var", "void", "while", "with", "class", "enum", "export", "extends", "import", "super", "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield", "native"]);
}
if (this._jsKeywords.contains(name)) {
- return name + "_";
+ return $add(name, "_");
}
else {
return name.replaceAll("$", "$$").replaceAll(":", "$");
@@ -14100,7 +13577,7 @@ World.prototype.compileAndSave = function() {
if (success) {
var code = $globals.world.getGeneratedCode();
if (!$globals.options.outfile.endsWith(".js")) {
- code = "#!/usr/bin/env node\n" + code;
+ code = $add("#!/usr/bin/env node\n", code);
}
$globals.world.files.writeString($globals.options.outfile, code);
}
@@ -14136,7 +13613,7 @@ World.prototype.runLeg = function() {
this.fatal("requested leg enabled, but no leg compiler available");
}
var res = this.withTiming("try leg compile", (function () {
- return $globals.legCompile.call$1($this);
+ return $globals.legCompile($this);
})
);
if (!res && $globals.options.legOnly) {
@@ -14155,6 +13632,10 @@ World.prototype.runCompilationPhases = function() {
if ($globals.experimentalAwaitPhase != null) {
this.withTiming("await translation", to$call$0($globals.experimentalAwaitPhase));
}
+ this.withTiming("analyze pass", (function () {
+ $this.analyzeCode(lib);
+ })
+ );
this.withTiming("generate code", (function () {
$this.generateCode(lib);
})
@@ -14171,7 +13652,7 @@ World.prototype.getGeneratedCode = function() {
World.prototype.readFile = function(filename) {
try {
var sourceFile = this.reader.readFile(filename);
- this.dartBytesRead = this.dartBytesRead + sourceFile.get$text().get$length();
+ this.dartBytesRead = this.dartBytesRead + sourceFile.get$text().length;
return sourceFile;
} catch (e) {
e = _toDartException(e);
@@ -14202,9 +13683,9 @@ World.prototype.process = function() {
while (this._todo.get$length() > (0)) {
var todo = this._todo;
this._todo = [];
- for (var $$i = todo.iterator$0(); $$i.hasNext$0(); ) {
- var lib = $$i.next$0();
- lib.visitSources$0();
+ for (var $$i = todo.iterator(); $$i.hasNext(); ) {
+ var lib = $$i.next();
+ lib.visitSources();
}
}
}
@@ -14216,14 +13697,14 @@ World.prototype.processDartScript = function(script) {
}
World.prototype.resolveAll = function() {
var $$list = this.libraries.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var lib = $$i.next$0();
- lib.resolve$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var lib = $$i.next();
+ lib.resolve();
}
var $$list = this.libraries.getValues();
- for (var $$i = $$list.iterator$0(); $$i.hasNext$0(); ) {
- var lib = $$i.next$0();
- lib.postResolveChecks$0();
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var lib = $$i.next();
+ lib.postResolveChecks();
}
}
World.prototype.get$resolveAll = function() {
@@ -14231,13 +13712,16 @@ World.prototype.get$resolveAll = function() {
}
World.prototype.findMainMethod = function(lib) {
var main = lib.lookup("main", lib.get$span());
- if (main == null) {
+ if ($eq(main)) {
this.fatal("no main method specified");
}
return main;
}
-World.prototype.generateCode = function(lib) {
+World.prototype.analyzeCode = function(lib) {
this.gen = new WorldGenerator(this.findMainMethod(lib), new CodeWriter());
+ this.gen.analyze();
+}
+World.prototype.generateCode = function(lib) {
this.gen.run();
this.frogCode = this.gen.writer.get$text();
this.jsBytesWritten = this.frogCode.length;
@@ -14254,7 +13738,7 @@ World.prototype._message = function(color, prefix, message, span, span1, span2,
}
}
else {
- var messageWithPrefix = $globals.options.useColors ? (color + prefix + $globals._NO_COLOR + message) : (prefix + message);
+ var messageWithPrefix = $globals.options.useColors ? ($add($add($add(color, prefix), $globals._NO_COLOR), message)) : ($add(prefix, message));
var text = messageWithPrefix;
if (span != null) {
text = span.toMessageString(messageWithPrefix);
@@ -14268,7 +13752,7 @@ World.prototype._message = function(color, prefix, message, span, span1, span2,
}
}
if (throwing) {
- $throw(new CompilerException(prefix + message, span));
+ $throw(new CompilerException($add(prefix, message), span));
}
}
World.prototype.error = function(message, span, span1, span2) {
@@ -14302,7 +13786,7 @@ World.prototype.withoutForceDynamic = function(fn) {
var oldForceDynamic = $globals.options.forceDynamic;
$globals.options.forceDynamic = false;
try {
- return fn.call$0();
+ return fn();
} finally {
$globals.options.forceDynamic = oldForceDynamic;
}
@@ -14327,10 +13811,10 @@ World.prototype.printStatus = function() {
}
World.prototype.withTiming = function(name, f) {
var sw = new StopwatchImplementation();
- sw.start$0();
- var result = f.call$0();
- sw.stop$0();
- this.info(("" + name + " in " + sw.elapsedInMs$0() + "msec"));
+ sw.start();
+ var result = f();
+ sw.stop();
+ this.info(("" + name + " in " + sw.elapsedInMs() + "msec"));
return result;
}
// ********** Code for FrogOptions **************
@@ -14461,15 +13945,15 @@ function FrogOptions(homedir, args, files) {
default:
- if (arg.endsWith$1(".dart")) {
+ if (arg.endsWith(".dart")) {
this.dartScript = arg;
this.childArgs = args.getRange(i + (1), args.get$length() - i - (1));
break loop;
}
- else if (arg.startsWith$1("--out=")) {
+ else if (arg.startsWith("--out=")) {
this.outfile = arg.substring$1("--out=".length);
}
- else if (arg.startsWith$1("--libdir=")) {
+ else if (arg.startsWith("--libdir=")) {
this.libDir = arg.substring$1("--libdir=".length);
passedLibDir = true;
}
@@ -14505,7 +13989,7 @@ function LibraryReader() {
}
LibraryReader.prototype.readFile = function(fullname) {
var filename = this._specialLibs.$index(fullname);
- if (filename == null) {
+ if ($eq(filename)) {
filename = fullname;
}
if ($globals.world.files.fileExists(filename)) {
@@ -14524,14 +14008,15 @@ function VarMember(name) {
VarMember.prototype.get$name = function() { return this.name; };
VarMember.prototype.get$isGenerated = function() { return this.isGenerated; };
VarMember.prototype.set$isGenerated = function(value) { return this.isGenerated = value; };
+VarMember.prototype.get$body = function() {
+ return null;
+}
VarMember.prototype.get$returnType = function() {
return $globals.world.varType;
}
VarMember.prototype.invoke = function(context, node, target, args) {
return new Value(this.get$returnType(), ("" + target.get$code() + "." + this.name + "(" + args.getCode() + ")"), node.span);
}
-VarMember.prototype.generate$1 = VarMember.prototype.generate;
-VarMember.prototype.invoke$4 = VarMember.prototype.invoke;
// ********** Code for VarFunctionStub **************
$inherits(VarFunctionStub, VarMember);
function VarFunctionStub(name, callArgs) {
@@ -14573,8 +14058,6 @@ VarFunctionStub.prototype.generateNamed = function(w) {
w.writeln(("return this." + this.name + "(" + argsCode + ");"));
w.exitBlock("}");
}
-VarFunctionStub.prototype.generate$1 = VarFunctionStub.prototype.generate;
-VarFunctionStub.prototype.invoke$4 = VarFunctionStub.prototype.invoke;
// ********** Code for VarMethodStub **************
$inherits(VarMethodStub, VarMember);
function VarMethodStub(name, member, args, body) {
@@ -14601,14 +14084,14 @@ VarMethodStub.prototype.generate = function(code) {
else {
var suffix = $globals.world.gen._writePrototypePatch(this.get$declaringType(), this.name, ("function(" + this.args.getCode() + ") {"), code, false);
if (!suffix.endsWith(";")) {
- suffix = suffix + ";";
+ suffix = $add(suffix, ";");
}
if (this._needsExactTypeCheck()) {
code.enterBlock(("if (Object.getPrototypeOf(this).hasOwnProperty(\"" + this.name + "\")) {"));
code.writeln(("" + this.body + ";"));
code.exitBlock("}");
var argsCode = this.args.getCode();
- if (argsCode != "") argsCode = ", " + argsCode;
+ if (argsCode != "") argsCode = $add(", ", argsCode);
code.writeln(("return Object.prototype." + this.name + ".call(this" + argsCode + ");"));
code.exitBlock(suffix);
}
@@ -14622,7 +14105,7 @@ VarMethodStub.prototype._needsExactTypeCheck = function() {
var $this = this; // closure support
if (this.member == null || this.member.declaringType.get$isObject()) return false;
var members = this.member.get$potentialMemberSet().members;
- return members.filter$1((function (m) {
+ return members.filter((function (m) {
return $ne(m, $this.member) && m.get$declaringType().get$isHiddenNativeType();
})
).get$length() >= (1);
@@ -14635,7 +14118,7 @@ VarMethodStub.prototype._useDirectCall = function(args) {
}
for (var i = args.get$length();
i < method.parameters.get$length(); i++) {
- if ($ne(method.parameters[i].get$value().get$code(), "null")) {
+ if (method.parameters[i].value.get$code() != "null") {
return false;
}
}
@@ -14645,7 +14128,6 @@ VarMethodStub.prototype._useDirectCall = function(args) {
return false;
}
}
-VarMethodStub.prototype.generate$1 = VarMethodStub.prototype.generate;
// ********** Code for VarMethodSet **************
$inherits(VarMethodSet, VarMember);
function VarMethodSet(baseName, name, members, callArgs, returnType) {
@@ -14667,27 +14149,25 @@ VarMethodSet.prototype._invokeMembers = function(context, node) {
this.invoked = true;
var hasObjectType = false;
var $$list = this.members;
- for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
- var member = $$list[$$i];
+ for (var $$i = $$list.iterator(); $$i.hasNext(); ) {
+ var member = $$i.next();
var type = member.get$declaringType();
var target = new Value(type, "this", node.span);
- var result = member.invoke$4$isDynamic(context, node, target, this.args, true);
- var stub = new VarMethodStub(this.name, member, this.args, "return " + result.get$code());
+ var result = member.invoke(context, node, target, this.args);
+ var stub = new VarMethodStub(this.name, member, this.args, $add("return ", result.get$code()));
type.get$varStubs().$setindex(stub.get$name(), stub);
if (type.get$isObject()) hasObjectType = true;
}
if (!hasObjectType) {
var target = new Value($globals.world.objectType, "this", node.span);
- var result = target.invokeNoSuchMethod$4(context, this.baseName, node, this.args);
- var stub = new VarMethodStub(this.name, null, this.args, "return " + result.get$code());
+ var result = target.invokeNoSuchMethod(context, this.baseName, node, this.args);
+ var stub = new VarMethodStub(this.name, null, this.args, $add("return ", result.get$code()));
$globals.world.objectType.varStubs.$setindex(stub.get$name(), stub);
}
}
VarMethodSet.prototype.generate = function(code) {
}
-VarMethodSet.prototype.generate$1 = VarMethodSet.prototype.generate;
-VarMethodSet.prototype.invoke$4 = VarMethodSet.prototype.invoke;
// ********** Code for top level **************
function _otherOperator(jsname, op) {
return ("function " + jsname + "(x, y) {\n return (typeof(x) == 'number' && typeof(y) == 'number')\n ? x " + op + " y : x." + jsname + "(y);\n}");
@@ -14699,38 +14179,38 @@ function map(source, mapper) {
result.set$length(list.get$length());
for (var i = (0);
i < list.get$length(); i++) {
- result.$setindex(i, mapper.call$1(list[i]));
+ result.$setindex(i, mapper(list.$index(i)));
}
}
else {
- for (var $$i = source.iterator$0(); $$i.hasNext$0(); ) {
- var item = $$i.next$0();
- result.add(mapper.call$1(item));
+ for (var $$i = source.iterator(); $$i.hasNext(); ) {
+ var item = $$i.next();
+ result.add(mapper(item));
}
}
return result;
}
function reduce(source, callback, initialValue) {
- var i = source.iterator$0();
+ var i = source.iterator();
var current = initialValue;
- if (current == null && i.hasNext$0()) {
- current = i.next$0();
+ if ($eq(current) && i.hasNext()) {
+ current = i.next();
}
- while (i.hasNext$0()) {
- current = callback.call$2(current, i.next$0());
+ while (i.hasNext()) {
+ current = callback.call$2(current, i.next());
}
return current;
}
function orderValuesByKeys(map) {
var keys = map.getKeys();
keys.sort((function (x, y) {
- return x.compareTo$1(y);
+ return x.compareTo(y);
})
);
var values = [];
- for (var $$i = 0;$$i < keys.get$length(); $$i++) {
- var k = keys[$$i];
- values.add$1(map.$index(k));
+ for (var $$i = keys.iterator(); $$i.hasNext(); ) {
+ var k = $$i.next();
+ values.add(map.$index(k));
}
return values;
}
@@ -14754,12 +14234,12 @@ function _getCallStubName(name, args) {
var nameBuilder = new StringBufferImpl(("" + name + "$" + args.get$bareCount()));
for (var i = args.get$bareCount();
i < args.get$length(); i++) {
- var name0 = args.getName(i);
- nameBuilder.add$1("$");
- if (name0.contains$1("$")) {
- nameBuilder.add$1(("" + name0.get$length()));
+ var argName = args.getName(i);
+ nameBuilder.add("$");
+ if (argName.contains$1("$")) {
+ nameBuilder.add(("" + argName.get$length()));
}
- nameBuilder.add$1(name0);
+ nameBuilder.add(argName);
}
return nameBuilder.toString$0();
}
@@ -14770,11 +14250,11 @@ function main() {
var argv = [];
for (var i = (0);
i < get$process().get$argv().get$length(); i++) {
- argv.add$1(get$process().get$argv()[i]);
+ argv.add(get$process().get$argv()[i]);
if (i == (1)) {
var terminal = get$process().get$env().$index("TERM");
- if (terminal == null || !terminal.startsWith$1("xterm")) {
- argv.add$1("--no_colors");
+ if ($eq(terminal) || !terminal.startsWith("xterm")) {
+ argv.add("--no_colors");
}
}
}
@@ -14798,19 +14278,6 @@ function main() {
get$process().exit((1));
}
}
-// ********** Generic Type Inheritance **************
-/** Implements extends for generic types. */
-function $inheritsMembers(child, parent) {
- child = child.prototype;
- parent = parent.prototype;
- Object.getOwnPropertyNames(parent).forEach(function(name) {
- if (typeof(child[name]) == 'undefined') child[name] = parent[name];
- });
-}
-$inheritsMembers(_DoubleLinkedQueueEntrySentinel_E, DoubleLinkedQueueEntry_E);
-$inheritsMembers(_DoubleLinkedQueueEntrySentinel_KeyValuePair_K$V, DoubleLinkedQueueEntry_KeyValuePair_K$V);
-$inheritsMembers(_SharedBackingMap_K$V, HashMapImplementation_K$V);
-$inheritsMembers(_SharedBackingMap_dart_core_String$VariableValue, HashMapImplementation_dart_core_String$VariableValue);
// 1 dynamic types.
// 1 types
// 0 !leaf
@@ -14821,11 +14288,11 @@ function $static_init(){
$globals._NO_COLOR = "\x1b[0m";
$globals._RED_COLOR = "\x1b[31m";
}
-var const$0000 = Object.create(EmptyQueueException.prototype, {});
-var const$0001 = Object.create(_DeletedKeySentinel.prototype, {});
-var const$0005 = Object.create(NoMoreElementsException.prototype, {});
-var const$0007 = Object.create(IllegalAccessException.prototype, {});
-var const$0008 = ImmutableList.ImmutableList$from$factory([]);
+var const$0000 = Object.create(_DeletedKeySentinel.prototype, {});
+var const$0001 = Object.create(NoMoreElementsException.prototype, {});
+var const$0002 = Object.create(EmptyQueueException.prototype, {});
+var const$0006 = Object.create(IllegalAccessException.prototype, {});
+var const$0007 = ImmutableList.ImmutableList$from$factory([]);
var $globals = {};
$static_init();
main();
« frog/gen.dart ('K') | « frog/method_data.dart ('k') | frog/parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698