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

Side by Side Diff: frog/frogsh

Issue 8572044: Clean and create output directory when generating docs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Git rid of need for grid-22.png. Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env node 1 #!/usr/bin/env node
2 // ********** Library dart:core ************** 2 // ********** Library dart:core **************
3 // ********** Natives dart:core ************** 3 // ********** Natives dart:core **************
4 /** 4 /**
5 * Generates a dynamic call stub for a function. 5 * Generates a dynamic call stub for a function.
6 * Our goal is to create a stub method like this on-the-fly: 6 * Our goal is to create a stub method like this on-the-fly:
7 * function($0, $1, capture) { this($0, $1, true, capture); } 7 * function($0, $1, capture) { this($0, $1, true, capture); }
8 * 8 *
9 * This stub then replaces the dynamic one on Function, with one that is 9 * This stub then replaces the dynamic one on Function, with one that is
10 * specialized for that particular function, taking into account its default 10 * specialized for that particular function, taking into account its default
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 if (e.message.indexOf('call stack') >= 0) { 101 if (e.message.indexOf('call stack') >= 0) {
102 res = new StackOverflowException(); 102 res = new StackOverflowException();
103 } 103 }
104 } 104 }
105 // TODO(jmesserly): setting the stack property is not a long term solution. 105 // TODO(jmesserly): setting the stack property is not a long term solution.
106 // Also it causes the exception to print as if it were a TypeError or 106 // Also it causes the exception to print as if it were a TypeError or
107 // RangeError, instead of using the proper toString. 107 // RangeError, instead of using the proper toString.
108 res.stack = e.stack; 108 res.stack = e.stack;
109 return res; 109 return res;
110 } 110 }
111 function $notnull_bool(test) {
112 return (test === true || test === false) ? test : test.is$bool(); // TypeError
113 }
114 function $assert(test, text, url, line, column) {
115 if (typeof test == 'function') test = test();
116 if (!test) $throw(new AssertError(text, url, line, column));
117 }
118 function $throw(e) { 111 function $throw(e) {
119 // If e is not a value, we can use V8's captureStackTrace utility method. 112 // If e is not a value, we can use V8's captureStackTrace utility method.
120 // TODO(jmesserly): capture the stack trace on other JS engines. 113 // TODO(jmesserly): capture the stack trace on other JS engines.
121 if (e && (typeof e == 'object') && Error.captureStackTrace) { 114 if (e && (typeof e == 'object') && Error.captureStackTrace) {
122 // TODO(jmesserly): this will clobber the e.stack property 115 // TODO(jmesserly): this will clobber the e.stack property
123 Error.captureStackTrace(e, $throw); 116 Error.captureStackTrace(e, $throw);
124 } 117 }
125 throw e; 118 throw e;
126 } 119 }
127 function $map(items) { 120 function $map(items) {
128 var ret = new HashMapImplementation(); 121 var ret = new HashMapImplementation();
129 for (var i=0; i < items.length;) { 122 for (var i=0; i < items.length;) {
130 ret.$setindex(items[i++], items[i++]); 123 ret.$setindex(items[i++], items[i++]);
131 } 124 }
132 return ret; 125 return ret;
133 } 126 }
134 Object.prototype.$index = function(i) { return this[i]; } 127 Object.prototype.$index = function(i) { return this[i]; }
135 Array.prototype.$index = function(i) { return this[i]; } 128 Array.prototype.$index = function(i) { return this[i]; }
136 String.prototype.$index = function(i) { return this[i]; } 129 String.prototype.$index = function(i) { return this[i]; }
137 Object.prototype.$setindex = function(i, value) { return this[i] = value; } 130 Object.prototype.$setindex = function(i, value) { return this[i] = value; }
138 Array.prototype.$setindex = function(i, value) { return this[i] = value; } 131 Array.prototype.$setindex = function(i, value) { return this[i] = value; }
139 function $add(x, y) {
140 return ((typeof(x) == 'number' && typeof(y) == 'number') ||
141 (typeof(x) == 'string' && typeof(y) == 'string'))
142 ? x + y : x.$add(y);
143 }
144 function $eq(x, y) { 132 function $eq(x, y) {
145 if (x == null) return y == null; 133 if (x == null) return y == null;
146 return (typeof(x) == 'number' && typeof(y) == 'number') || 134 return (typeof(x) == 'number' && typeof(y) == 'number') ||
147 (typeof(x) == 'boolean' && typeof(y) == 'boolean') || 135 (typeof(x) == 'boolean' && typeof(y) == 'boolean') ||
148 (typeof(x) == 'string' && typeof(y) == 'string') 136 (typeof(x) == 'string' && typeof(y) == 'string')
149 ? x == y : x.$eq(y); 137 ? x == y : x.$eq(y);
150 } 138 }
151 // TODO(jimhug): Should this or should it not match equals? 139 // TODO(jimhug): Should this or should it not match equals?
152 Object.prototype.$eq = function(other) { return this === other; } 140 Object.prototype.$eq = function(other) { return this === other; }
153 function $mod(x, y) { 141 function $mod(x, y) {
(...skipping 30 matching lines...) Expand all
184 } 172 }
185 } 173 }
186 // ********** Code for Clock ************** 174 // ********** Code for Clock **************
187 function Clock() {} 175 function Clock() {}
188 Clock.now = function() { 176 Clock.now = function() {
189 return new Date().getTime(); 177 return new Date().getTime();
190 } 178 }
191 Clock.frequency = function() { 179 Clock.frequency = function() {
192 return 1000; 180 return 1000;
193 } 181 }
194 // ********** Code for AssertError **************
195 function AssertError(failedAssertion, url, line, column) {
196 this.failedAssertion = failedAssertion;
197 this.url = url;
198 this.line = line;
199 this.column = column;
200 // Initializers done
201 }
202 AssertError.prototype.toString = function() {
203 return ("Failed assertion: '" + this.failedAssertion + "' is not true ") + ("i n " + this.url + " at line " + this.line + ", column " + this.column + ".");
204 }
205 AssertError.prototype.toString$0 = function() {
206 return this.toString();
207 };
208 // ********** Code for Object ************** 182 // ********** Code for Object **************
209 Object.prototype.get$dynamic = function() { 183 Object.prototype.get$dynamic = function() {
210 return this; 184 return this;
211 } 185 }
212 Object.prototype.noSuchMethod = function(name, args) { 186 Object.prototype.noSuchMethod = function(name, args) {
213 $throw(new NoSuchMethodException(this, name, args)); 187 $throw(new NoSuchMethodException(this, name, args));
214 } 188 }
215 Object.prototype._get$3 = function($0, $1, $2) { 189 Object.prototype._get$3 = function($0, $1, $2) {
216 return this.noSuchMethod("_get", [$0, $1, $2]); 190 return this.noSuchMethod("_get", [$0, $1, $2]);
217 }; 191 };
(...skipping 11 matching lines...) Expand all
229 }; 203 };
230 Object.prototype.addDirectSubtype$1 = function($0) { 204 Object.prototype.addDirectSubtype$1 = function($0) {
231 return this.noSuchMethod("addDirectSubtype", [$0]); 205 return this.noSuchMethod("addDirectSubtype", [$0]);
232 }; 206 };
233 Object.prototype.addMethod$2 = function($0, $1) { 207 Object.prototype.addMethod$2 = function($0, $1) {
234 return this.noSuchMethod("addMethod", [$0, $1]); 208 return this.noSuchMethod("addMethod", [$0, $1]);
235 }; 209 };
236 Object.prototype.addSource$1 = function($0) { 210 Object.prototype.addSource$1 = function($0) {
237 return this.noSuchMethod("addSource", [$0]); 211 return this.noSuchMethod("addSource", [$0]);
238 }; 212 };
239 Object.prototype.appendByteStringToken$2 = function($0, $1) {
240 return this.noSuchMethod("appendByteStringToken", [$0, $1]);
241 };
242 Object.prototype.beginArguments$1 = function($0) { 213 Object.prototype.beginArguments$1 = function($0) {
243 return this.noSuchMethod("beginArguments", [$0]); 214 return this.noSuchMethod("beginArguments", [$0]);
244 }; 215 };
245 Object.prototype.beginBlock$1 = function($0) { 216 Object.prototype.beginBlock$1 = function($0) {
246 return this.noSuchMethod("beginBlock", [$0]); 217 return this.noSuchMethod("beginBlock", [$0]);
247 }; 218 };
248 Object.prototype.beginClass$1 = function($0) { 219 Object.prototype.beginClass$1 = function($0) {
249 return this.noSuchMethod("beginClass", [$0]); 220 return this.noSuchMethod("beginClass", [$0]);
250 }; 221 };
251 Object.prototype.beginExpressionStatement$1 = function($0) { 222 Object.prototype.beginExpressionStatement$1 = function($0) {
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 }; 632 };
662 Object.prototype.visitPostfixExpression$1 = function($0) { 633 Object.prototype.visitPostfixExpression$1 = function($0) {
663 return this.noSuchMethod("visitPostfixExpression", [$0]); 634 return this.noSuchMethod("visitPostfixExpression", [$0]);
664 }; 635 };
665 Object.prototype.visitSources$0 = function() { 636 Object.prototype.visitSources$0 = function() {
666 return this.noSuchMethod("visitSources", []); 637 return this.noSuchMethod("visitSources", []);
667 }; 638 };
668 Object.prototype.writeDefinition$2 = function($0, $1) { 639 Object.prototype.writeDefinition$2 = function($0, $1) {
669 return this.noSuchMethod("writeDefinition", [$0, $1]); 640 return this.noSuchMethod("writeDefinition", [$0, $1]);
670 }; 641 };
671 function $assert_bool(x) {
672 if (x == null || typeof(x) == "boolean") return x;
673 throw new TypeError("'" + x + "' is not a bool.");
674 }
675 // ********** Code for IllegalAccessException ************** 642 // ********** Code for IllegalAccessException **************
676 function IllegalAccessException() { 643 function IllegalAccessException() {
677 // Initializers done 644 // Initializers done
678 } 645 }
679 IllegalAccessException.prototype.toString = function() { 646 IllegalAccessException.prototype.toString = function() {
680 return "Attempt to modify an immutable object"; 647 return "Attempt to modify an immutable object";
681 } 648 }
682 IllegalAccessException.prototype.toString$0 = function() { 649 IllegalAccessException.prototype.toString$0 = function() {
683 return this.toString(); 650 return this.toString();
684 }; 651 };
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 } 781 }
815 Math.min = function(a, b) { 782 Math.min = function(a, b) {
816 if (a == b) return a; 783 if (a == b) return a;
817 if (a < b) { 784 if (a < b) {
818 if (isNaN(b)) return b; 785 if (isNaN(b)) return b;
819 else return a; 786 else return a;
820 } 787 }
821 if (isNaN(a)) return a; 788 if (isNaN(a)) return a;
822 else return b; 789 else return b;
823 } 790 }
824 function $assert_num(x) {
825 if (x == null || typeof(x) == "number") return x;
826 throw new TypeError("'" + x + "' is not a num.");
827 }
828 function $assert_String(x) {
829 if (x == null || typeof(x) == "string") return x;
830 throw new TypeError("'" + x + "' is not a String.");
831 }
832 // ********** Code for Strings ************** 791 // ********** Code for Strings **************
833 function Strings() {} 792 function Strings() {}
834 Strings.String$fromCharCodes$factory = function(charCodes) { 793 Strings.String$fromCharCodes$factory = function(charCodes) {
835 return StringBase.createFromCharCodes(charCodes); 794 return StringBase.createFromCharCodes(charCodes);
836 } 795 }
837 Strings.join = function(strings, separator) { 796 Strings.join = function(strings, separator) {
838 return StringBase.join(strings, separator); 797 return StringBase.join(strings, separator);
839 } 798 }
840 // ********** Code for top level ************** 799 // ********** Code for top level **************
841 function print(obj) { 800 function print(obj) {
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 return _IsolateJsUtil._deserializeMessage(message_); 1295 return _IsolateJsUtil._deserializeMessage(message_);
1337 } else { 1296 } else {
1338 // Nothing more to do. 1297 // Nothing more to do.
1339 return message_; 1298 return message_;
1340 } 1299 }
1341 } 1300 }
1342 1301
1343 function _IsolateJsUtil() {} 1302 function _IsolateJsUtil() {}
1344 // ********** Code for ListFactory ************** 1303 // ********** Code for ListFactory **************
1345 ListFactory = Array; 1304 ListFactory = Array;
1346 ListFactory.prototype.is$ListFactory = function(){return this;};
1347 ListFactory.prototype.is$List = function(){return this;}; 1305 ListFactory.prototype.is$List = function(){return this;};
1348 ListFactory.prototype.is$List$ArgumentNode = function(){return this;};
1349 ListFactory.prototype.is$List$Definition = function(){return this;};
1350 ListFactory.prototype.is$List$EvaluatedValue = function(){return this;};
1351 ListFactory.prototype.is$List$String = function(){return this;};
1352 ListFactory.prototype.is$List$Type = function(){return this;};
1353 ListFactory.prototype.is$List$Value = function(){return this;};
1354 ListFactory.prototype.is$List$int = function(){return this;};
1355 ListFactory.prototype.is$Collection$E = function(){return this;};
1356 ListFactory.prototype.is$Collection$Object = function(){return this;};
1357 ListFactory.prototype.is$Collection$Type = function(){return this;};
1358 ListFactory.prototype.is$Iterable = function(){return this;};
1359 ListFactory.ListFactory$from$factory = function(other) { 1306 ListFactory.ListFactory$from$factory = function(other) {
1360 var list = []; 1307 var list = [];
1361 for (var $i = other.iterator(); $i.hasNext$0(); ) { 1308 for (var $i = other.iterator(); $i.hasNext$0(); ) {
1362 var e = $i.next$0(); 1309 var e = $i.next$0();
1363 list.add(e); 1310 list.add(e);
1364 } 1311 }
1365 return (list && list.is$ListFactory()); 1312 return list;
1366 } 1313 }
1367 ListFactory.prototype.add = function(value) { 1314 ListFactory.prototype.add = function(value) {
1368 this.push(value); 1315 this.push(value);
1369 } 1316 }
1370 ListFactory.prototype.addLast = function(value) { 1317 ListFactory.prototype.addLast = function(value) {
1371 this.push(value); 1318 this.push(value);
1372 } 1319 }
1373 ListFactory.prototype.addAll = function(collection) { 1320 ListFactory.prototype.addAll = function(collection) {
1374 for (var $i = collection.iterator(); $i.hasNext$0(); ) { 1321 for (var $i = collection.iterator(); $i.hasNext$0(); ) {
1375 var item = $i.next$0(); 1322 var item = $i.next$0();
(...skipping 11 matching lines...) Expand all
1387 } 1334 }
1388 ListFactory.prototype.getRange = function(start, length) { 1335 ListFactory.prototype.getRange = function(start, length) {
1389 return this.slice(start, start + length); 1336 return this.slice(start, start + length);
1390 } 1337 }
1391 ListFactory.prototype.isEmpty = function() { 1338 ListFactory.prototype.isEmpty = function() {
1392 return this.length == 0; 1339 return this.length == 0;
1393 } 1340 }
1394 ListFactory.prototype.iterator = function() { 1341 ListFactory.prototype.iterator = function() {
1395 return new ListIterator(this); 1342 return new ListIterator(this);
1396 } 1343 }
1397 ListFactory.prototype.add$1 = ListFactory.prototype.add; 1344 ListFactory.prototype.add$1 = function($0) {
1345 return this.add($0);
1346 };
1398 ListFactory.prototype.addAll$1 = function($0) { 1347 ListFactory.prototype.addAll$1 = function($0) {
1399 return this.addAll(($0 && $0.is$Collection$E())); 1348 return this.addAll($0);
1400 }; 1349 };
1401 ListFactory.prototype.filter$1 = ListFactory.prototype.filter; 1350 ListFactory.prototype.filter$1 = ListFactory.prototype.filter;
1402 ListFactory.prototype.indexOf$2 = ListFactory.prototype.indexOf; 1351 ListFactory.prototype.indexOf$2 = function($0, $1) {
1352 return this.indexOf($0, $1);
1353 };
1403 ListFactory.prototype.isEmpty$0 = function() { 1354 ListFactory.prototype.isEmpty$0 = function() {
1404 return this.isEmpty(); 1355 return this.isEmpty();
1405 }; 1356 };
1406 ListFactory.prototype.iterator$0 = function() { 1357 ListFactory.prototype.iterator$0 = function() {
1407 return this.iterator(); 1358 return this.iterator();
1408 }; 1359 };
1409 ListFactory.prototype.last$0 = function() { 1360 ListFactory.prototype.last$0 = function() {
1410 return this.last(); 1361 return this.last();
1411 }; 1362 };
1412 ListFactory.prototype.removeLast$0 = function() { 1363 ListFactory.prototype.removeLast$0 = function() {
1413 return this.removeLast(); 1364 return this.removeLast();
1414 }; 1365 };
1415 ListFactory.prototype.some$1 = ListFactory.prototype.some; 1366 ListFactory.prototype.some$1 = ListFactory.prototype.some;
1416 ListFactory.prototype.sort$1 = ListFactory.prototype.sort; 1367 ListFactory.prototype.sort$1 = ListFactory.prototype.sort;
1417 ListFactory$E = ListFactory; 1368 ListFactory$E = ListFactory;
1418 ListFactory$HBasicBlock = ListFactory; 1369 ListFactory$HBasicBlock = ListFactory;
1419 ListFactory$HInstruction = ListFactory; 1370 ListFactory$HInstruction = ListFactory;
1420 ListFactory$K = ListFactory; 1371 ListFactory$K = ListFactory;
1421 ListFactory$KeywordState = ListFactory; 1372 ListFactory$KeywordState = ListFactory;
1422 ListFactory$String = ListFactory; 1373 ListFactory$String = ListFactory;
1423 ListFactory$T = ListFactory; 1374 ListFactory$T = ListFactory;
1424 ListFactory$V = ListFactory; 1375 ListFactory$V = ListFactory;
1425 // ********** Code for ListIterator ************** 1376 // ********** Code for ListIterator **************
1426 function ListIterator(array) { 1377 function ListIterator(array) {
1427 this._array = array; 1378 this._array = array;
1428 this._pos = 0; 1379 this._pos = 0;
1429 // Initializers done 1380 // Initializers done
1430 } 1381 }
1431 ListIterator.prototype.is$Iterator$T = function(){return this;};
1432 ListIterator.prototype.hasNext = function() { 1382 ListIterator.prototype.hasNext = function() {
1433 return this._array.length > this._pos; 1383 return this._array.length > this._pos;
1434 } 1384 }
1435 ListIterator.prototype.next = function() { 1385 ListIterator.prototype.next = function() {
1436 if (!this.hasNext()) { 1386 if (!this.hasNext()) {
1437 $throw(const$0/*const NoMoreElementsException()*/); 1387 $throw(const$0/*const NoMoreElementsException()*/);
1438 } 1388 }
1439 return this._array.$index(this._pos++); 1389 return this._array.$index(this._pos++);
1440 } 1390 }
1441 ListIterator.prototype.hasNext$0 = function() { 1391 ListIterator.prototype.hasNext$0 = function() {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 } 1453 }
1504 ImmutableList.prototype.addAll = function(elements) { 1454 ImmutableList.prototype.addAll = function(elements) {
1505 $throw(const$12/*const IllegalAccessException()*/); 1455 $throw(const$12/*const IllegalAccessException()*/);
1506 } 1456 }
1507 ImmutableList.prototype.clear = function() { 1457 ImmutableList.prototype.clear = function() {
1508 $throw(const$12/*const IllegalAccessException()*/); 1458 $throw(const$12/*const IllegalAccessException()*/);
1509 } 1459 }
1510 ImmutableList.prototype.removeLast = function() { 1460 ImmutableList.prototype.removeLast = function() {
1511 $throw(const$12/*const IllegalAccessException()*/); 1461 $throw(const$12/*const IllegalAccessException()*/);
1512 } 1462 }
1513 ImmutableList.prototype.add$1 = ImmutableList.prototype.add; 1463 ImmutableList.prototype.add$1 = function($0) {
1464 return this.add($0);
1465 };
1514 ImmutableList.prototype.addAll$1 = function($0) { 1466 ImmutableList.prototype.addAll$1 = function($0) {
1515 return this.addAll(($0 && $0.is$Collection$E())); 1467 return this.addAll($0);
1516 }; 1468 };
1517 ImmutableList.prototype.removeLast$0 = function() { 1469 ImmutableList.prototype.removeLast$0 = function() {
1518 return this.removeLast(); 1470 return this.removeLast();
1519 }; 1471 };
1520 ImmutableList.prototype.sort$1 = ImmutableList.prototype.sort; 1472 ImmutableList.prototype.sort$1 = ImmutableList.prototype.sort;
1521 // ********** Code for ImmutableMap ************** 1473 // ********** Code for ImmutableMap **************
1522 function ImmutableMap(keyValuePairs) { 1474 function ImmutableMap(keyValuePairs) {
1523 this._internal = $map([]); 1475 this._internal = $map([]);
1524 // Initializers done 1476 // Initializers done
1525 for (var i = 0; 1477 for (var i = 0;
1526 i < keyValuePairs.length; i += 2) { 1478 i < keyValuePairs.length; i += 2) {
1527 this._internal.$setindex(keyValuePairs.$index(i), keyValuePairs.$index(i + 1 )); 1479 this._internal.$setindex(keyValuePairs.$index(i), keyValuePairs.$index(i + 1 ));
1528 } 1480 }
1529 } 1481 }
1530 ImmutableMap.prototype.is$Map$Node$Element = function(){return this;};
1531 ImmutableMap.prototype.is$Map$String$Member = function(){return this;};
1532 ImmutableMap.prototype.$index = function(key) { 1482 ImmutableMap.prototype.$index = function(key) {
1533 return this._internal.$index(key); 1483 return this._internal.$index(key);
1534 } 1484 }
1535 ImmutableMap.prototype.isEmpty = function() { 1485 ImmutableMap.prototype.isEmpty = function() {
1536 return this._internal.isEmpty(); 1486 return this._internal.isEmpty();
1537 } 1487 }
1538 ImmutableMap.prototype.get$length = function() { 1488 ImmutableMap.prototype.get$length = function() {
1539 return this._internal.get$length(); 1489 return this._internal.get$length();
1540 } 1490 }
1541 Object.defineProperty(ImmutableMap.prototype, "length", { 1491 Object.defineProperty(ImmutableMap.prototype, "length", {
(...skipping 23 matching lines...) Expand all
1565 // ********** Code for MatchImplementation ************** 1515 // ********** Code for MatchImplementation **************
1566 function MatchImplementation(pattern, str, _start, _end, _groups) { 1516 function MatchImplementation(pattern, str, _start, _end, _groups) {
1567 this.pattern = pattern; 1517 this.pattern = pattern;
1568 this.str = str; 1518 this.str = str;
1569 this._start = _start; 1519 this._start = _start;
1570 this._end = _end; 1520 this._end = _end;
1571 this._groups = _groups; 1521 this._groups = _groups;
1572 // Initializers done 1522 // Initializers done
1573 } 1523 }
1574 MatchImplementation.prototype.$index = function(group) { 1524 MatchImplementation.prototype.$index = function(group) {
1575 return $assert_String(this._groups.$index(group)); 1525 return this._groups.$index(group);
1576 } 1526 }
1577 // ********** Code for NumImplementation ************** 1527 // ********** Code for NumImplementation **************
1578 NumImplementation = Number; 1528 NumImplementation = Number;
1579 NumImplementation.prototype.is$NumImplementation = function(){return this;};
1580 NumImplementation.prototype.is$Comparable = function(){return this;};
1581 NumImplementation.prototype.isNaN = function() { 1529 NumImplementation.prototype.isNaN = function() {
1582 return isNaN(this); 1530 return isNaN(this);
1583 } 1531 }
1584 NumImplementation.prototype.isNegative = function() { 1532 NumImplementation.prototype.isNegative = function() {
1585 return this == 0 ? (1 / this) < 0 : this < 0; 1533 return this == 0 ? (1 / this) < 0 : this < 0;
1586 } 1534 }
1587 NumImplementation.prototype.hashCode = function() { 1535 NumImplementation.prototype.hashCode = function() {
1588 return this & 0xFFFFFFF; 1536 return this & 0xFFFFFFF;
1589 } 1537 }
1590 NumImplementation.prototype.toInt = function() { 1538 NumImplementation.prototype.toInt = function() {
(...skipping 15 matching lines...) Expand all
1606 return -1; 1554 return -1;
1607 } 1555 }
1608 else if (thisValue > other) { 1556 else if (thisValue > other) {
1609 return 1; 1557 return 1;
1610 } 1558 }
1611 else if (thisValue == other) { 1559 else if (thisValue == other) {
1612 if (thisValue == 0) { 1560 if (thisValue == 0) {
1613 var thisIsNegative = this.isNegative(); 1561 var thisIsNegative = this.isNegative();
1614 var otherIsNegative = other.isNegative(); 1562 var otherIsNegative = other.isNegative();
1615 if ($eq(thisIsNegative, otherIsNegative)) return 0; 1563 if ($eq(thisIsNegative, otherIsNegative)) return 0;
1616 if ($notnull_bool(thisIsNegative)) return -1; 1564 if (thisIsNegative) return -1;
1617 return 1; 1565 return 1;
1618 } 1566 }
1619 return 0; 1567 return 0;
1620 } 1568 }
1621 else if (this.isNaN()) { 1569 else if (this.isNaN()) {
1622 if (other.isNaN()) { 1570 if (other.isNaN()) {
1623 return 0; 1571 return 0;
1624 } 1572 }
1625 return 1; 1573 return 1;
1626 } 1574 }
1627 else { 1575 else {
1628 return -1; 1576 return -1;
1629 } 1577 }
1630 } 1578 }
1631 NumImplementation.prototype.compareTo$1 = function($0) { 1579 NumImplementation.prototype.compareTo$1 = function($0) {
1632 return this.compareTo(($0 && $0.is$NumImplementation())); 1580 return this.compareTo($0);
1633 }; 1581 };
1634 NumImplementation.prototype.hashCode$0 = function() { 1582 NumImplementation.prototype.hashCode$0 = function() {
1635 return this.hashCode(); 1583 return this.hashCode();
1636 }; 1584 };
1637 // ********** Code for ExceptionImplementation ************** 1585 // ********** Code for ExceptionImplementation **************
1638 function ExceptionImplementation(_msg) { 1586 function ExceptionImplementation(_msg) {
1639 this._msg = _msg; 1587 this._msg = _msg;
1640 // Initializers done 1588 // Initializers done
1641 } 1589 }
1642 ExceptionImplementation.prototype.toString = function() { 1590 ExceptionImplementation.prototype.toString = function() {
1643 return (this._msg == null) ? "Exception" : ("Exception: " + this._msg + ""); 1591 return (this._msg == null) ? "Exception" : ("Exception: " + this._msg + "");
1644 } 1592 }
1645 ExceptionImplementation.prototype.toString$0 = function() { 1593 ExceptionImplementation.prototype.toString$0 = function() {
1646 return this.toString(); 1594 return this.toString();
1647 }; 1595 };
1648 // ********** Code for HashMapImplementation ************** 1596 // ********** Code for HashMapImplementation **************
1649 function HashMapImplementation() { 1597 function HashMapImplementation() {
1650 // Initializers done 1598 // Initializers done
1651 if (HashMapImplementation._deletedKey == null) { 1599 if (HashMapImplementation._deletedKey == null) {
1652 HashMapImplementation._deletedKey = new Object(); 1600 HashMapImplementation._deletedKey = new Object();
1653 } 1601 }
1654 this._numberOfEntries = 0; 1602 this._numberOfEntries = 0;
1655 this._numberOfDeleted = 0; 1603 this._numberOfDeleted = 0;
1656 this._loadLimit = HashMapImplementation._computeLoadLimit(8/*HashMapImplementa tion._INITIAL_CAPACITY*/); 1604 this._loadLimit = HashMapImplementation._computeLoadLimit(8/*HashMapImplementa tion._INITIAL_CAPACITY*/);
1657 this._keys = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/); 1605 this._keys = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/);
1658 this._values = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/); 1606 this._values = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/);
1659 } 1607 }
1660 HashMapImplementation.prototype.is$HashMapImplementation = function(){return thi s;};
1661 HashMapImplementation.prototype.is$Map$Node$Element = function(){return this;};
1662 HashMapImplementation.prototype.is$Map$String$Member = function(){return this;};
1663 HashMapImplementation.HashMapImplementation$from$factory = function(other) { 1608 HashMapImplementation.HashMapImplementation$from$factory = function(other) {
1664 var result = new HashMapImplementation(); 1609 var result = new HashMapImplementation();
1665 other.forEach((function (key, value) { 1610 other.forEach((function (key, value) {
1666 result.$setindex(key, value); 1611 result.$setindex(key, value);
1667 }) 1612 })
1668 ); 1613 );
1669 return (result && result.is$HashMapImplementation()); 1614 return result;
1670 } 1615 }
1671 HashMapImplementation._computeLoadLimit = function(capacity) { 1616 HashMapImplementation._computeLoadLimit = function(capacity) {
1672 return $truncdiv((capacity * 3), 4); 1617 return $truncdiv((capacity * 3), 4);
1673 } 1618 }
1674 HashMapImplementation._firstProbe = function(hashCode, length) { 1619 HashMapImplementation._firstProbe = function(hashCode, length) {
1675 return hashCode & (length - 1); 1620 return hashCode & (length - 1);
1676 } 1621 }
1677 HashMapImplementation._nextProbe = function(currentProbe, numberOfProbes, length ) { 1622 HashMapImplementation._nextProbe = function(currentProbe, numberOfProbes, length ) {
1678 return (currentProbe + numberOfProbes) & (length - 1); 1623 return (currentProbe + numberOfProbes) & (length - 1);
1679 } 1624 }
1680 HashMapImplementation.prototype._probeForAdding = function(key) { 1625 HashMapImplementation.prototype._probeForAdding = function(key) {
1681 var hash = HashMapImplementation._firstProbe($assert_num(key.hashCode$0()), th is._keys.length); 1626 var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.leng th);
1682 var numberOfProbes = 1; 1627 var numberOfProbes = 1;
1683 var initialHash = hash; 1628 var initialHash = hash;
1684 var insertionIndex = -1; 1629 var insertionIndex = -1;
1685 while (true) { 1630 while (true) {
1686 var existingKey = this._keys.$index(hash); 1631 var existingKey = this._keys.$index(hash);
1687 if (existingKey == null) { 1632 if (existingKey == null) {
1688 if (insertionIndex < 0) return hash; 1633 if (insertionIndex < 0) return hash;
1689 return insertionIndex; 1634 return insertionIndex;
1690 } 1635 }
1691 else if ($notnull_bool($eq(existingKey, key))) { 1636 else if ($eq(existingKey, key)) {
1692 return hash; 1637 return hash;
1693 } 1638 }
1694 else if ((insertionIndex < 0) && (HashMapImplementation._deletedKey === exis tingKey)) { 1639 else if ((insertionIndex < 0) && (HashMapImplementation._deletedKey === exis tingKey)) {
1695 insertionIndex = hash; 1640 insertionIndex = hash;
1696 } 1641 }
1697 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength); 1642 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength);
1698 } 1643 }
1699 } 1644 }
1700 HashMapImplementation.prototype._probeForLookup = function(key) { 1645 HashMapImplementation.prototype._probeForLookup = function(key) {
1701 var hash = HashMapImplementation._firstProbe($assert_num(key.hashCode$0()), th is._keys.length); 1646 var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.leng th);
1702 var numberOfProbes = 1; 1647 var numberOfProbes = 1;
1703 var initialHash = hash; 1648 var initialHash = hash;
1704 while (true) { 1649 while (true) {
1705 var existingKey = this._keys.$index(hash); 1650 var existingKey = this._keys.$index(hash);
1706 if (existingKey == null) return -1; 1651 if (existingKey == null) return -1;
1707 if ($notnull_bool($eq(existingKey, key))) return hash; 1652 if ($eq(existingKey, key)) return hash;
1708 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength); 1653 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength);
1709 } 1654 }
1710 } 1655 }
1711 HashMapImplementation.prototype._ensureCapacity = function() { 1656 HashMapImplementation.prototype._ensureCapacity = function() {
1712 var newNumberOfEntries = this._numberOfEntries + 1; 1657 var newNumberOfEntries = this._numberOfEntries + 1;
1713 if (newNumberOfEntries >= this._loadLimit) { 1658 if (newNumberOfEntries >= this._loadLimit) {
1714 this._grow(this._keys.length * 2); 1659 this._grow(this._keys.length * 2);
1715 return; 1660 return;
1716 } 1661 }
1717 var capacity = this._keys.length; 1662 var capacity = this._keys.length;
1718 var numberOfFreeOrDeleted = capacity - newNumberOfEntries; 1663 var numberOfFreeOrDeleted = capacity - newNumberOfEntries;
1719 var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted; 1664 var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted;
1720 if (this._numberOfDeleted > numberOfFree) { 1665 if (this._numberOfDeleted > numberOfFree) {
1721 this._grow(this._keys.length); 1666 this._grow(this._keys.length);
1722 } 1667 }
1723 } 1668 }
1724 HashMapImplementation._isPowerOfTwo = function(x) { 1669 HashMapImplementation._isPowerOfTwo = function(x) {
1725 return ((x & (x - 1)) == 0); 1670 return ((x & (x - 1)) == 0);
1726 } 1671 }
1727 HashMapImplementation.prototype._grow = function(newCapacity) { 1672 HashMapImplementation.prototype._grow = function(newCapacity) {
1728 $assert(HashMapImplementation._isPowerOfTwo(newCapacity), "_isPowerOfTwo(newCa pacity)", "hash_map_set.dart", 153, 12);
1729 var capacity = this._keys.length; 1673 var capacity = this._keys.length;
1730 this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity); 1674 this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity);
1731 var oldKeys = this._keys; 1675 var oldKeys = this._keys;
1732 var oldValues = this._values; 1676 var oldValues = this._values;
1733 this._keys = new ListFactory(newCapacity); 1677 this._keys = new ListFactory(newCapacity);
1734 this._values = new ListFactory(newCapacity); 1678 this._values = new ListFactory(newCapacity);
1735 for (var i = 0; 1679 for (var i = 0;
1736 i < capacity; i++) { 1680 i < capacity; i++) {
1737 var key = oldKeys.$index(i); 1681 var key = oldKeys.$index(i);
1738 if (key == null || key === HashMapImplementation._deletedKey) { 1682 if (key == null || key === HashMapImplementation._deletedKey) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 if (HashMapImplementation._deletedKey == null) { 1766 if (HashMapImplementation._deletedKey == null) {
1823 HashMapImplementation._deletedKey = new Object(); 1767 HashMapImplementation._deletedKey = new Object();
1824 } 1768 }
1825 this._numberOfEntries = 0; 1769 this._numberOfEntries = 0;
1826 this._numberOfDeleted = 0; 1770 this._numberOfDeleted = 0;
1827 this._loadLimit = HashMapImplementation._computeLoadLimit(8/*HashMapImplementa tion._INITIAL_CAPACITY*/); 1771 this._loadLimit = HashMapImplementation._computeLoadLimit(8/*HashMapImplementa tion._INITIAL_CAPACITY*/);
1828 this._keys = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/); 1772 this._keys = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/);
1829 this._values = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/); 1773 this._values = new ListFactory(8/*HashMapImplementation._INITIAL_CAPACITY*/);
1830 } 1774 }
1831 $inherits(HashMapImplementation$E$E, HashMapImplementation); 1775 $inherits(HashMapImplementation$E$E, HashMapImplementation);
1832 HashMapImplementation$E$E.prototype.is$Map$Node$Element = function(){return this ;};
1833 HashMapImplementation$E$E.prototype.is$Map$String$Member = function(){return thi s;};
1834 HashMapImplementation$E$E._computeLoadLimit = function(capacity) { 1776 HashMapImplementation$E$E._computeLoadLimit = function(capacity) {
1835 return $truncdiv((capacity * 3), 4); 1777 return $truncdiv((capacity * 3), 4);
1836 } 1778 }
1837 HashMapImplementation$E$E._firstProbe = function(hashCode, length) { 1779 HashMapImplementation$E$E._firstProbe = function(hashCode, length) {
1838 return hashCode & (length - 1); 1780 return hashCode & (length - 1);
1839 } 1781 }
1840 HashMapImplementation$E$E._nextProbe = function(currentProbe, numberOfProbes, le ngth) { 1782 HashMapImplementation$E$E._nextProbe = function(currentProbe, numberOfProbes, le ngth) {
1841 return (currentProbe + numberOfProbes) & (length - 1); 1783 return (currentProbe + numberOfProbes) & (length - 1);
1842 } 1784 }
1843 HashMapImplementation$E$E.prototype._probeForAdding = function(key) { 1785 HashMapImplementation$E$E.prototype._probeForAdding = function(key) {
1844 var hash = HashMapImplementation._firstProbe($assert_num(key.hashCode$0()), th is._keys.length); 1786 var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.leng th);
1845 var numberOfProbes = 1; 1787 var numberOfProbes = 1;
1846 var initialHash = hash; 1788 var initialHash = hash;
1847 var insertionIndex = -1; 1789 var insertionIndex = -1;
1848 while (true) { 1790 while (true) {
1849 var existingKey = this._keys.$index(hash); 1791 var existingKey = this._keys.$index(hash);
1850 if (existingKey == null) { 1792 if (existingKey == null) {
1851 if (insertionIndex < 0) return hash; 1793 if (insertionIndex < 0) return hash;
1852 return insertionIndex; 1794 return insertionIndex;
1853 } 1795 }
1854 else if ($notnull_bool($eq(existingKey, key))) { 1796 else if ($eq(existingKey, key)) {
1855 return hash; 1797 return hash;
1856 } 1798 }
1857 else if ((insertionIndex < 0) && (HashMapImplementation._deletedKey === exis tingKey)) { 1799 else if ((insertionIndex < 0) && (HashMapImplementation._deletedKey === exis tingKey)) {
1858 insertionIndex = hash; 1800 insertionIndex = hash;
1859 } 1801 }
1860 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength); 1802 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength);
1861 } 1803 }
1862 } 1804 }
1863 HashMapImplementation$E$E.prototype._probeForLookup = function(key) { 1805 HashMapImplementation$E$E.prototype._probeForLookup = function(key) {
1864 var hash = HashMapImplementation._firstProbe($assert_num(key.hashCode$0()), th is._keys.length); 1806 var hash = HashMapImplementation._firstProbe(key.hashCode$0(), this._keys.leng th);
1865 var numberOfProbes = 1; 1807 var numberOfProbes = 1;
1866 var initialHash = hash; 1808 var initialHash = hash;
1867 while (true) { 1809 while (true) {
1868 var existingKey = this._keys.$index(hash); 1810 var existingKey = this._keys.$index(hash);
1869 if (existingKey == null) return -1; 1811 if (existingKey == null) return -1;
1870 if ($notnull_bool($eq(existingKey, key))) return hash; 1812 if ($eq(existingKey, key)) return hash;
1871 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength); 1813 hash = HashMapImplementation._nextProbe(hash, numberOfProbes++, this._keys.l ength);
1872 } 1814 }
1873 } 1815 }
1874 HashMapImplementation$E$E.prototype._ensureCapacity = function() { 1816 HashMapImplementation$E$E.prototype._ensureCapacity = function() {
1875 var newNumberOfEntries = this._numberOfEntries + 1; 1817 var newNumberOfEntries = this._numberOfEntries + 1;
1876 if (newNumberOfEntries >= this._loadLimit) { 1818 if (newNumberOfEntries >= this._loadLimit) {
1877 this._grow(this._keys.length * 2); 1819 this._grow(this._keys.length * 2);
1878 return; 1820 return;
1879 } 1821 }
1880 var capacity = this._keys.length; 1822 var capacity = this._keys.length;
1881 var numberOfFreeOrDeleted = capacity - newNumberOfEntries; 1823 var numberOfFreeOrDeleted = capacity - newNumberOfEntries;
1882 var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted; 1824 var numberOfFree = numberOfFreeOrDeleted - this._numberOfDeleted;
1883 if (this._numberOfDeleted > numberOfFree) { 1825 if (this._numberOfDeleted > numberOfFree) {
1884 this._grow(this._keys.length); 1826 this._grow(this._keys.length);
1885 } 1827 }
1886 } 1828 }
1887 HashMapImplementation$E$E._isPowerOfTwo = function(x) { 1829 HashMapImplementation$E$E._isPowerOfTwo = function(x) {
1888 return ((x & (x - 1)) == 0); 1830 return ((x & (x - 1)) == 0);
1889 } 1831 }
1890 HashMapImplementation$E$E.prototype._grow = function(newCapacity) { 1832 HashMapImplementation$E$E.prototype._grow = function(newCapacity) {
1891 $assert(HashMapImplementation._isPowerOfTwo(newCapacity), "_isPowerOfTwo(newCa pacity)", "hash_map_set.dart", 153, 12);
1892 var capacity = this._keys.length; 1833 var capacity = this._keys.length;
1893 this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity); 1834 this._loadLimit = HashMapImplementation._computeLoadLimit(newCapacity);
1894 var oldKeys = this._keys; 1835 var oldKeys = this._keys;
1895 var oldValues = this._values; 1836 var oldValues = this._values;
1896 this._keys = new ListFactory(newCapacity); 1837 this._keys = new ListFactory(newCapacity);
1897 this._values = new ListFactory(newCapacity); 1838 this._values = new ListFactory(newCapacity);
1898 for (var i = 0; 1839 for (var i = 0;
1899 i < capacity; i++) { 1840 i < capacity; i++) {
1900 var key = oldKeys.$index(i); 1841 var key = oldKeys.$index(i);
1901 if (key == null || key === HashMapImplementation._deletedKey) { 1842 if (key == null || key === HashMapImplementation._deletedKey) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 } 1890 }
1950 ); 1891 );
1951 return list; 1892 return list;
1952 } 1893 }
1953 HashMapImplementation$E$E.prototype.containsKey = function(key) { 1894 HashMapImplementation$E$E.prototype.containsKey = function(key) {
1954 return (this._probeForLookup(key) != -1); 1895 return (this._probeForLookup(key) != -1);
1955 } 1896 }
1956 // ********** Code for HashMapImplementation$Element$HInstruction ************** 1897 // ********** Code for HashMapImplementation$Element$HInstruction **************
1957 function HashMapImplementation$Element$HInstruction() {} 1898 function HashMapImplementation$Element$HInstruction() {}
1958 $inherits(HashMapImplementation$Element$HInstruction, HashMapImplementation); 1899 $inherits(HashMapImplementation$Element$HInstruction, HashMapImplementation);
1959 HashMapImplementation$Element$HInstruction.prototype.is$Map$Node$Element = false ;
1960 HashMapImplementation$Element$HInstruction.prototype.is$Map$String$Member = fals e;
1961 // ********** Code for HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePa ir$K$V ************** 1900 // ********** Code for HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePa ir$K$V **************
1962 function HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V() {} 1901 function HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V() {}
1963 $inherits(HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V, HashM apImplementation); 1902 $inherits(HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V, HashM apImplementation);
1964 HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V.prototype.is$Map $Node$Element = false;
1965 HashMapImplementation$K$DoubleLinkedQueueEntry$KeyValuePair$K$V.prototype.is$Map $String$Member = false;
1966 // ********** Code for HashMapImplementation$String$EvaluatedValue ************* * 1903 // ********** Code for HashMapImplementation$String$EvaluatedValue ************* *
1967 function HashMapImplementation$String$EvaluatedValue() {} 1904 function HashMapImplementation$String$EvaluatedValue() {}
1968 $inherits(HashMapImplementation$String$EvaluatedValue, HashMapImplementation); 1905 $inherits(HashMapImplementation$String$EvaluatedValue, HashMapImplementation);
1969 HashMapImplementation$String$EvaluatedValue.prototype.is$Map$Node$Element = fals e;
1970 HashMapImplementation$String$EvaluatedValue.prototype.is$Map$String$Member = fal se;
1971 // ********** Code for HashSetImplementation ************** 1906 // ********** Code for HashSetImplementation **************
1972 function HashSetImplementation() { 1907 function HashSetImplementation() {
1973 // Initializers done 1908 // Initializers done
1974 this._backingMap = new HashMapImplementation$E$E(); 1909 this._backingMap = new HashMapImplementation$E$E();
1975 } 1910 }
1976 HashSetImplementation.prototype.is$HashSetImplementation = function(){return thi s;};
1977 HashSetImplementation.prototype.is$Collection$E = function(){return this;};
1978 HashSetImplementation.prototype.is$Collection$Object = function(){return this;};
1979 HashSetImplementation.prototype.is$Collection$Type = function(){return this;};
1980 HashSetImplementation.prototype.is$Iterable = function(){return this;};
1981 HashSetImplementation.HashSetImplementation$from$factory = function(other) { 1911 HashSetImplementation.HashSetImplementation$from$factory = function(other) {
1982 var set = new HashSetImplementation(); 1912 var set = new HashSetImplementation();
1983 for (var $i = other.iterator(); $i.hasNext$0(); ) { 1913 for (var $i = other.iterator(); $i.hasNext$0(); ) {
1984 var e = $i.next$0(); 1914 var e = $i.next$0();
1985 set.add(e); 1915 set.add(e);
1986 } 1916 }
1987 return (set && set.is$HashSetImplementation()); 1917 return set;
1988 } 1918 }
1989 HashSetImplementation.prototype.add = function(value) { 1919 HashSetImplementation.prototype.add = function(value) {
1990 this._backingMap.$setindex(value, value); 1920 this._backingMap.$setindex(value, value);
1991 } 1921 }
1992 HashSetImplementation.prototype.contains = function(value) { 1922 HashSetImplementation.prototype.contains = function(value) {
1993 return this._backingMap.containsKey(value); 1923 return this._backingMap.containsKey(value);
1994 } 1924 }
1995 HashSetImplementation.prototype.remove = function(value) { 1925 HashSetImplementation.prototype.remove = function(value) {
1996 if (!this._backingMap.containsKey(value)) return false; 1926 if (!this._backingMap.containsKey(value)) return false;
1997 this._backingMap.remove(value); 1927 this._backingMap.remove(value);
(...skipping 15 matching lines...) Expand all
2013 HashSetImplementation.prototype.filter = function(f) { 1943 HashSetImplementation.prototype.filter = function(f) {
2014 var result = new HashSetImplementation(); 1944 var result = new HashSetImplementation();
2015 this._backingMap.forEach(function _(key, value) { 1945 this._backingMap.forEach(function _(key, value) {
2016 if (f(key)) result.add(key); 1946 if (f(key)) result.add(key);
2017 } 1947 }
2018 ); 1948 );
2019 return result; 1949 return result;
2020 } 1950 }
2021 HashSetImplementation.prototype.some = function(f) { 1951 HashSetImplementation.prototype.some = function(f) {
2022 var keys = this._backingMap.getKeys(); 1952 var keys = this._backingMap.getKeys();
2023 return $assert_bool(keys.some(f)); 1953 return keys.some(f);
2024 } 1954 }
2025 HashSetImplementation.prototype.isEmpty = function() { 1955 HashSetImplementation.prototype.isEmpty = function() {
2026 return this._backingMap.isEmpty(); 1956 return this._backingMap.isEmpty();
2027 } 1957 }
2028 HashSetImplementation.prototype.get$length = function() { 1958 HashSetImplementation.prototype.get$length = function() {
2029 return this._backingMap.get$length(); 1959 return this._backingMap.get$length();
2030 } 1960 }
2031 Object.defineProperty(HashSetImplementation.prototype, "length", { 1961 Object.defineProperty(HashSetImplementation.prototype, "length", {
2032 get: HashSetImplementation.prototype.get$length 1962 get: HashSetImplementation.prototype.get$length
2033 }); 1963 });
2034 HashSetImplementation.prototype.iterator = function() { 1964 HashSetImplementation.prototype.iterator = function() {
2035 return new HashSetIterator$E(this); 1965 return new HashSetIterator$E(this);
2036 } 1966 }
2037 HashSetImplementation.prototype.add$1 = HashSetImplementation.prototype.add; 1967 HashSetImplementation.prototype.add$1 = function($0) {
1968 return this.add($0);
1969 };
2038 HashSetImplementation.prototype.addAll$1 = function($0) { 1970 HashSetImplementation.prototype.addAll$1 = function($0) {
2039 return this.addAll(($0 && $0.is$Collection$E())); 1971 return this.addAll($0);
2040 }; 1972 };
2041 HashSetImplementation.prototype.contains$1 = HashSetImplementation.prototype.con tains; 1973 HashSetImplementation.prototype.contains$1 = function($0) {
1974 return this.contains($0);
1975 };
2042 HashSetImplementation.prototype.filter$1 = HashSetImplementation.prototype.filte r; 1976 HashSetImplementation.prototype.filter$1 = HashSetImplementation.prototype.filte r;
2043 HashSetImplementation.prototype.isEmpty$0 = function() { 1977 HashSetImplementation.prototype.isEmpty$0 = function() {
2044 return this.isEmpty(); 1978 return this.isEmpty();
2045 }; 1979 };
2046 HashSetImplementation.prototype.iterator$0 = function() { 1980 HashSetImplementation.prototype.iterator$0 = function() {
2047 return this.iterator(); 1981 return this.iterator();
2048 }; 1982 };
2049 HashSetImplementation.prototype.some$1 = HashSetImplementation.prototype.some; 1983 HashSetImplementation.prototype.some$1 = HashSetImplementation.prototype.some;
2050 // ********** Code for HashSetImplementation$E ************** 1984 // ********** Code for HashSetImplementation$E **************
2051 function HashSetImplementation$E() {} 1985 function HashSetImplementation$E() {}
2052 $inherits(HashSetImplementation$E, HashSetImplementation); 1986 $inherits(HashSetImplementation$E, HashSetImplementation);
2053 HashSetImplementation$E.prototype.is$Collection$E = function(){return this;};
2054 HashSetImplementation$E.prototype.is$Collection$Object = function(){return this; };
2055 HashSetImplementation$E.prototype.is$Collection$Type = function(){return this;};
2056 HashSetImplementation$E.prototype.is$Iterable = function(){return this;};
2057 // ********** Code for HashSetImplementation$String ************** 1987 // ********** Code for HashSetImplementation$String **************
2058 function HashSetImplementation$String() {} 1988 function HashSetImplementation$String() {}
2059 $inherits(HashSetImplementation$String, HashSetImplementation); 1989 $inherits(HashSetImplementation$String, HashSetImplementation);
2060 HashSetImplementation$String.prototype.is$Collection$E = function(){return this; };
2061 HashSetImplementation$String.prototype.is$Collection$Object = function(){return this;};
2062 HashSetImplementation$String.prototype.is$Collection$Type = false;
2063 HashSetImplementation$String.prototype.is$Iterable = function(){return this;};
2064 // ********** Code for HashSetImplementation$Type ************** 1990 // ********** Code for HashSetImplementation$Type **************
2065 function HashSetImplementation$Type() {} 1991 function HashSetImplementation$Type() {}
2066 $inherits(HashSetImplementation$Type, HashSetImplementation); 1992 $inherits(HashSetImplementation$Type, HashSetImplementation);
2067 HashSetImplementation$Type.prototype.is$Collection$E = function(){return this;};
2068 HashSetImplementation$Type.prototype.is$Collection$Object = function(){return th is;};
2069 HashSetImplementation$Type.prototype.is$Collection$Type = function(){return this ;};
2070 HashSetImplementation$Type.prototype.is$Iterable = function(){return this;};
2071 // ********** Code for HashSetIterator ************** 1993 // ********** Code for HashSetIterator **************
2072 function HashSetIterator(set_) { 1994 function HashSetIterator(set_) {
2073 this._nextValidIndex = -1; 1995 this._nextValidIndex = -1;
2074 this._entries = set_._backingMap._keys; 1996 this._entries = set_._backingMap._keys;
2075 // Initializers done 1997 // Initializers done
2076 this._advance(); 1998 this._advance();
2077 } 1999 }
2078 HashSetIterator.prototype.is$Iterator$T = function(){return this;};
2079 HashSetIterator.prototype.hasNext = function() { 2000 HashSetIterator.prototype.hasNext = function() {
2080 if (this._nextValidIndex >= this._entries.length) return false; 2001 if (this._nextValidIndex >= this._entries.length) return false;
2081 if (this._entries.$index(this._nextValidIndex) === HashMapImplementation._dele tedKey) { 2002 if (this._entries.$index(this._nextValidIndex) === HashMapImplementation._dele tedKey) {
2082 this._advance(); 2003 this._advance();
2083 } 2004 }
2084 return this._nextValidIndex < this._entries.length; 2005 return this._nextValidIndex < this._entries.length;
2085 } 2006 }
2086 HashSetIterator.prototype.next = function() { 2007 HashSetIterator.prototype.next = function() {
2087 if (!this.hasNext()) { 2008 if (!this.hasNext()) {
2088 $throw(const$0/*const NoMoreElementsException()*/); 2009 $throw(const$0/*const NoMoreElementsException()*/);
(...skipping 19 matching lines...) Expand all
2108 return this.next(); 2029 return this.next();
2109 }; 2030 };
2110 // ********** Code for HashSetIterator$E ************** 2031 // ********** Code for HashSetIterator$E **************
2111 function HashSetIterator$E(set_) { 2032 function HashSetIterator$E(set_) {
2112 this._nextValidIndex = -1; 2033 this._nextValidIndex = -1;
2113 this._entries = set_._backingMap._keys; 2034 this._entries = set_._backingMap._keys;
2114 // Initializers done 2035 // Initializers done
2115 this._advance(); 2036 this._advance();
2116 } 2037 }
2117 $inherits(HashSetIterator$E, HashSetIterator); 2038 $inherits(HashSetIterator$E, HashSetIterator);
2118 HashSetIterator$E.prototype.is$Iterator$T = function(){return this;};
2119 HashSetIterator$E.prototype._advance = function() { 2039 HashSetIterator$E.prototype._advance = function() {
2120 var length = this._entries.length; 2040 var length = this._entries.length;
2121 var entry; 2041 var entry;
2122 var deletedKey = HashMapImplementation._deletedKey; 2042 var deletedKey = HashMapImplementation._deletedKey;
2123 do { 2043 do {
2124 if (++this._nextValidIndex >= length) break; 2044 if (++this._nextValidIndex >= length) break;
2125 entry = this._entries.$index(this._nextValidIndex); 2045 entry = this._entries.$index(this._nextValidIndex);
2126 } 2046 }
2127 while ((entry == null) || (entry === deletedKey)) 2047 while ((entry == null) || (entry === deletedKey))
2128 } 2048 }
(...skipping 11 matching lines...) Expand all
2140 this.value = value; 2060 this.value = value;
2141 // Initializers done 2061 // Initializers done
2142 } 2062 }
2143 $inherits(KeyValuePair$K$V, KeyValuePair); 2063 $inherits(KeyValuePair$K$V, KeyValuePair);
2144 // ********** Code for LinkedHashMapImplementation ************** 2064 // ********** Code for LinkedHashMapImplementation **************
2145 function LinkedHashMapImplementation() { 2065 function LinkedHashMapImplementation() {
2146 // Initializers done 2066 // Initializers done
2147 this._map = new HashMapImplementation(); 2067 this._map = new HashMapImplementation();
2148 this._list = new DoubleLinkedQueue$KeyValuePair$K$V(); 2068 this._list = new DoubleLinkedQueue$KeyValuePair$K$V();
2149 } 2069 }
2150 LinkedHashMapImplementation.prototype.is$Map$Node$Element = function(){return th is;};
2151 LinkedHashMapImplementation.prototype.is$Map$String$Member = function(){return t his;};
2152 LinkedHashMapImplementation.prototype.$setindex = function(key, value) { 2070 LinkedHashMapImplementation.prototype.$setindex = function(key, value) {
2153 if (this._map.containsKey(key)) { 2071 if (this._map.containsKey(key)) {
2154 this._map.$index(key).get$element().value = value; 2072 this._map.$index(key).get$element().value = value;
2155 } 2073 }
2156 else { 2074 else {
2157 this._list.addLast(new KeyValuePair$K$V(key, value)); 2075 this._list.addLast(new KeyValuePair$K$V(key, value));
2158 this._map.$setindex(key, this._list.lastEntry()); 2076 this._map.$setindex(key, this._list.lastEntry());
2159 } 2077 }
2160 } 2078 }
2161 LinkedHashMapImplementation.prototype.$index = function(key) { 2079 LinkedHashMapImplementation.prototype.$index = function(key) {
2162 var $0; 2080 var entry = this._map.$index(key);
2163 var entry = (($0 = this._map.$index(key)) && $0.is$DoubleLinkedQueueEntry$KeyV aluePair$K$V());
2164 if (entry == null) return null; 2081 if (entry == null) return null;
2165 return entry.get$element().get$value(); 2082 return entry.get$element().get$value();
2166 } 2083 }
2167 LinkedHashMapImplementation.prototype.getKeys = function() { 2084 LinkedHashMapImplementation.prototype.getKeys = function() {
2168 var list = new ListFactory(this.get$length()); 2085 var list = new ListFactory(this.get$length());
2169 var index = 0; 2086 var index = 0;
2170 this._list.forEach(function _(entry) { 2087 this._list.forEach(function _(entry) {
2171 list.$setindex(index++, entry.key); 2088 list.$setindex(index++, entry.key);
2172 } 2089 }
2173 ); 2090 );
2174 $assert(index == this.get$length(), "index == length", "linked_hash_map.dart", 75, 12);
2175 return list; 2091 return list;
2176 } 2092 }
2177 LinkedHashMapImplementation.prototype.getValues = function() { 2093 LinkedHashMapImplementation.prototype.getValues = function() {
2178 var list = new ListFactory(this.get$length()); 2094 var list = new ListFactory(this.get$length());
2179 var index = 0; 2095 var index = 0;
2180 this._list.forEach(function _(entry) { 2096 this._list.forEach(function _(entry) {
2181 list.$setindex(index++, entry.value); 2097 list.$setindex(index++, entry.value);
2182 } 2098 }
2183 ); 2099 );
2184 $assert(index == this.get$length(), "index == length", "linked_hash_map.dart", 86, 12);
2185 return list; 2100 return list;
2186 } 2101 }
2187 LinkedHashMapImplementation.prototype.forEach = function(f) { 2102 LinkedHashMapImplementation.prototype.forEach = function(f) {
2188 this._list.forEach(function _(entry) { 2103 this._list.forEach(function _(entry) {
2189 f(entry.key, entry.value); 2104 f(entry.key, entry.value);
2190 } 2105 }
2191 ); 2106 );
2192 } 2107 }
2193 LinkedHashMapImplementation.prototype.containsKey = function(key) { 2108 LinkedHashMapImplementation.prototype.containsKey = function(key) {
2194 return this._map.containsKey(key); 2109 return this._map.containsKey(key);
2195 } 2110 }
2196 LinkedHashMapImplementation.prototype.get$length = function() { 2111 LinkedHashMapImplementation.prototype.get$length = function() {
2197 return this._map.get$length(); 2112 return this._map.get$length();
2198 } 2113 }
2199 Object.defineProperty(LinkedHashMapImplementation.prototype, "length", { 2114 Object.defineProperty(LinkedHashMapImplementation.prototype, "length", {
2200 get: LinkedHashMapImplementation.prototype.get$length 2115 get: LinkedHashMapImplementation.prototype.get$length
2201 }); 2116 });
2202 LinkedHashMapImplementation.prototype.isEmpty = function() { 2117 LinkedHashMapImplementation.prototype.isEmpty = function() {
2203 return this.get$length() == 0; 2118 return this.get$length() == 0;
2204 } 2119 }
2205 LinkedHashMapImplementation.prototype.getKeys$0 = function() { 2120 LinkedHashMapImplementation.prototype.getKeys$0 = function() {
2206 return this.getKeys(); 2121 return this.getKeys();
2207 }; 2122 };
2208 LinkedHashMapImplementation.prototype.isEmpty$0 = function() { 2123 LinkedHashMapImplementation.prototype.isEmpty$0 = function() {
2209 return this.isEmpty(); 2124 return this.isEmpty();
2210 }; 2125 };
2211 // ********** Code for LinkedHashMapImplementation$Node$Element ************** 2126 // ********** Code for LinkedHashMapImplementation$Node$Element **************
2212 function LinkedHashMapImplementation$Node$Element() {} 2127 function LinkedHashMapImplementation$Node$Element() {}
2213 $inherits(LinkedHashMapImplementation$Node$Element, LinkedHashMapImplementation) ; 2128 $inherits(LinkedHashMapImplementation$Node$Element, LinkedHashMapImplementation) ;
2214 LinkedHashMapImplementation$Node$Element.prototype.is$Map$Node$Element = functio n(){return this;};
2215 LinkedHashMapImplementation$Node$Element.prototype.is$Map$String$Member = false;
2216 // ********** Code for LinkedHashMapImplementation$String$Keyword ************** 2129 // ********** Code for LinkedHashMapImplementation$String$Keyword **************
2217 function LinkedHashMapImplementation$String$Keyword() {} 2130 function LinkedHashMapImplementation$String$Keyword() {}
2218 $inherits(LinkedHashMapImplementation$String$Keyword, LinkedHashMapImplementatio n); 2131 $inherits(LinkedHashMapImplementation$String$Keyword, LinkedHashMapImplementatio n);
2219 LinkedHashMapImplementation$String$Keyword.prototype.is$Map$Node$Element = false ;
2220 LinkedHashMapImplementation$String$Keyword.prototype.is$Map$String$Member = fals e;
2221 // ********** Code for DoubleLinkedQueueEntry ************** 2132 // ********** Code for DoubleLinkedQueueEntry **************
2222 function DoubleLinkedQueueEntry(e) { 2133 function DoubleLinkedQueueEntry(e) {
2223 // Initializers done 2134 // Initializers done
2224 this._element = e; 2135 this._element = e;
2225 } 2136 }
2226 DoubleLinkedQueueEntry.prototype.is$DoubleLinkedQueueEntry$KeyValuePair$K$V = fu nction(){return this;};
2227 DoubleLinkedQueueEntry.prototype._link = function(p, n) { 2137 DoubleLinkedQueueEntry.prototype._link = function(p, n) {
2228 this._next = n; 2138 this._next = n;
2229 this._previous = p; 2139 this._previous = p;
2230 p._next = this; 2140 p._next = this;
2231 n._previous = this; 2141 n._previous = this;
2232 } 2142 }
2233 DoubleLinkedQueueEntry.prototype.prepend = function(e) { 2143 DoubleLinkedQueueEntry.prototype.prepend = function(e) {
2234 new DoubleLinkedQueueEntry$E(e)._link(this._previous, this); 2144 new DoubleLinkedQueueEntry$E(e)._link(this._previous, this);
2235 } 2145 }
2236 DoubleLinkedQueueEntry.prototype.remove = function() { 2146 DoubleLinkedQueueEntry.prototype.remove = function() {
(...skipping 11 matching lines...) Expand all
2248 } 2158 }
2249 DoubleLinkedQueueEntry.prototype.get$element = function() { 2159 DoubleLinkedQueueEntry.prototype.get$element = function() {
2250 return this._element; 2160 return this._element;
2251 } 2161 }
2252 // ********** Code for DoubleLinkedQueueEntry$E ************** 2162 // ********** Code for DoubleLinkedQueueEntry$E **************
2253 function DoubleLinkedQueueEntry$E(e) { 2163 function DoubleLinkedQueueEntry$E(e) {
2254 // Initializers done 2164 // Initializers done
2255 this._element = e; 2165 this._element = e;
2256 } 2166 }
2257 $inherits(DoubleLinkedQueueEntry$E, DoubleLinkedQueueEntry); 2167 $inherits(DoubleLinkedQueueEntry$E, DoubleLinkedQueueEntry);
2258 DoubleLinkedQueueEntry$E.prototype.is$DoubleLinkedQueueEntry$KeyValuePair$K$V = function(){return this;};
2259 DoubleLinkedQueueEntry$E.prototype._link = function(p, n) { 2168 DoubleLinkedQueueEntry$E.prototype._link = function(p, n) {
2260 this._next = n; 2169 this._next = n;
2261 this._previous = p; 2170 this._previous = p;
2262 p._next = this; 2171 p._next = this;
2263 n._previous = this; 2172 n._previous = this;
2264 } 2173 }
2265 DoubleLinkedQueueEntry$E.prototype.prepend = function(e) { 2174 DoubleLinkedQueueEntry$E.prototype.prepend = function(e) {
2266 new DoubleLinkedQueueEntry$E(e)._link(this._previous, this); 2175 new DoubleLinkedQueueEntry$E(e)._link(this._previous, this);
2267 } 2176 }
2268 DoubleLinkedQueueEntry$E.prototype.remove = function() { 2177 DoubleLinkedQueueEntry$E.prototype.remove = function() {
2269 this._previous._next = this._next; 2178 this._previous._next = this._next;
2270 this._next._previous = this._previous; 2179 this._next._previous = this._previous;
2271 this._next = null; 2180 this._next = null;
2272 this._previous = null; 2181 this._previous = null;
2273 return this._element; 2182 return this._element;
2274 } 2183 }
2275 DoubleLinkedQueueEntry$E.prototype._asNonSentinelEntry = function() { 2184 DoubleLinkedQueueEntry$E.prototype._asNonSentinelEntry = function() {
2276 return this; 2185 return this;
2277 } 2186 }
2278 DoubleLinkedQueueEntry$E.prototype.previousEntry = function() { 2187 DoubleLinkedQueueEntry$E.prototype.previousEntry = function() {
2279 return this._previous._asNonSentinelEntry(); 2188 return this._previous._asNonSentinelEntry();
2280 } 2189 }
2281 // ********** Code for DoubleLinkedQueueEntry$KeyValuePair$K$V ************** 2190 // ********** Code for DoubleLinkedQueueEntry$KeyValuePair$K$V **************
2282 function DoubleLinkedQueueEntry$KeyValuePair$K$V(e) { 2191 function DoubleLinkedQueueEntry$KeyValuePair$K$V(e) {
2283 // Initializers done 2192 // Initializers done
2284 this._element = e; 2193 this._element = e;
2285 } 2194 }
2286 $inherits(DoubleLinkedQueueEntry$KeyValuePair$K$V, DoubleLinkedQueueEntry); 2195 $inherits(DoubleLinkedQueueEntry$KeyValuePair$K$V, DoubleLinkedQueueEntry);
2287 DoubleLinkedQueueEntry$KeyValuePair$K$V.prototype.is$DoubleLinkedQueueEntry$KeyV aluePair$K$V = function(){return this;};
2288 DoubleLinkedQueueEntry$KeyValuePair$K$V.prototype._asNonSentinelEntry = function () { 2196 DoubleLinkedQueueEntry$KeyValuePair$K$V.prototype._asNonSentinelEntry = function () {
2289 return this; 2197 return this;
2290 } 2198 }
2291 // ********** Code for _DoubleLinkedQueueEntrySentinel ************** 2199 // ********** Code for _DoubleLinkedQueueEntrySentinel **************
2292 function _DoubleLinkedQueueEntrySentinel() { 2200 function _DoubleLinkedQueueEntrySentinel() {
2293 DoubleLinkedQueueEntry$E.call(this, null); 2201 DoubleLinkedQueueEntry$E.call(this, null);
2294 // Initializers done 2202 // Initializers done
2295 this._link(this, this); 2203 this._link(this, this);
2296 } 2204 }
2297 $inherits(_DoubleLinkedQueueEntrySentinel, DoubleLinkedQueueEntry$E); 2205 $inherits(_DoubleLinkedQueueEntrySentinel, DoubleLinkedQueueEntry$E);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2333 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype._link = function(p, n ) { 2241 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype._link = function(p, n ) {
2334 this._next = n; 2242 this._next = n;
2335 this._previous = p; 2243 this._previous = p;
2336 p._next = this; 2244 p._next = this;
2337 n._previous = this; 2245 n._previous = this;
2338 } 2246 }
2339 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype.prepend = function(e) { 2247 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype.prepend = function(e) {
2340 new DoubleLinkedQueueEntry$KeyValuePair$K$V(e)._link(this._previous, this); 2248 new DoubleLinkedQueueEntry$KeyValuePair$K$V(e)._link(this._previous, this);
2341 } 2249 }
2342 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype.previousEntry = funct ion() { 2250 _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V.prototype.previousEntry = funct ion() {
2343 var $0; 2251 return this._previous._asNonSentinelEntry();
2344 return (($0 = this._previous._asNonSentinelEntry()) && $0.is$DoubleLinkedQueue Entry$KeyValuePair$K$V());
2345 } 2252 }
2346 // ********** Code for DoubleLinkedQueue ************** 2253 // ********** Code for DoubleLinkedQueue **************
2347 function DoubleLinkedQueue() { 2254 function DoubleLinkedQueue() {
2348 // Initializers done 2255 // Initializers done
2349 this._sentinel = new _DoubleLinkedQueueEntrySentinel$E(); 2256 this._sentinel = new _DoubleLinkedQueueEntrySentinel$E();
2350 } 2257 }
2351 DoubleLinkedQueue.prototype.is$Collection$E = function(){return this;};
2352 DoubleLinkedQueue.prototype.is$Collection$Object = function(){return this;};
2353 DoubleLinkedQueue.prototype.is$Collection$Type = function(){return this;};
2354 DoubleLinkedQueue.prototype.is$Iterable = function(){return this;};
2355 DoubleLinkedQueue.prototype.addLast = function(value) { 2258 DoubleLinkedQueue.prototype.addLast = function(value) {
2356 this._sentinel.prepend(value); 2259 this._sentinel.prepend(value);
2357 } 2260 }
2358 DoubleLinkedQueue.prototype.add = function(value) { 2261 DoubleLinkedQueue.prototype.add = function(value) {
2359 this.addLast(value); 2262 this.addLast(value);
2360 } 2263 }
2361 DoubleLinkedQueue.prototype.addAll = function(collection) { 2264 DoubleLinkedQueue.prototype.addAll = function(collection) {
2362 for (var $i = collection.iterator(); $i.hasNext$0(); ) { 2265 for (var $i = collection.iterator(); $i.hasNext$0(); ) {
2363 var e = $i.next$0(); 2266 var e = $i.next$0();
2364 this.add(e); 2267 this.add(e);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2413 while (entry !== this._sentinel) { 2316 while (entry !== this._sentinel) {
2414 var nextEntry = entry._next; 2317 var nextEntry = entry._next;
2415 if (f(entry._element)) other.addLast(entry._element); 2318 if (f(entry._element)) other.addLast(entry._element);
2416 entry = nextEntry; 2319 entry = nextEntry;
2417 } 2320 }
2418 return other; 2321 return other;
2419 } 2322 }
2420 DoubleLinkedQueue.prototype.iterator = function() { 2323 DoubleLinkedQueue.prototype.iterator = function() {
2421 return new _DoubleLinkedQueueIterator$E(this._sentinel); 2324 return new _DoubleLinkedQueueIterator$E(this._sentinel);
2422 } 2325 }
2423 DoubleLinkedQueue.prototype.add$1 = DoubleLinkedQueue.prototype.add; 2326 DoubleLinkedQueue.prototype.add$1 = function($0) {
2327 return this.add($0);
2328 };
2424 DoubleLinkedQueue.prototype.addAll$1 = function($0) { 2329 DoubleLinkedQueue.prototype.addAll$1 = function($0) {
2425 return this.addAll(($0 && $0.is$Collection$E())); 2330 return this.addAll($0);
2426 }; 2331 };
2427 DoubleLinkedQueue.prototype.filter$1 = DoubleLinkedQueue.prototype.filter; 2332 DoubleLinkedQueue.prototype.filter$1 = DoubleLinkedQueue.prototype.filter;
2428 DoubleLinkedQueue.prototype.isEmpty$0 = function() { 2333 DoubleLinkedQueue.prototype.isEmpty$0 = function() {
2429 return this.isEmpty(); 2334 return this.isEmpty();
2430 }; 2335 };
2431 DoubleLinkedQueue.prototype.iterator$0 = function() { 2336 DoubleLinkedQueue.prototype.iterator$0 = function() {
2432 return this.iterator(); 2337 return this.iterator();
2433 }; 2338 };
2434 DoubleLinkedQueue.prototype.last$0 = function() { 2339 DoubleLinkedQueue.prototype.last$0 = function() {
2435 return this.last(); 2340 return this.last();
2436 }; 2341 };
2437 DoubleLinkedQueue.prototype.removeLast$0 = function() { 2342 DoubleLinkedQueue.prototype.removeLast$0 = function() {
2438 return this.removeLast(); 2343 return this.removeLast();
2439 }; 2344 };
2440 DoubleLinkedQueue.prototype.some$1 = DoubleLinkedQueue.prototype.some; 2345 DoubleLinkedQueue.prototype.some$1 = DoubleLinkedQueue.prototype.some;
2441 // ********** Code for DoubleLinkedQueue$ClassElement ************** 2346 // ********** Code for DoubleLinkedQueue$ClassElement **************
2442 function DoubleLinkedQueue$ClassElement() {} 2347 function DoubleLinkedQueue$ClassElement() {}
2443 $inherits(DoubleLinkedQueue$ClassElement, DoubleLinkedQueue); 2348 $inherits(DoubleLinkedQueue$ClassElement, DoubleLinkedQueue);
2444 DoubleLinkedQueue$ClassElement.prototype.is$Collection$E = function(){return thi s;};
2445 DoubleLinkedQueue$ClassElement.prototype.is$Collection$Object = function(){retur n this;};
2446 DoubleLinkedQueue$ClassElement.prototype.is$Collection$Type = false;
2447 DoubleLinkedQueue$ClassElement.prototype.is$Iterable = function(){return this;};
2448 // ********** Code for DoubleLinkedQueue$E ************** 2349 // ********** Code for DoubleLinkedQueue$E **************
2449 function DoubleLinkedQueue$E() {} 2350 function DoubleLinkedQueue$E() {}
2450 $inherits(DoubleLinkedQueue$E, DoubleLinkedQueue); 2351 $inherits(DoubleLinkedQueue$E, DoubleLinkedQueue);
2451 DoubleLinkedQueue$E.prototype.is$Collection$E = function(){return this;};
2452 DoubleLinkedQueue$E.prototype.is$Collection$Object = function(){return this;};
2453 DoubleLinkedQueue$E.prototype.is$Collection$Type = function(){return this;};
2454 DoubleLinkedQueue$E.prototype.is$Iterable = function(){return this;};
2455 // ********** Code for DoubleLinkedQueue$Element ************** 2352 // ********** Code for DoubleLinkedQueue$Element **************
2456 function DoubleLinkedQueue$Element() {} 2353 function DoubleLinkedQueue$Element() {}
2457 $inherits(DoubleLinkedQueue$Element, DoubleLinkedQueue); 2354 $inherits(DoubleLinkedQueue$Element, DoubleLinkedQueue);
2458 DoubleLinkedQueue$Element.prototype.is$Collection$E = function(){return this;};
2459 DoubleLinkedQueue$Element.prototype.is$Collection$Object = function(){return thi s;};
2460 DoubleLinkedQueue$Element.prototype.is$Collection$Type = false;
2461 DoubleLinkedQueue$Element.prototype.is$Iterable = function(){return this;};
2462 // ********** Code for DoubleLinkedQueue$KeyValuePair$K$V ************** 2355 // ********** Code for DoubleLinkedQueue$KeyValuePair$K$V **************
2463 function DoubleLinkedQueue$KeyValuePair$K$V() { 2356 function DoubleLinkedQueue$KeyValuePair$K$V() {
2464 // Initializers done 2357 // Initializers done
2465 this._sentinel = new _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V(); 2358 this._sentinel = new _DoubleLinkedQueueEntrySentinel$KeyValuePair$K$V();
2466 } 2359 }
2467 $inherits(DoubleLinkedQueue$KeyValuePair$K$V, DoubleLinkedQueue); 2360 $inherits(DoubleLinkedQueue$KeyValuePair$K$V, DoubleLinkedQueue);
2468 DoubleLinkedQueue$KeyValuePair$K$V.prototype.is$Collection$E = function(){return this;};
2469 DoubleLinkedQueue$KeyValuePair$K$V.prototype.is$Collection$Object = function(){r eturn this;};
2470 DoubleLinkedQueue$KeyValuePair$K$V.prototype.is$Collection$Type = false;
2471 DoubleLinkedQueue$KeyValuePair$K$V.prototype.is$Iterable = function(){return thi s;};
2472 DoubleLinkedQueue$KeyValuePair$K$V.prototype.addLast = function(value) { 2361 DoubleLinkedQueue$KeyValuePair$K$V.prototype.addLast = function(value) {
2473 this._sentinel.prepend(value); 2362 this._sentinel.prepend(value);
2474 } 2363 }
2475 DoubleLinkedQueue$KeyValuePair$K$V.prototype.lastEntry = function() { 2364 DoubleLinkedQueue$KeyValuePair$K$V.prototype.lastEntry = function() {
2476 return this._sentinel.previousEntry(); 2365 return this._sentinel.previousEntry();
2477 } 2366 }
2478 DoubleLinkedQueue$KeyValuePair$K$V.prototype.forEach = function(f) { 2367 DoubleLinkedQueue$KeyValuePair$K$V.prototype.forEach = function(f) {
2479 var entry = this._sentinel._next; 2368 var entry = this._sentinel._next;
2480 while (entry !== this._sentinel) { 2369 while (entry !== this._sentinel) {
2481 var nextEntry = entry._next; 2370 var nextEntry = entry._next;
2482 f(entry._element); 2371 f(entry._element);
2483 entry = nextEntry; 2372 entry = nextEntry;
2484 } 2373 }
2485 } 2374 }
2486 // ********** Code for _DoubleLinkedQueueIterator ************** 2375 // ********** Code for _DoubleLinkedQueueIterator **************
2487 function _DoubleLinkedQueueIterator(_sentinel) { 2376 function _DoubleLinkedQueueIterator(_sentinel) {
2488 this._sentinel = _sentinel; 2377 this._sentinel = _sentinel;
2489 // Initializers done 2378 // Initializers done
2490 this._currentEntry = this._sentinel; 2379 this._currentEntry = this._sentinel;
2491 } 2380 }
2492 _DoubleLinkedQueueIterator.prototype.is$Iterator$T = function(){return this;};
2493 _DoubleLinkedQueueIterator.prototype.hasNext = function() { 2381 _DoubleLinkedQueueIterator.prototype.hasNext = function() {
2494 return this._currentEntry._next !== this._sentinel; 2382 return this._currentEntry._next !== this._sentinel;
2495 } 2383 }
2496 _DoubleLinkedQueueIterator.prototype.next = function() { 2384 _DoubleLinkedQueueIterator.prototype.next = function() {
2497 if (!this.hasNext()) { 2385 if (!this.hasNext()) {
2498 $throw(const$0/*const NoMoreElementsException()*/); 2386 $throw(const$0/*const NoMoreElementsException()*/);
2499 } 2387 }
2500 this._currentEntry = this._currentEntry._next; 2388 this._currentEntry = this._currentEntry._next;
2501 return this._currentEntry.get$element(); 2389 return this._currentEntry.get$element();
2502 } 2390 }
2503 _DoubleLinkedQueueIterator.prototype.hasNext$0 = function() { 2391 _DoubleLinkedQueueIterator.prototype.hasNext$0 = function() {
2504 return this.hasNext(); 2392 return this.hasNext();
2505 }; 2393 };
2506 _DoubleLinkedQueueIterator.prototype.next$0 = function() { 2394 _DoubleLinkedQueueIterator.prototype.next$0 = function() {
2507 return this.next(); 2395 return this.next();
2508 }; 2396 };
2509 // ********** Code for _DoubleLinkedQueueIterator$E ************** 2397 // ********** Code for _DoubleLinkedQueueIterator$E **************
2510 function _DoubleLinkedQueueIterator$E(_sentinel) { 2398 function _DoubleLinkedQueueIterator$E(_sentinel) {
2511 this._sentinel = _sentinel; 2399 this._sentinel = _sentinel;
2512 // Initializers done 2400 // Initializers done
2513 this._currentEntry = this._sentinel; 2401 this._currentEntry = this._sentinel;
2514 } 2402 }
2515 $inherits(_DoubleLinkedQueueIterator$E, _DoubleLinkedQueueIterator); 2403 $inherits(_DoubleLinkedQueueIterator$E, _DoubleLinkedQueueIterator);
2516 _DoubleLinkedQueueIterator$E.prototype.is$Iterator$T = function(){return this;};
2517 // ********** Code for StopwatchImplementation ************** 2404 // ********** Code for StopwatchImplementation **************
2518 function StopwatchImplementation() { 2405 function StopwatchImplementation() {
2519 this._start = null; 2406 this._start = null;
2520 this._stop = null; 2407 this._stop = null;
2521 // Initializers done 2408 // Initializers done
2522 } 2409 }
2523 StopwatchImplementation.prototype.start = function() { 2410 StopwatchImplementation.prototype.start = function() {
2524 if (this._start == null) { 2411 if (this._start == null) {
2525 this._start = Clock.now(); 2412 this._start = Clock.now();
2526 } 2413 }
(...skipping 21 matching lines...) Expand all
2548 } 2435 }
2549 StopwatchImplementation.prototype.frequency = function() { 2436 StopwatchImplementation.prototype.frequency = function() {
2550 return Clock.frequency(); 2437 return Clock.frequency();
2551 } 2438 }
2552 // ********** Code for StringBufferImpl ************** 2439 // ********** Code for StringBufferImpl **************
2553 function StringBufferImpl(content) { 2440 function StringBufferImpl(content) {
2554 // Initializers done 2441 // Initializers done
2555 this.clear(); 2442 this.clear();
2556 this.add(content); 2443 this.add(content);
2557 } 2444 }
2558 StringBufferImpl.prototype.is$StringBuffer = function(){return this;};
2559 StringBufferImpl.prototype.get$length = function() { 2445 StringBufferImpl.prototype.get$length = function() {
2560 return this._length; 2446 return this._length;
2561 } 2447 }
2562 Object.defineProperty(StringBufferImpl.prototype, "length", { 2448 Object.defineProperty(StringBufferImpl.prototype, "length", {
2563 get: StringBufferImpl.prototype.get$length 2449 get: StringBufferImpl.prototype.get$length
2564 }); 2450 });
2565 StringBufferImpl.prototype.isEmpty = function() { 2451 StringBufferImpl.prototype.isEmpty = function() {
2566 return this._length == 0; 2452 return this._length == 0;
2567 } 2453 }
2568 StringBufferImpl.prototype.add = function(obj) { 2454 StringBufferImpl.prototype.add = function(obj) {
2569 var str = $assert_String(obj.toString()); 2455 var str = obj.toString();
2570 if (str == null || str.isEmpty()) return this; 2456 if (str == null || str.isEmpty()) return this;
2571 this._buffer.add(str); 2457 this._buffer.add(str);
2572 this._length += str.length; 2458 this._length += str.length;
2573 return this; 2459 return this;
2574 } 2460 }
2575 StringBufferImpl.prototype.addAll = function(objects) { 2461 StringBufferImpl.prototype.addAll = function(objects) {
2576 for (var $i = objects.iterator(); $i.hasNext$0(); ) { 2462 for (var $i = objects.iterator(); $i.hasNext$0(); ) {
2577 var obj = $i.next$0(); 2463 var obj = $i.next$0();
2578 this.add(obj); 2464 this.add(obj);
2579 } 2465 }
2580 return this; 2466 return this;
2581 } 2467 }
2582 StringBufferImpl.prototype.clear = function() { 2468 StringBufferImpl.prototype.clear = function() {
2583 this._buffer = new ListFactory(); 2469 this._buffer = new ListFactory();
2584 this._length = 0; 2470 this._length = 0;
2585 return this; 2471 return this;
2586 } 2472 }
2587 StringBufferImpl.prototype.toString = function() { 2473 StringBufferImpl.prototype.toString = function() {
2588 if (this._buffer.length == 0) return ""; 2474 if (this._buffer.length == 0) return "";
2589 if (this._buffer.length == 1) return $assert_String(this._buffer.$index(0)); 2475 if (this._buffer.length == 1) return this._buffer.$index(0);
2590 var result = StringBase.concatAll(this._buffer); 2476 var result = StringBase.concatAll(this._buffer);
2591 this._buffer.clear(); 2477 this._buffer.clear();
2592 this._buffer.add(result); 2478 this._buffer.add(result);
2593 return result; 2479 return result;
2594 } 2480 }
2595 StringBufferImpl.prototype.add$1 = StringBufferImpl.prototype.add; 2481 StringBufferImpl.prototype.add$1 = function($0) {
2482 return this.add($0);
2483 };
2596 StringBufferImpl.prototype.addAll$1 = function($0) { 2484 StringBufferImpl.prototype.addAll$1 = function($0) {
2597 return this.addAll(($0 && $0.is$Collection$Object())); 2485 return this.addAll($0);
2598 }; 2486 };
2599 StringBufferImpl.prototype.isEmpty$0 = function() { 2487 StringBufferImpl.prototype.isEmpty$0 = function() {
2600 return this.isEmpty(); 2488 return this.isEmpty();
2601 }; 2489 };
2602 StringBufferImpl.prototype.toString$0 = function() { 2490 StringBufferImpl.prototype.toString$0 = function() {
2603 return this.toString(); 2491 return this.toString();
2604 }; 2492 };
2605 // ********** Code for StringBase ************** 2493 // ********** Code for StringBase **************
2606 function StringBase() {} 2494 function StringBase() {}
2607 StringBase.createFromCharCodes = function(charCodes) { 2495 StringBase.createFromCharCodes = function(charCodes) {
2608 if (Object.getPrototypeOf(charCodes) !== Array.prototype) { 2496 if (Object.getPrototypeOf(charCodes) !== Array.prototype) {
2609 var length = charCodes.length; 2497 var length = charCodes.length;
2610 var tmp = new Array(length); 2498 var tmp = new Array(length);
2611 for (var i = 0; i < length; i++) { 2499 for (var i = 0; i < length; i++) {
2612 tmp[i] = charCodes.$index(i); 2500 tmp[i] = charCodes.$index(i);
2613 } 2501 }
2614 charCodes = tmp; 2502 charCodes = tmp;
2615 } 2503 }
2616 return String.fromCharCode.apply(null, charCodes); 2504 return String.fromCharCode.apply(null, charCodes);
2617 } 2505 }
2618 StringBase.join = function(strings, separator) { 2506 StringBase.join = function(strings, separator) {
2619 if (strings.length == 0) return ''; 2507 if (strings.length == 0) return '';
2620 var s = $assert_String(strings.$index(0)); 2508 var s = strings.$index(0);
2621 for (var i = 1; 2509 for (var i = 1;
2622 i < strings.length; i++) { 2510 i < strings.length; i++) {
2623 s = s + separator + strings.$index(i); 2511 s = s + separator + strings.$index(i);
2624 } 2512 }
2625 return s; 2513 return s;
2626 } 2514 }
2627 StringBase.concatAll = function(strings) { 2515 StringBase.concatAll = function(strings) {
2628 return StringBase.join(strings, ""); 2516 return StringBase.join(strings, "");
2629 } 2517 }
2630 // ********** Code for StringImplementation ************** 2518 // ********** Code for StringImplementation **************
2631 StringImplementation = String; 2519 StringImplementation = String;
2632 StringImplementation.prototype.is$Pattern = function(){return this;};
2633 StringImplementation.prototype.is$Comparable = function(){return this;};
2634 StringImplementation.prototype.endsWith = function(other) { 2520 StringImplementation.prototype.endsWith = function(other) {
2635 if (other.length > this.length) return false; 2521 if (other.length > this.length) return false;
2636 return other == this.substring(this.length - other.length); 2522 return other == this.substring(this.length - other.length);
2637 } 2523 }
2638 StringImplementation.prototype.startsWith = function(other) { 2524 StringImplementation.prototype.startsWith = function(other) {
2639 if (other.length > this.length) return false; 2525 if (other.length > this.length) return false;
2640 return other == this.substring(0, other.length); 2526 return other == this.substring(0, other.length);
2641 } 2527 }
2642 StringImplementation.prototype.isEmpty = function() { 2528 StringImplementation.prototype.isEmpty = function() {
2643 return this.length == 0; 2529 return this.length == 0;
(...skipping 20 matching lines...) Expand all
2664 this.hash_ ^= this.hash_ >> 11; 2550 this.hash_ ^= this.hash_ >> 11;
2665 this.hash_ += this.hash_ << 15; 2551 this.hash_ += this.hash_ << 15;
2666 this.hash_ = this.hash_ & ((1 << 29) - 1); 2552 this.hash_ = this.hash_ & ((1 << 29) - 1);
2667 } 2553 }
2668 return this.hash_; 2554 return this.hash_;
2669 } 2555 }
2670 StringImplementation.prototype.compareTo = function(other) { 2556 StringImplementation.prototype.compareTo = function(other) {
2671 return this == other ? 0 : this < other ? -1 : 1; 2557 return this == other ? 0 : this < other ? -1 : 1;
2672 } 2558 }
2673 StringImplementation.prototype.charCodeAt$1 = function($0) { 2559 StringImplementation.prototype.charCodeAt$1 = function($0) {
2674 return this.charCodeAt($assert_num($0)); 2560 return this.charCodeAt($0);
2675 }; 2561 };
2676 StringImplementation.prototype.compareTo$1 = function($0) { 2562 StringImplementation.prototype.compareTo$1 = function($0) {
2677 return this.compareTo($assert_String($0)); 2563 return this.compareTo($0);
2678 }; 2564 };
2679 StringImplementation.prototype.endsWith$1 = function($0) { 2565 StringImplementation.prototype.endsWith$1 = function($0) {
2680 return this.endsWith($assert_String($0)); 2566 return this.endsWith($0);
2681 }; 2567 };
2682 StringImplementation.prototype.hashCode$0 = function() { 2568 StringImplementation.prototype.hashCode$0 = function() {
2683 return this.hashCode(); 2569 return this.hashCode();
2684 }; 2570 };
2685 StringImplementation.prototype.indexOf$2 = function($0, $1) { 2571 StringImplementation.prototype.indexOf$2 = function($0, $1) {
2686 return this.indexOf($assert_String($0), $assert_num($1)); 2572 return this.indexOf($0, $1);
2687 }; 2573 };
2688 StringImplementation.prototype.isEmpty$0 = function() { 2574 StringImplementation.prototype.isEmpty$0 = function() {
2689 return this.isEmpty(); 2575 return this.isEmpty();
2690 }; 2576 };
2691 StringImplementation.prototype.replaceAll$2 = function($0, $1) { 2577 StringImplementation.prototype.replaceAll$2 = function($0, $1) {
2692 return this.replaceAll(($0 && $0.is$Pattern()), $assert_String($1)); 2578 return this.replaceAll($0, $1);
2693 }; 2579 };
2694 StringImplementation.prototype.replaceFirst$2 = function($0, $1) { 2580 StringImplementation.prototype.replaceFirst$2 = function($0, $1) {
2695 return this.replaceFirst(($0 && $0.is$Pattern()), $assert_String($1)); 2581 return this.replaceFirst($0, $1);
2696 }; 2582 };
2697 StringImplementation.prototype.startsWith$1 = function($0) { 2583 StringImplementation.prototype.startsWith$1 = function($0) {
2698 return this.startsWith($assert_String($0)); 2584 return this.startsWith($0);
2699 }; 2585 };
2700 StringImplementation.prototype.substring$1 = function($0) { 2586 StringImplementation.prototype.substring$1 = function($0) {
2701 return this.substring($assert_num($0)); 2587 return this.substring($0);
2702 }; 2588 };
2703 StringImplementation.prototype.substring$2 = function($0, $1) { 2589 StringImplementation.prototype.substring$2 = function($0, $1) {
2704 return this.substring($assert_num($0), $assert_num($1)); 2590 return this.substring($0, $1);
2705 }; 2591 };
2706 // ********** Code for Collections ************** 2592 // ********** Code for Collections **************
2707 function Collections() {} 2593 function Collections() {}
2708 Collections.forEach = function(iterable, f) { 2594 Collections.forEach = function(iterable, f) {
2709 for (var $i = iterable.iterator(); $i.hasNext$0(); ) { 2595 for (var $i = iterable.iterator(); $i.hasNext$0(); ) {
2710 var e = $i.next$0(); 2596 var e = $i.next$0();
2711 f(e); 2597 f(e);
2712 } 2598 }
2713 } 2599 }
2714 Collections.some = function(iterable, f) { 2600 Collections.some = function(iterable, f) {
(...skipping 18 matching lines...) Expand all
2733 // Initializers done 2619 // Initializers done
2734 } 2620 }
2735 DateImplementation.fromEpoch$ctor.prototype = DateImplementation.prototype; 2621 DateImplementation.fromEpoch$ctor.prototype = DateImplementation.prototype;
2736 DateImplementation.now$ctor = function() { 2622 DateImplementation.now$ctor = function() {
2737 this.timeZone = new TimeZoneImplementation.local$ctor(); 2623 this.timeZone = new TimeZoneImplementation.local$ctor();
2738 this.value = DateImplementation._now(); 2624 this.value = DateImplementation._now();
2739 // Initializers done 2625 // Initializers done
2740 this._asJs(); 2626 this._asJs();
2741 } 2627 }
2742 DateImplementation.now$ctor.prototype = DateImplementation.prototype; 2628 DateImplementation.now$ctor.prototype = DateImplementation.prototype;
2743 DateImplementation.prototype.is$Date = function(){return this;};
2744 DateImplementation.prototype.is$Comparable = function(){return this;};
2745 DateImplementation.prototype.get$value = function() { return this.value; }; 2629 DateImplementation.prototype.get$value = function() { return this.value; };
2746 DateImplementation.prototype.$eq = function(other) { 2630 DateImplementation.prototype.$eq = function(other) {
2747 if (!((other instanceof DateImplementation))) return false; 2631 if (!((other instanceof DateImplementation))) return false;
2748 return (this.value == other.get$value()) && ($eq(this.timeZone, other.timeZone )); 2632 return (this.value == other.get$value()) && ($eq(this.timeZone, other.timeZone ));
2749 } 2633 }
2750 DateImplementation.prototype.compareTo = function(other) { 2634 DateImplementation.prototype.compareTo = function(other) {
2751 var $0; 2635 return this.value.compareTo(other.value);
2752 return $assert_num(this.value.compareTo$1(other.value));
2753 } 2636 }
2754 DateImplementation.prototype.get$year = function() { 2637 DateImplementation.prototype.get$year = function() {
2755 return this.isUtc ? this._asJs().getUTCFullYear() : 2638 return this.isUtc ? this._asJs().getUTCFullYear() :
2756 this._asJs().getFullYear(); 2639 this._asJs().getFullYear();
2757 } 2640 }
2758 DateImplementation.prototype.get$month = function() { 2641 DateImplementation.prototype.get$month = function() {
2759 return this.isUtc ? this._asJs().getMonth() + 1 : 2642 return this.isUtc ? this._asJs().getMonth() + 1 :
2760 this._asJs().getMonth() + 1; 2643 this._asJs().getMonth() + 1;
2761 } 2644 }
2762 DateImplementation.prototype.get$day = function() { 2645 DateImplementation.prototype.get$day = function() {
(...skipping 21 matching lines...) Expand all
2784 function twoDigits(n) { 2667 function twoDigits(n) {
2785 if (n >= 10) return ("" + n + ""); 2668 if (n >= 10) return ("" + n + "");
2786 return ("0" + n + ""); 2669 return ("0" + n + "");
2787 } 2670 }
2788 var m = twoDigits(this.get$month()); 2671 var m = twoDigits(this.get$month());
2789 var d = twoDigits(this.get$day()); 2672 var d = twoDigits(this.get$day());
2790 var h = twoDigits(this.get$hours()); 2673 var h = twoDigits(this.get$hours());
2791 var min = twoDigits(this.get$minutes()); 2674 var min = twoDigits(this.get$minutes());
2792 var sec = twoDigits(this.get$seconds()); 2675 var sec = twoDigits(this.get$seconds());
2793 var ms = threeDigits(this.get$milliseconds()); 2676 var ms = threeDigits(this.get$milliseconds());
2794 if ($notnull_bool(this.timeZone.isUtc)) { 2677 if (this.timeZone.isUtc) {
2795 return ("" + this.get$year() + "-" + m + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + "Z"); 2678 return ("" + this.get$year() + "-" + m + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + "Z");
2796 } 2679 }
2797 else { 2680 else {
2798 return ("" + this.get$year() + "-" + m + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + ""); 2681 return ("" + this.get$year() + "-" + m + "-" + d + " " + h + ":" + min + ":" + sec + "." + ms + "");
2799 } 2682 }
2800 } 2683 }
2801 DateImplementation.prototype.add = function(duration) { 2684 DateImplementation.prototype.add = function(duration) {
2802 return new DateImplementation.fromEpoch$ctor(this.value + duration.inMilliseco nds, this.timeZone); 2685 return new DateImplementation.fromEpoch$ctor(this.value + duration.inMilliseco nds, this.timeZone);
2803 } 2686 }
2804 DateImplementation._now = function() { 2687 DateImplementation._now = function() {
2805 return new Date().valueOf(); 2688 return new Date().valueOf();
2806 } 2689 }
2807 DateImplementation.prototype._asJs = function() { 2690 DateImplementation.prototype._asJs = function() {
2808 if (!this.date) { 2691 if (!this.date) {
2809 this.date = new Date(this.value); 2692 this.date = new Date(this.value);
2810 } 2693 }
2811 return this.date; 2694 return this.date;
2812 } 2695 }
2813 DateImplementation.prototype.add$1 = function($0) { 2696 DateImplementation.prototype.add$1 = function($0) {
2814 return this.add(($0 && $0.is$Duration())); 2697 return this.add($0);
2815 }; 2698 };
2816 DateImplementation.prototype.compareTo$1 = function($0) { 2699 DateImplementation.prototype.compareTo$1 = function($0) {
2817 return this.compareTo(($0 && $0.is$Date())); 2700 return this.compareTo($0);
2818 }; 2701 };
2819 DateImplementation.prototype.toString$0 = function() { 2702 DateImplementation.prototype.toString$0 = function() {
2820 return this.toString(); 2703 return this.toString();
2821 }; 2704 };
2822 // ********** Code for TimeZoneImplementation ************** 2705 // ********** Code for TimeZoneImplementation **************
2823 function TimeZoneImplementation() {} 2706 function TimeZoneImplementation() {}
2824 TimeZoneImplementation.local$ctor = function() { 2707 TimeZoneImplementation.local$ctor = function() {
2825 this.isUtc = false; 2708 this.isUtc = false;
2826 // Initializers done 2709 // Initializers done
2827 } 2710 }
2828 TimeZoneImplementation.local$ctor.prototype = TimeZoneImplementation.prototype; 2711 TimeZoneImplementation.local$ctor.prototype = TimeZoneImplementation.prototype;
2829 TimeZoneImplementation.prototype.$eq = function(other) { 2712 TimeZoneImplementation.prototype.$eq = function(other) {
2830 if (!((other instanceof TimeZoneImplementation))) return false; 2713 if (!((other instanceof TimeZoneImplementation))) return false;
2831 return $eq(this.isUtc, other.isUtc); 2714 return $eq(this.isUtc, other.isUtc);
2832 } 2715 }
2833 TimeZoneImplementation.prototype.toString = function() { 2716 TimeZoneImplementation.prototype.toString = function() {
2834 if ($notnull_bool(this.isUtc)) return "TimeZone (UTC)"; 2717 if (this.isUtc) return "TimeZone (UTC)";
2835 return "TimeZone (Local)"; 2718 return "TimeZone (Local)";
2836 } 2719 }
2837 TimeZoneImplementation.prototype.toString$0 = function() { 2720 TimeZoneImplementation.prototype.toString$0 = function() {
2838 return this.toString(); 2721 return this.toString();
2839 }; 2722 };
2840 // ********** Code for top level ************** 2723 // ********** Code for top level **************
2841 // ********** Library node ************** 2724 // ********** Library node **************
2842 // ********** Code for process ************** 2725 // ********** Code for process **************
2843 // ********** Code for vm ************** 2726 // ********** Code for vm **************
2844 vm = require('vm'); 2727 vm = require('vm');
2845 // ********** Code for fs ************** 2728 // ********** Code for fs **************
2846 fs = require('fs'); 2729 fs = require('fs');
2847 // ********** Code for path ************** 2730 // ********** Code for path **************
2848 path = require('path'); 2731 path = require('path');
2849 // ********** Code for top level ************** 2732 // ********** Code for top level **************
2850 function createSandbox() { 2733 function createSandbox() {
2851 return {'require': require, 'process': process, 'console': console, 2734 return {'require': require, 'process': process, 'console': console,
2852 'setTimeout': setTimeout, 'clearTimeout': clearTimeout}; 2735 'setTimeout': setTimeout, 'clearTimeout': clearTimeout};
2853 } 2736 }
2854 // ********** Library file_system ************** 2737 // ********** Library file_system **************
2855 // ********** Code for top level ************** 2738 // ********** Code for top level **************
2856 function joinPaths(path1, path2) { 2739 function joinPaths(path1, path2) {
2857 var pieces = path1.split('/'); 2740 var pieces = path1.split('/');
2858 var $list = path2.split('/'); 2741 var $list = path2.split('/');
2859 for (var $i = 0;$i < $list.length; $i++) { 2742 for (var $i = 0;$i < $list.length; $i++) {
2860 var piece = $list.$index($i); 2743 var piece = $list.$index($i);
2861 if ($notnull_bool($eq(piece, '..')) && pieces.length > 0 && $notnull_bool($n e(pieces.last$0(), '.')) && $notnull_bool($ne(pieces.last$0(), '..'))) { 2744 if ($eq(piece, '..') && pieces.length > 0 && $ne(pieces.last$0(), '.') && $n e(pieces.last$0(), '..')) {
2862 pieces.removeLast$0(); 2745 pieces.removeLast$0();
2863 } 2746 }
2864 else if ($notnull_bool($ne(piece, ''))) { 2747 else if ($ne(piece, '')) {
2865 if (pieces.length > 0 && $notnull_bool($eq(pieces.last$0(), '.'))) { 2748 if (pieces.length > 0 && $eq(pieces.last$0(), '.')) {
2866 pieces.removeLast$0(); 2749 pieces.removeLast$0();
2867 } 2750 }
2868 pieces.add$1(piece); 2751 pieces.add$1(piece);
2869 } 2752 }
2870 } 2753 }
2871 return Strings.join((pieces && pieces.is$List$String()), '/'); 2754 return Strings.join(pieces, '/');
2872 } 2755 }
2873 function dirname(path) { 2756 function dirname(path) {
2874 var lastSlash = path.lastIndexOf('/', path.length); 2757 var lastSlash = path.lastIndexOf('/', path.length);
2875 if (lastSlash == -1) { 2758 if (lastSlash == -1) {
2876 return '.'; 2759 return '.';
2877 } 2760 }
2878 else { 2761 else {
2879 return path.substring(0, lastSlash); 2762 return path.substring(0, lastSlash);
2880 } 2763 }
2881 } 2764 }
(...skipping 26 matching lines...) Expand all
2908 function join(strings) { 2791 function join(strings) {
2909 return Strings.join(strings, '/'); 2792 return Strings.join(strings, '/');
2910 } 2793 }
2911 function readSync(fileName) { 2794 function readSync(fileName) {
2912 return new SourceFile(fileName, world.files.readAll(fileName)); 2795 return new SourceFile(fileName, world.files.readAll(fileName));
2913 } 2796 }
2914 // ********** Library util_implementation ************** 2797 // ********** Library util_implementation **************
2915 // ********** Code for LinkFactory ************** 2798 // ********** Code for LinkFactory **************
2916 function LinkFactory() {} 2799 function LinkFactory() {}
2917 LinkFactory.Link$factory = function(head, tail) { 2800 LinkFactory.Link$factory = function(head, tail) {
2918 var $0; 2801 return new LinkEntry(head, (tail == null) ? const$14/*const EmptyLink()*/ : ta il);
2919 return new LinkEntry(head, (($0 = (tail == null) ? const$14/*const EmptyLink() */ : tail) && $0.is$Link$T()));
2920 } 2802 }
2921 // ********** Code for LinkFactory$Node ************** 2803 // ********** Code for LinkFactory$Node **************
2922 function LinkFactory$Node() {} 2804 function LinkFactory$Node() {}
2923 $inherits(LinkFactory$Node, LinkFactory); 2805 $inherits(LinkFactory$Node, LinkFactory);
2924 // ********** Code for LinkFactory$T ************** 2806 // ********** Code for LinkFactory$T **************
2925 function LinkFactory$T() {} 2807 function LinkFactory$T() {}
2926 $inherits(LinkFactory$T, LinkFactory); 2808 $inherits(LinkFactory$T, LinkFactory);
2927 // ********** Code for AbstractLink ************** 2809 // ********** Code for AbstractLink **************
2928 function AbstractLink() {} 2810 function AbstractLink() {}
2929 AbstractLink.prototype.is$Link = function(){return this;};
2930 AbstractLink.prototype.is$Link$Element = function(){return this;};
2931 AbstractLink.prototype.is$Link$Node = function(){return this;};
2932 AbstractLink.prototype.is$Link$T = function(){return this;};
2933 AbstractLink.prototype.is$Link$Token = function(){return this;};
2934 AbstractLink.prototype.is$Link$Type = function(){return this;};
2935 AbstractLink.prototype.is$Iterable = function(){return this;};
2936 AbstractLink.prototype.get$head = function() { 2811 AbstractLink.prototype.get$head = function() {
2937 $throw("bug"); 2812 $throw("bug");
2938 } 2813 }
2939 AbstractLink.prototype.get$tail = function() { 2814 AbstractLink.prototype.get$tail = function() {
2940 $throw("bug"); 2815 $throw("bug");
2941 } 2816 }
2942 AbstractLink.prototype.prepend = function(element) { 2817 AbstractLink.prototype.prepend = function(element) {
2943 return LinkFactory.Link$factory(element, this); 2818 return LinkFactory.Link$factory(element, this);
2944 } 2819 }
2945 AbstractLink.prototype.iterator = function() { 2820 AbstractLink.prototype.iterator = function() {
2946 var $0; 2821 return this.toList().iterator$0();
2947 return (($0 = this.toList().iterator$0()) && $0.is$Iterator$T());
2948 } 2822 }
2949 AbstractLink.prototype.printOn = function(buffer, separatedBy) { 2823 AbstractLink.prototype.printOn = function(buffer, separatedBy) {
2950 var $0; 2824 if (this.isEmpty()) return;
2951 if ($notnull_bool(this.isEmpty())) return;
2952 buffer.add(this.get$head() == null ? 'null' : this.get$head()); 2825 buffer.add(this.get$head() == null ? 'null' : this.get$head());
2953 if (separatedBy == null) separatedBy = ''; 2826 if (separatedBy == null) separatedBy = '';
2954 for (var link = (($0 = this.get$tail()) && $0.is$Link()); 2827 for (var link = this.get$tail();
2955 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link( ))) { 2828 !link.isEmpty(); link = link.get$tail()) {
2956 buffer.add(separatedBy); 2829 buffer.add(separatedBy);
2957 buffer.add(link.get$head() == null ? 'null' : link.get$head()); 2830 buffer.add(link.get$head() == null ? 'null' : link.get$head());
2958 } 2831 }
2959 } 2832 }
2960 AbstractLink.prototype.toString = function() { 2833 AbstractLink.prototype.toString = function() {
2961 var buffer = new StringBufferImpl(""); 2834 var buffer = new StringBufferImpl("");
2962 buffer.add('[ '); 2835 buffer.add('[ ');
2963 this.printOn(buffer, ', '); 2836 this.printOn(buffer, ', ');
2964 buffer.add(' ]'); 2837 buffer.add(' ]');
2965 return buffer.toString(); 2838 return buffer.toString();
2966 } 2839 }
2967 AbstractLink.prototype.isEmpty$0 = function() { 2840 AbstractLink.prototype.isEmpty$0 = function() {
2968 return this.isEmpty(); 2841 return this.isEmpty();
2969 }; 2842 };
2970 AbstractLink.prototype.iterator$0 = function() { 2843 AbstractLink.prototype.iterator$0 = function() {
2971 return this.iterator(); 2844 return this.iterator();
2972 }; 2845 };
2973 AbstractLink.prototype.printOn$1 = function($0) { 2846 AbstractLink.prototype.printOn$1 = function($0) {
2974 return this.printOn(($0 && $0.is$StringBuffer())); 2847 return this.printOn($0);
2975 }; 2848 };
2976 AbstractLink.prototype.toString$0 = function() { 2849 AbstractLink.prototype.toString$0 = function() {
2977 return this.toString(); 2850 return this.toString();
2978 }; 2851 };
2979 // ********** Code for AbstractLink$T ************** 2852 // ********** Code for AbstractLink$T **************
2980 function AbstractLink$T() {} 2853 function AbstractLink$T() {}
2981 $inherits(AbstractLink$T, AbstractLink); 2854 $inherits(AbstractLink$T, AbstractLink);
2982 AbstractLink$T.prototype.is$Link = function(){return this;};
2983 AbstractLink$T.prototype.is$Link$Element = function(){return this;};
2984 AbstractLink$T.prototype.is$Link$Node = function(){return this;};
2985 AbstractLink$T.prototype.is$Link$T = function(){return this;};
2986 AbstractLink$T.prototype.is$Link$Token = function(){return this;};
2987 AbstractLink$T.prototype.is$Link$Type = function(){return this;};
2988 AbstractLink$T.prototype.is$Iterable = function(){return this;};
2989 AbstractLink$T.prototype.iterator = function() { 2855 AbstractLink$T.prototype.iterator = function() {
2990 var $0; 2856 return this.toList().iterator$0();
2991 return (($0 = this.toList().iterator$0()) && $0.is$Iterator$T());
2992 } 2857 }
2993 // ********** Code for LinkTail ************** 2858 // ********** Code for LinkTail **************
2994 function LinkTail() { 2859 function LinkTail() {
2995 // Initializers done 2860 // Initializers done
2996 } 2861 }
2997 $inherits(LinkTail, AbstractLink$T); 2862 $inherits(LinkTail, AbstractLink$T);
2998 LinkTail.prototype.is$Link = function(){return this;};
2999 LinkTail.prototype.is$Link$Element = function(){return this;};
3000 LinkTail.prototype.is$Link$Node = function(){return this;};
3001 LinkTail.prototype.is$Link$T = function(){return this;};
3002 LinkTail.prototype.is$Link$Token = function(){return this;};
3003 LinkTail.prototype.is$Link$Type = function(){return this;};
3004 LinkTail.prototype.is$Iterable = function(){return this;};
3005 LinkTail.prototype.get$head = function() { 2863 LinkTail.prototype.get$head = function() {
3006 return null; 2864 return null;
3007 } 2865 }
3008 LinkTail.prototype.get$tail = function() { 2866 LinkTail.prototype.get$tail = function() {
3009 return null; 2867 return null;
3010 } 2868 }
3011 LinkTail.prototype.toList = function() { 2869 LinkTail.prototype.toList = function() {
3012 return const$13/*const []*/; 2870 return const$13/*const []*/;
3013 } 2871 }
3014 LinkTail.prototype.isEmpty = function() { 2872 LinkTail.prototype.isEmpty = function() {
3015 return true; 2873 return true;
3016 } 2874 }
3017 LinkTail.prototype.isEmpty$0 = function() { 2875 LinkTail.prototype.isEmpty$0 = function() {
3018 return this.isEmpty(); 2876 return this.isEmpty();
3019 }; 2877 };
3020 // ********** Code for LinkTail$Node ************** 2878 // ********** Code for LinkTail$Node **************
3021 function LinkTail$Node() {} 2879 function LinkTail$Node() {}
3022 $inherits(LinkTail$Node, LinkTail); 2880 $inherits(LinkTail$Node, LinkTail);
3023 LinkTail$Node.prototype.is$Link = function(){return this;};
3024 LinkTail$Node.prototype.is$Link$Element = function(){return this;};
3025 LinkTail$Node.prototype.is$Link$Node = function(){return this;};
3026 LinkTail$Node.prototype.is$Link$T = function(){return this;};
3027 LinkTail$Node.prototype.is$Link$Token = function(){return this;};
3028 LinkTail$Node.prototype.is$Link$Type = function(){return this;};
3029 LinkTail$Node.prototype.is$Iterable = function(){return this;};
3030 // ********** Code for LinkTail$Type ************** 2881 // ********** Code for LinkTail$Type **************
3031 function LinkTail$Type() {} 2882 function LinkTail$Type() {}
3032 $inherits(LinkTail$Type, LinkTail); 2883 $inherits(LinkTail$Type, LinkTail);
3033 LinkTail$Type.prototype.is$Link = function(){return this;};
3034 LinkTail$Type.prototype.is$Link$Element = function(){return this;};
3035 LinkTail$Type.prototype.is$Link$Node = function(){return this;};
3036 LinkTail$Type.prototype.is$Link$T = function(){return this;};
3037 LinkTail$Type.prototype.is$Link$Token = function(){return this;};
3038 LinkTail$Type.prototype.is$Link$Type = function(){return this;};
3039 LinkTail$Type.prototype.is$Iterable = function(){return this;};
3040 // ********** Code for LinkEntry ************** 2884 // ********** Code for LinkEntry **************
3041 function LinkEntry(head, realTail) { 2885 function LinkEntry(head, realTail) {
3042 this.head = head; 2886 this.head = head;
3043 this.realTail = realTail; 2887 this.realTail = realTail;
3044 // Initializers done 2888 // Initializers done
3045 } 2889 }
3046 $inherits(LinkEntry, AbstractLink$T); 2890 $inherits(LinkEntry, AbstractLink$T);
3047 LinkEntry.prototype.get$head = function() { return this.head; }; 2891 LinkEntry.prototype.get$head = function() { return this.head; };
3048 LinkEntry.prototype.get$tail = function() { 2892 LinkEntry.prototype.get$tail = function() {
3049 return this.realTail; 2893 return this.realTail;
3050 } 2894 }
3051 LinkEntry.prototype.isEmpty = function() { 2895 LinkEntry.prototype.isEmpty = function() {
3052 return false; 2896 return false;
3053 } 2897 }
3054 LinkEntry.prototype.toList = function() { 2898 LinkEntry.prototype.toList = function() {
3055 var $0;
3056 var list = new ListFactory(); 2899 var list = new ListFactory();
3057 for (var link = this; 2900 for (var link = this;
3058 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ T())) { 2901 !link.isEmpty(); link = link.get$tail()) {
3059 list.addLast(link.get$head()); 2902 list.addLast(link.get$head());
3060 } 2903 }
3061 return list; 2904 return list;
3062 } 2905 }
3063 LinkEntry.prototype.isEmpty$0 = function() { 2906 LinkEntry.prototype.isEmpty$0 = function() {
3064 return this.isEmpty(); 2907 return this.isEmpty();
3065 }; 2908 };
3066 // ********** Code for LinkEntry$T ************** 2909 // ********** Code for LinkEntry$T **************
3067 function LinkEntry$T(head, realTail) { 2910 function LinkEntry$T(head, realTail) {
3068 this.head = head; 2911 this.head = head;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
3154 ArrayBasedScanner.prototype.firstToken = function() { 2997 ArrayBasedScanner.prototype.firstToken = function() {
3155 return this.tokens.next; 2998 return this.tokens.next;
3156 } 2999 }
3157 ArrayBasedScanner.prototype.addToCharOffset = function(offset) { 3000 ArrayBasedScanner.prototype.addToCharOffset = function(offset) {
3158 this.extraCharOffset += offset; 3001 this.extraCharOffset += offset;
3159 } 3002 }
3160 ArrayBasedScanner.prototype.appendWhiteSpace = function(next) { 3003 ArrayBasedScanner.prototype.appendWhiteSpace = function(next) {
3161 3004
3162 } 3005 }
3163 ArrayBasedScanner.prototype.appendBeginGroup = function(kind, value) { 3006 ArrayBasedScanner.prototype.appendBeginGroup = function(kind, value) {
3164 var $0;
3165 var token = new BeginGroupToken(kind, value, this.tokenStart); 3007 var token = new BeginGroupToken(kind, value, this.tokenStart);
3166 this.tail.next = token; 3008 this.tail.next = token;
3167 this.tail = this.tail.next; 3009 this.tail = this.tail.next;
3168 while (kind !== 60/*null.LT_TOKEN*/ && !$notnull_bool(this.groupingStack.isEmp ty()) && this.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) { 3010 while (kind !== 60/*null.LT_TOKEN*/ && !this.groupingStack.isEmpty() && this.g roupingStack.get$head().kind === 60/*null.LT_TOKEN*/) {
3169 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3011 this.groupingStack = this.groupingStack.get$tail();
3170 } 3012 }
3171 this.groupingStack = (($0 = this.groupingStack.prepend(token)) && $0.is$Link$T oken()); 3013 this.groupingStack = this.groupingStack.prepend(token);
3172 } 3014 }
3173 ArrayBasedScanner.prototype.appendEndGroup = function(kind, value, openKind) { 3015 ArrayBasedScanner.prototype.appendEndGroup = function(kind, value, openKind) {
3174 var $0;
3175 var oldTail = this.tail; 3016 var oldTail = this.tail;
3176 this.appendStringToken(kind, value); 3017 this.appendStringToken(kind, value);
3177 if ($notnull_bool(this.groupingStack.isEmpty())) { 3018 if (this.groupingStack.isEmpty()) {
3178 if (openKind === 60/*null.LT_TOKEN*/) return; 3019 if (openKind === 60/*null.LT_TOKEN*/) return;
3179 $throw(new MalformedInputException(('Unmatched ' + value + ''))); 3020 $throw(new MalformedInputException(('Unmatched ' + value + '')));
3180 } 3021 }
3181 while (openKind !== 60/*null.LT_TOKEN*/ && !$notnull_bool(this.groupingStack.i sEmpty()) && this.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) { 3022 while (openKind !== 60/*null.LT_TOKEN*/ && !this.groupingStack.isEmpty() && th is.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) {
3182 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3023 this.groupingStack = this.groupingStack.get$tail();
3183 } 3024 }
3184 if (this.groupingStack.get$head().kind !== openKind) { 3025 if (this.groupingStack.get$head().kind !== openKind) {
3185 if (openKind === 60/*null.LT_TOKEN*/) return; 3026 if (openKind === 60/*null.LT_TOKEN*/) return;
3186 $throw(new MalformedInputException(('Unmatched ' + value + ''))); 3027 $throw(new MalformedInputException(('Unmatched ' + value + '')));
3187 } 3028 }
3188 this.groupingStack.get$head().endGroup = oldTail.next; 3029 this.groupingStack.get$head().endGroup = oldTail.next;
3189 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Token ()); 3030 this.groupingStack = this.groupingStack.get$tail();
3190 } 3031 }
3191 ArrayBasedScanner.prototype.appendGtGt = function(kind, value) { 3032 ArrayBasedScanner.prototype.appendGtGt = function(kind, value) {
3192 var $0;
3193 var oldTail = this.tail; 3033 var oldTail = this.tail;
3194 this.appendStringToken(kind, value); 3034 this.appendStringToken(kind, value);
3195 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3035 if (this.groupingStack.isEmpty()) return;
3196 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3036 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3197 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3037 this.groupingStack = this.groupingStack.get$tail();
3198 } 3038 }
3199 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3039 if (this.groupingStack.isEmpty()) return;
3200 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3040 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3201 this.groupingStack.get$head().endGroup = oldTail.next; 3041 this.groupingStack.get$head().endGroup = oldTail.next;
3202 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3042 this.groupingStack = this.groupingStack.get$tail();
3203 } 3043 }
3204 } 3044 }
3205 ArrayBasedScanner.prototype.appendGtGtGt = function(kind, value) { 3045 ArrayBasedScanner.prototype.appendGtGtGt = function(kind, value) {
3206 var $0;
3207 var oldTail = this.tail; 3046 var oldTail = this.tail;
3208 this.appendStringToken(kind, value); 3047 this.appendStringToken(kind, value);
3209 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3048 if (this.groupingStack.isEmpty()) return;
3210 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3049 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3211 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3050 this.groupingStack = this.groupingStack.get$tail();
3212 } 3051 }
3213 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3052 if (this.groupingStack.isEmpty()) return;
3214 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3053 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3215 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3054 this.groupingStack = this.groupingStack.get$tail();
3216 } 3055 }
3217 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3056 if (this.groupingStack.isEmpty()) return;
3218 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3057 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3219 this.groupingStack.get$head().endGroup = oldTail.next; 3058 this.groupingStack.get$head().endGroup = oldTail.next;
3220 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3059 this.groupingStack = this.groupingStack.get$tail();
3221 } 3060 }
3222 } 3061 }
3223 // ********** Code for ArrayBasedScanner$SourceString ************** 3062 // ********** Code for ArrayBasedScanner$SourceString **************
3224 function ArrayBasedScanner$SourceString() { 3063 function ArrayBasedScanner$SourceString() {
3225 this.groupingStack = const$14/*const EmptyLink()*/ 3064 this.groupingStack = const$14/*const EmptyLink()*/
3226 this.extraCharOffset = 0; 3065 this.extraCharOffset = 0;
3227 this.tokenStart = -1; 3066 this.tokenStart = -1;
3228 this.byteOffset = -1; 3067 this.byteOffset = -1;
3229 this.tokens = new Token(0/*null.EOF_TOKEN*/, -1); 3068 this.tokens = new Token(0/*null.EOF_TOKEN*/, -1);
3230 // Initializers done 3069 // Initializers done
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3264 ArrayBasedScanner$SourceString.prototype.firstToken = function() { 3103 ArrayBasedScanner$SourceString.prototype.firstToken = function() {
3265 return this.tokens.next; 3104 return this.tokens.next;
3266 } 3105 }
3267 ArrayBasedScanner$SourceString.prototype.addToCharOffset = function(offset) { 3106 ArrayBasedScanner$SourceString.prototype.addToCharOffset = function(offset) {
3268 this.extraCharOffset += offset; 3107 this.extraCharOffset += offset;
3269 } 3108 }
3270 ArrayBasedScanner$SourceString.prototype.appendWhiteSpace = function(next) { 3109 ArrayBasedScanner$SourceString.prototype.appendWhiteSpace = function(next) {
3271 3110
3272 } 3111 }
3273 ArrayBasedScanner$SourceString.prototype.appendBeginGroup = function(kind, value ) { 3112 ArrayBasedScanner$SourceString.prototype.appendBeginGroup = function(kind, value ) {
3274 var $0;
3275 var token = new BeginGroupToken(kind, value, this.tokenStart); 3113 var token = new BeginGroupToken(kind, value, this.tokenStart);
3276 this.tail.next = token; 3114 this.tail.next = token;
3277 this.tail = this.tail.next; 3115 this.tail = this.tail.next;
3278 while (kind !== 60/*null.LT_TOKEN*/ && !$notnull_bool(this.groupingStack.isEmp ty()) && this.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) { 3116 while (kind !== 60/*null.LT_TOKEN*/ && !this.groupingStack.isEmpty() && this.g roupingStack.get$head().kind === 60/*null.LT_TOKEN*/) {
3279 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3117 this.groupingStack = this.groupingStack.get$tail();
3280 } 3118 }
3281 this.groupingStack = (($0 = this.groupingStack.prepend(token)) && $0.is$Link$T oken()); 3119 this.groupingStack = this.groupingStack.prepend(token);
3282 } 3120 }
3283 ArrayBasedScanner$SourceString.prototype.appendEndGroup = function(kind, value, openKind) { 3121 ArrayBasedScanner$SourceString.prototype.appendEndGroup = function(kind, value, openKind) {
3284 var $0;
3285 var oldTail = this.tail; 3122 var oldTail = this.tail;
3286 this.appendStringToken(kind, value); 3123 this.appendStringToken(kind, value);
3287 if ($notnull_bool(this.groupingStack.isEmpty())) { 3124 if (this.groupingStack.isEmpty()) {
3288 if (openKind === 60/*null.LT_TOKEN*/) return; 3125 if (openKind === 60/*null.LT_TOKEN*/) return;
3289 $throw(new MalformedInputException(('Unmatched ' + value + ''))); 3126 $throw(new MalformedInputException(('Unmatched ' + value + '')));
3290 } 3127 }
3291 while (openKind !== 60/*null.LT_TOKEN*/ && !$notnull_bool(this.groupingStack.i sEmpty()) && this.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) { 3128 while (openKind !== 60/*null.LT_TOKEN*/ && !this.groupingStack.isEmpty() && th is.groupingStack.get$head().kind === 60/*null.LT_TOKEN*/) {
3292 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3129 this.groupingStack = this.groupingStack.get$tail();
3293 } 3130 }
3294 if (this.groupingStack.get$head().kind !== openKind) { 3131 if (this.groupingStack.get$head().kind !== openKind) {
3295 if (openKind === 60/*null.LT_TOKEN*/) return; 3132 if (openKind === 60/*null.LT_TOKEN*/) return;
3296 $throw(new MalformedInputException(('Unmatched ' + value + ''))); 3133 $throw(new MalformedInputException(('Unmatched ' + value + '')));
3297 } 3134 }
3298 this.groupingStack.get$head().endGroup = oldTail.next; 3135 this.groupingStack.get$head().endGroup = oldTail.next;
3299 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Token ()); 3136 this.groupingStack = this.groupingStack.get$tail();
3300 } 3137 }
3301 ArrayBasedScanner$SourceString.prototype.appendGtGt = function(kind, value) { 3138 ArrayBasedScanner$SourceString.prototype.appendGtGt = function(kind, value) {
3302 var $0;
3303 var oldTail = this.tail; 3139 var oldTail = this.tail;
3304 this.appendStringToken(kind, value); 3140 this.appendStringToken(kind, value);
3305 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3141 if (this.groupingStack.isEmpty()) return;
3306 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3142 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3307 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3143 this.groupingStack = this.groupingStack.get$tail();
3308 } 3144 }
3309 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3145 if (this.groupingStack.isEmpty()) return;
3310 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3146 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3311 this.groupingStack.get$head().endGroup = oldTail.next; 3147 this.groupingStack.get$head().endGroup = oldTail.next;
3312 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3148 this.groupingStack = this.groupingStack.get$tail();
3313 } 3149 }
3314 } 3150 }
3315 ArrayBasedScanner$SourceString.prototype.appendGtGtGt = function(kind, value) { 3151 ArrayBasedScanner$SourceString.prototype.appendGtGtGt = function(kind, value) {
3316 var $0;
3317 var oldTail = this.tail; 3152 var oldTail = this.tail;
3318 this.appendStringToken(kind, value); 3153 this.appendStringToken(kind, value);
3319 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3154 if (this.groupingStack.isEmpty()) return;
3320 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3155 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3321 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3156 this.groupingStack = this.groupingStack.get$tail();
3322 } 3157 }
3323 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3158 if (this.groupingStack.isEmpty()) return;
3324 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3159 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3325 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3160 this.groupingStack = this.groupingStack.get$tail();
3326 } 3161 }
3327 if ($notnull_bool(this.groupingStack.isEmpty())) return; 3162 if (this.groupingStack.isEmpty()) return;
3328 if ($notnull_bool($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/) )) { 3163 if ($eq(this.groupingStack.get$head().kind, 60/*null.LT_TOKEN*/)) {
3329 this.groupingStack.get$head().endGroup = oldTail.next; 3164 this.groupingStack.get$head().endGroup = oldTail.next;
3330 this.groupingStack = (($0 = this.groupingStack.get$tail()) && $0.is$Link$Tok en()); 3165 this.groupingStack = this.groupingStack.get$tail();
3331 } 3166 }
3332 } 3167 }
3333 ArrayBasedScanner$SourceString.prototype.tokenize = function() { 3168 ArrayBasedScanner$SourceString.prototype.tokenize = function() {
3334 var next = this.advance(); 3169 var next = this.advance();
3335 while (next != -1) { 3170 while (next != -1) {
3336 next = this.bigSwitch(next); 3171 next = this.bigSwitch(next);
3337 } 3172 }
3338 this.appendEofToken(); 3173 this.appendEofToken();
3339 return this.firstToken(); 3174 return this.firstToken();
3340 } 3175 }
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
3837 case 99/*null.$c*/: 3672 case 99/*null.$c*/:
3838 case 100/*null.$d*/: 3673 case 100/*null.$d*/:
3839 case 101/*null.$e*/: 3674 case 101/*null.$e*/:
3840 case 102/*null.$f*/: 3675 case 102/*null.$f*/:
3841 3676
3842 hasDigits = true; 3677 hasDigits = true;
3843 break; 3678 break;
3844 3679
3845 default: 3680 default:
3846 3681
3847 if (!$notnull_bool(hasDigits)) { 3682 if (!hasDigits) {
3848 $throw(new MalformedInputException(this.get$charOffset())); 3683 $throw(new MalformedInputException(this.get$charOffset()));
3849 } 3684 }
3850 this.appendByteStringToken(120/*null.HEXADECIMAL_TOKEN*/, this.asciiStri ng(start)); 3685 this.appendByteStringToken(120/*null.HEXADECIMAL_TOKEN*/, this.asciiStri ng(start));
3851 return next; 3686 return next;
3852 3687
3853 } 3688 }
3854 } 3689 }
3855 } 3690 }
3856 ArrayBasedScanner$SourceString.prototype.tokenizeDotOrNumber = function(next) { 3691 ArrayBasedScanner$SourceString.prototype.tokenizeDotOrNumber = function(next) {
3857 var start = this.byteOffset; 3692 var start = this.byteOffset;
(...skipping 21 matching lines...) Expand all
3879 default: 3714 default:
3880 3715
3881 this.appendStringToken(46/*null.PERIOD_TOKEN*/, "."); 3716 this.appendStringToken(46/*null.PERIOD_TOKEN*/, ".");
3882 return next; 3717 return next;
3883 3718
3884 } 3719 }
3885 } 3720 }
3886 ArrayBasedScanner$SourceString.prototype.tokenizeFractionPart = function(next, s tart) { 3721 ArrayBasedScanner$SourceString.prototype.tokenizeFractionPart = function(next, s tart) {
3887 var done = false; 3722 var done = false;
3888 LOOP: 3723 LOOP:
3889 while (!$notnull_bool(done)) { 3724 while (!done) {
3890 switch (next) { 3725 switch (next) {
3891 case 48/*null.$0*/: 3726 case 48/*null.$0*/:
3892 case 49/*null.$1*/: 3727 case 49/*null.$1*/:
3893 case 50/*null.$2*/: 3728 case 50/*null.$2*/:
3894 case 51/*null.$3*/: 3729 case 51/*null.$3*/:
3895 case 52/*null.$4*/: 3730 case 52/*null.$4*/:
3896 case 53/*null.$5*/: 3731 case 53/*null.$5*/:
3897 case 54/*null.$6*/: 3732 case 54/*null.$6*/:
3898 case 55/*null.$7*/: 3733 case 55/*null.$7*/:
3899 case 56/*null.$8*/: 3734 case 56/*null.$8*/:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3938 case 54/*null.$6*/: 3773 case 54/*null.$6*/:
3939 case 55/*null.$7*/: 3774 case 55/*null.$7*/:
3940 case 56/*null.$8*/: 3775 case 56/*null.$8*/:
3941 case 57/*null.$9*/: 3776 case 57/*null.$9*/:
3942 3777
3943 hasDigits = true; 3778 hasDigits = true;
3944 break; 3779 break;
3945 3780
3946 default: 3781 default:
3947 3782
3948 if (!$notnull_bool(hasDigits)) { 3783 if (!hasDigits) {
3949 $throw(new MalformedInputException(this.get$charOffset())); 3784 $throw(new MalformedInputException(this.get$charOffset()));
3950 } 3785 }
3951 return next; 3786 return next;
3952 3787
3953 } 3788 }
3954 next = this.advance(); 3789 next = this.advance();
3955 } 3790 }
3956 } 3791 }
3957 ArrayBasedScanner$SourceString.prototype.tokenizeSlashOrComment = function(next) { 3792 ArrayBasedScanner$SourceString.prototype.tokenizeSlashOrComment = function(next) {
3958 next = this.advance(); 3793 next = this.advance();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
4028 while (true) { 3863 while (true) {
4029 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) { 3864 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) {
4030 if (state != null) { 3865 if (state != null) {
4031 state = state.next(next); 3866 state = state.next(next);
4032 } 3867 }
4033 } 3868 }
4034 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) { 3869 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) {
4035 state = null; 3870 state = null;
4036 } 3871 }
4037 else if (next < 128) { 3872 else if (next < 128) {
4038 if (state != null && $notnull_bool(state.isLeaf())) { 3873 if (state != null && state.isLeaf()) {
4039 this.appendKeywordToken(state.get$keyword()); 3874 this.appendKeywordToken(state.get$keyword());
4040 } 3875 }
4041 else if ($notnull_bool(isAscii)) { 3876 else if (isAscii) {
4042 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.asciiString (start)); 3877 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.asciiString (start));
4043 } 3878 }
4044 else { 3879 else {
4045 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.utf8String( start, -1)); 3880 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.utf8String( start, -1));
4046 } 3881 }
4047 return next; 3882 return next;
4048 } 3883 }
4049 else { 3884 else {
4050 var nonAsciiStart = this.byteOffset; 3885 var nonAsciiStart = this.byteOffset;
4051 do { 3886 do {
(...skipping 24 matching lines...) Expand all
4076 if (q == next) { 3911 if (q == next) {
4077 next = this.advance(); 3912 next = this.advance();
4078 if (q == next) { 3913 if (q == next) {
4079 return this.tokenizeMultiLineString(q, start, raw); 3914 return this.tokenizeMultiLineString(q, start, raw);
4080 } 3915 }
4081 else { 3916 else {
4082 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, -1)); 3917 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, -1));
4083 return next; 3918 return next;
4084 } 3919 }
4085 } 3920 }
4086 if ($notnull_bool(raw)) { 3921 if (raw) {
4087 return this.tokenizeSingleLineRawString(next, q, start); 3922 return this.tokenizeSingleLineRawString(next, q, start);
4088 } 3923 }
4089 else { 3924 else {
4090 return this.tokenizeSingleLineString(next, q, start); 3925 return this.tokenizeSingleLineString(next, q, start);
4091 } 3926 }
4092 } 3927 }
4093 ArrayBasedScanner$SourceString.prototype.tokenizeSingleLineString = function(nex t, q1, start) { 3928 ArrayBasedScanner$SourceString.prototype.tokenizeSingleLineString = function(nex t, q1, start) {
4094 while (next != -1) { 3929 while (next != -1) {
4095 if (next == q1) { 3930 if (next == q1) {
4096 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0)); 3931 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0));
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
4573 return this.select(61/*null.$EQ*/, "<<=", "<<"); 4408 return this.select(61/*null.$EQ*/, "<<=", "<<");
4574 4409
4575 default: 4410 default:
4576 4411
4577 this.appendBeginGroup(60/*null.LT_TOKEN*/, "<"); 4412 this.appendBeginGroup(60/*null.LT_TOKEN*/, "<");
4578 return next; 4413 return next;
4579 4414
4580 } 4415 }
4581 } 4416 }
4582 AbstractScanner.prototype.tokenizeNumber = function(next) { 4417 AbstractScanner.prototype.tokenizeNumber = function(next) {
4583 var $0;
4584 var start = this.get$byteOffset(); 4418 var start = this.get$byteOffset();
4585 while (true) { 4419 while (true) {
4586 next = this.advance(); 4420 next = this.advance();
4587 switch (next) { 4421 switch (next) {
4588 case 48/*null.$0*/: 4422 case 48/*null.$0*/:
4589 case 49/*null.$1*/: 4423 case 49/*null.$1*/:
4590 case 50/*null.$2*/: 4424 case 50/*null.$2*/:
4591 case 51/*null.$3*/: 4425 case 51/*null.$3*/:
4592 case 52/*null.$4*/: 4426 case 52/*null.$4*/:
4593 case 53/*null.$5*/: 4427 case 53/*null.$5*/:
(...skipping 10 matching lines...) Expand all
4604 4438
4605 case 101/*null.$e*/: 4439 case 101/*null.$e*/:
4606 case 69/*null.$E*/: 4440 case 69/*null.$E*/:
4607 case 100/*null.$d*/: 4441 case 100/*null.$d*/:
4608 case 68/*null.$D*/: 4442 case 68/*null.$D*/:
4609 4443
4610 return this.tokenizeFractionPart(next, start); 4444 return this.tokenizeFractionPart(next, start);
4611 4445
4612 default: 4446 default:
4613 4447
4614 this.appendByteStringToken$2(105/*null.INT_TOKEN*/, this.asciiString(sta rt)); 4448 this.appendByteStringToken(105/*null.INT_TOKEN*/, this.asciiString(start ));
4615 return next; 4449 return next;
4616 4450
4617 } 4451 }
4618 } 4452 }
4619 } 4453 }
4620 AbstractScanner.prototype.tokenizeHexOrNumber = function(next) { 4454 AbstractScanner.prototype.tokenizeHexOrNumber = function(next) {
4621 var x = this.peek(); 4455 var x = this.peek();
4622 if (x == 120/*null.$x*/ || x == 88/*null.$X*/) { 4456 if (x == 120/*null.$x*/ || x == 88/*null.$X*/) {
4623 this.advance(); 4457 this.advance();
4624 return this.tokenizeHex(x); 4458 return this.tokenizeHex(x);
4625 } 4459 }
4626 return this.tokenizeNumber(next); 4460 return this.tokenizeNumber(next);
4627 } 4461 }
4628 AbstractScanner.prototype.tokenizeHex = function(next) { 4462 AbstractScanner.prototype.tokenizeHex = function(next) {
4629 var $0;
4630 var start = this.get$byteOffset(); 4463 var start = this.get$byteOffset();
4631 var hasDigits = false; 4464 var hasDigits = false;
4632 while (true) { 4465 while (true) {
4633 next = this.advance(); 4466 next = this.advance();
4634 switch (next) { 4467 switch (next) {
4635 case 48/*null.$0*/: 4468 case 48/*null.$0*/:
4636 case 49/*null.$1*/: 4469 case 49/*null.$1*/:
4637 case 50/*null.$2*/: 4470 case 50/*null.$2*/:
4638 case 51/*null.$3*/: 4471 case 51/*null.$3*/:
4639 case 52/*null.$4*/: 4472 case 52/*null.$4*/:
(...skipping 13 matching lines...) Expand all
4653 case 99/*null.$c*/: 4486 case 99/*null.$c*/:
4654 case 100/*null.$d*/: 4487 case 100/*null.$d*/:
4655 case 101/*null.$e*/: 4488 case 101/*null.$e*/:
4656 case 102/*null.$f*/: 4489 case 102/*null.$f*/:
4657 4490
4658 hasDigits = true; 4491 hasDigits = true;
4659 break; 4492 break;
4660 4493
4661 default: 4494 default:
4662 4495
4663 if (!$notnull_bool(hasDigits)) { 4496 if (!hasDigits) {
4664 $throw(new MalformedInputException(this.get$charOffset())); 4497 $throw(new MalformedInputException(this.get$charOffset()));
4665 } 4498 }
4666 this.appendByteStringToken$2(120/*null.HEXADECIMAL_TOKEN*/, this.asciiSt ring(start)); 4499 this.appendByteStringToken(120/*null.HEXADECIMAL_TOKEN*/, this.asciiStri ng(start));
4667 return next; 4500 return next;
4668 4501
4669 } 4502 }
4670 } 4503 }
4671 } 4504 }
4672 AbstractScanner.prototype.tokenizeDotOrNumber = function(next) { 4505 AbstractScanner.prototype.tokenizeDotOrNumber = function(next) {
4673 var start = this.get$byteOffset(); 4506 var start = this.get$byteOffset();
4674 next = this.advance(); 4507 next = this.advance();
4675 switch (next) { 4508 switch (next) {
4676 case 48/*null.$0*/: 4509 case 48/*null.$0*/:
(...skipping 16 matching lines...) Expand all
4693 return this.select(46/*null.$PERIOD*/, "...", ".."); 4526 return this.select(46/*null.$PERIOD*/, "...", "..");
4694 4527
4695 default: 4528 default:
4696 4529
4697 this.appendStringToken(46/*null.PERIOD_TOKEN*/, "."); 4530 this.appendStringToken(46/*null.PERIOD_TOKEN*/, ".");
4698 return next; 4531 return next;
4699 4532
4700 } 4533 }
4701 } 4534 }
4702 AbstractScanner.prototype.tokenizeFractionPart = function(next, start) { 4535 AbstractScanner.prototype.tokenizeFractionPart = function(next, start) {
4703 var $0;
4704 var done = false; 4536 var done = false;
4705 LOOP: 4537 LOOP:
4706 while (!$notnull_bool(done)) { 4538 while (!done) {
4707 switch (next) { 4539 switch (next) {
4708 case 48/*null.$0*/: 4540 case 48/*null.$0*/:
4709 case 49/*null.$1*/: 4541 case 49/*null.$1*/:
4710 case 50/*null.$2*/: 4542 case 50/*null.$2*/:
4711 case 51/*null.$3*/: 4543 case 51/*null.$3*/:
4712 case 52/*null.$4*/: 4544 case 52/*null.$4*/:
4713 case 53/*null.$5*/: 4545 case 53/*null.$5*/:
4714 case 54/*null.$6*/: 4546 case 54/*null.$6*/:
4715 case 55/*null.$7*/: 4547 case 55/*null.$7*/:
4716 case 56/*null.$8*/: 4548 case 56/*null.$8*/:
(...skipping 12 matching lines...) Expand all
4729 4561
4730 done = true; 4562 done = true;
4731 continue LOOP; 4563 continue LOOP;
4732 4564
4733 } 4565 }
4734 next = this.advance(); 4566 next = this.advance();
4735 } 4567 }
4736 if (next == 100/*null.$d*/ || next == 68/*null.$D*/) { 4568 if (next == 100/*null.$d*/ || next == 68/*null.$D*/) {
4737 next = this.advance(); 4569 next = this.advance();
4738 } 4570 }
4739 this.appendByteStringToken$2(100/*null.DOUBLE_TOKEN*/, this.asciiString(start) ); 4571 this.appendByteStringToken(100/*null.DOUBLE_TOKEN*/, this.asciiString(start));
4740 return next; 4572 return next;
4741 } 4573 }
4742 AbstractScanner.prototype.tokenizeExponent = function(next) { 4574 AbstractScanner.prototype.tokenizeExponent = function(next) {
4743 if (next == 43/*null.$PLUS*/ || next == 45/*null.$MINUS*/) { 4575 if (next == 43/*null.$PLUS*/ || next == 45/*null.$MINUS*/) {
4744 next = this.advance(); 4576 next = this.advance();
4745 } 4577 }
4746 var hasDigits = false; 4578 var hasDigits = false;
4747 while (true) { 4579 while (true) {
4748 switch (next) { 4580 switch (next) {
4749 case 48/*null.$0*/: 4581 case 48/*null.$0*/:
4750 case 49/*null.$1*/: 4582 case 49/*null.$1*/:
4751 case 50/*null.$2*/: 4583 case 50/*null.$2*/:
4752 case 51/*null.$3*/: 4584 case 51/*null.$3*/:
4753 case 52/*null.$4*/: 4585 case 52/*null.$4*/:
4754 case 53/*null.$5*/: 4586 case 53/*null.$5*/:
4755 case 54/*null.$6*/: 4587 case 54/*null.$6*/:
4756 case 55/*null.$7*/: 4588 case 55/*null.$7*/:
4757 case 56/*null.$8*/: 4589 case 56/*null.$8*/:
4758 case 57/*null.$9*/: 4590 case 57/*null.$9*/:
4759 4591
4760 hasDigits = true; 4592 hasDigits = true;
4761 break; 4593 break;
4762 4594
4763 default: 4595 default:
4764 4596
4765 if (!$notnull_bool(hasDigits)) { 4597 if (!hasDigits) {
4766 $throw(new MalformedInputException(this.get$charOffset())); 4598 $throw(new MalformedInputException(this.get$charOffset()));
4767 } 4599 }
4768 return next; 4600 return next;
4769 4601
4770 } 4602 }
4771 next = this.advance(); 4603 next = this.advance();
4772 } 4604 }
4773 } 4605 }
4774 AbstractScanner.prototype.tokenizeSlashOrComment = function(next) { 4606 AbstractScanner.prototype.tokenizeSlashOrComment = function(next) {
4775 next = this.advance(); 4607 next = this.advance();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
4828 4660
4829 default: 4661 default:
4830 4662
4831 next = this.advance(); 4663 next = this.advance();
4832 break; 4664 break;
4833 4665
4834 } 4666 }
4835 } 4667 }
4836 } 4668 }
4837 AbstractScanner.prototype.tokenizeIdentifier = function(next) { 4669 AbstractScanner.prototype.tokenizeIdentifier = function(next) {
4838 var $0;
4839 var start = this.get$byteOffset(); 4670 var start = this.get$byteOffset();
4840 var state = null; 4671 var state = null;
4841 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) { 4672 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) {
4842 state = KeywordState.get$KEYWORD_STATE().next(next); 4673 state = KeywordState.get$KEYWORD_STATE().next(next);
4843 next = this.advance(); 4674 next = this.advance();
4844 } 4675 }
4845 var isAscii = true; 4676 var isAscii = true;
4846 while (true) { 4677 while (true) {
4847 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) { 4678 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) {
4848 if (state != null) { 4679 if (state != null) {
4849 state = state.next(next); 4680 state = state.next(next);
4850 } 4681 }
4851 } 4682 }
4852 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) { 4683 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) {
4853 state = null; 4684 state = null;
4854 } 4685 }
4855 else if (next < 128) { 4686 else if (next < 128) {
4856 if (state != null && $notnull_bool(state.isLeaf())) { 4687 if (state != null && state.isLeaf()) {
4857 this.appendKeywordToken(state.get$keyword()); 4688 this.appendKeywordToken(state.get$keyword());
4858 } 4689 }
4859 else if ($notnull_bool(isAscii)) { 4690 else if (isAscii) {
4860 this.appendByteStringToken$2(97/*null.IDENTIFIER_TOKEN*/, this.asciiStri ng(start)); 4691 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.asciiString (start));
4861 } 4692 }
4862 else { 4693 else {
4863 this.appendByteStringToken$2(97/*null.IDENTIFIER_TOKEN*/, this.utf8Strin g(start, -1)); 4694 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.utf8String( start, -1));
4864 } 4695 }
4865 return next; 4696 return next;
4866 } 4697 }
4867 else { 4698 else {
4868 var nonAsciiStart = this.get$byteOffset(); 4699 var nonAsciiStart = this.get$byteOffset();
4869 do { 4700 do {
4870 next = this.nextByte(); 4701 next = this.nextByte();
4871 } 4702 }
4872 while (next > 127) 4703 while (next > 127)
4873 var string = this.utf8String(nonAsciiStart, -1).toString$0(); 4704 var string = this.utf8String(nonAsciiStart, -1).toString$0();
4874 isAscii = false; 4705 isAscii = false;
4875 this.addToCharOffset(string.length); 4706 this.addToCharOffset(string.length);
4876 return next; 4707 return next;
4877 } 4708 }
4878 next = this.advance(); 4709 next = this.advance();
4879 } 4710 }
4880 } 4711 }
4881 AbstractScanner.prototype.tokenizeRawString = function(next) { 4712 AbstractScanner.prototype.tokenizeRawString = function(next) {
4882 var start = this.get$byteOffset(); 4713 var start = this.get$byteOffset();
4883 next = this.advance(); 4714 next = this.advance();
4884 if (next == 34/*null.$DQ*/ || next == 39/*null.$SQ*/) { 4715 if (next == 34/*null.$DQ*/ || next == 39/*null.$SQ*/) {
4885 return this.tokenizeString(next, start, true); 4716 return this.tokenizeString(next, start, true);
4886 } 4717 }
4887 else { 4718 else {
4888 $throw(new MalformedInputException(this.get$charOffset())); 4719 $throw(new MalformedInputException(this.get$charOffset()));
4889 } 4720 }
4890 } 4721 }
4891 AbstractScanner.prototype.tokenizeString = function(next, start, raw) { 4722 AbstractScanner.prototype.tokenizeString = function(next, start, raw) {
4892 var $0;
4893 var q = next; 4723 var q = next;
4894 next = this.advance(); 4724 next = this.advance();
4895 if (q == next) { 4725 if (q == next) {
4896 next = this.advance(); 4726 next = this.advance();
4897 if (q == next) { 4727 if (q == next) {
4898 return this.tokenizeMultiLineString(q, start, raw); 4728 return this.tokenizeMultiLineString(q, start, raw);
4899 } 4729 }
4900 else { 4730 else {
4901 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, -1)); 4731 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, -1));
4902 return next; 4732 return next;
4903 } 4733 }
4904 } 4734 }
4905 if ($notnull_bool(raw)) { 4735 if (raw) {
4906 return this.tokenizeSingleLineRawString(next, q, start); 4736 return this.tokenizeSingleLineRawString(next, q, start);
4907 } 4737 }
4908 else { 4738 else {
4909 return this.tokenizeSingleLineString(next, q, start); 4739 return this.tokenizeSingleLineString(next, q, start);
4910 } 4740 }
4911 } 4741 }
4912 AbstractScanner.prototype.tokenizeSingleLineString = function(next, q1, start) { 4742 AbstractScanner.prototype.tokenizeSingleLineString = function(next, q1, start) {
4913 var $0;
4914 while (next != -1) { 4743 while (next != -1) {
4915 if (next == q1) { 4744 if (next == q1) {
4916 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, 0)); 4745 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0));
4917 return this.advance(); 4746 return this.advance();
4918 } 4747 }
4919 else if (next == 92/*null.$BACKSLASH*/) { 4748 else if (next == 92/*null.$BACKSLASH*/) {
4920 next = this.advance(); 4749 next = this.advance();
4921 if (next == -1) { 4750 if (next == -1) {
4922 $throw(new MalformedInputException(this.get$charOffset())); 4751 $throw(new MalformedInputException(this.get$charOffset()));
4923 } 4752 }
4924 } 4753 }
4925 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) { 4754 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) {
4926 $throw(new MalformedInputException(this.get$charOffset())); 4755 $throw(new MalformedInputException(this.get$charOffset()));
4927 } 4756 }
4928 next = this.advance(); 4757 next = this.advance();
4929 } 4758 }
4930 $throw(new MalformedInputException(this.get$charOffset())); 4759 $throw(new MalformedInputException(this.get$charOffset()));
4931 } 4760 }
4932 AbstractScanner.prototype.tokenizeSingleLineRawString = function(next, q1, start ) { 4761 AbstractScanner.prototype.tokenizeSingleLineRawString = function(next, q1, start ) {
4933 var $0;
4934 next = this.advance(); 4762 next = this.advance();
4935 while (next != -1) { 4763 while (next != -1) {
4936 if (next == q1) { 4764 if (next == q1) {
4937 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, 0)); 4765 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0));
4938 return this.advance(); 4766 return this.advance();
4939 } 4767 }
4940 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) { 4768 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) {
4941 $throw(new MalformedInputException(this.get$charOffset())); 4769 $throw(new MalformedInputException(this.get$charOffset()));
4942 } 4770 }
4943 next = this.advance(); 4771 next = this.advance();
4944 } 4772 }
4945 $throw(new MalformedInputException(this.get$charOffset())); 4773 $throw(new MalformedInputException(this.get$charOffset()));
4946 } 4774 }
4947 AbstractScanner.prototype.tokenizeMultiLineString = function(q, start, raw) { 4775 AbstractScanner.prototype.tokenizeMultiLineString = function(q, start, raw) {
4948 var $0;
4949 var next = this.advance(); 4776 var next = this.advance();
4950 while (next != -1) { 4777 while (next != -1) {
4951 if (next == q) { 4778 if (next == q) {
4952 next = this.advance(); 4779 next = this.advance();
4953 if (next == q) { 4780 if (next == q) {
4954 next = this.advance(); 4781 next = this.advance();
4955 if (next == q) { 4782 if (next == q) {
4956 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String( start, 0)); 4783 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(st art, 0));
4957 return this.advance(); 4784 return this.advance();
4958 } 4785 }
4959 } 4786 }
4960 } 4787 }
4961 next = this.advance(); 4788 next = this.advance();
4962 } 4789 }
4963 return next; 4790 return next;
4964 } 4791 }
4965 AbstractScanner.prototype.appendByteStringToken$2 = AbstractScanner.prototype.ap pendByteStringToken;
4966 // ********** Code for AbstractScanner$S ************** 4792 // ********** Code for AbstractScanner$S **************
4967 function AbstractScanner$S() {} 4793 function AbstractScanner$S() {}
4968 $inherits(AbstractScanner$S, AbstractScanner); 4794 $inherits(AbstractScanner$S, AbstractScanner);
4969 AbstractScanner$S.prototype.tokenize = function() { 4795 AbstractScanner$S.prototype.tokenize = function() {
4970 var next = this.advance(); 4796 var next = this.advance();
4971 while (next != -1) { 4797 while (next != -1) {
4972 next = this.bigSwitch(next); 4798 next = this.bigSwitch(next);
4973 } 4799 }
4974 this.appendEofToken(); 4800 this.appendEofToken();
4975 return this.firstToken(); 4801 return this.firstToken();
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
5395 return this.select(61/*null.$EQ*/, "<<=", "<<"); 5221 return this.select(61/*null.$EQ*/, "<<=", "<<");
5396 5222
5397 default: 5223 default:
5398 5224
5399 this.appendBeginGroup(60/*null.LT_TOKEN*/, "<"); 5225 this.appendBeginGroup(60/*null.LT_TOKEN*/, "<");
5400 return next; 5226 return next;
5401 5227
5402 } 5228 }
5403 } 5229 }
5404 AbstractScanner$S.prototype.tokenizeNumber = function(next) { 5230 AbstractScanner$S.prototype.tokenizeNumber = function(next) {
5405 var $0;
5406 var start = this.get$byteOffset(); 5231 var start = this.get$byteOffset();
5407 while (true) { 5232 while (true) {
5408 next = this.advance(); 5233 next = this.advance();
5409 switch (next) { 5234 switch (next) {
5410 case 48/*null.$0*/: 5235 case 48/*null.$0*/:
5411 case 49/*null.$1*/: 5236 case 49/*null.$1*/:
5412 case 50/*null.$2*/: 5237 case 50/*null.$2*/:
5413 case 51/*null.$3*/: 5238 case 51/*null.$3*/:
5414 case 52/*null.$4*/: 5239 case 52/*null.$4*/:
5415 case 53/*null.$5*/: 5240 case 53/*null.$5*/:
(...skipping 10 matching lines...) Expand all
5426 5251
5427 case 101/*null.$e*/: 5252 case 101/*null.$e*/:
5428 case 69/*null.$E*/: 5253 case 69/*null.$E*/:
5429 case 100/*null.$d*/: 5254 case 100/*null.$d*/:
5430 case 68/*null.$D*/: 5255 case 68/*null.$D*/:
5431 5256
5432 return this.tokenizeFractionPart(next, start); 5257 return this.tokenizeFractionPart(next, start);
5433 5258
5434 default: 5259 default:
5435 5260
5436 this.appendByteStringToken$2(105/*null.INT_TOKEN*/, this.asciiString(sta rt)); 5261 this.appendByteStringToken(105/*null.INT_TOKEN*/, this.asciiString(start ));
5437 return next; 5262 return next;
5438 5263
5439 } 5264 }
5440 } 5265 }
5441 } 5266 }
5442 AbstractScanner$S.prototype.tokenizeHexOrNumber = function(next) { 5267 AbstractScanner$S.prototype.tokenizeHexOrNumber = function(next) {
5443 var x = this.peek(); 5268 var x = this.peek();
5444 if (x == 120/*null.$x*/ || x == 88/*null.$X*/) { 5269 if (x == 120/*null.$x*/ || x == 88/*null.$X*/) {
5445 this.advance(); 5270 this.advance();
5446 return this.tokenizeHex(x); 5271 return this.tokenizeHex(x);
5447 } 5272 }
5448 return this.tokenizeNumber(next); 5273 return this.tokenizeNumber(next);
5449 } 5274 }
5450 AbstractScanner$S.prototype.tokenizeHex = function(next) { 5275 AbstractScanner$S.prototype.tokenizeHex = function(next) {
5451 var $0;
5452 var start = this.get$byteOffset(); 5276 var start = this.get$byteOffset();
5453 var hasDigits = false; 5277 var hasDigits = false;
5454 while (true) { 5278 while (true) {
5455 next = this.advance(); 5279 next = this.advance();
5456 switch (next) { 5280 switch (next) {
5457 case 48/*null.$0*/: 5281 case 48/*null.$0*/:
5458 case 49/*null.$1*/: 5282 case 49/*null.$1*/:
5459 case 50/*null.$2*/: 5283 case 50/*null.$2*/:
5460 case 51/*null.$3*/: 5284 case 51/*null.$3*/:
5461 case 52/*null.$4*/: 5285 case 52/*null.$4*/:
(...skipping 13 matching lines...) Expand all
5475 case 99/*null.$c*/: 5299 case 99/*null.$c*/:
5476 case 100/*null.$d*/: 5300 case 100/*null.$d*/:
5477 case 101/*null.$e*/: 5301 case 101/*null.$e*/:
5478 case 102/*null.$f*/: 5302 case 102/*null.$f*/:
5479 5303
5480 hasDigits = true; 5304 hasDigits = true;
5481 break; 5305 break;
5482 5306
5483 default: 5307 default:
5484 5308
5485 if (!$notnull_bool(hasDigits)) { 5309 if (!hasDigits) {
5486 $throw(new MalformedInputException(this.get$charOffset())); 5310 $throw(new MalformedInputException(this.get$charOffset()));
5487 } 5311 }
5488 this.appendByteStringToken$2(120/*null.HEXADECIMAL_TOKEN*/, this.asciiSt ring(start)); 5312 this.appendByteStringToken(120/*null.HEXADECIMAL_TOKEN*/, this.asciiStri ng(start));
5489 return next; 5313 return next;
5490 5314
5491 } 5315 }
5492 } 5316 }
5493 } 5317 }
5494 AbstractScanner$S.prototype.tokenizeDotOrNumber = function(next) { 5318 AbstractScanner$S.prototype.tokenizeDotOrNumber = function(next) {
5495 var start = this.get$byteOffset(); 5319 var start = this.get$byteOffset();
5496 next = this.advance(); 5320 next = this.advance();
5497 switch (next) { 5321 switch (next) {
5498 case 48/*null.$0*/: 5322 case 48/*null.$0*/:
(...skipping 16 matching lines...) Expand all
5515 return this.select(46/*null.$PERIOD*/, "...", ".."); 5339 return this.select(46/*null.$PERIOD*/, "...", "..");
5516 5340
5517 default: 5341 default:
5518 5342
5519 this.appendStringToken(46/*null.PERIOD_TOKEN*/, "."); 5343 this.appendStringToken(46/*null.PERIOD_TOKEN*/, ".");
5520 return next; 5344 return next;
5521 5345
5522 } 5346 }
5523 } 5347 }
5524 AbstractScanner$S.prototype.tokenizeFractionPart = function(next, start) { 5348 AbstractScanner$S.prototype.tokenizeFractionPart = function(next, start) {
5525 var $0;
5526 var done = false; 5349 var done = false;
5527 LOOP: 5350 LOOP:
5528 while (!$notnull_bool(done)) { 5351 while (!done) {
5529 switch (next) { 5352 switch (next) {
5530 case 48/*null.$0*/: 5353 case 48/*null.$0*/:
5531 case 49/*null.$1*/: 5354 case 49/*null.$1*/:
5532 case 50/*null.$2*/: 5355 case 50/*null.$2*/:
5533 case 51/*null.$3*/: 5356 case 51/*null.$3*/:
5534 case 52/*null.$4*/: 5357 case 52/*null.$4*/:
5535 case 53/*null.$5*/: 5358 case 53/*null.$5*/:
5536 case 54/*null.$6*/: 5359 case 54/*null.$6*/:
5537 case 55/*null.$7*/: 5360 case 55/*null.$7*/:
5538 case 56/*null.$8*/: 5361 case 56/*null.$8*/:
(...skipping 12 matching lines...) Expand all
5551 5374
5552 done = true; 5375 done = true;
5553 continue LOOP; 5376 continue LOOP;
5554 5377
5555 } 5378 }
5556 next = this.advance(); 5379 next = this.advance();
5557 } 5380 }
5558 if (next == 100/*null.$d*/ || next == 68/*null.$D*/) { 5381 if (next == 100/*null.$d*/ || next == 68/*null.$D*/) {
5559 next = this.advance(); 5382 next = this.advance();
5560 } 5383 }
5561 this.appendByteStringToken$2(100/*null.DOUBLE_TOKEN*/, this.asciiString(start) ); 5384 this.appendByteStringToken(100/*null.DOUBLE_TOKEN*/, this.asciiString(start));
5562 return next; 5385 return next;
5563 } 5386 }
5564 AbstractScanner$S.prototype.tokenizeExponent = function(next) { 5387 AbstractScanner$S.prototype.tokenizeExponent = function(next) {
5565 if (next == 43/*null.$PLUS*/ || next == 45/*null.$MINUS*/) { 5388 if (next == 43/*null.$PLUS*/ || next == 45/*null.$MINUS*/) {
5566 next = this.advance(); 5389 next = this.advance();
5567 } 5390 }
5568 var hasDigits = false; 5391 var hasDigits = false;
5569 while (true) { 5392 while (true) {
5570 switch (next) { 5393 switch (next) {
5571 case 48/*null.$0*/: 5394 case 48/*null.$0*/:
5572 case 49/*null.$1*/: 5395 case 49/*null.$1*/:
5573 case 50/*null.$2*/: 5396 case 50/*null.$2*/:
5574 case 51/*null.$3*/: 5397 case 51/*null.$3*/:
5575 case 52/*null.$4*/: 5398 case 52/*null.$4*/:
5576 case 53/*null.$5*/: 5399 case 53/*null.$5*/:
5577 case 54/*null.$6*/: 5400 case 54/*null.$6*/:
5578 case 55/*null.$7*/: 5401 case 55/*null.$7*/:
5579 case 56/*null.$8*/: 5402 case 56/*null.$8*/:
5580 case 57/*null.$9*/: 5403 case 57/*null.$9*/:
5581 5404
5582 hasDigits = true; 5405 hasDigits = true;
5583 break; 5406 break;
5584 5407
5585 default: 5408 default:
5586 5409
5587 if (!$notnull_bool(hasDigits)) { 5410 if (!hasDigits) {
5588 $throw(new MalformedInputException(this.get$charOffset())); 5411 $throw(new MalformedInputException(this.get$charOffset()));
5589 } 5412 }
5590 return next; 5413 return next;
5591 5414
5592 } 5415 }
5593 next = this.advance(); 5416 next = this.advance();
5594 } 5417 }
5595 } 5418 }
5596 AbstractScanner$S.prototype.tokenizeSlashOrComment = function(next) { 5419 AbstractScanner$S.prototype.tokenizeSlashOrComment = function(next) {
5597 next = this.advance(); 5420 next = this.advance();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
5650 5473
5651 default: 5474 default:
5652 5475
5653 next = this.advance(); 5476 next = this.advance();
5654 break; 5477 break;
5655 5478
5656 } 5479 }
5657 } 5480 }
5658 } 5481 }
5659 AbstractScanner$S.prototype.tokenizeIdentifier = function(next) { 5482 AbstractScanner$S.prototype.tokenizeIdentifier = function(next) {
5660 var $0;
5661 var start = this.get$byteOffset(); 5483 var start = this.get$byteOffset();
5662 var state = null; 5484 var state = null;
5663 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) { 5485 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) {
5664 state = KeywordState.get$KEYWORD_STATE().next(next); 5486 state = KeywordState.get$KEYWORD_STATE().next(next);
5665 next = this.advance(); 5487 next = this.advance();
5666 } 5488 }
5667 var isAscii = true; 5489 var isAscii = true;
5668 while (true) { 5490 while (true) {
5669 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) { 5491 if (97/*null.$a*/ <= next && next <= 122/*null.$z*/) {
5670 if (state != null) { 5492 if (state != null) {
5671 state = state.next(next); 5493 state = state.next(next);
5672 } 5494 }
5673 } 5495 }
5674 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) { 5496 else if ((48/*null.$0*/ <= next && next <= 57/*null.$9*/) || (65/*null.$A*/ <= next && next <= 90/*null.$Z*/) || next == 95/*null.$_*/ || next == 36/*null.$ DOLLAR*/) {
5675 state = null; 5497 state = null;
5676 } 5498 }
5677 else if (next < 128) { 5499 else if (next < 128) {
5678 if (state != null && $notnull_bool(state.isLeaf())) { 5500 if (state != null && state.isLeaf()) {
5679 this.appendKeywordToken(state.get$keyword()); 5501 this.appendKeywordToken(state.get$keyword());
5680 } 5502 }
5681 else if ($notnull_bool(isAscii)) { 5503 else if (isAscii) {
5682 this.appendByteStringToken$2(97/*null.IDENTIFIER_TOKEN*/, this.asciiStri ng(start)); 5504 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.asciiString (start));
5683 } 5505 }
5684 else { 5506 else {
5685 this.appendByteStringToken$2(97/*null.IDENTIFIER_TOKEN*/, this.utf8Strin g(start, -1)); 5507 this.appendByteStringToken(97/*null.IDENTIFIER_TOKEN*/, this.utf8String( start, -1));
5686 } 5508 }
5687 return next; 5509 return next;
5688 } 5510 }
5689 else { 5511 else {
5690 var nonAsciiStart = this.get$byteOffset(); 5512 var nonAsciiStart = this.get$byteOffset();
5691 do { 5513 do {
5692 next = this.nextByte(); 5514 next = this.nextByte();
5693 } 5515 }
5694 while (next > 127) 5516 while (next > 127)
5695 var string = this.utf8String(nonAsciiStart, -1).toString$0(); 5517 var string = this.utf8String(nonAsciiStart, -1).toString$0();
5696 isAscii = false; 5518 isAscii = false;
5697 this.addToCharOffset(string.length); 5519 this.addToCharOffset(string.length);
5698 return next; 5520 return next;
5699 } 5521 }
5700 next = this.advance(); 5522 next = this.advance();
5701 } 5523 }
5702 } 5524 }
5703 AbstractScanner$S.prototype.tokenizeRawString = function(next) { 5525 AbstractScanner$S.prototype.tokenizeRawString = function(next) {
5704 var start = this.get$byteOffset(); 5526 var start = this.get$byteOffset();
5705 next = this.advance(); 5527 next = this.advance();
5706 if (next == 34/*null.$DQ*/ || next == 39/*null.$SQ*/) { 5528 if (next == 34/*null.$DQ*/ || next == 39/*null.$SQ*/) {
5707 return this.tokenizeString(next, start, true); 5529 return this.tokenizeString(next, start, true);
5708 } 5530 }
5709 else { 5531 else {
5710 $throw(new MalformedInputException(this.get$charOffset())); 5532 $throw(new MalformedInputException(this.get$charOffset()));
5711 } 5533 }
5712 } 5534 }
5713 AbstractScanner$S.prototype.tokenizeString = function(next, start, raw) { 5535 AbstractScanner$S.prototype.tokenizeString = function(next, start, raw) {
5714 var $0;
5715 var q = next; 5536 var q = next;
5716 next = this.advance(); 5537 next = this.advance();
5717 if (q == next) { 5538 if (q == next) {
5718 next = this.advance(); 5539 next = this.advance();
5719 if (q == next) { 5540 if (q == next) {
5720 return this.tokenizeMultiLineString(q, start, raw); 5541 return this.tokenizeMultiLineString(q, start, raw);
5721 } 5542 }
5722 else { 5543 else {
5723 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, -1)); 5544 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, -1));
5724 return next; 5545 return next;
5725 } 5546 }
5726 } 5547 }
5727 if ($notnull_bool(raw)) { 5548 if (raw) {
5728 return this.tokenizeSingleLineRawString(next, q, start); 5549 return this.tokenizeSingleLineRawString(next, q, start);
5729 } 5550 }
5730 else { 5551 else {
5731 return this.tokenizeSingleLineString(next, q, start); 5552 return this.tokenizeSingleLineString(next, q, start);
5732 } 5553 }
5733 } 5554 }
5734 AbstractScanner$S.prototype.tokenizeSingleLineString = function(next, q1, start) { 5555 AbstractScanner$S.prototype.tokenizeSingleLineString = function(next, q1, start) {
5735 var $0;
5736 while (next != -1) { 5556 while (next != -1) {
5737 if (next == q1) { 5557 if (next == q1) {
5738 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, 0)); 5558 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0));
5739 return this.advance(); 5559 return this.advance();
5740 } 5560 }
5741 else if (next == 92/*null.$BACKSLASH*/) { 5561 else if (next == 92/*null.$BACKSLASH*/) {
5742 next = this.advance(); 5562 next = this.advance();
5743 if (next == -1) { 5563 if (next == -1) {
5744 $throw(new MalformedInputException(this.get$charOffset())); 5564 $throw(new MalformedInputException(this.get$charOffset()));
5745 } 5565 }
5746 } 5566 }
5747 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) { 5567 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) {
5748 $throw(new MalformedInputException(this.get$charOffset())); 5568 $throw(new MalformedInputException(this.get$charOffset()));
5749 } 5569 }
5750 next = this.advance(); 5570 next = this.advance();
5751 } 5571 }
5752 $throw(new MalformedInputException(this.get$charOffset())); 5572 $throw(new MalformedInputException(this.get$charOffset()));
5753 } 5573 }
5754 AbstractScanner$S.prototype.tokenizeSingleLineRawString = function(next, q1, sta rt) { 5574 AbstractScanner$S.prototype.tokenizeSingleLineRawString = function(next, q1, sta rt) {
5755 var $0;
5756 next = this.advance(); 5575 next = this.advance();
5757 while (next != -1) { 5576 while (next != -1) {
5758 if (next == q1) { 5577 if (next == q1) {
5759 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String(star t, 0)); 5578 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(start, 0));
5760 return this.advance(); 5579 return this.advance();
5761 } 5580 }
5762 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) { 5581 else if (next == 10/*null.$LF*/ || next == 13/*null.$CR*/) {
5763 $throw(new MalformedInputException(this.get$charOffset())); 5582 $throw(new MalformedInputException(this.get$charOffset()));
5764 } 5583 }
5765 next = this.advance(); 5584 next = this.advance();
5766 } 5585 }
5767 $throw(new MalformedInputException(this.get$charOffset())); 5586 $throw(new MalformedInputException(this.get$charOffset()));
5768 } 5587 }
5769 AbstractScanner$S.prototype.tokenizeMultiLineString = function(q, start, raw) { 5588 AbstractScanner$S.prototype.tokenizeMultiLineString = function(q, start, raw) {
5770 var $0;
5771 var next = this.advance(); 5589 var next = this.advance();
5772 while (next != -1) { 5590 while (next != -1) {
5773 if (next == q) { 5591 if (next == q) {
5774 next = this.advance(); 5592 next = this.advance();
5775 if (next == q) { 5593 if (next == q) {
5776 next = this.advance(); 5594 next = this.advance();
5777 if (next == q) { 5595 if (next == q) {
5778 this.appendByteStringToken$2(39/*null.STRING_TOKEN*/, this.utf8String( start, 0)); 5596 this.appendByteStringToken(39/*null.STRING_TOKEN*/, this.utf8String(st art, 0));
5779 return this.advance(); 5597 return this.advance();
5780 } 5598 }
5781 } 5599 }
5782 } 5600 }
5783 next = this.advance(); 5601 next = this.advance();
5784 } 5602 }
5785 return next; 5603 return next;
5786 } 5604 }
5787 // ********** Code for MalformedInputException ************** 5605 // ********** Code for MalformedInputException **************
5788 function MalformedInputException(message) { 5606 function MalformedInputException(message) {
(...skipping 11 matching lines...) Expand all
5800 CompilerTask.call(this, compiler); 5618 CompilerTask.call(this, compiler);
5801 // Initializers done 5619 // Initializers done
5802 } 5620 }
5803 $inherits(ScannerTask, CompilerTask); 5621 $inherits(ScannerTask, CompilerTask);
5804 ScannerTask.prototype.get$name = function() { 5622 ScannerTask.prototype.get$name = function() {
5805 return 'Scanner'; 5623 return 'Scanner';
5806 } 5624 }
5807 ScannerTask.prototype.scan = function(script) { 5625 ScannerTask.prototype.scan = function(script) {
5808 var $this = this; // closure support 5626 var $this = this; // closure support
5809 this.measure((function () { 5627 this.measure((function () {
5810 var $0;
5811 var elements = $this.scanElements(script.get$text()); 5628 var elements = $this.scanElements(script.get$text());
5812 for (var link = elements; 5629 for (var link = elements;
5813 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Lin k$Element())) { 5630 !link.isEmpty(); link = link.get$tail()) {
5814 $this.compiler.universe.define((($0 = link.get$head()) && $0.is$Element()) ); 5631 $this.compiler.universe.define(link.get$head());
5815 } 5632 }
5816 }) 5633 })
5817 ); 5634 );
5818 } 5635 }
5819 ScannerTask.prototype.scanElements = function(text) { 5636 ScannerTask.prototype.scanElements = function(text) {
5820 var tokens = new StringScanner(text).tokenize(); 5637 var tokens = new StringScanner(text).tokenize();
5821 var listener = new ElementListener(this.compiler); 5638 var listener = new ElementListener(this.compiler);
5822 var parser = new PartialParser(listener); 5639 var parser = new PartialParser(listener);
5823 parser.parseUnit(tokens); 5640 parser.parseUnit(tokens);
5824 return listener.topLevelElements; 5641 return listener.topLevelElements;
5825 } 5642 }
5826 // ********** Code for PartialParser ************** 5643 // ********** Code for PartialParser **************
5827 function PartialParser(listener) { 5644 function PartialParser(listener) {
5828 var $this = this; // closure support 5645 var $this = this; // closure support
5829 this.listener = listener; 5646 this.listener = listener;
5830 // Initializers done 5647 // Initializers done
5831 this.beginTypeArguments = (function (t) { 5648 this.beginTypeArguments = (function (t) {
5832 return $this.listener.beginTypeArguments$1(t); 5649 return $this.listener.beginTypeArguments$1(t);
5833 }) 5650 })
5834 ; 5651 ;
5835 this.parseTypeFunction = (function (t) { 5652 this.parseTypeFunction = (function (t) {
5836 return $this.parseType((t && t.is$Token())); 5653 return $this.parseType(t);
5837 }) 5654 })
5838 ; 5655 ;
5839 this.endTypeArguments = (function (c, bt, et) { 5656 this.endTypeArguments = (function (c, bt, et) {
5840 return $this.listener.endTypeArguments$3(c, bt, et); 5657 return $this.listener.endTypeArguments$3(c, bt, et);
5841 }) 5658 })
5842 ; 5659 ;
5843 this.handleNoTypeArguments = (function (t) { 5660 this.handleNoTypeArguments = (function (t) {
5844 return $this.listener.handleNoTypeArguments$1(t); 5661 return $this.listener.handleNoTypeArguments$1(t);
5845 }) 5662 })
5846 ; 5663 ;
5847 this.beginTypeVariables = (function (t) { 5664 this.beginTypeVariables = (function (t) {
5848 return $this.listener.beginTypeVariables$1(t); 5665 return $this.listener.beginTypeVariables$1(t);
5849 }) 5666 })
5850 ; 5667 ;
5851 this.parseTypeVariableFunction = (function (t) { 5668 this.parseTypeVariableFunction = (function (t) {
5852 return $this.parseTypeVariable((t && t.is$Token())); 5669 return $this.parseTypeVariable(t);
5853 }) 5670 })
5854 ; 5671 ;
5855 this.endTypeVariables = (function (c, bt, et) { 5672 this.endTypeVariables = (function (c, bt, et) {
5856 return $this.listener.endTypeVariables$3(c, bt, et); 5673 return $this.listener.endTypeVariables$3(c, bt, et);
5857 }) 5674 })
5858 ; 5675 ;
5859 this.handleNoTypeVariables = (function (t) { 5676 this.handleNoTypeVariables = (function (t) {
5860 return $this.listener.handleNoTypeVariables$1(t); 5677 return $this.listener.handleNoTypeVariables$1(t);
5861 }) 5678 })
5862 ; 5679 ;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
5932 } 5749 }
5933 else { 5750 else {
5934 return this.parseTypeOpt(token); 5751 return this.parseTypeOpt(token);
5935 } 5752 }
5936 } 5753 }
5937 PartialParser.prototype.parseFormalParameters = function(token) { 5754 PartialParser.prototype.parseFormalParameters = function(token) {
5938 var begin = token; 5755 var begin = token;
5939 this.listener.beginFormalParameters$1(begin); 5756 this.listener.beginFormalParameters$1(begin);
5940 this.expect('(', token); 5757 this.expect('(', token);
5941 var parameterCount = 0; 5758 var parameterCount = 0;
5942 if ($notnull_bool(this.optional(')', token.next))) { 5759 if (this.optional(')', token.next)) {
5943 this.listener.endFormalParameters$3(parameterCount, begin, token.next); 5760 this.listener.endFormalParameters$3(parameterCount, begin, token.next);
5944 return token.next.next; 5761 return token.next.next;
5945 } 5762 }
5946 do { 5763 do {
5947 this.listener.beginFormalParameter$1(token); 5764 this.listener.beginFormalParameter$1(token);
5948 token = this.parseTypeOpt(this.next(token)); 5765 token = this.parseTypeOpt(this.next(token));
5949 token = this.parseIdentifier(token); 5766 token = this.parseIdentifier(token);
5950 this.listener.endFormalParameter$1(token); 5767 this.listener.endFormalParameter$1(token);
5951 ++parameterCount; 5768 ++parameterCount;
5952 } 5769 }
5953 while ($notnull_bool(this.optional(',', token))) 5770 while (this.optional(',', token))
5954 this.listener.endFormalParameters$3(parameterCount, begin, token); 5771 this.listener.endFormalParameters$3(parameterCount, begin, token);
5955 return this.expect(')', token); 5772 return this.expect(')', token);
5956 } 5773 }
5957 PartialParser.prototype.parseTypeOpt = function(token) { 5774 PartialParser.prototype.parseTypeOpt = function(token) {
5958 var nextValue = token.next.get$stringValue(); 5775 var nextValue = token.next.get$stringValue();
5959 switch (true) { 5776 switch (true) {
5960 case nextValue === '<': 5777 case nextValue === '<':
5961 case nextValue === '.': 5778 case nextValue === '.':
5962 case this.isIdentifier(token.next): 5779 case this.isIdentifier(token.next):
5963 5780
(...skipping 17 matching lines...) Expand all
5981 5798
5982 return token.get$value().isPseudo; 5799 return token.get$value().isPseudo;
5983 5800
5984 default: 5801 default:
5985 5802
5986 return false; 5803 return false;
5987 5804
5988 } 5805 }
5989 } 5806 }
5990 PartialParser.prototype.parseSupertypesClauseOpt = function(token) { 5807 PartialParser.prototype.parseSupertypesClauseOpt = function(token) {
5991 if ($notnull_bool(this.optional('extends', token))) { 5808 if (this.optional('extends', token)) {
5992 do { 5809 do {
5993 token = this.parseType(this.next(token)); 5810 token = this.parseType(this.next(token));
5994 } 5811 }
5995 while ($notnull_bool(this.optional(',', token))) 5812 while (this.optional(',', token))
5996 } 5813 }
5997 return token; 5814 return token;
5998 } 5815 }
5999 PartialParser.prototype.parseFactoryClauseOpt = function(token) { 5816 PartialParser.prototype.parseFactoryClauseOpt = function(token) {
6000 if ($notnull_bool(this.optional('factory', token))) { 5817 if (this.optional('factory', token)) {
6001 return this.parseType(this.next(token)); 5818 return this.parseType(this.next(token));
6002 } 5819 }
6003 return token; 5820 return token;
6004 } 5821 }
6005 PartialParser.prototype.skipBlock = function(token) { 5822 PartialParser.prototype.skipBlock = function(token) {
6006 if (!$notnull_bool(this.optional('{', token))) { 5823 if (!this.optional('{', token)) {
6007 return this.listener.expectedBlock$1(token); 5824 return this.listener.expectedBlock$1(token);
6008 } 5825 }
6009 var beginGroupToken = (token && token.is$BeginGroupToken()); 5826 var beginGroupToken = token;
6010 $assert(beginGroupToken.endGroup == null || beginGroupToken.endGroup.kind === 125/*null.$RBRACE*/, "beginGroupToken.endGroup === null ||\n beginGrou pToken.endGroup.kind === $RBRACE", "parser.dart", 171, 12);
6011 return beginGroupToken.endGroup; 5827 return beginGroupToken.endGroup;
6012 } 5828 }
6013 PartialParser.prototype.skipArguments = function(token) { 5829 PartialParser.prototype.skipArguments = function(token) {
6014 return token.endGroup; 5830 return token.endGroup;
6015 } 5831 }
6016 PartialParser.prototype.parseClass = function(token) { 5832 PartialParser.prototype.parseClass = function(token) {
6017 var begin = token; 5833 var begin = token;
6018 this.listener.beginClass$1(token); 5834 this.listener.beginClass$1(token);
6019 token = this.parseIdentifier(this.next(token)); 5835 token = this.parseIdentifier(this.next(token));
6020 token = this.parseTypeVariablesOpt(token); 5836 token = this.parseTypeVariablesOpt(token);
6021 var extendsKeyword; 5837 var extendsKeyword;
6022 if ($notnull_bool(this.optional('extends', token))) { 5838 if (this.optional('extends', token)) {
6023 extendsKeyword = token; 5839 extendsKeyword = token;
6024 token = this.parseType(this.next(token)); 5840 token = this.parseType(this.next(token));
6025 } 5841 }
6026 else { 5842 else {
6027 extendsKeyword = null; 5843 extendsKeyword = null;
6028 this.listener.handleNoType$1(token); 5844 this.listener.handleNoType$1(token);
6029 } 5845 }
6030 var implementsKeyword; 5846 var implementsKeyword;
6031 var interfacesCount = 0; 5847 var interfacesCount = 0;
6032 if ($notnull_bool(this.optional('implements', token))) { 5848 if (this.optional('implements', token)) {
6033 do { 5849 do {
6034 token = this.parseType(this.next(token)); 5850 token = this.parseType(this.next(token));
6035 ++interfacesCount; 5851 ++interfacesCount;
6036 } 5852 }
6037 while ($notnull_bool(this.optional(',', token))) 5853 while (this.optional(',', token))
6038 } 5854 }
6039 token = this.parseNativeClassClauseOpt(token); 5855 token = this.parseNativeClassClauseOpt(token);
6040 token = this.parseClassBody(token); 5856 token = this.parseClassBody(token);
6041 this.listener.endClass$5(interfacesCount, begin, extendsKeyword, implementsKey word, token); 5857 this.listener.endClass$5(interfacesCount, begin, extendsKeyword, implementsKey word, token);
6042 return token.next; 5858 return token.next;
6043 } 5859 }
6044 PartialParser.prototype.parseNativeClassClauseOpt = function(token) { 5860 PartialParser.prototype.parseNativeClassClauseOpt = function(token) {
6045 if ($notnull_bool(this.optional('native', token))) { 5861 if (this.optional('native', token)) {
6046 return this.parseString(this.next(token)); 5862 return this.parseString(this.next(token));
6047 } 5863 }
6048 return token; 5864 return token;
6049 } 5865 }
6050 PartialParser.prototype.parseString = function(token) { 5866 PartialParser.prototype.parseString = function(token) {
6051 var $0;
6052 if (token.kind === 39/*null.STRING_TOKEN*/) { 5867 if (token.kind === 39/*null.STRING_TOKEN*/) {
6053 return this.next(token); 5868 return this.next(token);
6054 } 5869 }
6055 else { 5870 else {
6056 return (($0 = this.listener.expected$2('string', token)) && $0.is$Token()); 5871 return this.listener.expected$2('string', token);
6057 } 5872 }
6058 } 5873 }
6059 PartialParser.prototype.parseIdentifier = function(token) { 5874 PartialParser.prototype.parseIdentifier = function(token) {
6060 if ($notnull_bool(this.isIdentifier(token))) { 5875 if (this.isIdentifier(token)) {
6061 this.listener.handleIdentifier$1(token); 5876 this.listener.handleIdentifier$1(token);
6062 } 5877 }
6063 else { 5878 else {
6064 this.listener.expectedIdentifier$1(token); 5879 this.listener.expectedIdentifier$1(token);
6065 } 5880 }
6066 return this.next(token); 5881 return this.next(token);
6067 } 5882 }
6068 PartialParser.prototype.expect = function(string, token) { 5883 PartialParser.prototype.expect = function(string, token) {
6069 if (string !== token.get$stringValue()) { 5884 if (string !== token.get$stringValue()) {
6070 if (string === '>') { 5885 if (string === '>') {
6071 if (token.get$stringValue() === '>>') { 5886 if (token.get$stringValue() === '>>') {
6072 var gt = new StringToken(62/*null.GT_TOKEN*/, '>', token.charOffset + 1) ; 5887 var gt = new StringToken(62/*null.GT_TOKEN*/, '>', token.charOffset + 1) ;
6073 gt.next = token.next; 5888 gt.next = token.next;
6074 return gt; 5889 return gt;
6075 } 5890 }
6076 else if (token.get$stringValue() === '>>>') { 5891 else if (token.get$stringValue() === '>>>') {
6077 var gtgt = new StringToken(1024/*null.UNKNOWN_TOKEN*/, '>>', token.charO ffset + 1); 5892 var gtgt = new StringToken(1024/*null.UNKNOWN_TOKEN*/, '>>', token.charO ffset + 1);
6078 gtgt.next = token.next; 5893 gtgt.next = token.next;
6079 return gtgt; 5894 return gtgt;
6080 } 5895 }
6081 } 5896 }
6082 return this.listener.expected$2(string, token); 5897 return this.listener.expected$2(string, token);
6083 } 5898 }
6084 return token.next; 5899 return token.next;
6085 } 5900 }
6086 PartialParser.prototype.parseTypeVariable = function(token) { 5901 PartialParser.prototype.parseTypeVariable = function(token) {
6087 this.listener.beginTypeVariable$1(token); 5902 this.listener.beginTypeVariable$1(token);
6088 token = this.parseIdentifier(token); 5903 token = this.parseIdentifier(token);
6089 if ($notnull_bool(this.optional('extends', token))) { 5904 if (this.optional('extends', token)) {
6090 token = this.parseType(this.next(token)); 5905 token = this.parseType(this.next(token));
6091 } 5906 }
6092 else { 5907 else {
6093 this.listener.handleNoType$1(token); 5908 this.listener.handleNoType$1(token);
6094 } 5909 }
6095 this.listener.endTypeVariable$1(token); 5910 this.listener.endTypeVariable$1(token);
6096 return token; 5911 return token;
6097 } 5912 }
6098 PartialParser.prototype.optional = function(value, token) { 5913 PartialParser.prototype.optional = function(value, token) {
6099 return value === token.get$stringValue(); 5914 return value === token.get$stringValue();
6100 } 5915 }
6101 PartialParser.prototype.parseType = function(token) { 5916 PartialParser.prototype.parseType = function(token) {
6102 var begin = token; 5917 var begin = token;
6103 var identifierCount = 1; 5918 var identifierCount = 1;
6104 if ($notnull_bool(this.isIdentifier(token))) { 5919 if (this.isIdentifier(token)) {
6105 token = this.parseIdentifier(token); 5920 token = this.parseIdentifier(token);
6106 while ($notnull_bool(this.optional('.', token))) { 5921 while (this.optional('.', token)) {
6107 token = this.parseIdentifier(this.next(token)); 5922 token = this.parseIdentifier(this.next(token));
6108 ++identifierCount; 5923 ++identifierCount;
6109 } 5924 }
6110 } 5925 }
6111 else if ($notnull_bool(this.optional('var', token))) { 5926 else if (this.optional('var', token)) {
6112 this.listener.handleVarKeyword$1(token); 5927 this.listener.handleVarKeyword$1(token);
6113 this.listener.endType$3(identifierCount, begin, token); 5928 this.listener.endType$3(identifierCount, begin, token);
6114 return this.next(token); 5929 return this.next(token);
6115 } 5930 }
6116 else { 5931 else {
6117 token = this.listener.expectedType$1(token); 5932 token = this.listener.expectedType$1(token);
6118 } 5933 }
6119 token = this.parseTypeArgumentsOpt(token); 5934 token = this.parseTypeArgumentsOpt(token);
6120 this.listener.endType$3(identifierCount, begin, token); 5935 this.listener.endType$3(identifierCount, begin, token);
6121 return token; 5936 return token;
6122 } 5937 }
6123 PartialParser.prototype.parseTypeArgumentsOpt = function(token) { 5938 PartialParser.prototype.parseTypeArgumentsOpt = function(token) {
6124 return this.parseStuff(token, this.beginTypeArguments, this.parseTypeFunction, this.endTypeArguments, this.handleNoTypeArguments); 5939 return this.parseStuff(token, this.beginTypeArguments, this.parseTypeFunction, this.endTypeArguments, this.handleNoTypeArguments);
6125 } 5940 }
6126 PartialParser.prototype.parseTypeVariablesOpt = function(token) { 5941 PartialParser.prototype.parseTypeVariablesOpt = function(token) {
6127 if ($notnull_bool(this.optional('<', token))) { 5942 if (this.optional('<', token)) {
6128 var beginGroupToken = (token && token.is$BeginGroupToken()); 5943 var beginGroupToken = token;
6129 token = this.next(beginGroupToken.endGroup); 5944 token = this.next(beginGroupToken.endGroup);
6130 } 5945 }
6131 this.listener.handleNoTypeVariables$1(token); 5946 this.listener.handleNoTypeVariables$1(token);
6132 return token; 5947 return token;
6133 } 5948 }
6134 PartialParser.prototype.parseStuff = function(token, beginStuff, stuffParser, en dStuff, handleNoStuff) { 5949 PartialParser.prototype.parseStuff = function(token, beginStuff, stuffParser, en dStuff, handleNoStuff) {
6135 var $0; 5950 if (this.optional('<', token)) {
6136 if ($notnull_bool(this.optional('<', token))) {
6137 var begin = token; 5951 var begin = token;
6138 beginStuff.call$1(begin); 5952 beginStuff.call$1(begin);
6139 var count = 0; 5953 var count = 0;
6140 do { 5954 do {
6141 token = (($0 = stuffParser.call$1(this.next(token))) && $0.is$Token()); 5955 token = stuffParser.call$1(this.next(token));
6142 ++count; 5956 ++count;
6143 } 5957 }
6144 while ($notnull_bool(this.optional(',', token))) 5958 while (this.optional(',', token))
6145 endStuff.call$3(count, begin, token); 5959 endStuff.call$3(count, begin, token);
6146 return this.expect('>', token); 5960 return this.expect('>', token);
6147 } 5961 }
6148 handleNoStuff.call$1(token); 5962 handleNoStuff.call$1(token);
6149 return token; 5963 return token;
6150 } 5964 }
6151 PartialParser.prototype.parseClassBody = function(token) { 5965 PartialParser.prototype.parseClassBody = function(token) {
6152 return this.skipBlock(token); 5966 return this.skipBlock(token);
6153 } 5967 }
6154 PartialParser.prototype.parseTopLevelMember = function(token) { 5968 PartialParser.prototype.parseTopLevelMember = function(token) {
(...skipping 15 matching lines...) Expand all
6170 5984
6171 previous = token; 5985 previous = token;
6172 token = this.next(token); 5986 token = this.next(token);
6173 break; 5987 break;
6174 5988
6175 } 5989 }
6176 } 5990 }
6177 token = this.parseIdentifier(previous); 5991 token = this.parseIdentifier(previous);
6178 var isField; 5992 var isField;
6179 while (true) { 5993 while (true) {
6180 if ($notnull_bool(this.optional('(', token))) { 5994 if (this.optional('(', token)) {
6181 isField = false; 5995 isField = false;
6182 break; 5996 break;
6183 } 5997 }
6184 else if ($notnull_bool(this.optional('=', token)) || $notnull_bool(this.opti onal(';', token))) { 5998 else if (this.optional('=', token) || this.optional(';', token)) {
6185 isField = true; 5999 isField = true;
6186 break; 6000 break;
6187 } 6001 }
6188 else { 6002 else {
6189 token = this.listener.unexpected$1(token); 6003 token = this.listener.unexpected$1(token);
6190 } 6004 }
6191 } 6005 }
6192 if (!$notnull_bool(isField)) { 6006 if (!isField) {
6193 token = this.next(this.skipArguments((token && token.is$BeginGroupToken()))) ; 6007 token = this.next(this.skipArguments(token));
6194 } 6008 }
6195 while (token != null && token.kind !== 123/*null.LBRACE_TOKEN*/ && token.kind !== 59/*null.SEMICOLON_TOKEN*/) { 6009 while (token != null && token.kind !== 123/*null.LBRACE_TOKEN*/ && token.kind !== 59/*null.SEMICOLON_TOKEN*/) {
6196 token = this.next(token); 6010 token = this.next(token);
6197 } 6011 }
6198 if (!$notnull_bool(this.optional(';', token))) { 6012 if (!this.optional(';', token)) {
6199 token = this.skipBlock(token); 6013 token = this.skipBlock(token);
6200 } 6014 }
6201 if ($notnull_bool(isField)) { 6015 if (isField) {
6202 this.listener.endTopLevelField$2(start, token); 6016 this.listener.endTopLevelField$2(start, token);
6203 } 6017 }
6204 else { 6018 else {
6205 this.listener.endTopLevelMethod$2(start, token); 6019 this.listener.endTopLevelMethod$2(start, token);
6206 } 6020 }
6207 return token.next; 6021 return token.next;
6208 } 6022 }
6209 PartialParser.prototype.parseLibraryTags = function(token) { 6023 PartialParser.prototype.parseLibraryTags = function(token) {
6210 this.listener.beginLibraryTag$1(token); 6024 this.listener.beginLibraryTag$1(token);
6211 token = this.parseIdentifier(this.next(token)); 6025 token = this.parseIdentifier(this.next(token));
(...skipping 16 matching lines...) Expand all
6228 PartialParser.prototype.endTypeVariables$3 = function($0, $1, $2) { 6042 PartialParser.prototype.endTypeVariables$3 = function($0, $1, $2) {
6229 return this.endTypeVariables.call$3($0, $1, $2); 6043 return this.endTypeVariables.call$3($0, $1, $2);
6230 }; 6044 };
6231 PartialParser.prototype.handleNoTypeArguments$1 = function($0) { 6045 PartialParser.prototype.handleNoTypeArguments$1 = function($0) {
6232 return this.handleNoTypeArguments.call$1($0); 6046 return this.handleNoTypeArguments.call$1($0);
6233 }; 6047 };
6234 PartialParser.prototype.handleNoTypeVariables$1 = function($0) { 6048 PartialParser.prototype.handleNoTypeVariables$1 = function($0) {
6235 return this.handleNoTypeVariables.call$1($0); 6049 return this.handleNoTypeVariables.call$1($0);
6236 }; 6050 };
6237 PartialParser.prototype.parseClass$1 = function($0) { 6051 PartialParser.prototype.parseClass$1 = function($0) {
6238 return this.parseClass(($0 && $0.is$Token())); 6052 return this.parseClass($0);
6239 }; 6053 };
6240 // ********** Code for Parser ************** 6054 // ********** Code for Parser **************
6241 function Parser(listener) { 6055 function Parser(listener) {
6242 PartialParser.call(this, listener); 6056 PartialParser.call(this, listener);
6243 // Initializers done 6057 // Initializers done
6244 } 6058 }
6245 $inherits(Parser, PartialParser); 6059 $inherits(Parser, PartialParser);
6246 Parser.prototype.parseFunction = function(token) { 6060 Parser.prototype.parseFunction = function(token) {
6247 this.listener.beginFunction$1(token); 6061 this.listener.beginFunction$1(token);
6248 token = this.parseReturnTypeOpt(token); 6062 token = this.parseReturnTypeOpt(token);
6249 this.listener.beginFunctionName$1(token); 6063 this.listener.beginFunctionName$1(token);
6250 token = this.parseIdentifier(token); 6064 token = this.parseIdentifier(token);
6251 this.listener.endFunctionName$1(token); 6065 this.listener.endFunctionName$1(token);
6252 token = this.parseFormalParameters(token); 6066 token = this.parseFormalParameters(token);
6253 return this.parseFunctionBody(token); 6067 return this.parseFunctionBody(token);
6254 } 6068 }
6255 Parser.prototype.parseFunctionBody = function(token) { 6069 Parser.prototype.parseFunctionBody = function(token) {
6256 if ($notnull_bool(this.optional(';', token))) { 6070 if (this.optional(';', token)) {
6257 this.listener.endFunctionBody$3(0, null, token); 6071 this.listener.endFunctionBody$3(0, null, token);
6258 return token.next; 6072 return token.next;
6259 } 6073 }
6260 var begin = token; 6074 var begin = token;
6261 var statementCount = 0; 6075 var statementCount = 0;
6262 this.listener.beginFunctionBody$1(begin); 6076 this.listener.beginFunctionBody$1(begin);
6263 token = this.checkEof(this.expect('{', token)); 6077 token = this.checkEof(this.expect('{', token));
6264 while (!$notnull_bool(this.optional('}', token))) { 6078 while (!this.optional('}', token)) {
6265 token = this.parseStatement(token); 6079 token = this.parseStatement(token);
6266 ++statementCount; 6080 ++statementCount;
6267 } 6081 }
6268 this.listener.endFunctionBody$3(statementCount, begin, token); 6082 this.listener.endFunctionBody$3(statementCount, begin, token);
6269 return this.expect('}', token); 6083 return this.expect('}', token);
6270 } 6084 }
6271 Parser.prototype.parseStatement = function(token) { 6085 Parser.prototype.parseStatement = function(token) {
6272 this.checkEof(token); 6086 this.checkEof(token);
6273 var value = token.get$stringValue(); 6087 var value = token.get$stringValue();
6274 switch (true) { 6088 switch (true) {
(...skipping 30 matching lines...) Expand all
6305 return this.parseExpressionStatement(token); 6119 return this.parseExpressionStatement(token);
6306 6120
6307 } 6121 }
6308 } 6122 }
6309 Parser.prototype.expectSemicolon = function(token) { 6123 Parser.prototype.expectSemicolon = function(token) {
6310 return this.expect(';', token); 6124 return this.expect(';', token);
6311 } 6125 }
6312 Parser.prototype.parseReturnStatement = function(token) { 6126 Parser.prototype.parseReturnStatement = function(token) {
6313 var begin = token; 6127 var begin = token;
6314 this.listener.beginReturnStatement$1(begin); 6128 this.listener.beginReturnStatement$1(begin);
6315 $assert('return' === token.get$stringValue(), "'return' === token.stringValue" , "parser.dart", 455, 12);
6316 token = this.next(token); 6129 token = this.next(token);
6317 if ($notnull_bool(this.optional(';', token))) { 6130 if (this.optional(';', token)) {
6318 this.listener.endReturnStatement$3(false, begin, token); 6131 this.listener.endReturnStatement$3(false, begin, token);
6319 } 6132 }
6320 else { 6133 else {
6321 token = this.parseExpression(token); 6134 token = this.parseExpression(token);
6322 this.listener.endReturnStatement$3(true, begin, token); 6135 this.listener.endReturnStatement$3(true, begin, token);
6323 } 6136 }
6324 return this.expectSemicolon(token); 6137 return this.expectSemicolon(token);
6325 } 6138 }
6326 Parser.prototype.parseExpressionStatementOrDeclaration = function(token) { 6139 Parser.prototype.parseExpressionStatementOrDeclaration = function(token) {
6327 $assert(token.kind === 97/*null.IDENTIFIER_TOKEN*/, "token.kind === IDENTIFIER _TOKEN", "parser.dart", 467, 12);
6328 var peek = token.next; 6140 var peek = token.next;
6329 if (peek.kind === 46/*null.PERIOD_TOKEN*/) { 6141 if (peek.kind === 46/*null.PERIOD_TOKEN*/) {
6330 if (peek.next.kind === 97/*null.IDENTIFIER_TOKEN*/) { 6142 if (peek.next.kind === 97/*null.IDENTIFIER_TOKEN*/) {
6331 peek = peek.next.next; 6143 peek = peek.next.next;
6332 } 6144 }
6333 } 6145 }
6334 if (peek.kind === 97/*null.IDENTIFIER_TOKEN*/) { 6146 if (peek.kind === 97/*null.IDENTIFIER_TOKEN*/) {
6335 return this.parseLocalDeclaration(token, peek); 6147 return this.parseLocalDeclaration(token, peek);
6336 } 6148 }
6337 else if (peek.kind === 60/*null.LT_TOKEN*/) { 6149 else if (peek.kind === 60/*null.LT_TOKEN*/) {
6338 var beginGroupToken = (peek && peek.is$BeginGroupToken()); 6150 var beginGroupToken = peek;
6339 var gtToken = beginGroupToken.endGroup; 6151 var gtToken = beginGroupToken.endGroup;
6340 if (gtToken != null && gtToken.next.kind === 97/*null.IDENTIFIER_TOKEN*/) { 6152 if (gtToken != null && gtToken.next.kind === 97/*null.IDENTIFIER_TOKEN*/) {
6341 var identifier = gtToken.next; 6153 var identifier = gtToken.next;
6342 var afterId = identifier.next; 6154 var afterId = identifier.next;
6343 var afterIdKind = afterId.kind; 6155 var afterIdKind = afterId.kind;
6344 if (afterIdKind === 61/*null.EQ_TOKEN*/ || afterIdKind === 59/*null.SEMICO LON_TOKEN*/) { 6156 if (afterIdKind === 61/*null.EQ_TOKEN*/ || afterIdKind === 59/*null.SEMICO LON_TOKEN*/) {
6345 return this.parseLocalDeclaration(token, identifier); 6157 return this.parseLocalDeclaration(token, identifier);
6346 } 6158 }
6347 else if (afterIdKind === 41/*null.RPAREN_TOKEN*/) { 6159 else if (afterIdKind === 41/*null.RPAREN_TOKEN*/) {
6348 var beginParen = (afterId && afterId.is$BeginGroupToken()); 6160 var beginParen = afterId;
6349 var endParen = beginParen.endGroup; 6161 var endParen = beginParen.endGroup;
6350 var afterParens = endParen.next; 6162 var afterParens = endParen.next;
6351 if ($notnull_bool(this.optional('{', afterParens)) || $notnull_bool(this .optional('=>', afterParens))) { 6163 if (this.optional('{', afterParens) || this.optional('=>', afterParens)) {
6352 return this.parseLocalDeclaration(token, identifier); 6164 return this.parseLocalDeclaration(token, identifier);
6353 } 6165 }
6354 } 6166 }
6355 } 6167 }
6356 } 6168 }
6357 return this.parseExpressionStatement(token); 6169 return this.parseExpressionStatement(token);
6358 } 6170 }
6359 Parser.prototype.parseLocalDeclaration = function(token, peek1) { 6171 Parser.prototype.parseLocalDeclaration = function(token, peek1) {
6360 var peek2 = this.next(peek1); 6172 var peek2 = this.next(peek1);
6361 if (peek2.get$stringValue() === '(') { 6173 if (peek2.get$stringValue() === '(') {
6362 return this.parseFunction(token); 6174 return this.parseFunction(token);
6363 } 6175 }
6364 else { 6176 else {
6365 return this.parseVariablesDeclaration(token); 6177 return this.parseVariablesDeclaration(token);
6366 } 6178 }
6367 } 6179 }
6368 Parser.prototype.parseExpressionStatement = function(token) { 6180 Parser.prototype.parseExpressionStatement = function(token) {
6369 this.listener.beginExpressionStatement$1(token); 6181 this.listener.beginExpressionStatement$1(token);
6370 token = this.parseExpression(token); 6182 token = this.parseExpression(token);
6371 this.listener.endExpressionStatement$1(token); 6183 this.listener.endExpressionStatement$1(token);
6372 return this.expectSemicolon(token); 6184 return this.expectSemicolon(token);
6373 } 6185 }
6374 Parser.prototype.parseExpression = function(token) { 6186 Parser.prototype.parseExpression = function(token) {
6375 token = this.parseConditionalExpression(token); 6187 token = this.parseConditionalExpression(token);
6376 if ($notnull_bool(this.isAssignmentOperator(token))) { 6188 if (this.isAssignmentOperator(token)) {
6377 var operator = token; 6189 var operator = token;
6378 token = this.parseExpression(this.next(token)); 6190 token = this.parseExpression(this.next(token));
6379 this.listener.handleAssignmentExpression$1(operator); 6191 this.listener.handleAssignmentExpression$1(operator);
6380 } 6192 }
6381 return token; 6193 return token;
6382 } 6194 }
6383 Parser.prototype.isAssignmentOperator = function(token) { 6195 Parser.prototype.isAssignmentOperator = function(token) {
6384 return 2 === this.getPrecedence(token); 6196 return 2 === this.getPrecedence(token);
6385 } 6197 }
6386 Parser.prototype.parseConditionalExpression = function(token) { 6198 Parser.prototype.parseConditionalExpression = function(token) {
6387 token = this.parseBinaryExpression(token, 4); 6199 token = this.parseBinaryExpression(token, 4);
6388 if ($notnull_bool(this.optional('?', token))) { 6200 if (this.optional('?', token)) {
6389 var question = token; 6201 var question = token;
6390 token = this.parseExpression(this.next(token)); 6202 token = this.parseExpression(this.next(token));
6391 var colon = token; 6203 var colon = token;
6392 token = this.expect(':', token); 6204 token = this.expect(':', token);
6393 token = this.parseExpression(token); 6205 token = this.parseExpression(token);
6394 this.listener.handleConditionalExpression$2(question, colon); 6206 this.listener.handleConditionalExpression$2(question, colon);
6395 } 6207 }
6396 return token; 6208 return token;
6397 } 6209 }
6398 Parser.prototype.parseBinaryExpression = function(token, precedence) { 6210 Parser.prototype.parseBinaryExpression = function(token, precedence) {
6399 $assert(precedence >= 4, "precedence >= 4", "parser.dart", 553, 12);
6400 token = this.parsePrimary(token); 6211 token = this.parsePrimary(token);
6401 var tokenLevel = this.getPrecedence(token); 6212 var tokenLevel = this.getPrecedence(token);
6402 for (var level = $assert_num(tokenLevel); 6213 for (var level = tokenLevel;
6403 level >= precedence; --level) { 6214 level >= precedence; --level) {
6404 while (tokenLevel === level) { 6215 while (tokenLevel === level) {
6405 var operator = token; 6216 var operator = token;
6406 token = this.parseBinaryExpression(this.next(token), level + 1); 6217 token = this.parseBinaryExpression(this.next(token), level + 1);
6407 this.listener.handleBinaryExpression$1(operator); 6218 this.listener.handleBinaryExpression$1(operator);
6408 tokenLevel = this.getPrecedence(token); 6219 tokenLevel = this.getPrecedence(token);
6409 } 6220 }
6410 } 6221 }
6411 return token; 6222 return token;
6412 } 6223 }
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
6643 return token.next; 6454 return token.next;
6644 } 6455 }
6645 Parser.prototype.parseSend = function(token) { 6456 Parser.prototype.parseSend = function(token) {
6646 this.listener.beginSend$1(token); 6457 this.listener.beginSend$1(token);
6647 token = this.parseIdentifier(token); 6458 token = this.parseIdentifier(token);
6648 token = this.parseArgumentsOpt(token); 6459 token = this.parseArgumentsOpt(token);
6649 this.listener.endSend$1(token); 6460 this.listener.endSend$1(token);
6650 return token; 6461 return token;
6651 } 6462 }
6652 Parser.prototype.parseArgumentsOpt = function(token) { 6463 Parser.prototype.parseArgumentsOpt = function(token) {
6653 if (!$notnull_bool(this.optional('(', token))) { 6464 if (!this.optional('(', token)) {
6654 this.listener.handleNoArguments$1(token); 6465 this.listener.handleNoArguments$1(token);
6655 return token; 6466 return token;
6656 } 6467 }
6657 else { 6468 else {
6658 return this.parseArguments(token); 6469 return this.parseArguments(token);
6659 } 6470 }
6660 } 6471 }
6661 Parser.prototype.parseArguments = function(token) { 6472 Parser.prototype.parseArguments = function(token) {
6662 var begin = token; 6473 var begin = token;
6663 this.listener.beginArguments$1(begin); 6474 this.listener.beginArguments$1(begin);
6664 $assert('(' === token.get$stringValue(), "'(' === token.stringValue", "parser. dart", 686, 12);
6665 var argumentCount = 0; 6475 var argumentCount = 0;
6666 if ($notnull_bool(this.optional(')', token.next))) { 6476 if (this.optional(')', token.next)) {
6667 this.listener.endArguments$3(argumentCount, begin, token.next); 6477 this.listener.endArguments$3(argumentCount, begin, token.next);
6668 return token.next.next; 6478 return token.next.next;
6669 } 6479 }
6670 do { 6480 do {
6671 token = this.parseExpression(this.next(token)); 6481 token = this.parseExpression(this.next(token));
6672 ++argumentCount; 6482 ++argumentCount;
6673 } 6483 }
6674 while ($notnull_bool(this.optional(',', token))) 6484 while (this.optional(',', token))
6675 this.listener.endArguments$3(argumentCount, begin, token); 6485 this.listener.endArguments$3(argumentCount, begin, token);
6676 return this.expect(')', token); 6486 return this.expect(')', token);
6677 } 6487 }
6678 Parser.prototype.parseVariablesDeclaration = function(token) { 6488 Parser.prototype.parseVariablesDeclaration = function(token) {
6679 var count = 1; 6489 var count = 1;
6680 this.listener.beginVariablesDeclaration$1(token); 6490 this.listener.beginVariablesDeclaration$1(token);
6681 token = this.parseFinalVarOrType(token); 6491 token = this.parseFinalVarOrType(token);
6682 token = this.parseOptionallyInitializedIdentifier(token); 6492 token = this.parseOptionallyInitializedIdentifier(token);
6683 while ($notnull_bool(this.optional(',', token))) { 6493 while (this.optional(',', token)) {
6684 token = this.parseOptionallyInitializedIdentifier(this.next(token)); 6494 token = this.parseOptionallyInitializedIdentifier(this.next(token));
6685 ++count; 6495 ++count;
6686 } 6496 }
6687 this.listener.endVariablesDeclaration$2(count, token); 6497 this.listener.endVariablesDeclaration$2(count, token);
6688 return this.expectSemicolon(token); 6498 return this.expectSemicolon(token);
6689 } 6499 }
6690 Parser.prototype.parseOptionallyInitializedIdentifier = function(token) { 6500 Parser.prototype.parseOptionallyInitializedIdentifier = function(token) {
6691 this.listener.beginInitializedIdentifier$1(token); 6501 this.listener.beginInitializedIdentifier$1(token);
6692 token = this.parseIdentifier(token); 6502 token = this.parseIdentifier(token);
6693 if ($notnull_bool(this.optional('=', token))) { 6503 if (this.optional('=', token)) {
6694 var assignment = token; 6504 var assignment = token;
6695 this.listener.beginInitializer$1(token); 6505 this.listener.beginInitializer$1(token);
6696 token = this.parseExpression(this.next(token)); 6506 token = this.parseExpression(this.next(token));
6697 this.listener.endInitializer$1(assignment); 6507 this.listener.endInitializer$1(assignment);
6698 } 6508 }
6699 this.listener.endInitializedIdentifier$0(); 6509 this.listener.endInitializedIdentifier$0();
6700 return token; 6510 return token;
6701 } 6511 }
6702 Parser.prototype.parseFinalVarOrType = function(token) { 6512 Parser.prototype.parseFinalVarOrType = function(token) {
6703 var value = token.get$stringValue(); 6513 var value = token.get$stringValue();
(...skipping 10 matching lines...) Expand all
6714 } 6524 }
6715 } 6525 }
6716 Parser.prototype.parseIfStatement = function(token) { 6526 Parser.prototype.parseIfStatement = function(token) {
6717 var ifToken = token; 6527 var ifToken = token;
6718 this.listener.beginIfStatement$1(ifToken); 6528 this.listener.beginIfStatement$1(ifToken);
6719 token = this.expect('if', token); 6529 token = this.expect('if', token);
6720 this.expect('(', token); 6530 this.expect('(', token);
6721 token = this.parseArguments(token); 6531 token = this.parseArguments(token);
6722 token = this.parseStatement(token); 6532 token = this.parseStatement(token);
6723 var elseToken = null; 6533 var elseToken = null;
6724 if ($notnull_bool(this.optional('else', token))) { 6534 if (this.optional('else', token)) {
6725 elseToken = token; 6535 elseToken = token;
6726 token = this.parseStatement(token.next); 6536 token = this.parseStatement(token.next);
6727 } 6537 }
6728 this.listener.endIfStatement$2(ifToken, elseToken); 6538 this.listener.endIfStatement$2(ifToken, elseToken);
6729 return token; 6539 return token;
6730 } 6540 }
6731 Parser.prototype.parseForStatement = function(token) { 6541 Parser.prototype.parseForStatement = function(token) {
6732 var forToken = token; 6542 var forToken = token;
6733 this.listener.beginForStatement$1(forToken); 6543 this.listener.beginForStatement$1(forToken);
6734 token = this.expect('for', token); 6544 token = this.expect('for', token);
6735 token = this.expect('(', token); 6545 token = this.expect('(', token);
6736 token = this.parseVariablesDeclaration(token); 6546 token = this.parseVariablesDeclaration(token);
6737 token = this.parseExpressionStatement(token); 6547 token = this.parseExpressionStatement(token);
6738 token = this.parseExpression(token); 6548 token = this.parseExpression(token);
6739 token = this.expect(')', token); 6549 token = this.expect(')', token);
6740 token = this.parseStatement(token); 6550 token = this.parseStatement(token);
6741 this.listener.endForStatement$2(forToken, token); 6551 this.listener.endForStatement$2(forToken, token);
6742 return token; 6552 return token;
6743 } 6553 }
6744 Parser.prototype.parseBlock = function(token) { 6554 Parser.prototype.parseBlock = function(token) {
6745 var begin = token; 6555 var begin = token;
6746 this.listener.beginBlock$1(begin); 6556 this.listener.beginBlock$1(begin);
6747 var statementCount = 0; 6557 var statementCount = 0;
6748 token = this.expect('{', token); 6558 token = this.expect('{', token);
6749 while (!$notnull_bool(this.optional('}', token))) { 6559 while (!this.optional('}', token)) {
6750 token = this.parseStatement(token); 6560 token = this.parseStatement(token);
6751 ++statementCount; 6561 ++statementCount;
6752 } 6562 }
6753 this.listener.endBlock$3(statementCount, begin, token); 6563 this.listener.endBlock$3(statementCount, begin, token);
6754 return this.expect('}', token); 6564 return this.expect('}', token);
6755 } 6565 }
6756 Parser.prototype.parseThrowStatement = function(token) { 6566 Parser.prototype.parseThrowStatement = function(token) {
6757 var throwToken = token; 6567 var throwToken = token;
6758 this.listener.beginThrowStatement$1(throwToken); 6568 this.listener.beginThrowStatement$1(throwToken);
6759 token = this.expect('throw', token); 6569 token = this.expect('throw', token);
6760 if ($notnull_bool(this.optional(';', token))) { 6570 if (this.optional(';', token)) {
6761 this.listener.endRethrowStatement$2(throwToken, token); 6571 this.listener.endRethrowStatement$2(throwToken, token);
6762 return token.next; 6572 return token.next;
6763 } 6573 }
6764 else { 6574 else {
6765 token = this.parseExpression(token); 6575 token = this.parseExpression(token);
6766 this.listener.endThrowStatement$2(throwToken, token); 6576 this.listener.endThrowStatement$2(throwToken, token);
6767 return this.expectSemicolon(token); 6577 return this.expectSemicolon(token);
6768 } 6578 }
6769 } 6579 }
6770 Parser.prototype.parseFunction$1 = function($0) { 6580 Parser.prototype.parseFunction$1 = function($0) {
6771 return this.parseFunction(($0 && $0.is$Token())); 6581 return this.parseFunction($0);
6772 }; 6582 };
6773 // ********** Code for ParserTask ************** 6583 // ********** Code for ParserTask **************
6774 function ParserTask(compiler) { 6584 function ParserTask(compiler) {
6775 CompilerTask.call(this, compiler); 6585 CompilerTask.call(this, compiler);
6776 // Initializers done 6586 // Initializers done
6777 } 6587 }
6778 $inherits(ParserTask, CompilerTask); 6588 $inherits(ParserTask, CompilerTask);
6779 ParserTask.prototype.get$name = function() { 6589 ParserTask.prototype.get$name = function() {
6780 return 'Parser'; 6590 return 'Parser';
6781 } 6591 }
6782 ParserTask.prototype.parse = function(element) { 6592 ParserTask.prototype.parse = function(element) {
6783 var $this = this; // closure support 6593 var $this = this; // closure support
6784 var $0; 6594 return this.measure((function () {
6785 return (($0 = this.measure((function () {
6786 return element.parseNode($this.compiler, $this.compiler); 6595 return element.parseNode($this.compiler, $this.compiler);
6787 }) 6596 })
6788 )) && $0.is$Node()); 6597 );
6789 } 6598 }
6790 // ********** Code for Listener ************** 6599 // ********** Code for Listener **************
6791 function Listener() {} 6600 function Listener() {}
6792 Listener.prototype.beginArguments = function(token) { 6601 Listener.prototype.beginArguments = function(token) {
6793 6602
6794 } 6603 }
6795 Listener.prototype.endArguments = function(count, beginToken, endToken) { 6604 Listener.prototype.endArguments = function(count, beginToken, endToken) {
6796 6605
6797 } 6606 }
6798 Listener.prototype.beginBlock = function(token) { 6607 Listener.prototype.beginBlock = function(token) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
6990 Listener.prototype.expectedType = function(token) { 6799 Listener.prototype.expectedType = function(token) {
6991 $throw(new ParserError(("Expected a type, but got '" + token + "' @ ") + ("" + token.charOffset + ""))); 6800 $throw(new ParserError(("Expected a type, but got '" + token + "' @ ") + ("" + token.charOffset + "")));
6992 } 6801 }
6993 Listener.prototype.expectedBlock = function(token) { 6802 Listener.prototype.expectedBlock = function(token) {
6994 $throw(new ParserError(("Expected a block, but got '" + token + "' @ ") + ("" + token.charOffset + ""))); 6803 $throw(new ParserError(("Expected a block, but got '" + token + "' @ ") + ("" + token.charOffset + "")));
6995 } 6804 }
6996 Listener.prototype.unexpected = function(token) { 6805 Listener.prototype.unexpected = function(token) {
6997 $throw(new ParserError(("Unexpected token '" + token + "' @ " + token.charOffs et + ""))); 6806 $throw(new ParserError(("Unexpected token '" + token + "' @ " + token.charOffs et + "")));
6998 } 6807 }
6999 Listener.prototype.beginArguments$1 = function($0) { 6808 Listener.prototype.beginArguments$1 = function($0) {
7000 return this.beginArguments(($0 && $0.is$Token())); 6809 return this.beginArguments($0);
7001 }; 6810 };
7002 Listener.prototype.beginBlock$1 = function($0) { 6811 Listener.prototype.beginBlock$1 = function($0) {
7003 return this.beginBlock(($0 && $0.is$Token())); 6812 return this.beginBlock($0);
7004 }; 6813 };
7005 Listener.prototype.beginClass$1 = function($0) { 6814 Listener.prototype.beginClass$1 = function($0) {
7006 return this.beginClass(($0 && $0.is$Token())); 6815 return this.beginClass($0);
7007 }; 6816 };
7008 Listener.prototype.beginExpressionStatement$1 = function($0) { 6817 Listener.prototype.beginExpressionStatement$1 = function($0) {
7009 return this.beginExpressionStatement(($0 && $0.is$Token())); 6818 return this.beginExpressionStatement($0);
7010 }; 6819 };
7011 Listener.prototype.beginForStatement$1 = function($0) { 6820 Listener.prototype.beginForStatement$1 = function($0) {
7012 return this.beginForStatement(($0 && $0.is$Token())); 6821 return this.beginForStatement($0);
7013 }; 6822 };
7014 Listener.prototype.beginFormalParameter$1 = function($0) { 6823 Listener.prototype.beginFormalParameter$1 = function($0) {
7015 return this.beginFormalParameter(($0 && $0.is$Token())); 6824 return this.beginFormalParameter($0);
7016 }; 6825 };
7017 Listener.prototype.beginFormalParameters$1 = function($0) { 6826 Listener.prototype.beginFormalParameters$1 = function($0) {
7018 return this.beginFormalParameters(($0 && $0.is$Token())); 6827 return this.beginFormalParameters($0);
7019 }; 6828 };
7020 Listener.prototype.beginFunction$1 = function($0) { 6829 Listener.prototype.beginFunction$1 = function($0) {
7021 return this.beginFunction(($0 && $0.is$Token())); 6830 return this.beginFunction($0);
7022 }; 6831 };
7023 Listener.prototype.beginFunctionBody$1 = function($0) { 6832 Listener.prototype.beginFunctionBody$1 = function($0) {
7024 return this.beginFunctionBody(($0 && $0.is$Token())); 6833 return this.beginFunctionBody($0);
7025 }; 6834 };
7026 Listener.prototype.beginFunctionName$1 = function($0) { 6835 Listener.prototype.beginFunctionName$1 = function($0) {
7027 return this.beginFunctionName(($0 && $0.is$Token())); 6836 return this.beginFunctionName($0);
7028 }; 6837 };
7029 Listener.prototype.beginFunctionTypeAlias$1 = function($0) { 6838 Listener.prototype.beginFunctionTypeAlias$1 = function($0) {
7030 return this.beginFunctionTypeAlias(($0 && $0.is$Token())); 6839 return this.beginFunctionTypeAlias($0);
7031 }; 6840 };
7032 Listener.prototype.beginIfStatement$1 = function($0) { 6841 Listener.prototype.beginIfStatement$1 = function($0) {
7033 return this.beginIfStatement(($0 && $0.is$Token())); 6842 return this.beginIfStatement($0);
7034 }; 6843 };
7035 Listener.prototype.beginInitializedIdentifier$1 = function($0) { 6844 Listener.prototype.beginInitializedIdentifier$1 = function($0) {
7036 return this.beginInitializedIdentifier(($0 && $0.is$Token())); 6845 return this.beginInitializedIdentifier($0);
7037 }; 6846 };
7038 Listener.prototype.beginInitializer$1 = function($0) { 6847 Listener.prototype.beginInitializer$1 = function($0) {
7039 return this.beginInitializer(($0 && $0.is$Token())); 6848 return this.beginInitializer($0);
7040 }; 6849 };
7041 Listener.prototype.beginInterface$1 = function($0) { 6850 Listener.prototype.beginInterface$1 = function($0) {
7042 return this.beginInterface(($0 && $0.is$Token())); 6851 return this.beginInterface($0);
7043 }; 6852 };
7044 Listener.prototype.beginLibraryTag$1 = function($0) { 6853 Listener.prototype.beginLibraryTag$1 = function($0) {
7045 return this.beginLibraryTag(($0 && $0.is$Token())); 6854 return this.beginLibraryTag($0);
7046 }; 6855 };
7047 Listener.prototype.beginReturnStatement$1 = function($0) { 6856 Listener.prototype.beginReturnStatement$1 = function($0) {
7048 return this.beginReturnStatement(($0 && $0.is$Token())); 6857 return this.beginReturnStatement($0);
7049 }; 6858 };
7050 Listener.prototype.beginSend$1 = function($0) { 6859 Listener.prototype.beginSend$1 = function($0) {
7051 return this.beginSend(($0 && $0.is$Token())); 6860 return this.beginSend($0);
7052 }; 6861 };
7053 Listener.prototype.beginThrowStatement$1 = function($0) { 6862 Listener.prototype.beginThrowStatement$1 = function($0) {
7054 return this.beginThrowStatement(($0 && $0.is$Token())); 6863 return this.beginThrowStatement($0);
7055 }; 6864 };
7056 Listener.prototype.beginTopLevelMember$1 = function($0) { 6865 Listener.prototype.beginTopLevelMember$1 = function($0) {
7057 return this.beginTopLevelMember(($0 && $0.is$Token())); 6866 return this.beginTopLevelMember($0);
7058 }; 6867 };
7059 Listener.prototype.beginTypeArguments$1 = function($0) { 6868 Listener.prototype.beginTypeArguments$1 = function($0) {
7060 return this.beginTypeArguments(($0 && $0.is$Token())); 6869 return this.beginTypeArguments($0);
7061 }; 6870 };
7062 Listener.prototype.beginTypeVariable$1 = function($0) { 6871 Listener.prototype.beginTypeVariable$1 = function($0) {
7063 return this.beginTypeVariable(($0 && $0.is$Token())); 6872 return this.beginTypeVariable($0);
7064 }; 6873 };
7065 Listener.prototype.beginTypeVariables$1 = function($0) { 6874 Listener.prototype.beginTypeVariables$1 = function($0) {
7066 return this.beginTypeVariables(($0 && $0.is$Token())); 6875 return this.beginTypeVariables($0);
7067 }; 6876 };
7068 Listener.prototype.beginVariablesDeclaration$1 = function($0) { 6877 Listener.prototype.beginVariablesDeclaration$1 = function($0) {
7069 return this.beginVariablesDeclaration(($0 && $0.is$Token())); 6878 return this.beginVariablesDeclaration($0);
7070 }; 6879 };
7071 Listener.prototype.endArguments$3 = function($0, $1, $2) { 6880 Listener.prototype.endArguments$3 = function($0, $1, $2) {
7072 return this.endArguments($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$ Token())); 6881 return this.endArguments($0, $1, $2);
7073 }; 6882 };
7074 Listener.prototype.endBlock$3 = function($0, $1, $2) { 6883 Listener.prototype.endBlock$3 = function($0, $1, $2) {
7075 return this.endBlock($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Toke n())); 6884 return this.endBlock($0, $1, $2);
7076 }; 6885 };
7077 Listener.prototype.endClass$5 = function($0, $1, $2, $3, $4) { 6886 Listener.prototype.endClass$5 = function($0, $1, $2, $3, $4) {
7078 return this.endClass($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Toke n()), ($3 && $3.is$Token()), ($4 && $4.is$Token())); 6887 return this.endClass($0, $1, $2, $3, $4);
7079 }; 6888 };
7080 Listener.prototype.endExpressionStatement$1 = function($0) { 6889 Listener.prototype.endExpressionStatement$1 = function($0) {
7081 return this.endExpressionStatement(($0 && $0.is$Token())); 6890 return this.endExpressionStatement($0);
7082 }; 6891 };
7083 Listener.prototype.endForStatement$2 = function($0, $1) { 6892 Listener.prototype.endForStatement$2 = function($0, $1) {
7084 return this.endForStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6893 return this.endForStatement($0, $1);
7085 }; 6894 };
7086 Listener.prototype.endFormalParameter$1 = function($0) { 6895 Listener.prototype.endFormalParameter$1 = function($0) {
7087 return this.endFormalParameter(($0 && $0.is$Token())); 6896 return this.endFormalParameter($0);
7088 }; 6897 };
7089 Listener.prototype.endFormalParameters$3 = function($0, $1, $2) { 6898 Listener.prototype.endFormalParameters$3 = function($0, $1, $2) {
7090 return this.endFormalParameters($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Token())); 6899 return this.endFormalParameters($0, $1, $2);
7091 }; 6900 };
7092 Listener.prototype.endFunctionBody$3 = function($0, $1, $2) { 6901 Listener.prototype.endFunctionBody$3 = function($0, $1, $2) {
7093 return this.endFunctionBody($assert_num($0), ($1 && $1.is$Token()), ($2 && $2. is$Token())); 6902 return this.endFunctionBody($0, $1, $2);
7094 }; 6903 };
7095 Listener.prototype.endFunctionName$1 = function($0) { 6904 Listener.prototype.endFunctionName$1 = function($0) {
7096 return this.endFunctionName(($0 && $0.is$Token())); 6905 return this.endFunctionName($0);
7097 }; 6906 };
7098 Listener.prototype.endFunctionTypeAlias$1 = function($0) { 6907 Listener.prototype.endFunctionTypeAlias$1 = function($0) {
7099 return this.endFunctionTypeAlias(($0 && $0.is$Token())); 6908 return this.endFunctionTypeAlias($0);
7100 }; 6909 };
7101 Listener.prototype.endIfStatement$2 = function($0, $1) { 6910 Listener.prototype.endIfStatement$2 = function($0, $1) {
7102 return this.endIfStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6911 return this.endIfStatement($0, $1);
7103 }; 6912 };
7104 Listener.prototype.endInitializedIdentifier$0 = function() { 6913 Listener.prototype.endInitializedIdentifier$0 = function() {
7105 return this.endInitializedIdentifier(); 6914 return this.endInitializedIdentifier();
7106 }; 6915 };
7107 Listener.prototype.endInitializer$1 = function($0) { 6916 Listener.prototype.endInitializer$1 = function($0) {
7108 return this.endInitializer(($0 && $0.is$Token())); 6917 return this.endInitializer($0);
7109 }; 6918 };
7110 Listener.prototype.endInterface$1 = function($0) { 6919 Listener.prototype.endInterface$1 = function($0) {
7111 return this.endInterface(($0 && $0.is$Token())); 6920 return this.endInterface($0);
7112 }; 6921 };
7113 Listener.prototype.endRethrowStatement$2 = function($0, $1) { 6922 Listener.prototype.endRethrowStatement$2 = function($0, $1) {
7114 return this.endRethrowStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6923 return this.endRethrowStatement($0, $1);
7115 }; 6924 };
7116 Listener.prototype.endReturnStatement$3 = function($0, $1, $2) { 6925 Listener.prototype.endReturnStatement$3 = function($0, $1, $2) {
7117 return this.endReturnStatement($assert_bool($0), ($1 && $1.is$Token()), ($2 && $2.is$Token())); 6926 return this.endReturnStatement($0, $1, $2);
7118 }; 6927 };
7119 Listener.prototype.endSend$1 = function($0) { 6928 Listener.prototype.endSend$1 = function($0) {
7120 return this.endSend(($0 && $0.is$Token())); 6929 return this.endSend($0);
7121 }; 6930 };
7122 Listener.prototype.endThrowStatement$2 = function($0, $1) { 6931 Listener.prototype.endThrowStatement$2 = function($0, $1) {
7123 return this.endThrowStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6932 return this.endThrowStatement($0, $1);
7124 }; 6933 };
7125 Listener.prototype.endTopLevelField$2 = function($0, $1) { 6934 Listener.prototype.endTopLevelField$2 = function($0, $1) {
7126 return this.endTopLevelField(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6935 return this.endTopLevelField($0, $1);
7127 }; 6936 };
7128 Listener.prototype.endTopLevelMethod$2 = function($0, $1) { 6937 Listener.prototype.endTopLevelMethod$2 = function($0, $1) {
7129 return this.endTopLevelMethod(($0 && $0.is$Token()), ($1 && $1.is$Token())); 6938 return this.endTopLevelMethod($0, $1);
7130 }; 6939 };
7131 Listener.prototype.endType$3 = function($0, $1, $2) { 6940 Listener.prototype.endType$3 = function($0, $1, $2) {
7132 return this.endType($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Token ())); 6941 return this.endType($0, $1, $2);
7133 }; 6942 };
7134 Listener.prototype.endTypeArguments$3 = function($0, $1, $2) { 6943 Listener.prototype.endTypeArguments$3 = function($0, $1, $2) {
7135 return this.endTypeArguments($assert_num($0), ($1 && $1.is$Token()), ($2 && $2 .is$Token())); 6944 return this.endTypeArguments($0, $1, $2);
7136 }; 6945 };
7137 Listener.prototype.endTypeVariable$1 = function($0) { 6946 Listener.prototype.endTypeVariable$1 = function($0) {
7138 return this.endTypeVariable(($0 && $0.is$Token())); 6947 return this.endTypeVariable($0);
7139 }; 6948 };
7140 Listener.prototype.endTypeVariables$3 = function($0, $1, $2) { 6949 Listener.prototype.endTypeVariables$3 = function($0, $1, $2) {
7141 return this.endTypeVariables($assert_num($0), ($1 && $1.is$Token()), ($2 && $2 .is$Token())); 6950 return this.endTypeVariables($0, $1, $2);
7142 }; 6951 };
7143 Listener.prototype.endVariablesDeclaration$2 = function($0, $1) { 6952 Listener.prototype.endVariablesDeclaration$2 = function($0, $1) {
7144 return this.endVariablesDeclaration($assert_num($0), ($1 && $1.is$Token())); 6953 return this.endVariablesDeclaration($0, $1);
7145 }; 6954 };
7146 Listener.prototype.expected$2 = function($0, $1) { 6955 Listener.prototype.expected$2 = function($0, $1) {
7147 return this.expected($assert_String($0), ($1 && $1.is$Token())); 6956 return this.expected($0, $1);
7148 }; 6957 };
7149 Listener.prototype.expectedBlock$1 = function($0) { 6958 Listener.prototype.expectedBlock$1 = function($0) {
7150 return this.expectedBlock(($0 && $0.is$Token())); 6959 return this.expectedBlock($0);
7151 }; 6960 };
7152 Listener.prototype.expectedIdentifier$1 = function($0) { 6961 Listener.prototype.expectedIdentifier$1 = function($0) {
7153 return this.expectedIdentifier(($0 && $0.is$Token())); 6962 return this.expectedIdentifier($0);
7154 }; 6963 };
7155 Listener.prototype.expectedType$1 = function($0) { 6964 Listener.prototype.expectedType$1 = function($0) {
7156 return this.expectedType(($0 && $0.is$Token())); 6965 return this.expectedType($0);
7157 }; 6966 };
7158 Listener.prototype.handleAssignmentExpression$1 = function($0) { 6967 Listener.prototype.handleAssignmentExpression$1 = function($0) {
7159 return this.handleAssignmentExpression(($0 && $0.is$Token())); 6968 return this.handleAssignmentExpression($0);
7160 }; 6969 };
7161 Listener.prototype.handleBinaryExpression$1 = function($0) { 6970 Listener.prototype.handleBinaryExpression$1 = function($0) {
7162 return this.handleBinaryExpression(($0 && $0.is$Token())); 6971 return this.handleBinaryExpression($0);
7163 }; 6972 };
7164 Listener.prototype.handleConditionalExpression$2 = function($0, $1) { 6973 Listener.prototype.handleConditionalExpression$2 = function($0, $1) {
7165 return this.handleConditionalExpression(($0 && $0.is$Token()), ($1 && $1.is$To ken())); 6974 return this.handleConditionalExpression($0, $1);
7166 }; 6975 };
7167 Listener.prototype.handleIdentifier$1 = function($0) { 6976 Listener.prototype.handleIdentifier$1 = function($0) {
7168 return this.handleIdentifier(($0 && $0.is$Token())); 6977 return this.handleIdentifier($0);
7169 }; 6978 };
7170 Listener.prototype.handleLiteralBool$1 = function($0) { 6979 Listener.prototype.handleLiteralBool$1 = function($0) {
7171 return this.handleLiteralBool(($0 && $0.is$Token())); 6980 return this.handleLiteralBool($0);
7172 }; 6981 };
7173 Listener.prototype.handleLiteralDouble$1 = function($0) { 6982 Listener.prototype.handleLiteralDouble$1 = function($0) {
7174 return this.handleLiteralDouble(($0 && $0.is$Token())); 6983 return this.handleLiteralDouble($0);
7175 }; 6984 };
7176 Listener.prototype.handleLiteralInt$1 = function($0) { 6985 Listener.prototype.handleLiteralInt$1 = function($0) {
7177 return this.handleLiteralInt(($0 && $0.is$Token())); 6986 return this.handleLiteralInt($0);
7178 }; 6987 };
7179 Listener.prototype.handleLiteralString$1 = function($0) { 6988 Listener.prototype.handleLiteralString$1 = function($0) {
7180 return this.handleLiteralString(($0 && $0.is$Token())); 6989 return this.handleLiteralString($0);
7181 }; 6990 };
7182 Listener.prototype.handleNoArguments$1 = function($0) { 6991 Listener.prototype.handleNoArguments$1 = function($0) {
7183 return this.handleNoArguments(($0 && $0.is$Token())); 6992 return this.handleNoArguments($0);
7184 }; 6993 };
7185 Listener.prototype.handleNoType$1 = function($0) { 6994 Listener.prototype.handleNoType$1 = function($0) {
7186 return this.handleNoType(($0 && $0.is$Token())); 6995 return this.handleNoType($0);
7187 }; 6996 };
7188 Listener.prototype.handleNoTypeArguments$1 = function($0) { 6997 Listener.prototype.handleNoTypeArguments$1 = function($0) {
7189 return this.handleNoTypeArguments(($0 && $0.is$Token())); 6998 return this.handleNoTypeArguments($0);
7190 }; 6999 };
7191 Listener.prototype.handleNoTypeVariables$1 = function($0) { 7000 Listener.prototype.handleNoTypeVariables$1 = function($0) {
7192 return this.handleNoTypeVariables(($0 && $0.is$Token())); 7001 return this.handleNoTypeVariables($0);
7193 }; 7002 };
7194 Listener.prototype.handleVarKeyword$1 = function($0) { 7003 Listener.prototype.handleVarKeyword$1 = function($0) {
7195 return this.handleVarKeyword(($0 && $0.is$Token())); 7004 return this.handleVarKeyword($0);
7196 }; 7005 };
7197 Listener.prototype.handleVoidKeyword$1 = function($0) { 7006 Listener.prototype.handleVoidKeyword$1 = function($0) {
7198 return this.handleVoidKeyword(($0 && $0.is$Token())); 7007 return this.handleVoidKeyword($0);
7199 }; 7008 };
7200 Listener.prototype.unexpected$1 = function($0) { 7009 Listener.prototype.unexpected$1 = function($0) {
7201 return this.unexpected(($0 && $0.is$Token())); 7010 return this.unexpected($0);
7202 }; 7011 };
7203 Listener.prototype.unexpectedEof$0 = function() { 7012 Listener.prototype.unexpectedEof$0 = function() {
7204 return this.unexpectedEof(); 7013 return this.unexpectedEof();
7205 }; 7014 };
7206 // ********** Code for ParserError ************** 7015 // ********** Code for ParserError **************
7207 function ParserError(reason) { 7016 function ParserError(reason) {
7208 this.reason = reason; 7017 this.reason = reason;
7209 // Initializers done 7018 // Initializers done
7210 } 7019 }
7211 ParserError.prototype.toString = function() { 7020 ParserError.prototype.toString = function() {
7212 return this.reason; 7021 return this.reason;
7213 } 7022 }
7214 ParserError.prototype.toString$0 = function() { 7023 ParserError.prototype.toString$0 = function() {
7215 return this.toString(); 7024 return this.toString();
7216 }; 7025 };
7217 // ********** Code for ElementListener ************** 7026 // ********** Code for ElementListener **************
7218 function ElementListener(canceler) { 7027 function ElementListener(canceler) {
7219 this.previousIdentifier = null 7028 this.previousIdentifier = null
7220 this.nodes = const$14/*const EmptyLink()*/ 7029 this.nodes = const$14/*const EmptyLink()*/
7221 this.topLevelElements = const$14/*const EmptyLink()*/ 7030 this.topLevelElements = const$14/*const EmptyLink()*/
7222 this.canceler = canceler; 7031 this.canceler = canceler;
7223 // Initializers done 7032 // Initializers done
7224 } 7033 }
7225 $inherits(ElementListener, Listener); 7034 $inherits(ElementListener, Listener);
7226 ElementListener.prototype.beginLibraryTag = function(token) { 7035 ElementListener.prototype.beginLibraryTag = function(token) {
7227 this.canceler.cancel("Cannot handle library tags"); 7036 this.canceler.cancel("Cannot handle library tags");
7228 } 7037 }
7229 ElementListener.prototype.endClass = function(interfacesCount, beginToken, exten dsKeyword, implementsKeyword, endToken) { 7038 ElementListener.prototype.endClass = function(interfacesCount, beginToken, exten dsKeyword, implementsKeyword, endToken) {
7230 var $0;
7231 for (; interfacesCount > 0; --interfacesCount) { 7039 for (; interfacesCount > 0; --interfacesCount) {
7232 this.popNode(); 7040 this.popNode();
7233 } 7041 }
7234 var supertype = (($0 = this.popNode()) && $0.is$Identifier()); 7042 var supertype = this.popNode();
7235 var name = (($0 = this.popNode()) && $0.is$Identifier()); 7043 var name = this.popNode();
7236 this.pushElement(new PartialClassElement(name.get$source(), beginToken, endTok en)); 7044 this.pushElement(new PartialClassElement(name.get$source(), beginToken, endTok en));
7237 } 7045 }
7238 ElementListener.prototype.endInterface = function(token) { 7046 ElementListener.prototype.endInterface = function(token) {
7239 this.canceler.cancel("Cannot handle interfaces"); 7047 this.canceler.cancel("Cannot handle interfaces");
7240 } 7048 }
7241 ElementListener.prototype.endFunctionTypeAlias = function(token) { 7049 ElementListener.prototype.endFunctionTypeAlias = function(token) {
7242 this.canceler.cancel("Cannot handle typedefs"); 7050 this.canceler.cancel("Cannot handle typedefs");
7243 } 7051 }
7244 ElementListener.prototype.endTopLevelMethod = function(beginToken, endToken) { 7052 ElementListener.prototype.endTopLevelMethod = function(beginToken, endToken) {
7245 var $0; 7053 var name = this.popNode();
7246 var name = (($0 = this.popNode()) && $0.is$Identifier());
7247 this.pushElement(new PartialFunctionElement(name.get$source(), beginToken, end Token)); 7054 this.pushElement(new PartialFunctionElement(name.get$source(), beginToken, end Token));
7248 } 7055 }
7249 ElementListener.prototype.endTopLevelField = function(beginToken, endToken) { 7056 ElementListener.prototype.endTopLevelField = function(beginToken, endToken) {
7250 this.canceler.cancel("Cannot handle fields"); 7057 this.canceler.cancel("Cannot handle fields");
7251 } 7058 }
7252 ElementListener.prototype.handleIdentifier = function(token) { 7059 ElementListener.prototype.handleIdentifier = function(token) {
7253 this.pushNode(new Identifier(token)); 7060 this.pushNode(new Identifier(token));
7254 } 7061 }
7255 ElementListener.prototype.handleNoType = function(token) { 7062 ElementListener.prototype.handleNoType = function(token) {
7256 this.pushNode(null); 7063 this.pushNode(null);
7257 } 7064 }
7258 ElementListener.prototype.endTypeVariable = function(token) { 7065 ElementListener.prototype.endTypeVariable = function(token) {
7259 var $0; 7066 var bound = this.popNode();
7260 var bound = (($0 = this.popNode()) && $0.is$TypeAnnotation()); 7067 var name = this.popNode();
7261 var name = (($0 = this.popNode()) && $0.is$Identifier());
7262 } 7068 }
7263 ElementListener.prototype.endTypeArguments = function(count, beginToken, endToke n) { 7069 ElementListener.prototype.endTypeArguments = function(count, beginToken, endToke n) {
7264 for (; count > 0; --count) { 7070 for (; count > 0; --count) {
7265 this.popNode(); 7071 this.popNode();
7266 } 7072 }
7267 } 7073 }
7268 ElementListener.prototype.expected = function(string, token) { 7074 ElementListener.prototype.expected = function(string, token) {
7269 this.canceler.cancel(("Expected '" + string + "', but got '" + token + "' ") + ("@ " + token.charOffset + "")); 7075 this.canceler.cancel(("Expected '" + string + "', but got '" + token + "' ") + ("@ " + token.charOffset + ""));
7270 } 7076 }
7271 ElementListener.prototype.unexpectedEof = function() { 7077 ElementListener.prototype.unexpectedEof = function() {
7272 this.canceler.cancel("Unexpected end of file"); 7078 this.canceler.cancel("Unexpected end of file");
7273 } 7079 }
7274 ElementListener.prototype.expectedIdentifier = function(token) { 7080 ElementListener.prototype.expectedIdentifier = function(token) {
7275 this.canceler.cancel(("Expected identifier, but got '" + token + "' ") + ("@ " + token.charOffset + "")); 7081 this.canceler.cancel(("Expected identifier, but got '" + token + "' ") + ("@ " + token.charOffset + ""));
7276 } 7082 }
7277 ElementListener.prototype.expectedType = function(token) { 7083 ElementListener.prototype.expectedType = function(token) {
7278 this.canceler.cancel(("Expected a type, but got '" + token + "' @ " + token.ch arOffset + "")); 7084 this.canceler.cancel(("Expected a type, but got '" + token + "' @ " + token.ch arOffset + ""));
7279 } 7085 }
7280 ElementListener.prototype.expectedBlock = function(token) { 7086 ElementListener.prototype.expectedBlock = function(token) {
7281 this.canceler.cancel(("Expected a block, but got '" + token + "' @ " + token.c harOffset + "")); 7087 this.canceler.cancel(("Expected a block, but got '" + token + "' @ " + token.c harOffset + ""));
7282 } 7088 }
7283 ElementListener.prototype.unexpected = function(token) { 7089 ElementListener.prototype.unexpected = function(token) {
7284 this.canceler.cancel(("Unexpected token '" + token + "' @ " + token.charOffset + "")); 7090 this.canceler.cancel(("Unexpected token '" + token + "' @ " + token.charOffset + ""));
7285 } 7091 }
7286 ElementListener.prototype.pushElement = function(element) { 7092 ElementListener.prototype.pushElement = function(element) {
7287 var $0; 7093 this.topLevelElements = this.topLevelElements.prepend(element);
7288 this.topLevelElements = (($0 = this.topLevelElements.prepend(element)) && $0.i s$Link$Element());
7289 } 7094 }
7290 ElementListener.prototype.pushNode = function(node) { 7095 ElementListener.prototype.pushNode = function(node) {
7291 var $0; 7096 this.nodes = this.nodes.prepend(node);
7292 this.nodes = (($0 = this.nodes.prepend(node)) && $0.is$Link$Node());
7293 this.log(("push " + this.nodes + "")); 7097 this.log(("push " + this.nodes + ""));
7294 } 7098 }
7295 ElementListener.prototype.popNode = function() { 7099 ElementListener.prototype.popNode = function() {
7296 var $0; 7100 var node = this.nodes.get$head();
7297 $assert(!$notnull_bool(this.nodes.isEmpty()), "!nodes.isEmpty()", "listener.da rt", 337, 12); 7101 this.nodes = this.nodes.get$tail();
7298 var node = (($0 = this.nodes.get$head()) && $0.is$Node());
7299 this.nodes = (($0 = this.nodes.get$tail()) && $0.is$Link$Node());
7300 this.log(("pop " + this.nodes + "")); 7102 this.log(("pop " + this.nodes + ""));
7301 return node; 7103 return node;
7302 } 7104 }
7303 ElementListener.prototype.log = function(message) { 7105 ElementListener.prototype.log = function(message) {
7304 7106
7305 } 7107 }
7306 ElementListener.prototype.beginLibraryTag$1 = function($0) { 7108 ElementListener.prototype.beginLibraryTag$1 = function($0) {
7307 return this.beginLibraryTag(($0 && $0.is$Token())); 7109 return this.beginLibraryTag($0);
7308 }; 7110 };
7309 ElementListener.prototype.endClass$5 = function($0, $1, $2, $3, $4) { 7111 ElementListener.prototype.endClass$5 = function($0, $1, $2, $3, $4) {
7310 return this.endClass($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Toke n()), ($3 && $3.is$Token()), ($4 && $4.is$Token())); 7112 return this.endClass($0, $1, $2, $3, $4);
7311 }; 7113 };
7312 ElementListener.prototype.endFunctionTypeAlias$1 = function($0) { 7114 ElementListener.prototype.endFunctionTypeAlias$1 = function($0) {
7313 return this.endFunctionTypeAlias(($0 && $0.is$Token())); 7115 return this.endFunctionTypeAlias($0);
7314 }; 7116 };
7315 ElementListener.prototype.endInterface$1 = function($0) { 7117 ElementListener.prototype.endInterface$1 = function($0) {
7316 return this.endInterface(($0 && $0.is$Token())); 7118 return this.endInterface($0);
7317 }; 7119 };
7318 ElementListener.prototype.endTopLevelField$2 = function($0, $1) { 7120 ElementListener.prototype.endTopLevelField$2 = function($0, $1) {
7319 return this.endTopLevelField(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7121 return this.endTopLevelField($0, $1);
7320 }; 7122 };
7321 ElementListener.prototype.endTopLevelMethod$2 = function($0, $1) { 7123 ElementListener.prototype.endTopLevelMethod$2 = function($0, $1) {
7322 return this.endTopLevelMethod(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7124 return this.endTopLevelMethod($0, $1);
7323 }; 7125 };
7324 ElementListener.prototype.endTypeArguments$3 = function($0, $1, $2) { 7126 ElementListener.prototype.endTypeArguments$3 = function($0, $1, $2) {
7325 return this.endTypeArguments($assert_num($0), ($1 && $1.is$Token()), ($2 && $2 .is$Token())); 7127 return this.endTypeArguments($0, $1, $2);
7326 }; 7128 };
7327 ElementListener.prototype.endTypeVariable$1 = function($0) { 7129 ElementListener.prototype.endTypeVariable$1 = function($0) {
7328 return this.endTypeVariable(($0 && $0.is$Token())); 7130 return this.endTypeVariable($0);
7329 }; 7131 };
7330 ElementListener.prototype.expected$2 = function($0, $1) { 7132 ElementListener.prototype.expected$2 = function($0, $1) {
7331 return this.expected($assert_String($0), ($1 && $1.is$Token())); 7133 return this.expected($0, $1);
7332 }; 7134 };
7333 ElementListener.prototype.expectedBlock$1 = function($0) { 7135 ElementListener.prototype.expectedBlock$1 = function($0) {
7334 return this.expectedBlock(($0 && $0.is$Token())); 7136 return this.expectedBlock($0);
7335 }; 7137 };
7336 ElementListener.prototype.expectedIdentifier$1 = function($0) { 7138 ElementListener.prototype.expectedIdentifier$1 = function($0) {
7337 return this.expectedIdentifier(($0 && $0.is$Token())); 7139 return this.expectedIdentifier($0);
7338 }; 7140 };
7339 ElementListener.prototype.expectedType$1 = function($0) { 7141 ElementListener.prototype.expectedType$1 = function($0) {
7340 return this.expectedType(($0 && $0.is$Token())); 7142 return this.expectedType($0);
7341 }; 7143 };
7342 ElementListener.prototype.handleIdentifier$1 = function($0) { 7144 ElementListener.prototype.handleIdentifier$1 = function($0) {
7343 return this.handleIdentifier(($0 && $0.is$Token())); 7145 return this.handleIdentifier($0);
7344 }; 7146 };
7345 ElementListener.prototype.handleNoType$1 = function($0) { 7147 ElementListener.prototype.handleNoType$1 = function($0) {
7346 return this.handleNoType(($0 && $0.is$Token())); 7148 return this.handleNoType($0);
7347 }; 7149 };
7348 ElementListener.prototype.unexpected$1 = function($0) { 7150 ElementListener.prototype.unexpected$1 = function($0) {
7349 return this.unexpected(($0 && $0.is$Token())); 7151 return this.unexpected($0);
7350 }; 7152 };
7351 ElementListener.prototype.unexpectedEof$0 = function() { 7153 ElementListener.prototype.unexpectedEof$0 = function() {
7352 return this.unexpectedEof(); 7154 return this.unexpectedEof();
7353 }; 7155 };
7354 // ********** Code for NodeListener ************** 7156 // ********** Code for NodeListener **************
7355 function NodeListener(canceler, logger) { 7157 function NodeListener(canceler, logger) {
7356 this.logger = logger; 7158 this.logger = logger;
7357 ElementListener.call(this, canceler); 7159 ElementListener.call(this, canceler);
7358 // Initializers done 7160 // Initializers done
7359 this.onError = this.get$handleOnError(); 7161 this.onError = this.get$handleOnError();
7360 } 7162 }
7361 $inherits(NodeListener, ElementListener); 7163 $inherits(NodeListener, ElementListener);
7362 NodeListener.prototype.endClass = function(interfacesCount, beginToken, extendsK eyword, implementsKeyword, endToken) { 7164 NodeListener.prototype.endClass = function(interfacesCount, beginToken, extendsK eyword, implementsKeyword, endToken) {
7363 var $0;
7364 var interfaces = this.makeNodeList(interfacesCount, implementsKeyword, null, " ,"); 7165 var interfaces = this.makeNodeList(interfacesCount, implementsKeyword, null, " ,");
7365 var supertype = (($0 = this.popNode()) && $0.is$TypeAnnotation()); 7166 var supertype = this.popNode();
7366 var name = (($0 = this.popNode()) && $0.is$Identifier()); 7167 var name = this.popNode();
7367 this.pushNode(new ClassNode(name, supertype, interfaces, beginToken, extendsKe yword, endToken)); 7168 this.pushNode(new ClassNode(name, supertype, interfaces, beginToken, extendsKe yword, endToken));
7368 } 7169 }
7369 NodeListener.prototype.endFormalParameter = function(token) { 7170 NodeListener.prototype.endFormalParameter = function(token) {
7370 var $0;
7371 var name = new NodeList.singleton$ctor(this.popNode()); 7171 var name = new NodeList.singleton$ctor(this.popNode());
7372 var type = (($0 = this.popNode()) && $0.is$TypeAnnotation()); 7172 var type = this.popNode();
7373 this.pushNode(new VariableDefinitions(type, null, name, token)); 7173 this.pushNode(new VariableDefinitions(type, null, name, token));
7374 } 7174 }
7375 NodeListener.prototype.endFormalParameters = function(count, beginToken, endToke n) { 7175 NodeListener.prototype.endFormalParameters = function(count, beginToken, endToke n) {
7376 this.pushNode(this.makeNodeList(count, beginToken, endToken, ",")); 7176 this.pushNode(this.makeNodeList(count, beginToken, endToken, ","));
7377 } 7177 }
7378 NodeListener.prototype.endArguments = function(count, beginToken, endToken) { 7178 NodeListener.prototype.endArguments = function(count, beginToken, endToken) {
7379 this.pushNode(this.makeNodeList(count, beginToken, endToken, ",")); 7179 this.pushNode(this.makeNodeList(count, beginToken, endToken, ","));
7380 } 7180 }
7381 NodeListener.prototype.handleNoArguments = function(token) { 7181 NodeListener.prototype.handleNoArguments = function(token) {
7382 this.pushNode(null); 7182 this.pushNode(null);
7383 } 7183 }
7384 NodeListener.prototype.endReturnStatement = function(hasExpression, beginToken, endToken) { 7184 NodeListener.prototype.endReturnStatement = function(hasExpression, beginToken, endToken) {
7385 var $0; 7185 var expression = hasExpression ? this.popNode() : null;
7386 var expression = (($0 = $notnull_bool(hasExpression) ? this.popNode() : null) && $0.is$Expression());
7387 this.pushNode(new Return(beginToken, endToken, expression)); 7186 this.pushNode(new Return(beginToken, endToken, expression));
7388 } 7187 }
7389 NodeListener.prototype.endExpressionStatement = function(token) { 7188 NodeListener.prototype.endExpressionStatement = function(token) {
7390 this.pushNode(new ExpressionStatement(this.popNode(), token)); 7189 this.pushNode(new ExpressionStatement(this.popNode(), token));
7391 } 7190 }
7392 NodeListener.prototype.handleOnError = function(token, error) { 7191 NodeListener.prototype.handleOnError = function(token, error) {
7393 this.canceler.cancel(("internal error @ " + token.charOffset + ": '" + token.g et$value() + "'") + (": " + error + "")); 7192 this.canceler.cancel(("internal error @ " + token.charOffset + ": '" + token.g et$value() + "'") + (": " + error + ""));
7394 } 7193 }
7395 NodeListener.prototype.get$handleOnError = function() { 7194 NodeListener.prototype.get$handleOnError = function() {
7396 return NodeListener.prototype.handleOnError.bind(this); 7195 return NodeListener.prototype.handleOnError.bind(this);
(...skipping 11 matching lines...) Expand all
7408 this.pushNode(new LiteralString(token)); 7207 this.pushNode(new LiteralString(token));
7409 } 7208 }
7410 NodeListener.prototype.handleBinaryExpression = function(token) { 7209 NodeListener.prototype.handleBinaryExpression = function(token) {
7411 var arguments = new NodeList(null, LinkFactory.Link$factory(this.popNode()), n ull, null); 7210 var arguments = new NodeList(null, LinkFactory.Link$factory(this.popNode()), n ull, null);
7412 this.pushNode(new Send(this.popNode(), new Operator(token), arguments)); 7211 this.pushNode(new Send(this.popNode(), new Operator(token), arguments));
7413 } 7212 }
7414 NodeListener.prototype.handleAssignmentExpression = function(token) { 7213 NodeListener.prototype.handleAssignmentExpression = function(token) {
7415 var arguments = new NodeList.singleton$ctor(this.popNode()); 7214 var arguments = new NodeList.singleton$ctor(this.popNode());
7416 var node = this.popNode(); 7215 var node = this.popNode();
7417 if (!(node instanceof Send)) this.canceler.cancel(('not assignable: ' + node + '')); 7216 if (!(node instanceof Send)) this.canceler.cancel(('not assignable: ' + node + ''));
7418 var send = (node && node.is$Send()); 7217 var send = node;
7419 if (!$notnull_bool(send.get$isPropertyAccess())) this.canceler.cancel(('not as signable: ' + node + '')); 7218 if (!send.get$isPropertyAccess()) this.canceler.cancel(('not assignable: ' + n ode + ''));
7420 if ((send instanceof SendSet)) this.canceler.cancel('chained assignment'); 7219 if ((send instanceof SendSet)) this.canceler.cancel('chained assignment');
7421 this.pushNode(new SendSet(send.receiver, send.selector, token, arguments)); 7220 this.pushNode(new SendSet(send.receiver, send.selector, token, arguments));
7422 } 7221 }
7423 NodeListener.prototype.handleConditionalExpression = function(question, colon) { 7222 NodeListener.prototype.handleConditionalExpression = function(question, colon) {
7424 var elseExpression = this.popNode(); 7223 var elseExpression = this.popNode();
7425 var thenExpression = this.popNode(); 7224 var thenExpression = this.popNode();
7426 var condition = this.popNode(); 7225 var condition = this.popNode();
7427 this.canceler.cancel('conditional expression not implemented yet'); 7226 this.canceler.cancel('conditional expression not implemented yet');
7428 } 7227 }
7429 NodeListener.prototype.endSend = function(token) { 7228 NodeListener.prototype.endSend = function(token) {
7430 var $0; 7229 var arguments = this.popNode();
7431 var arguments = (($0 = this.popNode()) && $0.is$NodeList());
7432 var selector = this.popNode(); 7230 var selector = this.popNode();
7433 this.pushNode(new Send(null, selector, arguments)); 7231 this.pushNode(new Send(null, selector, arguments));
7434 } 7232 }
7435 NodeListener.prototype.handleVoidKeyword = function(token) { 7233 NodeListener.prototype.handleVoidKeyword = function(token) {
7436 this.pushNode(new TypeAnnotation(new Identifier(token))); 7234 this.pushNode(new TypeAnnotation(new Identifier(token)));
7437 } 7235 }
7438 NodeListener.prototype.endFunctionBody = function(count, beginToken, endToken) { 7236 NodeListener.prototype.endFunctionBody = function(count, beginToken, endToken) {
7439 var $0;
7440 var block = new Block(this.makeNodeList(count, beginToken, endToken, null)); 7237 var block = new Block(this.makeNodeList(count, beginToken, endToken, null));
7441 var formals = this.popNode(); 7238 var formals = this.popNode();
7442 var name = this.popNode(); 7239 var name = this.popNode();
7443 var type = (($0 = this.popNode()) && $0.is$TypeAnnotation()); 7240 var type = this.popNode();
7444 this.pushNode(new FunctionExpression(name, formals, block, type)); 7241 this.pushNode(new FunctionExpression(name, formals, block, type));
7445 } 7242 }
7446 NodeListener.prototype.handleVarKeyword = function(token) { 7243 NodeListener.prototype.handleVarKeyword = function(token) {
7447 this.pushNode(new Identifier(token)); 7244 this.pushNode(new Identifier(token));
7448 } 7245 }
7449 NodeListener.prototype.handleFinalKeyword = function(token) { 7246 NodeListener.prototype.handleFinalKeyword = function(token) {
7450 this.pushNode(new Identifier(token)); 7247 this.pushNode(new Identifier(token));
7451 } 7248 }
7452 NodeListener.prototype.endVariablesDeclaration = function(count, endToken) { 7249 NodeListener.prototype.endVariablesDeclaration = function(count, endToken) {
7453 var $0;
7454 var variables = this.makeNodeList(count, null, null, ","); 7250 var variables = this.makeNodeList(count, null, null, ",");
7455 var type = (($0 = this.popNode()) && $0.is$TypeAnnotation()); 7251 var type = this.popNode();
7456 this.pushNode(new VariableDefinitions(type, null, variables, endToken)); 7252 this.pushNode(new VariableDefinitions(type, null, variables, endToken));
7457 } 7253 }
7458 NodeListener.prototype.endInitializer = function(assignmentOperator) { 7254 NodeListener.prototype.endInitializer = function(assignmentOperator) {
7459 var $0; 7255 var initializer = this.popNode();
7460 var initializer = (($0 = this.popNode()) && $0.is$Expression());
7461 var arguments = new NodeList.singleton$ctor(initializer); 7256 var arguments = new NodeList.singleton$ctor(initializer);
7462 var name = (($0 = this.popNode()) && $0.is$Expression()); 7257 var name = this.popNode();
7463 this.pushNode(new SendSet(null, name, assignmentOperator, arguments)); 7258 this.pushNode(new SendSet(null, name, assignmentOperator, arguments));
7464 } 7259 }
7465 NodeListener.prototype.endIfStatement = function(ifToken, elseToken) { 7260 NodeListener.prototype.endIfStatement = function(ifToken, elseToken) {
7466 var $0; 7261 var elsePart = (elseToken == null) ? null : this.popNode();
7467 var elsePart = (($0 = (elseToken == null) ? null : this.popNode()) && $0.is$St atement()); 7262 var thenPart = this.popNode();
7468 var thenPart = (($0 = this.popNode()) && $0.is$Statement()); 7263 var condition = this.popNode();
7469 var condition = (($0 = this.popNode()) && $0.is$NodeList());
7470 this.pushNode(new If(condition, thenPart, elsePart, ifToken, elseToken)); 7264 this.pushNode(new If(condition, thenPart, elsePart, ifToken, elseToken));
7471 } 7265 }
7472 NodeListener.prototype.endForStatement = function(beginToken, endToken) { 7266 NodeListener.prototype.endForStatement = function(beginToken, endToken) {
7473 var $0; 7267 var body = this.popNode();
7474 var body = (($0 = this.popNode()) && $0.is$Statement()); 7268 var update = this.popNode();
7475 var update = (($0 = this.popNode()) && $0.is$Expression()); 7269 var condition = this.popNode();
7476 var condition = (($0 = this.popNode()) && $0.is$ExpressionStatement()); 7270 var initializer = this.popNode();
7477 var initializer = (($0 = this.popNode()) && $0.is$VariableDefinitions());
7478 this.pushNode(new For(initializer, condition, update, body, beginToken)); 7271 this.pushNode(new For(initializer, condition, update, body, beginToken));
7479 } 7272 }
7480 NodeListener.prototype.endBlock = function(count, beginToken, endToken) { 7273 NodeListener.prototype.endBlock = function(count, beginToken, endToken) {
7481 this.pushNode(new Block(this.makeNodeList(count, beginToken, endToken, null))) ; 7274 this.pushNode(new Block(this.makeNodeList(count, beginToken, endToken, null))) ;
7482 } 7275 }
7483 NodeListener.prototype.endType = function(count, beginToken, endToken) { 7276 NodeListener.prototype.endType = function(count, beginToken, endToken) {
7484 var $0; 7277 var type = new TypeAnnotation(this.popNode());
7485 var type = new TypeAnnotation((($0 = this.popNode()) && $0.is$Identifier()));
7486 for (; count > 1; --count) { 7278 for (; count > 1; --count) {
7487 this.popNode(); 7279 this.popNode();
7488 } 7280 }
7489 this.pushNode(type); 7281 this.pushNode(type);
7490 } 7282 }
7491 NodeListener.prototype.endThrowStatement = function(throwToken, endToken) { 7283 NodeListener.prototype.endThrowStatement = function(throwToken, endToken) {
7492 var $0; 7284 var expression = this.popNode();
7493 var expression = (($0 = this.popNode()) && $0.is$Expression());
7494 this.pushNode(new Throw(expression, throwToken, endToken)); 7285 this.pushNode(new Throw(expression, throwToken, endToken));
7495 } 7286 }
7496 NodeListener.prototype.endRethrowStatement = function(throwToken, endToken) { 7287 NodeListener.prototype.endRethrowStatement = function(throwToken, endToken) {
7497 this.pushNode(new Throw(null, throwToken, endToken)); 7288 this.pushNode(new Throw(null, throwToken, endToken));
7498 } 7289 }
7499 NodeListener.prototype.makeNodeList = function(count, beginToken, endToken, deli miter) { 7290 NodeListener.prototype.makeNodeList = function(count, beginToken, endToken, deli miter) {
7500 var $0;
7501 var nodes = const$14/*const EmptyLink()*/; 7291 var nodes = const$14/*const EmptyLink()*/;
7502 for (; count > 0; --count) { 7292 for (; count > 0; --count) {
7503 nodes = (($0 = nodes.prepend(this.popNode())) && $0.is$Link$Node()); 7293 nodes = nodes.prepend(this.popNode());
7504 } 7294 }
7505 var sourceDelimiter = (($0 = (delimiter == null) ? null : new StringWrapper(de limiter)) && $0.is$SourceString()); 7295 var sourceDelimiter = (delimiter == null) ? null : new StringWrapper(delimiter );
7506 return new NodeList(beginToken, nodes, endToken, sourceDelimiter); 7296 return new NodeList(beginToken, nodes, endToken, sourceDelimiter);
7507 } 7297 }
7508 NodeListener.prototype.log = function(message) { 7298 NodeListener.prototype.log = function(message) {
7509 this.logger.log(message); 7299 this.logger.log(message);
7510 } 7300 }
7511 NodeListener.prototype.endArguments$3 = function($0, $1, $2) { 7301 NodeListener.prototype.endArguments$3 = function($0, $1, $2) {
7512 return this.endArguments($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$ Token())); 7302 return this.endArguments($0, $1, $2);
7513 }; 7303 };
7514 NodeListener.prototype.endBlock$3 = function($0, $1, $2) { 7304 NodeListener.prototype.endBlock$3 = function($0, $1, $2) {
7515 return this.endBlock($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Toke n())); 7305 return this.endBlock($0, $1, $2);
7516 }; 7306 };
7517 NodeListener.prototype.endClass$5 = function($0, $1, $2, $3, $4) { 7307 NodeListener.prototype.endClass$5 = function($0, $1, $2, $3, $4) {
7518 return this.endClass($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Toke n()), ($3 && $3.is$Token()), ($4 && $4.is$Token())); 7308 return this.endClass($0, $1, $2, $3, $4);
7519 }; 7309 };
7520 NodeListener.prototype.endExpressionStatement$1 = function($0) { 7310 NodeListener.prototype.endExpressionStatement$1 = function($0) {
7521 return this.endExpressionStatement(($0 && $0.is$Token())); 7311 return this.endExpressionStatement($0);
7522 }; 7312 };
7523 NodeListener.prototype.endForStatement$2 = function($0, $1) { 7313 NodeListener.prototype.endForStatement$2 = function($0, $1) {
7524 return this.endForStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7314 return this.endForStatement($0, $1);
7525 }; 7315 };
7526 NodeListener.prototype.endFormalParameter$1 = function($0) { 7316 NodeListener.prototype.endFormalParameter$1 = function($0) {
7527 return this.endFormalParameter(($0 && $0.is$Token())); 7317 return this.endFormalParameter($0);
7528 }; 7318 };
7529 NodeListener.prototype.endFormalParameters$3 = function($0, $1, $2) { 7319 NodeListener.prototype.endFormalParameters$3 = function($0, $1, $2) {
7530 return this.endFormalParameters($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Token())); 7320 return this.endFormalParameters($0, $1, $2);
7531 }; 7321 };
7532 NodeListener.prototype.endFunctionBody$3 = function($0, $1, $2) { 7322 NodeListener.prototype.endFunctionBody$3 = function($0, $1, $2) {
7533 return this.endFunctionBody($assert_num($0), ($1 && $1.is$Token()), ($2 && $2. is$Token())); 7323 return this.endFunctionBody($0, $1, $2);
7534 }; 7324 };
7535 NodeListener.prototype.endIfStatement$2 = function($0, $1) { 7325 NodeListener.prototype.endIfStatement$2 = function($0, $1) {
7536 return this.endIfStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7326 return this.endIfStatement($0, $1);
7537 }; 7327 };
7538 NodeListener.prototype.endInitializer$1 = function($0) { 7328 NodeListener.prototype.endInitializer$1 = function($0) {
7539 return this.endInitializer(($0 && $0.is$Token())); 7329 return this.endInitializer($0);
7540 }; 7330 };
7541 NodeListener.prototype.endRethrowStatement$2 = function($0, $1) { 7331 NodeListener.prototype.endRethrowStatement$2 = function($0, $1) {
7542 return this.endRethrowStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7332 return this.endRethrowStatement($0, $1);
7543 }; 7333 };
7544 NodeListener.prototype.endReturnStatement$3 = function($0, $1, $2) { 7334 NodeListener.prototype.endReturnStatement$3 = function($0, $1, $2) {
7545 return this.endReturnStatement($assert_bool($0), ($1 && $1.is$Token()), ($2 && $2.is$Token())); 7335 return this.endReturnStatement($0, $1, $2);
7546 }; 7336 };
7547 NodeListener.prototype.endSend$1 = function($0) { 7337 NodeListener.prototype.endSend$1 = function($0) {
7548 return this.endSend(($0 && $0.is$Token())); 7338 return this.endSend($0);
7549 }; 7339 };
7550 NodeListener.prototype.endThrowStatement$2 = function($0, $1) { 7340 NodeListener.prototype.endThrowStatement$2 = function($0, $1) {
7551 return this.endThrowStatement(($0 && $0.is$Token()), ($1 && $1.is$Token())); 7341 return this.endThrowStatement($0, $1);
7552 }; 7342 };
7553 NodeListener.prototype.endType$3 = function($0, $1, $2) { 7343 NodeListener.prototype.endType$3 = function($0, $1, $2) {
7554 return this.endType($assert_num($0), ($1 && $1.is$Token()), ($2 && $2.is$Token ())); 7344 return this.endType($0, $1, $2);
7555 }; 7345 };
7556 NodeListener.prototype.endVariablesDeclaration$2 = function($0, $1) { 7346 NodeListener.prototype.endVariablesDeclaration$2 = function($0, $1) {
7557 return this.endVariablesDeclaration($assert_num($0), ($1 && $1.is$Token())); 7347 return this.endVariablesDeclaration($0, $1);
7558 }; 7348 };
7559 NodeListener.prototype.handleAssignmentExpression$1 = function($0) { 7349 NodeListener.prototype.handleAssignmentExpression$1 = function($0) {
7560 return this.handleAssignmentExpression(($0 && $0.is$Token())); 7350 return this.handleAssignmentExpression($0);
7561 }; 7351 };
7562 NodeListener.prototype.handleBinaryExpression$1 = function($0) { 7352 NodeListener.prototype.handleBinaryExpression$1 = function($0) {
7563 return this.handleBinaryExpression(($0 && $0.is$Token())); 7353 return this.handleBinaryExpression($0);
7564 }; 7354 };
7565 NodeListener.prototype.handleConditionalExpression$2 = function($0, $1) { 7355 NodeListener.prototype.handleConditionalExpression$2 = function($0, $1) {
7566 return this.handleConditionalExpression(($0 && $0.is$Token()), ($1 && $1.is$To ken())); 7356 return this.handleConditionalExpression($0, $1);
7567 }; 7357 };
7568 NodeListener.prototype.handleFinalKeyword$1 = function($0) { 7358 NodeListener.prototype.handleFinalKeyword$1 = function($0) {
7569 return this.handleFinalKeyword(($0 && $0.is$Token())); 7359 return this.handleFinalKeyword($0);
7570 }; 7360 };
7571 NodeListener.prototype.handleLiteralBool$1 = function($0) { 7361 NodeListener.prototype.handleLiteralBool$1 = function($0) {
7572 return this.handleLiteralBool(($0 && $0.is$Token())); 7362 return this.handleLiteralBool($0);
7573 }; 7363 };
7574 NodeListener.prototype.handleLiteralDouble$1 = function($0) { 7364 NodeListener.prototype.handleLiteralDouble$1 = function($0) {
7575 return this.handleLiteralDouble(($0 && $0.is$Token())); 7365 return this.handleLiteralDouble($0);
7576 }; 7366 };
7577 NodeListener.prototype.handleLiteralInt$1 = function($0) { 7367 NodeListener.prototype.handleLiteralInt$1 = function($0) {
7578 return this.handleLiteralInt(($0 && $0.is$Token())); 7368 return this.handleLiteralInt($0);
7579 }; 7369 };
7580 NodeListener.prototype.handleLiteralString$1 = function($0) { 7370 NodeListener.prototype.handleLiteralString$1 = function($0) {
7581 return this.handleLiteralString(($0 && $0.is$Token())); 7371 return this.handleLiteralString($0);
7582 }; 7372 };
7583 NodeListener.prototype.handleNoArguments$1 = function($0) { 7373 NodeListener.prototype.handleNoArguments$1 = function($0) {
7584 return this.handleNoArguments(($0 && $0.is$Token())); 7374 return this.handleNoArguments($0);
7585 }; 7375 };
7586 NodeListener.prototype.handleVarKeyword$1 = function($0) { 7376 NodeListener.prototype.handleVarKeyword$1 = function($0) {
7587 return this.handleVarKeyword(($0 && $0.is$Token())); 7377 return this.handleVarKeyword($0);
7588 }; 7378 };
7589 NodeListener.prototype.handleVoidKeyword$1 = function($0) { 7379 NodeListener.prototype.handleVoidKeyword$1 = function($0) {
7590 return this.handleVoidKeyword(($0 && $0.is$Token())); 7380 return this.handleVoidKeyword($0);
7591 }; 7381 };
7592 // ********** Code for PartialFunctionElement ************** 7382 // ********** Code for PartialFunctionElement **************
7593 function PartialFunctionElement(name, beginToken, endToken) { 7383 function PartialFunctionElement(name, beginToken, endToken) {
7594 this.beginToken = beginToken; 7384 this.beginToken = beginToken;
7595 this.endToken = endToken; 7385 this.endToken = endToken;
7596 FunctionElement.call(this, name); 7386 FunctionElement.call(this, name);
7597 // Initializers done 7387 // Initializers done
7598 } 7388 }
7599 $inherits(PartialFunctionElement, FunctionElement); 7389 $inherits(PartialFunctionElement, FunctionElement);
7600 PartialFunctionElement.prototype.parseNode = function(canceler, logger) { 7390 PartialFunctionElement.prototype.parseNode = function(canceler, logger) {
7601 var $this = this; // closure support 7391 var $this = this; // closure support
7602 var $0;
7603 if (this.node != null) return this.node; 7392 if (this.node != null) return this.node;
7604 this.node = (($0 = parse(canceler, logger, (function (p) { 7393 this.node = parse(canceler, logger, (function (p) {
7605 return p.parseFunction$1($this.beginToken); 7394 return p.parseFunction$1($this.beginToken);
7606 }) 7395 })
7607 )) && $0.is$FunctionExpression()); 7396 );
7608 return this.node; 7397 return this.node;
7609 } 7398 }
7610 // ********** Code for PartialClassElement ************** 7399 // ********** Code for PartialClassElement **************
7611 function PartialClassElement(name, beginToken, endToken) { 7400 function PartialClassElement(name, beginToken, endToken) {
7612 this.beginToken = beginToken; 7401 this.beginToken = beginToken;
7613 this.endToken = endToken; 7402 this.endToken = endToken;
7614 ClassElement.call(this, name); 7403 ClassElement.call(this, name);
7615 // Initializers done 7404 // Initializers done
7616 } 7405 }
7617 $inherits(PartialClassElement, ClassElement); 7406 $inherits(PartialClassElement, ClassElement);
7618 PartialClassElement.prototype.parseNode = function(canceler, logger) { 7407 PartialClassElement.prototype.parseNode = function(canceler, logger) {
7619 var $this = this; // closure support 7408 var $this = this; // closure support
7620 var $0;
7621 if (this.node != null) return this.node; 7409 if (this.node != null) return this.node;
7622 this.node = (($0 = parse(canceler, logger, (function (p) { 7410 this.node = parse(canceler, logger, (function (p) {
7623 return p.parseClass$1($this.beginToken); 7411 return p.parseClass$1($this.beginToken);
7624 }) 7412 })
7625 )) && $0.is$ClassNode()); 7413 );
7626 return this.node; 7414 return this.node;
7627 } 7415 }
7628 // ********** Code for StringScanner ************** 7416 // ********** Code for StringScanner **************
7629 function StringScanner(string) { 7417 function StringScanner(string) {
7630 this.string = string; 7418 this.string = string;
7631 ArrayBasedScanner$SourceString.call(this); 7419 ArrayBasedScanner$SourceString.call(this);
7632 // Initializers done 7420 // Initializers done
7633 } 7421 }
7634 $inherits(StringScanner, ArrayBasedScanner$SourceString); 7422 $inherits(StringScanner, ArrayBasedScanner$SourceString);
7635 StringScanner.prototype.nextByte = function() { 7423 StringScanner.prototype.nextByte = function() {
7636 return this.charAt(++this.byteOffset); 7424 return this.charAt(++this.byteOffset);
7637 } 7425 }
7638 StringScanner.prototype.peek = function() { 7426 StringScanner.prototype.peek = function() {
7639 return this.charAt(this.byteOffset + 1); 7427 return this.charAt(this.byteOffset + 1);
7640 } 7428 }
7641 StringScanner.prototype.charAt = function(index) { 7429 StringScanner.prototype.charAt = function(index) {
7642 return (this.string.length > $assert_num(index)) ? this.string.charCodeAt($ass ert_num(index)) : -1; 7430 return (this.string.length > index) ? this.string.charCodeAt(index) : -1;
7643 } 7431 }
7644 StringScanner.prototype.asciiString = function(start) { 7432 StringScanner.prototype.asciiString = function(start) {
7645 return new SubstringWrapper(this.string, start, this.byteOffset); 7433 return new SubstringWrapper(this.string, start, this.byteOffset);
7646 } 7434 }
7647 StringScanner.prototype.utf8String = function(start, offset) { 7435 StringScanner.prototype.utf8String = function(start, offset) {
7648 return new SubstringWrapper(this.string, start, this.byteOffset + offset + 1); 7436 return new SubstringWrapper(this.string, start, this.byteOffset + offset + 1);
7649 } 7437 }
7650 StringScanner.prototype.appendByteStringToken = function(kind, value) { 7438 StringScanner.prototype.appendByteStringToken = function(kind, value) {
7651 this.tail.next = new StringToken.fromSource$ctor(kind, value, this.tokenStart) ; 7439 this.tail.next = new StringToken.fromSource$ctor(kind, value, this.tokenStart) ;
7652 this.tail = this.tail.next; 7440 this.tail = this.tail.next;
7653 } 7441 }
7654 StringScanner.prototype.appendByteStringToken$2 = function($0, $1) {
7655 return this.appendByteStringToken($assert_num($0), ($1 && $1.is$SourceString() ));
7656 };
7657 // ********** Code for SubstringWrapper ************** 7442 // ********** Code for SubstringWrapper **************
7658 function SubstringWrapper(internalString, begin, end) { 7443 function SubstringWrapper(internalString, begin, end) {
7659 this.internalString = internalString; 7444 this.internalString = internalString;
7660 this.begin = begin; 7445 this.begin = begin;
7661 this.end = end; 7446 this.end = end;
7662 // Initializers done 7447 // Initializers done
7663 } 7448 }
7664 SubstringWrapper.prototype.is$SourceString = function(){return this;}; 7449 SubstringWrapper.prototype.is$SourceString = function(){return this;};
7665 SubstringWrapper.prototype.hashCode = function() { 7450 SubstringWrapper.prototype.hashCode = function() {
7666 return this.toString().hashCode(); 7451 return this.toString().hashCode();
7667 } 7452 }
7668 SubstringWrapper.prototype.$eq = function(other) { 7453 SubstringWrapper.prototype.$eq = function(other) {
7669 return !!(other && other.is$SourceString) && this.toString() == other.toString $0(); 7454 return !!(other && other.is$SourceString) && this.toString() == other.toString $0();
7670 } 7455 }
7671 SubstringWrapper.prototype.printOn = function(sb) { 7456 SubstringWrapper.prototype.printOn = function(sb) {
7672 sb.add(this); 7457 sb.add(this);
7673 } 7458 }
7674 SubstringWrapper.prototype.toString = function() { 7459 SubstringWrapper.prototype.toString = function() {
7675 return this.internalString.substring(this.begin, this.end); 7460 return this.internalString.substring(this.begin, this.end);
7676 } 7461 }
7677 SubstringWrapper.prototype.get$stringValue = function() { 7462 SubstringWrapper.prototype.get$stringValue = function() {
7678 return null; 7463 return null;
7679 } 7464 }
7680 SubstringWrapper.prototype.hashCode$0 = function() { 7465 SubstringWrapper.prototype.hashCode$0 = function() {
7681 return this.hashCode(); 7466 return this.hashCode();
7682 }; 7467 };
7683 SubstringWrapper.prototype.printOn$1 = function($0) { 7468 SubstringWrapper.prototype.printOn$1 = function($0) {
7684 return this.printOn(($0 && $0.is$StringBuffer())); 7469 return this.printOn($0);
7685 }; 7470 };
7686 SubstringWrapper.prototype.toString$0 = function() { 7471 SubstringWrapper.prototype.toString$0 = function() {
7687 return this.toString(); 7472 return this.toString();
7688 }; 7473 };
7689 // ********** Code for Token ************** 7474 // ********** Code for Token **************
7690 function Token(kind, charOffset) { 7475 function Token(kind, charOffset) {
7691 this.kind = kind; 7476 this.kind = kind;
7692 this.charOffset = charOffset; 7477 this.charOffset = charOffset;
7693 // Initializers done 7478 // Initializers done
7694 } 7479 }
7695 Token.prototype.is$Token = function(){return this;};
7696 Token.prototype.get$charOffset = function() { return this.charOffset; }; 7480 Token.prototype.get$charOffset = function() { return this.charOffset; };
7697 Token.prototype.get$value = function() { 7481 Token.prototype.get$value = function() {
7698 return const$234/*const SourceString('EOF')*/; 7482 return const$234/*const SourceString('EOF')*/;
7699 } 7483 }
7700 Token.prototype.get$stringValue = function() { 7484 Token.prototype.get$stringValue = function() {
7701 return 'EOF'; 7485 return 'EOF';
7702 } 7486 }
7703 Token.prototype.toString = function() { 7487 Token.prototype.toString = function() {
7704 return Strings.String$fromCharCodes$factory([this.kind]); 7488 return Strings.String$fromCharCodes$factory([this.kind]);
7705 } 7489 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
7766 StringWrapper.prototype.toString = function() { 7550 StringWrapper.prototype.toString = function() {
7767 return this.internalString; 7551 return this.internalString;
7768 } 7552 }
7769 StringWrapper.prototype.get$stringValue = function() { 7553 StringWrapper.prototype.get$stringValue = function() {
7770 return this.internalString; 7554 return this.internalString;
7771 } 7555 }
7772 StringWrapper.prototype.hashCode$0 = function() { 7556 StringWrapper.prototype.hashCode$0 = function() {
7773 return this.hashCode(); 7557 return this.hashCode();
7774 }; 7558 };
7775 StringWrapper.prototype.printOn$1 = function($0) { 7559 StringWrapper.prototype.printOn$1 = function($0) {
7776 return this.printOn(($0 && $0.is$StringBuffer())); 7560 return this.printOn($0);
7777 }; 7561 };
7778 StringWrapper.prototype.toString$0 = function() { 7562 StringWrapper.prototype.toString$0 = function() {
7779 return this.toString(); 7563 return this.toString();
7780 }; 7564 };
7781 // ********** Code for BeginGroupToken ************** 7565 // ********** Code for BeginGroupToken **************
7782 function BeginGroupToken(kind, value, charOffset) { 7566 function BeginGroupToken(kind, value, charOffset) {
7783 StringToken.call(this, kind, value, charOffset); 7567 StringToken.call(this, kind, value, charOffset);
7784 // Initializers done 7568 // Initializers done
7785 } 7569 }
7786 $inherits(BeginGroupToken, StringToken); 7570 $inherits(BeginGroupToken, StringToken);
7787 BeginGroupToken.prototype.is$BeginGroupToken = function(){return this;};
7788 // ********** Code for Keyword ************** 7571 // ********** Code for Keyword **************
7789 function Keyword(syntax, isPseudo) { 7572 function Keyword(syntax, isPseudo) {
7790 this.syntax = syntax; 7573 this.syntax = syntax;
7791 this.isPseudo = isPseudo; 7574 this.isPseudo = isPseudo;
7792 // Initializers done 7575 // Initializers done
7793 } 7576 }
7794 Keyword.prototype.is$SourceString = function(){return this;}; 7577 Keyword.prototype.is$SourceString = function(){return this;};
7795 Keyword.get$keywords = function() { 7578 Keyword.get$keywords = function() {
7796 if (Keyword._keywords == null) { 7579 if (Keyword._keywords == null) {
7797 Keyword._keywords = Keyword.computeKeywordMap(); 7580 Keyword._keywords = Keyword.computeKeywordMap();
(...skipping 20 matching lines...) Expand all
7818 Keyword.prototype.toString = function() { 7601 Keyword.prototype.toString = function() {
7819 return this.syntax; 7602 return this.syntax;
7820 } 7603 }
7821 Keyword.prototype.get$stringValue = function() { 7604 Keyword.prototype.get$stringValue = function() {
7822 return this.syntax; 7605 return this.syntax;
7823 } 7606 }
7824 Keyword.prototype.hashCode$0 = function() { 7607 Keyword.prototype.hashCode$0 = function() {
7825 return this.hashCode(); 7608 return this.hashCode();
7826 }; 7609 };
7827 Keyword.prototype.printOn$1 = function($0) { 7610 Keyword.prototype.printOn$1 = function($0) {
7828 return this.printOn(($0 && $0.is$StringBuffer())); 7611 return this.printOn($0);
7829 }; 7612 };
7830 Keyword.prototype.toString$0 = function() { 7613 Keyword.prototype.toString$0 = function() {
7831 return this.toString(); 7614 return this.toString();
7832 }; 7615 };
7833 // ********** Code for KeywordState ************** 7616 // ********** Code for KeywordState **************
7834 function KeywordState() {} 7617 function KeywordState() {}
7835 KeywordState.prototype.is$KeywordState = function(){return this;};
7836 KeywordState.get$KEYWORD_STATE = function() { 7618 KeywordState.get$KEYWORD_STATE = function() {
7837 if (KeywordState._KEYWORD_STATE == null) { 7619 if (KeywordState._KEYWORD_STATE == null) {
7838 var strings = new ListFactory(const$232/*Keyword.values*/.get$length()); 7620 var strings = new ListFactory(const$232/*Keyword.values*/.get$length());
7839 for (var i = 0; 7621 for (var i = 0;
7840 i < const$232/*Keyword.values*/.get$length(); i++) { 7622 i < const$232/*Keyword.values*/.get$length(); i++) {
7841 strings.$setindex(i, const$232/*Keyword.values*/[i].syntax); 7623 strings.$setindex(i, const$232/*Keyword.values*/[i].syntax);
7842 } 7624 }
7843 strings.sort((function (a, b) { 7625 strings.sort((function (a, b) {
7844 return a.compareTo$1(b); 7626 return a.compareTo$1(b);
7845 }) 7627 })
7846 ); 7628 );
7847 KeywordState._KEYWORD_STATE = KeywordState.computeKeywordStateTable(0, strin gs, 0, strings.length); 7629 KeywordState._KEYWORD_STATE = KeywordState.computeKeywordStateTable(0, strin gs, 0, strings.length);
7848 } 7630 }
7849 return KeywordState._KEYWORD_STATE; 7631 return KeywordState._KEYWORD_STATE;
7850 } 7632 }
7851 KeywordState.computeKeywordStateTable = function(start, strings, offset, length) { 7633 KeywordState.computeKeywordStateTable = function(start, strings, offset, length) {
7852 var result = new ListFactory(26); 7634 var result = new ListFactory(26);
7853 $assert(length != 0, "length != 0", "keyword.dart", 161, 12);
7854 var chunk = 0; 7635 var chunk = 0;
7855 var chunkStart = -1; 7636 var chunkStart = -1;
7856 for (var i = offset; 7637 for (var i = offset;
7857 i < offset + length; i++) { 7638 i < offset + length; i++) {
7858 if (strings.$index(i).length > start) { 7639 if (strings.$index(i).length > start) {
7859 var c = strings.$index(i).charCodeAt$1(start); 7640 var c = strings.$index(i).charCodeAt$1(start);
7860 if (chunk != c) { 7641 if (chunk != c) {
7861 if (chunkStart != -1) { 7642 if (chunkStart != -1) {
7862 result.$setindex(chunk - 97/*null.$a*/, KeywordState.computeKeywordSta teTable(start + 1, strings, chunkStart, i - chunkStart)); 7643 result.$setindex(chunk - 97/*null.$a*/, KeywordState.computeKeywordSta teTable(start + 1, strings, chunkStart, i - chunkStart));
7863 } 7644 }
7864 chunkStart = i; 7645 chunkStart = i;
7865 chunk = c; 7646 chunk = c;
7866 } 7647 }
7867 } 7648 }
7868 } 7649 }
7869 if (chunkStart != -1) { 7650 if (chunkStart != -1) {
7870 result.$setindex(chunk - 97/*null.$a*/, KeywordState.computeKeywordStateTabl e(start + 1, strings, chunkStart, offset + length - chunkStart)); 7651 result.$setindex(chunk - 97/*null.$a*/, KeywordState.computeKeywordStateTabl e(start + 1, strings, chunkStart, offset + length - chunkStart));
7871 } 7652 }
7872 else { 7653 else {
7873 $assert(length == 1, "length == 1", "keyword.dart", 183, 14); 7654 return new LeafKeywordState(strings.$index(offset));
7874 return new LeafKeywordState($assert_String(strings.$index(offset)));
7875 } 7655 }
7876 return new ArrayKeywordState(result); 7656 return new ArrayKeywordState(result);
7877 } 7657 }
7878 // ********** Code for ArrayKeywordState ************** 7658 // ********** Code for ArrayKeywordState **************
7879 function ArrayKeywordState(table) { 7659 function ArrayKeywordState(table) {
7880 this.table = table; 7660 this.table = table;
7881 // Initializers done 7661 // Initializers done
7882 } 7662 }
7883 $inherits(ArrayKeywordState, KeywordState); 7663 $inherits(ArrayKeywordState, KeywordState);
7884 ArrayKeywordState.prototype.isLeaf = function() { 7664 ArrayKeywordState.prototype.isLeaf = function() {
7885 return false; 7665 return false;
7886 } 7666 }
7887 ArrayKeywordState.prototype.next = function(c) { 7667 ArrayKeywordState.prototype.next = function(c) {
7888 var $0; 7668 return this.table.$index(c - 97/*null.$a*/);
7889 return (($0 = this.table.$index(c - 97/*null.$a*/)) && $0.is$KeywordState());
7890 } 7669 }
7891 ArrayKeywordState.prototype.get$keyword = function() { 7670 ArrayKeywordState.prototype.get$keyword = function() {
7892 $throw("should not be called"); 7671 $throw("should not be called");
7893 } 7672 }
7894 ArrayKeywordState.prototype.toString = function() { 7673 ArrayKeywordState.prototype.toString = function() {
7895 var sb = new StringBufferImpl(""); 7674 var sb = new StringBufferImpl("");
7896 sb.add("["); 7675 sb.add("[");
7897 var foo = this.table; 7676 var foo = this.table;
7898 for (var i = 0; 7677 for (var i = 0;
7899 i < foo.length; i++) { 7678 i < foo.length; i++) {
7900 if ($notnull_bool($ne(foo.$index(i), null))) { 7679 if ($ne(foo.$index(i), null)) {
7901 sb.add(("" + (i + 97/*null.$a*/) + ": " + foo.$index(i) + "; ")); 7680 sb.add(("" + (i + 97/*null.$a*/) + ": " + foo.$index(i) + "; "));
7902 } 7681 }
7903 } 7682 }
7904 sb.add("]"); 7683 sb.add("]");
7905 return sb.toString(); 7684 return sb.toString();
7906 } 7685 }
7907 ArrayKeywordState.prototype.toString$0 = function() { 7686 ArrayKeywordState.prototype.toString$0 = function() {
7908 return this.toString(); 7687 return this.toString();
7909 }; 7688 };
7910 // ********** Code for LeafKeywordState ************** 7689 // ********** Code for LeafKeywordState **************
(...skipping 20 matching lines...) Expand all
7931 function parse(canceler, logger, doParse) { 7710 function parse(canceler, logger, doParse) {
7932 var listener = new NodeListener(canceler, logger); 7711 var listener = new NodeListener(canceler, logger);
7933 doParse(new Parser(listener)); 7712 doParse(new Parser(listener));
7934 var node = listener.popNode(); 7713 var node = listener.popNode();
7935 logger.log(("parsed: " + node + "")); 7714 logger.log(("parsed: " + node + ""));
7936 return node; 7715 return node;
7937 } 7716 }
7938 // ********** Library tree ************** 7717 // ********** Library tree **************
7939 // ********** Code for Node ************** 7718 // ********** Code for Node **************
7940 function Node() {} 7719 function Node() {}
7941 Node.prototype.is$Node = function(){return this;};
7942 Node.prototype.hashCode = function() { 7720 Node.prototype.hashCode = function() {
7943 return this._hashCode; 7721 return this._hashCode;
7944 } 7722 }
7945 Node.prototype.toString = function() { 7723 Node.prototype.toString = function() {
7946 return this.unparse(); 7724 return this.unparse();
7947 } 7725 }
7948 Node.prototype.getObjectDescription = function() { 7726 Node.prototype.getObjectDescription = function() {
7949 return Object.prototype.toString.call(this); 7727 return Object.prototype.toString.call(this);
7950 } 7728 }
7951 Node.prototype.unparse = function() { 7729 Node.prototype.unparse = function() {
7952 var unparser = new Unparser(false); 7730 var unparser = new Unparser(false);
7953 try { 7731 try {
7954 return unparser.unparse(this); 7732 return unparser.unparse(this);
7955 } catch (e) { 7733 } catch (e) {
7956 e = $toDartException(e); 7734 e = $toDartException(e);
7957 return ('<<unparse error: ' + this.getObjectDescription() + ': ' + unparser. sb + '>>'); 7735 return ('<<unparse error: ' + this.getObjectDescription() + ': ' + unparser. sb + '>>');
7958 } 7736 }
7959 } 7737 }
7960 Node.prototype.accept$1 = function($0) { 7738 Node.prototype.accept$1 = function($0) {
7961 return this.accept(($0 && $0.is$Visitor())); 7739 return this.accept($0);
7962 }; 7740 };
7963 Node.prototype.getBeginToken$0 = function() { 7741 Node.prototype.getBeginToken$0 = function() {
7964 return this.getBeginToken(); 7742 return this.getBeginToken();
7965 }; 7743 };
7966 Node.prototype.getEndToken$0 = function() { 7744 Node.prototype.getEndToken$0 = function() {
7967 return this.getEndToken(); 7745 return this.getEndToken();
7968 }; 7746 };
7969 Node.prototype.hashCode$0 = function() { 7747 Node.prototype.hashCode$0 = function() {
7970 return this.hashCode(); 7748 return this.hashCode();
7971 }; 7749 };
7972 Node.prototype.toString$0 = function() { 7750 Node.prototype.toString$0 = function() {
7973 return this.toString(); 7751 return this.toString();
7974 }; 7752 };
7975 // ********** Code for ClassNode ************** 7753 // ********** Code for ClassNode **************
7976 function ClassNode(name, superclass, interfaces, beginToken, extendsKeyword, end Token) { 7754 function ClassNode(name, superclass, interfaces, beginToken, extendsKeyword, end Token) {
7977 this.name = name; 7755 this.name = name;
7978 this.superclass = superclass; 7756 this.superclass = superclass;
7979 this.interfaces = interfaces; 7757 this.interfaces = interfaces;
7980 this.beginToken = beginToken; 7758 this.beginToken = beginToken;
7981 this.extendsKeyword = extendsKeyword; 7759 this.extendsKeyword = extendsKeyword;
7982 this.endToken = endToken; 7760 this.endToken = endToken;
7983 // Initializers done 7761 // Initializers done
7984 } 7762 }
7985 $inherits(ClassNode, Node); 7763 $inherits(ClassNode, Node);
7986 ClassNode.prototype.is$ClassNode = function(){return this;};
7987 ClassNode.prototype.get$name = function() { return this.name; }; 7764 ClassNode.prototype.get$name = function() { return this.name; };
7988 ClassNode.prototype.get$interfaces = function() { return this.interfaces; }; 7765 ClassNode.prototype.get$interfaces = function() { return this.interfaces; };
7989 ClassNode.prototype.accept = function(visitor) { 7766 ClassNode.prototype.accept = function(visitor) {
7990 return visitor.visitClassNode(this); 7767 return visitor.visitClassNode(this);
7991 } 7768 }
7992 ClassNode.prototype.get$isInterface = function() { 7769 ClassNode.prototype.get$isInterface = function() {
7993 return this.beginToken.get$stringValue() === 'interface'; 7770 return this.beginToken.get$stringValue() === 'interface';
7994 } 7771 }
7995 ClassNode.prototype.get$isClass = function() { 7772 ClassNode.prototype.get$isClass = function() {
7996 return !$notnull_bool(this.get$isInterface()); 7773 return !this.get$isInterface();
7997 } 7774 }
7998 ClassNode.prototype.getBeginToken = function() { 7775 ClassNode.prototype.getBeginToken = function() {
7999 return this.beginToken; 7776 return this.beginToken;
8000 } 7777 }
8001 ClassNode.prototype.getEndToken = function() { 7778 ClassNode.prototype.getEndToken = function() {
8002 return this.endToken; 7779 return this.endToken;
8003 } 7780 }
8004 ClassNode.prototype.accept$1 = function($0) { 7781 ClassNode.prototype.accept$1 = function($0) {
8005 return this.accept(($0 && $0.is$Visitor())); 7782 return this.accept($0);
8006 }; 7783 };
8007 ClassNode.prototype.getBeginToken$0 = function() { 7784 ClassNode.prototype.getBeginToken$0 = function() {
8008 return this.getBeginToken(); 7785 return this.getBeginToken();
8009 }; 7786 };
8010 ClassNode.prototype.getEndToken$0 = function() { 7787 ClassNode.prototype.getEndToken$0 = function() {
8011 return this.getEndToken(); 7788 return this.getEndToken();
8012 }; 7789 };
8013 // ********** Code for Expression ************** 7790 // ********** Code for Expression **************
8014 function Expression() {} 7791 function Expression() {}
8015 $inherits(Expression, Node); 7792 $inherits(Expression, Node);
8016 Expression.prototype.is$Expression = function(){return this;};
8017 // ********** Code for Statement ************** 7793 // ********** Code for Statement **************
8018 function Statement() {} 7794 function Statement() {}
8019 $inherits(Statement, Node); 7795 $inherits(Statement, Node);
8020 Statement.prototype.is$Statement = function(){return this;};
8021 // ********** Code for Send ************** 7796 // ********** Code for Send **************
8022 function Send(receiver, selector, argumentsNode) { 7797 function Send(receiver, selector, argumentsNode) {
8023 this.receiver = receiver; 7798 this.receiver = receiver;
8024 this.selector = selector; 7799 this.selector = selector;
8025 this.argumentsNode = argumentsNode; 7800 this.argumentsNode = argumentsNode;
8026 // Initializers done 7801 // Initializers done
8027 } 7802 }
8028 $inherits(Send, Expression); 7803 $inherits(Send, Expression);
8029 Send.prototype.is$Send = function(){return this;};
8030 Send.prototype.get$arguments = function() { 7804 Send.prototype.get$arguments = function() {
8031 return this.argumentsNode.nodes; 7805 return this.argumentsNode.nodes;
8032 } 7806 }
8033 Send.prototype.accept = function(visitor) { 7807 Send.prototype.accept = function(visitor) {
8034 return visitor.visitSend(this); 7808 return visitor.visitSend(this);
8035 } 7809 }
8036 Send.prototype.get$isOperator = function() { 7810 Send.prototype.get$isOperator = function() {
8037 return (this.selector instanceof Operator); 7811 return (this.selector instanceof Operator);
8038 } 7812 }
8039 Send.prototype.get$isPropertyAccess = function() { 7813 Send.prototype.get$isPropertyAccess = function() {
8040 return this.argumentsNode == null; 7814 return this.argumentsNode == null;
8041 } 7815 }
8042 Send.prototype.get$isFunctionObjectInvocation = function() { 7816 Send.prototype.get$isFunctionObjectInvocation = function() {
8043 return this.selector == null; 7817 return this.selector == null;
8044 } 7818 }
8045 Send.prototype.getBeginToken = function() { 7819 Send.prototype.getBeginToken = function() {
8046 return firstBeginToken(this.receiver, this.selector); 7820 return firstBeginToken(this.receiver, this.selector);
8047 } 7821 }
8048 Send.prototype.getEndToken = function() { 7822 Send.prototype.getEndToken = function() {
8049 var $0;
8050 var token; 7823 var token;
8051 if (this.argumentsNode != null) token = this.argumentsNode.getEndToken(); 7824 if (this.argumentsNode != null) token = this.argumentsNode.getEndToken();
8052 if (token != null) return token; 7825 if (token != null) return token;
8053 if (this.selector != null) { 7826 if (this.selector != null) {
8054 return (($0 = this.selector.getEndToken()) && $0.is$Token()); 7827 return this.selector.getEndToken();
8055 } 7828 }
8056 return (($0 = this.receiver.getBeginToken()) && $0.is$Token()); 7829 return this.receiver.getBeginToken();
8057 } 7830 }
8058 Send.prototype.accept$1 = function($0) { 7831 Send.prototype.accept$1 = function($0) {
8059 return this.accept(($0 && $0.is$Visitor())); 7832 return this.accept($0);
8060 }; 7833 };
8061 Send.prototype.getBeginToken$0 = function() { 7834 Send.prototype.getBeginToken$0 = function() {
8062 return this.getBeginToken(); 7835 return this.getBeginToken();
8063 }; 7836 };
8064 Send.prototype.getEndToken$0 = function() { 7837 Send.prototype.getEndToken$0 = function() {
8065 return this.getEndToken(); 7838 return this.getEndToken();
8066 }; 7839 };
8067 // ********** Code for SendSet ************** 7840 // ********** Code for SendSet **************
8068 function SendSet(receiver, selector, assignmentOperator, argumentsNode) { 7841 function SendSet(receiver, selector, assignmentOperator, argumentsNode) {
8069 this.assignmentOperator = assignmentOperator; 7842 this.assignmentOperator = assignmentOperator;
8070 Send.call(this, receiver, selector, argumentsNode); 7843 Send.call(this, receiver, selector, argumentsNode);
8071 // Initializers done 7844 // Initializers done
8072 } 7845 }
8073 $inherits(SendSet, Send); 7846 $inherits(SendSet, Send);
8074 SendSet.prototype.is$SendSet = function(){return this;};
8075 SendSet.prototype.accept = function(visitor) { 7847 SendSet.prototype.accept = function(visitor) {
8076 return visitor.visitSendSet(this); 7848 return visitor.visitSendSet(this);
8077 } 7849 }
8078 SendSet.prototype.accept$1 = function($0) { 7850 SendSet.prototype.accept$1 = function($0) {
8079 return this.accept(($0 && $0.is$Visitor())); 7851 return this.accept($0);
8080 }; 7852 };
8081 // ********** Code for NodeList ************** 7853 // ********** Code for NodeList **************
8082 function NodeList(beginToken, nodes, endToken, delimiter) { 7854 function NodeList(beginToken, nodes, endToken, delimiter) {
8083 this.beginToken = beginToken; 7855 this.beginToken = beginToken;
8084 this.nodes = nodes; 7856 this.nodes = nodes;
8085 this.endToken = endToken; 7857 this.endToken = endToken;
8086 this.delimiter = delimiter; 7858 this.delimiter = delimiter;
8087 // Initializers done 7859 // Initializers done
8088 } 7860 }
8089 NodeList.singleton$ctor = function(node) { 7861 NodeList.singleton$ctor = function(node) {
8090 NodeList.call(this, null, LinkFactory.Link$factory(node)); 7862 NodeList.call(this, null, LinkFactory.Link$factory(node));
8091 // Initializers done 7863 // Initializers done
8092 } 7864 }
8093 NodeList.singleton$ctor.prototype = NodeList.prototype; 7865 NodeList.singleton$ctor.prototype = NodeList.prototype;
8094 $inherits(NodeList, Node); 7866 $inherits(NodeList, Node);
8095 NodeList.prototype.is$NodeList = function(){return this;};
8096 NodeList.prototype.accept = function(visitor) { 7867 NodeList.prototype.accept = function(visitor) {
8097 return visitor.visitNodeList(this); 7868 return visitor.visitNodeList(this);
8098 } 7869 }
8099 NodeList.prototype.getBeginToken = function() { 7870 NodeList.prototype.getBeginToken = function() {
8100 var $0;
8101 if (this.beginToken != null) return this.beginToken; 7871 if (this.beginToken != null) return this.beginToken;
8102 if (this.nodes != null) { 7872 if (this.nodes != null) {
8103 for (var link = this.nodes; 7873 for (var link = this.nodes;
8104 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Lin k$Node())) { 7874 !link.isEmpty(); link = link.get$tail()) {
8105 if (link.get$head().getBeginToken$0() != null) { 7875 if (link.get$head().getBeginToken$0() != null) {
8106 return (($0 = link.get$head().getBeginToken$0()) && $0.is$Token()); 7876 return link.get$head().getBeginToken$0();
8107 } 7877 }
8108 if (link.get$head().getEndToken$0() != null) { 7878 if (link.get$head().getEndToken$0() != null) {
8109 return (($0 = link.get$head().getEndToken$0()) && $0.is$Token()); 7879 return link.get$head().getEndToken$0();
8110 } 7880 }
8111 } 7881 }
8112 } 7882 }
8113 return this.endToken; 7883 return this.endToken;
8114 } 7884 }
8115 NodeList.prototype.getEndToken = function() { 7885 NodeList.prototype.getEndToken = function() {
8116 var $0;
8117 if (this.endToken != null) return this.endToken; 7886 if (this.endToken != null) return this.endToken;
8118 if (this.nodes != null) { 7887 if (this.nodes != null) {
8119 var link = this.nodes; 7888 var link = this.nodes;
8120 while (!$notnull_bool(link.get$tail().isEmpty$0())) link = (($0 = link.get$t ail()) && $0.is$Link$Node()); 7889 while (!link.get$tail().isEmpty$0()) link = link.get$tail();
8121 if (link.get$head().getEndToken$0() != null) return (($0 = link.get$head().g etEndToken$0()) && $0.is$Token()); 7890 if (link.get$head().getEndToken$0() != null) return link.get$head().getEndTo ken$0();
8122 if (link.get$head().getBeginToken$0() != null) return (($0 = link.get$head() .getBeginToken$0()) && $0.is$Token()); 7891 if (link.get$head().getBeginToken$0() != null) return link.get$head().getBeg inToken$0();
8123 } 7892 }
8124 return this.beginToken; 7893 return this.beginToken;
8125 } 7894 }
8126 NodeList.prototype.accept$1 = function($0) { 7895 NodeList.prototype.accept$1 = function($0) {
8127 return this.accept(($0 && $0.is$Visitor())); 7896 return this.accept($0);
8128 }; 7897 };
8129 NodeList.prototype.getBeginToken$0 = function() { 7898 NodeList.prototype.getBeginToken$0 = function() {
8130 return this.getBeginToken(); 7899 return this.getBeginToken();
8131 }; 7900 };
8132 NodeList.prototype.getEndToken$0 = function() { 7901 NodeList.prototype.getEndToken$0 = function() {
8133 return this.getEndToken(); 7902 return this.getEndToken();
8134 }; 7903 };
8135 // ********** Code for Block ************** 7904 // ********** Code for Block **************
8136 function Block(statements) { 7905 function Block(statements) {
8137 this.statements = statements; 7906 this.statements = statements;
8138 // Initializers done 7907 // Initializers done
8139 } 7908 }
8140 $inherits(Block, Statement); 7909 $inherits(Block, Statement);
8141 Block.prototype.accept = function(visitor) { 7910 Block.prototype.accept = function(visitor) {
8142 return visitor.visitBlock(this); 7911 return visitor.visitBlock(this);
8143 } 7912 }
8144 Block.prototype.getBeginToken = function() { 7913 Block.prototype.getBeginToken = function() {
8145 return this.statements.getBeginToken(); 7914 return this.statements.getBeginToken();
8146 } 7915 }
8147 Block.prototype.getEndToken = function() { 7916 Block.prototype.getEndToken = function() {
8148 return this.statements.getEndToken(); 7917 return this.statements.getEndToken();
8149 } 7918 }
8150 Block.prototype.accept$1 = function($0) { 7919 Block.prototype.accept$1 = function($0) {
8151 return this.accept(($0 && $0.is$Visitor())); 7920 return this.accept($0);
8152 }; 7921 };
8153 Block.prototype.getBeginToken$0 = function() { 7922 Block.prototype.getBeginToken$0 = function() {
8154 return this.getBeginToken(); 7923 return this.getBeginToken();
8155 }; 7924 };
8156 Block.prototype.getEndToken$0 = function() { 7925 Block.prototype.getEndToken$0 = function() {
8157 return this.getEndToken(); 7926 return this.getEndToken();
8158 }; 7927 };
8159 // ********** Code for If ************** 7928 // ********** Code for If **************
8160 function If(condition, thenPart, elsePart, ifToken, elseToken) { 7929 function If(condition, thenPart, elsePart, ifToken, elseToken) {
8161 this.condition = condition; 7930 this.condition = condition;
(...skipping 11 matching lines...) Expand all
8173 return visitor.visitIf(this); 7942 return visitor.visitIf(this);
8174 } 7943 }
8175 If.prototype.getBeginToken = function() { 7944 If.prototype.getBeginToken = function() {
8176 return this.ifToken; 7945 return this.ifToken;
8177 } 7946 }
8178 If.prototype.getEndToken = function() { 7947 If.prototype.getEndToken = function() {
8179 if (this.elsePart == null) return this.thenPart.getEndToken(); 7948 if (this.elsePart == null) return this.thenPart.getEndToken();
8180 return this.elsePart.getEndToken(); 7949 return this.elsePart.getEndToken();
8181 } 7950 }
8182 If.prototype.accept$1 = function($0) { 7951 If.prototype.accept$1 = function($0) {
8183 return this.accept(($0 && $0.is$Visitor())); 7952 return this.accept($0);
8184 }; 7953 };
8185 If.prototype.getBeginToken$0 = function() { 7954 If.prototype.getBeginToken$0 = function() {
8186 return this.getBeginToken(); 7955 return this.getBeginToken();
8187 }; 7956 };
8188 If.prototype.getEndToken$0 = function() { 7957 If.prototype.getEndToken$0 = function() {
8189 return this.getEndToken(); 7958 return this.getEndToken();
8190 }; 7959 };
8191 // ********** Code for For ************** 7960 // ********** Code for For **************
8192 function For(initializer, condition, update, body, forToken) { 7961 function For(initializer, condition, update, body, forToken) {
8193 this.initializer = initializer; 7962 this.initializer = initializer;
8194 this.condition = condition; 7963 this.condition = condition;
8195 this.update = update; 7964 this.update = update;
8196 this.body = body; 7965 this.body = body;
8197 this.forToken = forToken; 7966 this.forToken = forToken;
8198 // Initializers done 7967 // Initializers done
8199 } 7968 }
8200 $inherits(For, Statement); 7969 $inherits(For, Statement);
8201 For.prototype.accept = function(visitor) { 7970 For.prototype.accept = function(visitor) {
8202 return visitor.visitFor(this); 7971 return visitor.visitFor(this);
8203 } 7972 }
8204 For.prototype.getBeginToken = function() { 7973 For.prototype.getBeginToken = function() {
8205 return this.forToken; 7974 return this.forToken;
8206 } 7975 }
8207 For.prototype.getEndToken = function() { 7976 For.prototype.getEndToken = function() {
8208 return this.body.getEndToken(); 7977 return this.body.getEndToken();
8209 } 7978 }
8210 For.prototype.accept$1 = function($0) { 7979 For.prototype.accept$1 = function($0) {
8211 return this.accept(($0 && $0.is$Visitor())); 7980 return this.accept($0);
8212 }; 7981 };
8213 For.prototype.getBeginToken$0 = function() { 7982 For.prototype.getBeginToken$0 = function() {
8214 return this.getBeginToken(); 7983 return this.getBeginToken();
8215 }; 7984 };
8216 For.prototype.getEndToken$0 = function() { 7985 For.prototype.getEndToken$0 = function() {
8217 return this.getEndToken(); 7986 return this.getEndToken();
8218 }; 7987 };
8219 // ********** Code for FunctionExpression ************** 7988 // ********** Code for FunctionExpression **************
8220 function FunctionExpression(name, parameters, body, returnType) { 7989 function FunctionExpression(name, parameters, body, returnType) {
8221 this.name = name; 7990 this.name = name;
8222 this.parameters = parameters; 7991 this.parameters = parameters;
8223 this.body = body; 7992 this.body = body;
8224 this.returnType = returnType; 7993 this.returnType = returnType;
8225 // Initializers done 7994 // Initializers done
8226 } 7995 }
8227 $inherits(FunctionExpression, Expression); 7996 $inherits(FunctionExpression, Expression);
8228 FunctionExpression.prototype.is$FunctionExpression = function(){return this;};
8229 FunctionExpression.prototype.get$name = function() { return this.name; }; 7997 FunctionExpression.prototype.get$name = function() { return this.name; };
8230 FunctionExpression.prototype.get$parameters = function() { return this.parameter s; }; 7998 FunctionExpression.prototype.get$parameters = function() { return this.parameter s; };
8231 FunctionExpression.prototype.get$returnType = function() { return this.returnTyp e; }; 7999 FunctionExpression.prototype.get$returnType = function() { return this.returnTyp e; };
8232 FunctionExpression.prototype.accept = function(visitor) { 8000 FunctionExpression.prototype.accept = function(visitor) {
8233 return visitor.visitFunctionExpression(this); 8001 return visitor.visitFunctionExpression(this);
8234 } 8002 }
8235 FunctionExpression.prototype.getBeginToken = function() { 8003 FunctionExpression.prototype.getBeginToken = function() {
8236 return firstBeginToken(this.returnType, this.name); 8004 return firstBeginToken(this.returnType, this.name);
8237 } 8005 }
8238 FunctionExpression.prototype.getEndToken = function() { 8006 FunctionExpression.prototype.getEndToken = function() {
8239 return this.body.getEndToken(); 8007 return this.body.getEndToken();
8240 } 8008 }
8241 FunctionExpression.prototype.accept$1 = function($0) { 8009 FunctionExpression.prototype.accept$1 = function($0) {
8242 return this.accept(($0 && $0.is$Visitor())); 8010 return this.accept($0);
8243 }; 8011 };
8244 FunctionExpression.prototype.getBeginToken$0 = function() { 8012 FunctionExpression.prototype.getBeginToken$0 = function() {
8245 return this.getBeginToken(); 8013 return this.getBeginToken();
8246 }; 8014 };
8247 FunctionExpression.prototype.getEndToken$0 = function() { 8015 FunctionExpression.prototype.getEndToken$0 = function() {
8248 return this.getEndToken(); 8016 return this.getEndToken();
8249 }; 8017 };
8250 // ********** Code for Literal ************** 8018 // ********** Code for Literal **************
8251 function Literal(token, handler) { 8019 function Literal(token, handler) {
8252 this.token = token; 8020 this.token = token;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
8306 } catch (ex) { 8074 } catch (ex) {
8307 ex = $toDartException(ex); 8075 ex = $toDartException(ex);
8308 if (!(ex instanceof BadNumberFormatException)) throw ex; 8076 if (!(ex instanceof BadNumberFormatException)) throw ex;
8309 (this.handler)(this.token, ex); 8077 (this.handler)(this.token, ex);
8310 } 8078 }
8311 } 8079 }
8312 LiteralInt.prototype.accept = function(visitor) { 8080 LiteralInt.prototype.accept = function(visitor) {
8313 return visitor.visitLiteralInt(this); 8081 return visitor.visitLiteralInt(this);
8314 } 8082 }
8315 LiteralInt.prototype.accept$1 = function($0) { 8083 LiteralInt.prototype.accept$1 = function($0) {
8316 return this.accept(($0 && $0.is$Visitor())); 8084 return this.accept($0);
8317 }; 8085 };
8318 // ********** Code for LiteralDouble ************** 8086 // ********** Code for LiteralDouble **************
8319 function LiteralDouble(token, handler) { 8087 function LiteralDouble(token, handler) {
8320 Literal$double.call(this, token, handler); 8088 Literal$double.call(this, token, handler);
8321 // Initializers done 8089 // Initializers done
8322 } 8090 }
8323 $inherits(LiteralDouble, Literal$double); 8091 $inherits(LiteralDouble, Literal$double);
8324 LiteralDouble.prototype.get$value = function() { 8092 LiteralDouble.prototype.get$value = function() {
8325 try { 8093 try {
8326 return Math.parseDouble(this.token.get$value().toString$0()); 8094 return Math.parseDouble(this.token.get$value().toString$0());
8327 } catch (ex) { 8095 } catch (ex) {
8328 ex = $toDartException(ex); 8096 ex = $toDartException(ex);
8329 if (!(ex instanceof BadNumberFormatException)) throw ex; 8097 if (!(ex instanceof BadNumberFormatException)) throw ex;
8330 (this.handler)(this.token, ex); 8098 (this.handler)(this.token, ex);
8331 } 8099 }
8332 } 8100 }
8333 LiteralDouble.prototype.accept = function(visitor) { 8101 LiteralDouble.prototype.accept = function(visitor) {
8334 return visitor.visitLiteralDouble(this); 8102 return visitor.visitLiteralDouble(this);
8335 } 8103 }
8336 LiteralDouble.prototype.accept$1 = function($0) { 8104 LiteralDouble.prototype.accept$1 = function($0) {
8337 return this.accept(($0 && $0.is$Visitor())); 8105 return this.accept($0);
8338 }; 8106 };
8339 // ********** Code for LiteralBool ************** 8107 // ********** Code for LiteralBool **************
8340 function LiteralBool(token, handler) { 8108 function LiteralBool(token, handler) {
8341 Literal$bool.call(this, token, handler); 8109 Literal$bool.call(this, token, handler);
8342 // Initializers done 8110 // Initializers done
8343 } 8111 }
8344 $inherits(LiteralBool, Literal$bool); 8112 $inherits(LiteralBool, Literal$bool);
8345 LiteralBool.prototype.get$value = function() { 8113 LiteralBool.prototype.get$value = function() {
8346 switch (this.token.get$value()) { 8114 switch (this.token.get$value()) {
8347 case const$188/*Keyword.TRUE*/: 8115 case const$188/*Keyword.TRUE*/:
8348 8116
8349 return true; 8117 return true;
8350 8118
8351 case const$160/*Keyword.FALSE*/: 8119 case const$160/*Keyword.FALSE*/:
8352 8120
8353 return false; 8121 return false;
8354 8122
8355 default: 8123 default:
8356 8124
8357 (this.handler)(this.token, ("not a bool " + this.token.get$value() + "")); 8125 (this.handler)(this.token, ("not a bool " + this.token.get$value() + ""));
8358 8126
8359 } 8127 }
8360 } 8128 }
8361 LiteralBool.prototype.accept = function(visitor) { 8129 LiteralBool.prototype.accept = function(visitor) {
8362 return visitor.visitLiteralBool(this); 8130 return visitor.visitLiteralBool(this);
8363 } 8131 }
8364 LiteralBool.prototype.accept$1 = function($0) { 8132 LiteralBool.prototype.accept$1 = function($0) {
8365 return this.accept(($0 && $0.is$Visitor())); 8133 return this.accept($0);
8366 }; 8134 };
8367 // ********** Code for LiteralString ************** 8135 // ********** Code for LiteralString **************
8368 function LiteralString(token) { 8136 function LiteralString(token) {
8369 Literal$SourceString.call(this, token, to$call$2(null)); 8137 Literal$SourceString.call(this, token, to$call$2(null));
8370 // Initializers done 8138 // Initializers done
8371 } 8139 }
8372 $inherits(LiteralString, Literal$SourceString); 8140 $inherits(LiteralString, Literal$SourceString);
8373 LiteralString.prototype.is$LiteralString = function(){return this;};
8374 LiteralString.prototype.get$value = function() { 8141 LiteralString.prototype.get$value = function() {
8375 var $0; 8142 return this.token.get$value();
8376 return (($0 = this.token.get$value()) && $0.is$SourceString());
8377 } 8143 }
8378 LiteralString.prototype.accept = function(visitor) { 8144 LiteralString.prototype.accept = function(visitor) {
8379 return visitor.visitLiteralString(this); 8145 return visitor.visitLiteralString(this);
8380 } 8146 }
8381 LiteralString.prototype.accept$1 = function($0) { 8147 LiteralString.prototype.accept$1 = function($0) {
8382 return this.accept(($0 && $0.is$Visitor())); 8148 return this.accept($0);
8383 }; 8149 };
8384 // ********** Code for Identifier ************** 8150 // ********** Code for Identifier **************
8385 function Identifier(token) { 8151 function Identifier(token) {
8386 this.token = token; 8152 this.token = token;
8387 // Initializers done 8153 // Initializers done
8388 } 8154 }
8389 $inherits(Identifier, Expression); 8155 $inherits(Identifier, Expression);
8390 Identifier.prototype.is$Identifier = function(){return this;};
8391 Identifier.prototype.get$source = function() { 8156 Identifier.prototype.get$source = function() {
8392 var $0; 8157 return this.token.get$value();
8393 return (($0 = this.token.get$value()) && $0.is$SourceString());
8394 } 8158 }
8395 Identifier.prototype.accept = function(visitor) { 8159 Identifier.prototype.accept = function(visitor) {
8396 return visitor.visitIdentifier(this); 8160 return visitor.visitIdentifier(this);
8397 } 8161 }
8398 Identifier.prototype.getBeginToken = function() { 8162 Identifier.prototype.getBeginToken = function() {
8399 return this.token; 8163 return this.token;
8400 } 8164 }
8401 Identifier.prototype.getEndToken = function() { 8165 Identifier.prototype.getEndToken = function() {
8402 return this.token; 8166 return this.token;
8403 } 8167 }
8404 Identifier.prototype.accept$1 = function($0) { 8168 Identifier.prototype.accept$1 = function($0) {
8405 return this.accept(($0 && $0.is$Visitor())); 8169 return this.accept($0);
8406 }; 8170 };
8407 Identifier.prototype.getBeginToken$0 = function() { 8171 Identifier.prototype.getBeginToken$0 = function() {
8408 return this.getBeginToken(); 8172 return this.getBeginToken();
8409 }; 8173 };
8410 Identifier.prototype.getEndToken$0 = function() { 8174 Identifier.prototype.getEndToken$0 = function() {
8411 return this.getEndToken(); 8175 return this.getEndToken();
8412 }; 8176 };
8413 // ********** Code for Operator ************** 8177 // ********** Code for Operator **************
8414 function Operator(token) { 8178 function Operator(token) {
8415 Identifier.call(this, token); 8179 Identifier.call(this, token);
8416 // Initializers done 8180 // Initializers done
8417 } 8181 }
8418 $inherits(Operator, Identifier); 8182 $inherits(Operator, Identifier);
8419 Operator.prototype.is$Operator = function(){return this;};
8420 Operator.prototype.accept = function(visitor) { 8183 Operator.prototype.accept = function(visitor) {
8421 return visitor.visitOperator(this); 8184 return visitor.visitOperator(this);
8422 } 8185 }
8423 Operator.prototype.accept$1 = function($0) { 8186 Operator.prototype.accept$1 = function($0) {
8424 return this.accept(($0 && $0.is$Visitor())); 8187 return this.accept($0);
8425 }; 8188 };
8426 // ********** Code for Return ************** 8189 // ********** Code for Return **************
8427 function Return(beginToken, endToken, expression) { 8190 function Return(beginToken, endToken, expression) {
8428 this.beginToken = beginToken; 8191 this.beginToken = beginToken;
8429 this.endToken = endToken; 8192 this.endToken = endToken;
8430 this.expression = expression; 8193 this.expression = expression;
8431 // Initializers done 8194 // Initializers done
8432 } 8195 }
8433 $inherits(Return, Statement); 8196 $inherits(Return, Statement);
8434 Return.prototype.get$hasExpression = function() { 8197 Return.prototype.get$hasExpression = function() {
8435 return this.expression != null; 8198 return this.expression != null;
8436 } 8199 }
8437 Return.prototype.accept = function(visitor) { 8200 Return.prototype.accept = function(visitor) {
8438 return visitor.visitReturn(this); 8201 return visitor.visitReturn(this);
8439 } 8202 }
8440 Return.prototype.getBeginToken = function() { 8203 Return.prototype.getBeginToken = function() {
8441 return this.beginToken; 8204 return this.beginToken;
8442 } 8205 }
8443 Return.prototype.getEndToken = function() { 8206 Return.prototype.getEndToken = function() {
8444 return this.endToken; 8207 return this.endToken;
8445 } 8208 }
8446 Return.prototype.accept$1 = function($0) { 8209 Return.prototype.accept$1 = function($0) {
8447 return this.accept(($0 && $0.is$Visitor())); 8210 return this.accept($0);
8448 }; 8211 };
8449 Return.prototype.getBeginToken$0 = function() { 8212 Return.prototype.getBeginToken$0 = function() {
8450 return this.getBeginToken(); 8213 return this.getBeginToken();
8451 }; 8214 };
8452 Return.prototype.getEndToken$0 = function() { 8215 Return.prototype.getEndToken$0 = function() {
8453 return this.getEndToken(); 8216 return this.getEndToken();
8454 }; 8217 };
8455 // ********** Code for ExpressionStatement ************** 8218 // ********** Code for ExpressionStatement **************
8456 function ExpressionStatement(expression, endToken) { 8219 function ExpressionStatement(expression, endToken) {
8457 this.expression = expression; 8220 this.expression = expression;
8458 this.endToken = endToken; 8221 this.endToken = endToken;
8459 // Initializers done 8222 // Initializers done
8460 } 8223 }
8461 $inherits(ExpressionStatement, Statement); 8224 $inherits(ExpressionStatement, Statement);
8462 ExpressionStatement.prototype.is$ExpressionStatement = function(){return this;};
8463 ExpressionStatement.prototype.accept = function(visitor) { 8225 ExpressionStatement.prototype.accept = function(visitor) {
8464 return visitor.visitExpressionStatement(this); 8226 return visitor.visitExpressionStatement(this);
8465 } 8227 }
8466 ExpressionStatement.prototype.getBeginToken = function() { 8228 ExpressionStatement.prototype.getBeginToken = function() {
8467 var $0; 8229 return this.expression.getBeginToken();
8468 return (($0 = this.expression.getBeginToken()) && $0.is$Token());
8469 } 8230 }
8470 ExpressionStatement.prototype.getEndToken = function() { 8231 ExpressionStatement.prototype.getEndToken = function() {
8471 return this.endToken; 8232 return this.endToken;
8472 } 8233 }
8473 ExpressionStatement.prototype.accept$1 = function($0) { 8234 ExpressionStatement.prototype.accept$1 = function($0) {
8474 return this.accept(($0 && $0.is$Visitor())); 8235 return this.accept($0);
8475 }; 8236 };
8476 ExpressionStatement.prototype.getBeginToken$0 = function() { 8237 ExpressionStatement.prototype.getBeginToken$0 = function() {
8477 return this.getBeginToken(); 8238 return this.getBeginToken();
8478 }; 8239 };
8479 ExpressionStatement.prototype.getEndToken$0 = function() { 8240 ExpressionStatement.prototype.getEndToken$0 = function() {
8480 return this.getEndToken(); 8241 return this.getEndToken();
8481 }; 8242 };
8482 // ********** Code for Throw ************** 8243 // ********** Code for Throw **************
8483 function Throw(expression, throwToken, endToken) { 8244 function Throw(expression, throwToken, endToken) {
8484 this.expression = expression; 8245 this.expression = expression;
8485 this.throwToken = throwToken; 8246 this.throwToken = throwToken;
8486 this.endToken = endToken; 8247 this.endToken = endToken;
8487 // Initializers done 8248 // Initializers done
8488 } 8249 }
8489 $inherits(Throw, Statement); 8250 $inherits(Throw, Statement);
8490 Throw.prototype.accept = function(visitor) { 8251 Throw.prototype.accept = function(visitor) {
8491 return visitor.visitThrow(this); 8252 return visitor.visitThrow(this);
8492 } 8253 }
8493 Throw.prototype.getBeginToken = function() { 8254 Throw.prototype.getBeginToken = function() {
8494 return this.throwToken; 8255 return this.throwToken;
8495 } 8256 }
8496 Throw.prototype.getEndToken = function() { 8257 Throw.prototype.getEndToken = function() {
8497 return this.endToken; 8258 return this.endToken;
8498 } 8259 }
8499 Throw.prototype.accept$1 = function($0) { 8260 Throw.prototype.accept$1 = function($0) {
8500 return this.accept(($0 && $0.is$Visitor())); 8261 return this.accept($0);
8501 }; 8262 };
8502 Throw.prototype.getBeginToken$0 = function() { 8263 Throw.prototype.getBeginToken$0 = function() {
8503 return this.getBeginToken(); 8264 return this.getBeginToken();
8504 }; 8265 };
8505 Throw.prototype.getEndToken$0 = function() { 8266 Throw.prototype.getEndToken$0 = function() {
8506 return this.getEndToken(); 8267 return this.getEndToken();
8507 }; 8268 };
8508 // ********** Code for TypeAnnotation ************** 8269 // ********** Code for TypeAnnotation **************
8509 function TypeAnnotation(typeName) { 8270 function TypeAnnotation(typeName) {
8510 this.typeName = typeName; 8271 this.typeName = typeName;
8511 // Initializers done 8272 // Initializers done
8512 } 8273 }
8513 $inherits(TypeAnnotation, Node); 8274 $inherits(TypeAnnotation, Node);
8514 TypeAnnotation.prototype.is$TypeAnnotation = function(){return this;};
8515 TypeAnnotation.prototype.get$typeName = function() { return this.typeName; }; 8275 TypeAnnotation.prototype.get$typeName = function() { return this.typeName; };
8516 TypeAnnotation.prototype.accept = function(visitor) { 8276 TypeAnnotation.prototype.accept = function(visitor) {
8517 return visitor.visitTypeAnnotation(this); 8277 return visitor.visitTypeAnnotation(this);
8518 } 8278 }
8519 TypeAnnotation.prototype.getBeginToken = function() { 8279 TypeAnnotation.prototype.getBeginToken = function() {
8520 var $0; 8280 return this.typeName.getBeginToken();
8521 return (($0 = this.typeName.getBeginToken()) && $0.is$Token());
8522 } 8281 }
8523 TypeAnnotation.prototype.getEndToken = function() { 8282 TypeAnnotation.prototype.getEndToken = function() {
8524 var $0; 8283 return this.typeName.getEndToken();
8525 return (($0 = this.typeName.getEndToken()) && $0.is$Token());
8526 } 8284 }
8527 TypeAnnotation.prototype.accept$1 = function($0) { 8285 TypeAnnotation.prototype.accept$1 = function($0) {
8528 return this.accept(($0 && $0.is$Visitor())); 8286 return this.accept($0);
8529 }; 8287 };
8530 TypeAnnotation.prototype.getBeginToken$0 = function() { 8288 TypeAnnotation.prototype.getBeginToken$0 = function() {
8531 return this.getBeginToken(); 8289 return this.getBeginToken();
8532 }; 8290 };
8533 TypeAnnotation.prototype.getEndToken$0 = function() { 8291 TypeAnnotation.prototype.getEndToken$0 = function() {
8534 return this.getEndToken(); 8292 return this.getEndToken();
8535 }; 8293 };
8536 // ********** Code for VariableDefinitions ************** 8294 // ********** Code for VariableDefinitions **************
8537 function VariableDefinitions(type, modifiers, definitions, endToken) { 8295 function VariableDefinitions(type, modifiers, definitions, endToken) {
8538 this.type = type; 8296 this.type = type;
8539 this.modifiers = modifiers; 8297 this.modifiers = modifiers;
8540 this.definitions = definitions; 8298 this.definitions = definitions;
8541 this.endToken = endToken; 8299 this.endToken = endToken;
8542 // Initializers done 8300 // Initializers done
8543 } 8301 }
8544 $inherits(VariableDefinitions, Statement); 8302 $inherits(VariableDefinitions, Statement);
8545 VariableDefinitions.prototype.is$VariableDefinitions = function(){return this;};
8546 VariableDefinitions.prototype.get$type = function() { return this.type; };
8547 VariableDefinitions.prototype.accept = function(visitor) { 8303 VariableDefinitions.prototype.accept = function(visitor) {
8548 return visitor.visitVariableDefinitions(this); 8304 return visitor.visitVariableDefinitions(this);
8549 } 8305 }
8550 VariableDefinitions.prototype.getBeginToken = function() { 8306 VariableDefinitions.prototype.getBeginToken = function() {
8551 return firstBeginToken(this.type, this.definitions); 8307 return firstBeginToken(this.type, this.definitions);
8552 } 8308 }
8553 VariableDefinitions.prototype.getEndToken = function() { 8309 VariableDefinitions.prototype.getEndToken = function() {
8554 return this.endToken; 8310 return this.endToken;
8555 } 8311 }
8556 VariableDefinitions.prototype.accept$1 = function($0) { 8312 VariableDefinitions.prototype.accept$1 = function($0) {
8557 return this.accept(($0 && $0.is$Visitor())); 8313 return this.accept($0);
8558 }; 8314 };
8559 VariableDefinitions.prototype.getBeginToken$0 = function() { 8315 VariableDefinitions.prototype.getBeginToken$0 = function() {
8560 return this.getBeginToken(); 8316 return this.getBeginToken();
8561 }; 8317 };
8562 VariableDefinitions.prototype.getEndToken$0 = function() { 8318 VariableDefinitions.prototype.getEndToken$0 = function() {
8563 return this.getEndToken(); 8319 return this.getEndToken();
8564 }; 8320 };
8565 // ********** Code for Unparser ************** 8321 // ********** Code for Unparser **************
8566 function Unparser(printDebugInfo) { 8322 function Unparser(printDebugInfo) {
8567 this.printDebugInfo = printDebugInfo; 8323 this.printDebugInfo = printDebugInfo;
8568 // Initializers done 8324 // Initializers done
8569 } 8325 }
8570 Unparser.prototype.is$Visitor = function(){return this;};
8571 Unparser.prototype.unparse = function(node) { 8326 Unparser.prototype.unparse = function(node) {
8572 this.sb = new StringBufferImpl(""); 8327 this.sb = new StringBufferImpl("");
8573 this.visit(node); 8328 this.visit(node);
8574 return this.sb.toString(); 8329 return this.sb.toString();
8575 } 8330 }
8576 Unparser.prototype.add = function(string) { 8331 Unparser.prototype.add = function(string) {
8577 string.printOn(this.sb); 8332 string.printOn(this.sb);
8578 } 8333 }
8579 Unparser.prototype.visit = function(node) { 8334 Unparser.prototype.visit = function(node) {
8580 if (node != null) { 8335 if (node != null) {
8581 if ($notnull_bool(this.printDebugInfo)) this.sb.add(('[' + node.getObjectDes cription() + ': ')); 8336 if (this.printDebugInfo) this.sb.add(('[' + node.getObjectDescription() + ': '));
8582 node.accept(this); 8337 node.accept(this);
8583 if ($notnull_bool(this.printDebugInfo)) this.sb.add(']'); 8338 if (this.printDebugInfo) this.sb.add(']');
8584 } 8339 }
8585 else if ($notnull_bool(this.printDebugInfo)) { 8340 else if (this.printDebugInfo) {
8586 this.sb.add('[null]'); 8341 this.sb.add('[null]');
8587 } 8342 }
8588 } 8343 }
8589 Unparser.prototype.visitBlock = function(node) { 8344 Unparser.prototype.visitBlock = function(node) {
8590 this.visit(node.statements); 8345 this.visit(node.statements);
8591 } 8346 }
8592 Unparser.prototype.visitExpressionStatement = function(node) { 8347 Unparser.prototype.visitExpressionStatement = function(node) {
8593 var $0;
8594 this.visit(node.expression); 8348 this.visit(node.expression);
8595 this.add((($0 = node.endToken.get$value()) && $0.is$SourceString())); 8349 this.add(node.endToken.get$value());
8596 } 8350 }
8597 Unparser.prototype.visitFor = function(node) { 8351 Unparser.prototype.visitFor = function(node) {
8598 node.forToken.get$value().printOn$1(this.sb); 8352 node.forToken.get$value().printOn$1(this.sb);
8599 this.sb.add('('); 8353 this.sb.add('(');
8600 this.visit(node.initializer); 8354 this.visit(node.initializer);
8601 this.visit(node.condition); 8355 this.visit(node.condition);
8602 this.visit(node.update); 8356 this.visit(node.update);
8603 this.sb.add(')'); 8357 this.sb.add(')');
8604 this.visit(node.body); 8358 this.visit(node.body);
8605 } 8359 }
8606 Unparser.prototype.visitFunctionExpression = function(node) { 8360 Unparser.prototype.visitFunctionExpression = function(node) {
8607 if (node.returnType != null) { 8361 if (node.returnType != null) {
8608 this.visit(node.returnType); 8362 this.visit(node.returnType);
8609 this.sb.add(' '); 8363 this.sb.add(' ');
8610 } 8364 }
8611 this.visit(node.name); 8365 this.visit(node.name);
8612 this.visit(node.parameters); 8366 this.visit(node.parameters);
8613 this.visit(node.body); 8367 this.visit(node.body);
8614 } 8368 }
8615 Unparser.prototype.visitIdentifier = function(node) { 8369 Unparser.prototype.visitIdentifier = function(node) {
8616 var $0; 8370 this.add(node.token.get$value());
8617 this.add((($0 = node.token.get$value()) && $0.is$SourceString()));
8618 } 8371 }
8619 Unparser.prototype.visitIf = function(node) { 8372 Unparser.prototype.visitIf = function(node) {
8620 var $0; 8373 this.add(node.ifToken.get$value());
8621 this.add((($0 = node.ifToken.get$value()) && $0.is$SourceString()));
8622 this.visit(node.condition); 8374 this.visit(node.condition);
8623 this.visit(node.thenPart); 8375 this.visit(node.thenPart);
8624 if ($notnull_bool(node.get$hasElsePart())) { 8376 if (node.get$hasElsePart()) {
8625 this.add((($0 = node.elseToken.get$value()) && $0.is$SourceString())); 8377 this.add(node.elseToken.get$value());
8626 this.visit(node.elsePart); 8378 this.visit(node.elsePart);
8627 } 8379 }
8628 } 8380 }
8629 Unparser.prototype.visitLiteralBool = function(node) { 8381 Unparser.prototype.visitLiteralBool = function(node) {
8630 var $0; 8382 this.add(node.token.get$value());
8631 this.add((($0 = node.token.get$value()) && $0.is$SourceString()));
8632 } 8383 }
8633 Unparser.prototype.visitLiteralDouble = function(node) { 8384 Unparser.prototype.visitLiteralDouble = function(node) {
8634 var $0; 8385 this.add(node.token.get$value());
8635 this.add((($0 = node.token.get$value()) && $0.is$SourceString()));
8636 } 8386 }
8637 Unparser.prototype.visitLiteralInt = function(node) { 8387 Unparser.prototype.visitLiteralInt = function(node) {
8638 var $0; 8388 this.add(node.token.get$value());
8639 this.add((($0 = node.token.get$value()) && $0.is$SourceString()));
8640 } 8389 }
8641 Unparser.prototype.visitLiteralString = function(node) { 8390 Unparser.prototype.visitLiteralString = function(node) {
8642 var $0; 8391 this.add(node.token.get$value());
8643 this.add((($0 = node.token.get$value()) && $0.is$SourceString()));
8644 } 8392 }
8645 Unparser.prototype.visitNodeList = function(node) { 8393 Unparser.prototype.visitNodeList = function(node) {
8646 var $0; 8394 if (node.beginToken != null) this.add(node.beginToken.get$value());
8647 if (node.beginToken != null) this.add((($0 = node.beginToken.get$value()) && $ 0.is$SourceString()));
8648 if (node.nodes != null) { 8395 if (node.nodes != null) {
8649 node.nodes.printOn(this.sb, node.delimiter); 8396 node.nodes.printOn(this.sb, node.delimiter);
8650 } 8397 }
8651 if (node.endToken != null) this.add((($0 = node.endToken.get$value()) && $0.is $SourceString())); 8398 if (node.endToken != null) this.add(node.endToken.get$value());
8652 } 8399 }
8653 Unparser.prototype.visitOperator = function(node) { 8400 Unparser.prototype.visitOperator = function(node) {
8654 this.visitIdentifier(node); 8401 this.visitIdentifier(node);
8655 } 8402 }
8656 Unparser.prototype.visitReturn = function(node) { 8403 Unparser.prototype.visitReturn = function(node) {
8657 var $0; 8404 this.add(node.beginToken.get$value());
8658 this.add((($0 = node.beginToken.get$value()) && $0.is$SourceString())); 8405 if (node.get$hasExpression()) {
8659 if ($notnull_bool(node.get$hasExpression())) {
8660 this.sb.add(' '); 8406 this.sb.add(' ');
8661 this.visit(node.expression); 8407 this.visit(node.expression);
8662 } 8408 }
8663 this.add((($0 = node.endToken.get$value()) && $0.is$SourceString())); 8409 this.add(node.endToken.get$value());
8664 } 8410 }
8665 Unparser.prototype.visitSend = function(node) { 8411 Unparser.prototype.visitSend = function(node) {
8666 if (node.receiver != null) { 8412 if (node.receiver != null) {
8667 this.visit(node.receiver); 8413 this.visit(node.receiver);
8668 if (!(node.selector instanceof Operator)) this.sb.add('.'); 8414 if (!(node.selector instanceof Operator)) this.sb.add('.');
8669 } 8415 }
8670 this.visit(node.selector); 8416 this.visit(node.selector);
8671 this.visit(node.argumentsNode); 8417 this.visit(node.argumentsNode);
8672 } 8418 }
8673 Unparser.prototype.visitSendSet = function(node) { 8419 Unparser.prototype.visitSendSet = function(node) {
8674 var $0;
8675 if (node.receiver != null) { 8420 if (node.receiver != null) {
8676 this.visit(node.receiver); 8421 this.visit(node.receiver);
8677 this.sb.add('.'); 8422 this.sb.add('.');
8678 } 8423 }
8679 this.visit(node.selector); 8424 this.visit(node.selector);
8680 this.add((($0 = node.assignmentOperator.get$value()) && $0.is$SourceString())) ; 8425 this.add(node.assignmentOperator.get$value());
8681 this.visit(node.argumentsNode); 8426 this.visit(node.argumentsNode);
8682 } 8427 }
8683 Unparser.prototype.visitThrow = function(node) { 8428 Unparser.prototype.visitThrow = function(node) {
8684 node.throwToken.get$value().printOn$1(this.sb); 8429 node.throwToken.get$value().printOn$1(this.sb);
8685 if (node.expression != null) { 8430 if (node.expression != null) {
8686 this.visit(node.expression); 8431 this.visit(node.expression);
8687 } 8432 }
8688 node.endToken.get$value().printOn$1(this.sb); 8433 node.endToken.get$value().printOn$1(this.sb);
8689 } 8434 }
8690 Unparser.prototype.visitTypeAnnotation = function(node) { 8435 Unparser.prototype.visitTypeAnnotation = function(node) {
8691 this.visit(node.typeName); 8436 this.visit(node.typeName);
8692 } 8437 }
8693 Unparser.prototype.visitVariableDefinitions = function(node) { 8438 Unparser.prototype.visitVariableDefinitions = function(node) {
8694 var $0;
8695 if (node.type != null) { 8439 if (node.type != null) {
8696 this.visit(node.type); 8440 this.visit(node.type);
8697 } 8441 }
8698 else { 8442 else {
8699 this.sb.add('var'); 8443 this.sb.add('var');
8700 } 8444 }
8701 this.sb.add(' '); 8445 this.sb.add(' ');
8702 this.visit(node.definitions); 8446 this.visit(node.definitions);
8703 if (node.endToken != null) this.add((($0 = node.endToken.get$value()) && $0.is $SourceString())); 8447 if (node.endToken != null) this.add(node.endToken.get$value());
8704 } 8448 }
8705 Unparser.prototype.add$1 = function($0) { 8449 Unparser.prototype.add$1 = function($0) {
8706 return this.add(($0 && $0.is$SourceString())); 8450 return this.add($0);
8707 }; 8451 };
8708 Unparser.prototype.visit$1 = function($0) { 8452 Unparser.prototype.visit$1 = function($0) {
8709 return this.visit(($0 && $0.is$Node())); 8453 return this.visit($0);
8710 }; 8454 };
8711 // ********** Code for top level ************** 8455 // ********** Code for top level **************
8712 function firstBeginToken(first, second) { 8456 function firstBeginToken(first, second) {
8713 var $0; 8457 return (first != null) ? first.getBeginToken() : second.getBeginToken();
8714 return (($0 = (first != null) ? first.getBeginToken() : second.getBeginToken() ) && $0.is$Token());
8715 } 8458 }
8716 // ********** Library elements ************** 8459 // ********** Library elements **************
8717 // ********** Code for ElementKind ************** 8460 // ********** Code for ElementKind **************
8718 function ElementKind(id) { 8461 function ElementKind(id) {
8719 this.id = id; 8462 this.id = id;
8720 // Initializers done 8463 // Initializers done
8721 } 8464 }
8722 // ********** Code for Element ************** 8465 // ********** Code for Element **************
8723 function Element(name, kind, enclosingElement) { 8466 function Element(name, kind, enclosingElement) {
8724 this.name = name; 8467 this.name = name;
8725 this.kind = kind; 8468 this.kind = kind;
8726 this.enclosingElement = enclosingElement; 8469 this.enclosingElement = enclosingElement;
8727 // Initializers done 8470 // Initializers done
8728 } 8471 }
8729 Element.prototype.is$Element = function(){return this;};
8730 Element.prototype.get$name = function() { return this.name; }; 8472 Element.prototype.get$name = function() { return this.name; };
8731 Element.prototype.hashCode = function() { 8473 Element.prototype.hashCode = function() {
8732 return this.name.hashCode(); 8474 return this.name.hashCode();
8733 } 8475 }
8734 Element.prototype.computeType$2 = function($0, $1) { 8476 Element.prototype.computeType$2 = function($0, $1) {
8735 return this.computeType(($0 && $0.is$Compiler()), ($1 && $1.is$Types())); 8477 return this.computeType($0, $1);
8736 }; 8478 };
8737 Element.prototype.hashCode$0 = function() { 8479 Element.prototype.hashCode$0 = function() {
8738 return this.hashCode(); 8480 return this.hashCode();
8739 }; 8481 };
8740 // ********** Code for VariableElement ************** 8482 // ********** Code for VariableElement **************
8741 function VariableElement(node, typeAnnotation, name, enclosingElement) { 8483 function VariableElement(node, typeAnnotation, name, enclosingElement) {
8742 this.node = node; 8484 this.node = node;
8743 this.typeAnnotation = typeAnnotation; 8485 this.typeAnnotation = typeAnnotation;
8744 Element.call(this, name, const$262, enclosingElement); 8486 Element.call(this, name, const$262, enclosingElement);
8745 // Initializers done 8487 // Initializers done
8746 } 8488 }
8747 $inherits(VariableElement, Element); 8489 $inherits(VariableElement, Element);
8748 VariableElement.prototype.get$type = function() { return this.type; };
8749 VariableElement.prototype.set$type = function(value) { return this.type = value; };
8750 VariableElement.prototype.parseNode = function(canceler, logger) { 8490 VariableElement.prototype.parseNode = function(canceler, logger) {
8751 return this.node; 8491 return this.node;
8752 } 8492 }
8753 VariableElement.prototype.computeType = function(compiler, types) { 8493 VariableElement.prototype.computeType = function(compiler, types) {
8754 return getType(this.typeAnnotation, types); 8494 return getType(this.typeAnnotation, types);
8755 } 8495 }
8756 VariableElement.prototype.computeType$2 = function($0, $1) { 8496 VariableElement.prototype.computeType$2 = function($0, $1) {
8757 return this.computeType(($0 && $0.is$Compiler()), ($1 && $1.is$Types())); 8497 return this.computeType($0, $1);
8758 }; 8498 };
8759 // ********** Code for ForeignElement ************** 8499 // ********** Code for ForeignElement **************
8760 function ForeignElement(name) { 8500 function ForeignElement(name) {
8761 Element.call(this, name, const$242, null); 8501 Element.call(this, name, const$242, null);
8762 // Initializers done 8502 // Initializers done
8763 } 8503 }
8764 $inherits(ForeignElement, Element); 8504 $inherits(ForeignElement, Element);
8765 ForeignElement.prototype.computeType = function(compiler, types) { 8505 ForeignElement.prototype.computeType = function(compiler, types) {
8766 return types.dynamicType; 8506 return types.dynamicType;
8767 } 8507 }
8768 ForeignElement.prototype.computeType$2 = function($0, $1) { 8508 ForeignElement.prototype.computeType$2 = function($0, $1) {
8769 return this.computeType(($0 && $0.is$Compiler()), ($1 && $1.is$Types())); 8509 return this.computeType($0, $1);
8770 }; 8510 };
8771 // ********** Code for FunctionElement ************** 8511 // ********** Code for FunctionElement **************
8772 function FunctionElement(name) { 8512 function FunctionElement(name) {
8773 Element.call(this, name, const$239, null); 8513 Element.call(this, name, const$239, null);
8774 // Initializers done 8514 // Initializers done
8775 } 8515 }
8776 $inherits(FunctionElement, Element); 8516 $inherits(FunctionElement, Element);
8777 FunctionElement.prototype.get$type = function() { return this.type; };
8778 FunctionElement.prototype.set$type = function(value) { return this.type = value; };
8779 FunctionElement.prototype.computeType = function(compiler, types) { 8517 FunctionElement.prototype.computeType = function(compiler, types) {
8780 var $0; 8518 if (this.type != null) return this.type;
8781 if (this.type != null) return (($0 = this.type) && $0.is$FunctionType()); 8519 var node = this.parseNode(compiler, compiler);
8782 var node = (($0 = this.parseNode(compiler, compiler)) && $0.is$FunctionExpress ion());
8783 var returnType = getType(node.returnType, types); 8520 var returnType = getType(node.returnType, types);
8784 if (returnType == null) compiler.cancel(('unknown type ' + returnType + '')); 8521 if (returnType == null) compiler.cancel(('unknown type ' + returnType + ''));
8785 var parameterTypes = new LinkBuilderImplementation(); 8522 var parameterTypes = new LinkBuilderImplementation();
8786 for (var link = node.parameters.nodes; 8523 for (var link = node.parameters.nodes;
8787 !$notnull_bool(link.isEmpty$0()); link = link.get$tail()) { 8524 !link.isEmpty$0(); link = link.get$tail()) {
8788 var parameter = (($0 = link.get$head()) && $0.is$VariableDefinitions()); 8525 var parameter = link.get$head();
8789 parameterTypes.addLast(getType(parameter.type, types)); 8526 parameterTypes.addLast(getType(parameter.type, types));
8790 } 8527 }
8791 this.type = new FunctionType(returnType, (($0 = parameterTypes.toLink()) && $0 .is$Link$Type())); 8528 this.type = new FunctionType(returnType, parameterTypes.toLink());
8792 return (($0 = this.type) && $0.is$FunctionType()); 8529 return this.type;
8793 } 8530 }
8794 FunctionElement.prototype.computeType$2 = FunctionElement.prototype.computeType; 8531 FunctionElement.prototype.computeType$2 = function($0, $1) {
8532 return this.computeType($0, $1);
8533 };
8795 // ********** Code for ClassElement ************** 8534 // ********** Code for ClassElement **************
8796 function ClassElement(name) { 8535 function ClassElement(name) {
8797 this.interfaces = const$14/*const EmptyLink()*/ 8536 this.interfaces = const$14/*const EmptyLink()*/
8798 this.isResolved = false 8537 this.isResolved = false
8799 Element.call(this, name, const$237, null); 8538 Element.call(this, name, const$237, null);
8800 // Initializers done 8539 // Initializers done
8801 } 8540 }
8802 $inherits(ClassElement, Element); 8541 $inherits(ClassElement, Element);
8803 ClassElement.prototype.is$ClassElement = function(){return this;};
8804 ClassElement.prototype.get$type = function() { return this.type; };
8805 ClassElement.prototype.set$type = function(value) { return this.type = value; };
8806 ClassElement.prototype.get$interfaces = function() { return this.interfaces; }; 8542 ClassElement.prototype.get$interfaces = function() { return this.interfaces; };
8807 ClassElement.prototype.set$interfaces = function(value) { return this.interfaces = value; }; 8543 ClassElement.prototype.set$interfaces = function(value) { return this.interfaces = value; };
8808 ClassElement.prototype.computeType = function(compiler, types) { 8544 ClassElement.prototype.computeType = function(compiler, types) {
8809 if (this.type == null) { 8545 if (this.type == null) {
8810 this.type = new SimpleType(this.name, this); 8546 this.type = new SimpleType(this.name, this);
8811 } 8547 }
8812 return this.type; 8548 return this.type;
8813 } 8549 }
8814 ClassElement.prototype.resolve = function(compiler) { 8550 ClassElement.prototype.resolve = function(compiler) {
8815 if ($notnull_bool(this.isResolved)) return; 8551 if (this.isResolved) return;
8816 compiler.resolveType(this); 8552 compiler.resolveType(this);
8817 this.isResolved = true; 8553 this.isResolved = true;
8818 } 8554 }
8819 ClassElement.prototype.computeType$2 = ClassElement.prototype.computeType; 8555 ClassElement.prototype.computeType$2 = function($0, $1) {
8556 return this.computeType($0, $1);
8557 };
8820 ClassElement.prototype.resolve$1 = function($0) { 8558 ClassElement.prototype.resolve$1 = function($0) {
8821 return this.resolve(($0 && $0.is$Compiler())); 8559 return this.resolve($0);
8822 }; 8560 };
8823 // ********** Code for top level ************** 8561 // ********** Code for top level **************
8824 function getType(annotation, types) { 8562 function getType(annotation, types) {
8825 var $0;
8826 if (annotation == null || annotation.typeName == null) { 8563 if (annotation == null || annotation.typeName == null) {
8827 return (($0 = types.dynamicType) && $0.is$Type()); 8564 return types.dynamicType;
8828 } 8565 }
8829 return (($0 = types.lookup$1(annotation.typeName.get$source())) && $0.is$Type( )); 8566 return types.lookup$1(annotation.typeName.get$source());
8830 } 8567 }
8831 // ********** Library ssa ************** 8568 // ********** Library ssa **************
8832 // ********** Code for SsaBuilderTask ************** 8569 // ********** Code for SsaBuilderTask **************
8833 function SsaBuilderTask(compiler) { 8570 function SsaBuilderTask(compiler) {
8834 CompilerTask.call(this, compiler); 8571 CompilerTask.call(this, compiler);
8835 // Initializers done 8572 // Initializers done
8836 } 8573 }
8837 $inherits(SsaBuilderTask, CompilerTask); 8574 $inherits(SsaBuilderTask, CompilerTask);
8838 SsaBuilderTask.prototype.get$name = function() { 8575 SsaBuilderTask.prototype.get$name = function() {
8839 return 'SSA builder'; 8576 return 'SSA builder';
8840 } 8577 }
8841 SsaBuilderTask.prototype.build = function(tree, elements) { 8578 SsaBuilderTask.prototype.build = function(tree, elements) {
8842 var $this = this; // closure support 8579 var $this = this; // closure support
8843 var $0; 8580 return this.measure((function () {
8844 return (($0 = this.measure((function () { 8581 var function_ = tree;
8845 var $0;
8846 var function_ = (tree && tree.is$FunctionExpression());
8847 var graph = $this.compileMethod(function_.parameters, function_.body, elemen ts); 8582 var graph = $this.compileMethod(function_.parameters, function_.body, elemen ts);
8848 $assert(graph.isValid(), "graph.isValid()", "builder.dart", 14, 14);
8849 if (false/*null.GENERATE_SSA_TRACE*/) { 8583 if (false/*null.GENERATE_SSA_TRACE*/) {
8850 var name = (($0 = function_.name) && $0.is$Identifier()); 8584 var name = function_.name;
8851 HTracer.HTracer$singleton$factory().traceCompilation(name.get$source().toS tring()); 8585 HTracer.HTracer$singleton$factory().traceCompilation(name.get$source().toS tring());
8852 HTracer.HTracer$singleton$factory().traceGraph('builder', graph); 8586 HTracer.HTracer$singleton$factory().traceGraph('builder', graph);
8853 } 8587 }
8854 return graph; 8588 return graph;
8855 }) 8589 })
8856 )) && $0.is$HGraph()); 8590 );
8857 } 8591 }
8858 SsaBuilderTask.prototype.compileMethod = function(parameters, body, elements) { 8592 SsaBuilderTask.prototype.compileMethod = function(parameters, body, elements) {
8859 var builder = new SsaBuilder(this.compiler, elements); 8593 var builder = new SsaBuilder(this.compiler, elements);
8860 var graph = builder.build(parameters, body); 8594 var graph = builder.build(parameters, body);
8861 return graph; 8595 return graph;
8862 } 8596 }
8863 // ********** Code for SsaBuilder ************** 8597 // ********** Code for SsaBuilder **************
8864 function SsaBuilder(compiler, elements) { 8598 function SsaBuilder(compiler, elements) {
8865 this.compiler = compiler; 8599 this.compiler = compiler;
8866 this.elements = elements; 8600 this.elements = elements;
8867 // Initializers done 8601 // Initializers done
8868 } 8602 }
8869 SsaBuilder.prototype.is$Visitor = function(){return this;};
8870 SsaBuilder.prototype.build = function(parameters, body) { 8603 SsaBuilder.prototype.build = function(parameters, body) {
8871 this.stack = new ListFactory(); 8604 this.stack = new ListFactory();
8872 this.definitions = new HashMapImplementation(); 8605 this.definitions = new HashMapImplementation();
8873 this.graph = new HGraph(); 8606 this.graph = new HGraph();
8874 var block = this.graph.addNewBlock(); 8607 var block = this.graph.addNewBlock();
8875 this.open(this.graph.entry); 8608 this.open(this.graph.entry);
8876 this.visitParameters(parameters); 8609 this.visitParameters(parameters);
8877 this.close(new HGoto()).addSuccessor(block); 8610 this.close(new HGoto()).addSuccessor(block);
8878 this.open(block); 8611 this.open(block);
8879 body.accept(this); 8612 body.accept(this);
8880 if (!$notnull_bool(this.isAborted())) this.close(new HGoto()).addSuccessor(thi s.graph.exit); 8613 if (!this.isAborted()) this.close(new HGoto()).addSuccessor(this.graph.exit);
8881 this.graph.finalize(); 8614 this.graph.finalize();
8882 return this.graph; 8615 return this.graph;
8883 } 8616 }
8884 SsaBuilder.prototype.open = function(block) { 8617 SsaBuilder.prototype.open = function(block) {
8885 block.open(); 8618 block.open();
8886 this.current = block; 8619 this.current = block;
8887 } 8620 }
8888 SsaBuilder.prototype.close = function(end) { 8621 SsaBuilder.prototype.close = function(end) {
8889 var result = this.current; 8622 var result = this.current;
8890 this.current.close(end); 8623 this.current.close(end);
8891 this.current = null; 8624 this.current = null;
8892 return result; 8625 return result;
8893 } 8626 }
8894 SsaBuilder.prototype.goto = function(from, to) { 8627 SsaBuilder.prototype.goto = function(from, to) {
8895 from.close(new HGoto()); 8628 from.close(new HGoto());
8896 from.addSuccessor(to); 8629 from.addSuccessor(to);
8897 } 8630 }
8898 SsaBuilder.prototype.isAborted = function() { 8631 SsaBuilder.prototype.isAborted = function() {
8899 return this.current == null; 8632 return this.current == null;
8900 } 8633 }
8901 SsaBuilder.prototype.add = function(instruction) { 8634 SsaBuilder.prototype.add = function(instruction) {
8902 this.current.add(instruction); 8635 this.current.add(instruction);
8903 } 8636 }
8904 SsaBuilder.prototype.push = function(instruction) { 8637 SsaBuilder.prototype.push = function(instruction) {
8905 this.add(instruction); 8638 this.add(instruction);
8906 this.stack.add(instruction); 8639 this.stack.add(instruction);
8907 } 8640 }
8908 SsaBuilder.prototype.pop = function() { 8641 SsaBuilder.prototype.pop = function() {
8909 var $0; 8642 return this.stack.removeLast();
8910 return (($0 = this.stack.removeLast()) && $0.is$HInstruction());
8911 } 8643 }
8912 SsaBuilder.prototype.visit = function(node) { 8644 SsaBuilder.prototype.visit = function(node) {
8913 if (node != null) node.accept(this); 8645 if (node != null) node.accept(this);
8914 } 8646 }
8915 SsaBuilder.prototype.visitParameters = function(parameters) { 8647 SsaBuilder.prototype.visitParameters = function(parameters) {
8916 var $0;
8917 var parameterIndex = 0; 8648 var parameterIndex = 0;
8918 for (var link = parameters.nodes; 8649 for (var link = parameters.nodes;
8919 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 8650 !link.isEmpty(); link = link.get$tail()) {
8920 var container = (($0 = link.get$head()) && $0.is$VariableDefinitions()); 8651 var container = link.get$head();
8921 var identifierLink = container.definitions.nodes; 8652 var identifierLink = container.definitions.nodes;
8922 $assert(!$notnull_bool(identifierLink.isEmpty()) && $notnull_bool(identifier Link.get$tail().isEmpty$0()), "!identifierLink.isEmpty() && identifierLink.tail. isEmpty()", "builder.dart", 115, 14);
8923 if (!(identifierLink.get$head() instanceof Identifier)) { 8653 if (!(identifierLink.get$head() instanceof Identifier)) {
8924 this.compiler.unimplemented("SsaBuilder.visitParameters non-identifier"); 8654 this.compiler.unimplemented("SsaBuilder.visitParameters non-identifier");
8925 } 8655 }
8926 var parameterId = (($0 = identifierLink.get$head()) && $0.is$Identifier()); 8656 var parameterId = identifierLink.get$head();
8927 var element = (($0 = this.elements.$index(parameterId)) && $0.is$Element()); 8657 var element = this.elements.$index(parameterId);
8928 var parameterInstruction = new HParameter(parameterIndex++); 8658 var parameterInstruction = new HParameter(parameterIndex++);
8929 this.definitions.$setindex(element, parameterInstruction); 8659 this.definitions.$setindex(element, parameterInstruction);
8930 this.add(parameterInstruction); 8660 this.add(parameterInstruction);
8931 } 8661 }
8932 } 8662 }
8933 SsaBuilder.prototype.visitBlock = function(node) { 8663 SsaBuilder.prototype.visitBlock = function(node) {
8934 var $0;
8935 for (var link = node.statements.nodes; 8664 for (var link = node.statements.nodes;
8936 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 8665 !link.isEmpty(); link = link.get$tail()) {
8937 this.visit((($0 = link.get$head()) && $0.is$Node())); 8666 this.visit(link.get$head());
8938 if ($notnull_bool(this.isAborted())) { 8667 if (this.isAborted()) {
8939 if (!this.stack.isEmpty()) this.compiler.cancel('non-empty instruction sta ck'); 8668 if (!this.stack.isEmpty()) this.compiler.cancel('non-empty instruction sta ck');
8940 return; 8669 return;
8941 } 8670 }
8942 } 8671 }
8943 $assert(!$notnull_bool(this.current.isClosed()), "!current.isClosed()", "build er.dart", 138, 12);
8944 if (!this.stack.isEmpty()) this.compiler.cancel('non-empty instruction stack') ; 8672 if (!this.stack.isEmpty()) this.compiler.cancel('non-empty instruction stack') ;
8945 } 8673 }
8946 SsaBuilder.prototype.visitClassNode = function(node) { 8674 SsaBuilder.prototype.visitClassNode = function(node) {
8947 this.compiler.unimplemented("SsaBuilder.visitClassNode"); 8675 this.compiler.unimplemented("SsaBuilder.visitClassNode");
8948 } 8676 }
8949 SsaBuilder.prototype.visitExpressionStatement = function(node) { 8677 SsaBuilder.prototype.visitExpressionStatement = function(node) {
8950 this.visit(node.expression); 8678 this.visit(node.expression);
8951 this.pop(); 8679 this.pop();
8952 } 8680 }
8953 SsaBuilder.prototype.visitFor = function(node) { 8681 SsaBuilder.prototype.visitFor = function(node) {
8954 var $this = this; // closure support 8682 var $this = this; // closure support
8955 $assert(node.initializer != null && node.condition != null && node.update != n ull && node.body != null, "node.initializer !== null && node.condition !== null &&\n node.update !== null && node.body !== null", "builder.dart", 152, 12);
8956 this.visit(node.initializer); 8683 this.visit(node.initializer);
8957 $assert(!$notnull_bool(this.isAborted()), "!isAborted()", "builder.dart", 156, 12);
8958 var initializerBlock = this.close(new HGoto()); 8684 var initializerBlock = this.close(new HGoto());
8959 var initializerDefinitions = HashMapImplementation.HashMapImplementation$from$ factory(this.definitions); 8685 var initializerDefinitions = HashMapImplementation.HashMapImplementation$from$ factory(this.definitions);
8960 var conditionBlock = this.graph.addNewBlock(); 8686 var conditionBlock = this.graph.addNewBlock();
8961 conditionBlock.isLoopHeader = true; 8687 conditionBlock.isLoopHeader = true;
8962 initializerBlock.addSuccessor(conditionBlock); 8688 initializerBlock.addSuccessor(conditionBlock);
8963 this.open(conditionBlock); 8689 this.open(conditionBlock);
8964 initializerDefinitions.forEach((function (element, instruction) { 8690 initializerDefinitions.forEach((function (element, instruction) {
8965 var phi = new HPhi.singleInput$ctor(element, instruction); 8691 var phi = new HPhi.singleInput$ctor(element, instruction);
8966 conditionBlock.add(phi); 8692 conditionBlock.add(phi);
8967 $this.definitions.$setindex(element, phi); 8693 $this.definitions.$setindex(element, phi);
8968 }) 8694 })
8969 ); 8695 );
8970 this.visit(node.condition.expression); 8696 this.visit(node.condition.expression);
8971 var conditionExitBlock = this.close(new HLoopBranch(this.pop())); 8697 var conditionExitBlock = this.close(new HLoopBranch(this.pop()));
8972 var conditionDefinitions = HashMapImplementation.HashMapImplementation$from$fa ctory(this.definitions); 8698 var conditionDefinitions = HashMapImplementation.HashMapImplementation$from$fa ctory(this.definitions);
8973 var bodyBlock = this.graph.addNewBlock(); 8699 var bodyBlock = this.graph.addNewBlock();
8974 conditionExitBlock.addSuccessor(bodyBlock); 8700 conditionExitBlock.addSuccessor(bodyBlock);
8975 this.open(bodyBlock); 8701 this.open(bodyBlock);
8976 this.visit(node.body); 8702 this.visit(node.body);
8977 if ($notnull_bool(this.isAborted())) { 8703 if (this.isAborted()) {
8978 this.compiler.unimplemented("SsaBuilder for loop with aborting body"); 8704 this.compiler.unimplemented("SsaBuilder for loop with aborting body");
8979 } 8705 }
8980 bodyBlock = this.close(new HGoto()); 8706 bodyBlock = this.close(new HGoto());
8981 var updateBlock = this.graph.addNewBlock(); 8707 var updateBlock = this.graph.addNewBlock();
8982 bodyBlock.addSuccessor(updateBlock); 8708 bodyBlock.addSuccessor(updateBlock);
8983 this.open(updateBlock); 8709 this.open(updateBlock);
8984 this.visit(node.update); 8710 this.visit(node.update);
8985 $assert(!$notnull_bool(this.isAborted()), "!isAborted()", "builder.dart", 195, 12);
8986 var updateInstruction = this.pop(); 8711 var updateInstruction = this.pop();
8987 updateBlock = this.close(new HGoto()); 8712 updateBlock = this.close(new HGoto());
8988 updateBlock.addSuccessor(conditionBlock); 8713 updateBlock.addSuccessor(conditionBlock);
8989 conditionBlock.forEachPhi((function (phi) { 8714 conditionBlock.forEachPhi((function (phi) {
8990 var $0;
8991 var element = phi.element; 8715 var element = phi.element;
8992 var postBodyDefinition = (($0 = $this.definitions.$index(element)) && $0.is$ HInstruction()); 8716 var postBodyDefinition = $this.definitions.$index(element);
8993 if (postBodyDefinition !== phi) { 8717 if (postBodyDefinition !== phi) {
8994 phi.addInput(postBodyDefinition); 8718 phi.addInput(postBodyDefinition);
8995 } 8719 }
8996 else { 8720 else {
8997 $assert(phi.inputs.length == 1, "phi.inputs.length == 1", "builder.dart", 212, 16); 8721 var input = phi.inputs.$index(0);
8998 var input = (($0 = phi.inputs.$index(0)) && $0.is$HInstruction());
8999 conditionBlock.rewrite(phi, input); 8722 conditionBlock.rewrite(phi, input);
9000 conditionBlock.remove(phi); 8723 conditionBlock.remove(phi);
9001 if (conditionDefinitions.$index(element) === phi) { 8724 if (conditionDefinitions.$index(element) === phi) {
9002 conditionDefinitions.$setindex(element, input); 8725 conditionDefinitions.$setindex(element, input);
9003 } 8726 }
9004 } 8727 }
9005 }) 8728 })
9006 ); 8729 );
9007 var loopExitBlock = this.graph.addNewBlock(); 8730 var loopExitBlock = this.graph.addNewBlock();
9008 conditionExitBlock.addSuccessor(loopExitBlock); 8731 conditionExitBlock.addSuccessor(loopExitBlock);
9009 this.open(loopExitBlock); 8732 this.open(loopExitBlock);
9010 this.definitions = conditionDefinitions; 8733 this.definitions = conditionDefinitions;
9011 } 8734 }
9012 SsaBuilder.prototype.visitFunctionExpression = function(node) { 8735 SsaBuilder.prototype.visitFunctionExpression = function(node) {
9013 this.compiler.unimplemented('SsaBuilder.visitFunctionExpression'); 8736 this.compiler.unimplemented('SsaBuilder.visitFunctionExpression');
9014 } 8737 }
9015 SsaBuilder.prototype.visitIdentifier = function(node) { 8738 SsaBuilder.prototype.visitIdentifier = function(node) {
9016 var $0; 8739 var element = this.elements.$index(node);
9017 var element = (($0 = this.elements.$index(node)) && $0.is$Element());
9018 this.compiler.ensure(element != null); 8740 this.compiler.ensure(element != null);
9019 var def = (($0 = this.definitions.$index(element)) && $0.is$HInstruction()); 8741 var def = this.definitions.$index(element);
9020 $assert(def != null, "def !== null", "builder.dart", 240, 12);
9021 this.stack.add(def); 8742 this.stack.add(def);
9022 } 8743 }
9023 SsaBuilder.prototype.joinDefinitions = function(joinBlock, incoming1, incoming2) { 8744 SsaBuilder.prototype.joinDefinitions = function(joinBlock, incoming1, incoming2) {
9024 if (incoming1.get$length() > incoming2.get$length()) { 8745 if (incoming1.get$length() > incoming2.get$length()) {
9025 return this.joinDefinitions(joinBlock, incoming2, incoming1); 8746 return this.joinDefinitions(joinBlock, incoming2, incoming1);
9026 } 8747 }
9027 var joinedDefinitions = new HashMapImplementation(); 8748 var joinedDefinitions = new HashMapImplementation();
9028 $assert(incoming1.get$length() <= incoming2.get$length(), "incoming1.length <= incoming2.length", "builder.dart", 259, 12);
9029 incoming1.forEach((function (element, instruction) { 8749 incoming1.forEach((function (element, instruction) {
9030 var $0; 8750 var other = incoming2.$index(element);
9031 var other = (($0 = incoming2.$index(element)) && $0.is$HInstruction());
9032 if (other == null) return; 8751 if (other == null) return;
9033 if (instruction === other) { 8752 if (instruction === other) {
9034 joinedDefinitions.$setindex(element, instruction); 8753 joinedDefinitions.$setindex(element, instruction);
9035 } 8754 }
9036 else { 8755 else {
9037 var phi = new HPhi.manyInputs$ctor(element, [instruction, other]); 8756 var phi = new HPhi.manyInputs$ctor(element, [instruction, other]);
9038 joinBlock.add(phi); 8757 joinBlock.add(phi);
9039 joinedDefinitions.$setindex(element, phi); 8758 joinedDefinitions.$setindex(element, phi);
9040 } 8759 }
9041 }) 8760 })
9042 ); 8761 );
9043 return joinedDefinitions; 8762 return joinedDefinitions;
9044 } 8763 }
9045 SsaBuilder.prototype.visitIf = function(node) { 8764 SsaBuilder.prototype.visitIf = function(node) {
9046 var hasElse = node.get$hasElsePart(); 8765 var hasElse = node.get$hasElsePart();
9047 this.visit(node.condition); 8766 this.visit(node.condition);
9048 var conditionBlock = this.close(new HIf(this.pop(), hasElse)); 8767 var conditionBlock = this.close(new HIf(this.pop(), hasElse));
9049 var conditionDefinitions = HashMapImplementation.HashMapImplementation$from$fa ctory(this.definitions); 8768 var conditionDefinitions = HashMapImplementation.HashMapImplementation$from$fa ctory(this.definitions);
9050 var thenBlock = this.graph.addNewBlock(); 8769 var thenBlock = this.graph.addNewBlock();
9051 conditionBlock.addSuccessor(thenBlock); 8770 conditionBlock.addSuccessor(thenBlock);
9052 this.open(thenBlock); 8771 this.open(thenBlock);
9053 this.visit(node.thenPart); 8772 this.visit(node.thenPart);
9054 thenBlock = this.current; 8773 thenBlock = this.current;
9055 var thenDefinitions = this.definitions; 8774 var thenDefinitions = this.definitions;
9056 this.definitions = conditionDefinitions; 8775 this.definitions = conditionDefinitions;
9057 var elseBlock = null; 8776 var elseBlock = null;
9058 if ($notnull_bool(hasElse)) { 8777 if (hasElse) {
9059 elseBlock = this.graph.addNewBlock(); 8778 elseBlock = this.graph.addNewBlock();
9060 conditionBlock.addSuccessor(elseBlock); 8779 conditionBlock.addSuccessor(elseBlock);
9061 this.open(elseBlock); 8780 this.open(elseBlock);
9062 this.visit(node.elsePart); 8781 this.visit(node.elsePart);
9063 elseBlock = this.current; 8782 elseBlock = this.current;
9064 } 8783 }
9065 if (thenBlock == null && elseBlock == null && $notnull_bool(hasElse)) { 8784 if (thenBlock == null && elseBlock == null && hasElse) {
9066 this.current = null; 8785 this.current = null;
9067 } 8786 }
9068 else { 8787 else {
9069 var joinBlock = this.graph.addNewBlock(); 8788 var joinBlock = this.graph.addNewBlock();
9070 if (thenBlock != null) this.goto(thenBlock, joinBlock); 8789 if (thenBlock != null) this.goto(thenBlock, joinBlock);
9071 if (elseBlock != null) this.goto(elseBlock, joinBlock); 8790 if (elseBlock != null) this.goto(elseBlock, joinBlock);
9072 else if (!$notnull_bool(hasElse)) conditionBlock.addSuccessor(joinBlock); 8791 else if (!hasElse) conditionBlock.addSuccessor(joinBlock);
9073 this.open(joinBlock); 8792 this.open(joinBlock);
9074 if (joinBlock.predecessors.length == 2) { 8793 if (joinBlock.predecessors.length == 2) {
9075 this.definitions = this.joinDefinitions(joinBlock, this.definitions, thenD efinitions); 8794 this.definitions = this.joinDefinitions(joinBlock, this.definitions, thenD efinitions);
9076 } 8795 }
9077 } 8796 }
9078 } 8797 }
9079 SsaBuilder.prototype.unquote = function(literal) { 8798 SsaBuilder.prototype.unquote = function(literal) {
9080 var str = ('' + literal.get$value() + ''); 8799 var str = ('' + literal.get$value() + '');
9081 this.compiler.ensure(str[0] == '@'); 8800 this.compiler.ensure(str[0] == '@');
9082 var quotes = 1; 8801 var quotes = 1;
9083 var quote = str[1]; 8802 var quote = str[1];
9084 while (str[quotes + 1] === quote) quotes++; 8803 while (str[quotes + 1] === quote) quotes++;
9085 return new StringWrapper(str.substring(quotes + 1, str.length - quotes)); 8804 return new StringWrapper(str.substring(quotes + 1, str.length - quotes));
9086 } 8805 }
9087 SsaBuilder.prototype.visitSend = function(node) { 8806 SsaBuilder.prototype.visitSend = function(node) {
9088 var $0; 8807 var element = this.elements.$index(node);
9089 var element = (($0 = this.elements.$index(node)) && $0.is$Element());
9090 if ((node.selector instanceof Operator)) { 8808 if ((node.selector instanceof Operator)) {
9091 this.visit(node.receiver); 8809 this.visit(node.receiver);
9092 this.visit(node.argumentsNode); 8810 this.visit(node.argumentsNode);
9093 var right = this.pop(); 8811 var right = this.pop();
9094 var left = this.pop(); 8812 var left = this.pop();
9095 var op = (($0 = node.selector) && $0.is$Operator()); 8813 var op = node.selector;
9096 if ($notnull_bool($eq(const$287/*const SourceString("+")*/, op.get$source()) )) { 8814 if ($eq(const$287/*const SourceString("+")*/, op.get$source())) {
9097 this.push(new HAdd(element, [left, right])); 8815 this.push(new HAdd(element, [left, right]));
9098 } 8816 }
9099 else if ($notnull_bool($eq(const$288/*const SourceString("-")*/, op.get$sour ce()))) { 8817 else if ($eq(const$288/*const SourceString("-")*/, op.get$source())) {
9100 this.push(new HSubtract(element, [left, right])); 8818 this.push(new HSubtract(element, [left, right]));
9101 } 8819 }
9102 else if ($notnull_bool($eq(const$289/*const SourceString("*")*/, op.get$sour ce()))) { 8820 else if ($eq(const$289/*const SourceString("*")*/, op.get$source())) {
9103 this.push(new HMultiply(element, [left, right])); 8821 this.push(new HMultiply(element, [left, right]));
9104 } 8822 }
9105 else if ($notnull_bool($eq(const$290/*const SourceString("/")*/, op.get$sour ce()))) { 8823 else if ($eq(const$290/*const SourceString("/")*/, op.get$source())) {
9106 this.push(new HDivide(element, [left, right])); 8824 this.push(new HDivide(element, [left, right]));
9107 } 8825 }
9108 else if ($notnull_bool($eq(const$291/*const SourceString("~/")*/, op.get$sou rce()))) { 8826 else if ($eq(const$291/*const SourceString("~/")*/, op.get$source())) {
9109 this.push(new HTruncatingDivide(element, [left, right])); 8827 this.push(new HTruncatingDivide(element, [left, right]));
9110 } 8828 }
9111 else if ($notnull_bool($eq(const$292/*const SourceString("==")*/, op.get$sou rce()))) { 8829 else if ($eq(const$292/*const SourceString("==")*/, op.get$source())) {
9112 this.push(new HEquals(element, [left, right])); 8830 this.push(new HEquals(element, [left, right]));
9113 } 8831 }
9114 } 8832 }
9115 else if ($notnull_bool(node.get$isPropertyAccess())) { 8833 else if (node.get$isPropertyAccess()) {
9116 if (node.receiver != null) { 8834 if (node.receiver != null) {
9117 this.compiler.unimplemented("SsaBuilder.visitSend with receiver"); 8835 this.compiler.unimplemented("SsaBuilder.visitSend with receiver");
9118 } 8836 }
9119 this.stack.add(this.definitions.$index(element)); 8837 this.stack.add(this.definitions.$index(element));
9120 } 8838 }
9121 else { 8839 else {
9122 var link = node.get$arguments(); 8840 var link = node.get$arguments();
9123 if (element.kind === const$242/*ElementKind.FOREIGN*/) { 8841 if (element.kind === const$242/*ElementKind.FOREIGN*/) {
9124 link = (($0 = link.get$tail()) && $0.is$Link$Node()); 8842 link = link.get$tail();
9125 } 8843 }
9126 var arguments = []; 8844 var arguments = [];
9127 for (; !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0. is$Link$Node())) { 8845 for (; !link.isEmpty(); link = link.get$tail()) {
9128 this.visit((($0 = link.get$head()) && $0.is$Node())); 8846 this.visit(link.get$head());
9129 arguments.add$1(this.pop()); 8847 arguments.add$1(this.pop());
9130 } 8848 }
9131 if (element.kind === const$242/*ElementKind.FOREIGN*/) { 8849 if (element.kind === const$242/*ElementKind.FOREIGN*/) {
9132 var literal = (($0 = node.get$arguments().get$head()) && $0.is$LiteralStri ng()); 8850 var literal = node.get$arguments().get$head();
9133 this.compiler.ensure((literal instanceof LiteralString)); 8851 this.compiler.ensure((literal instanceof LiteralString));
9134 this.push(new HInvokeForeign(element, arguments, this.unquote(literal))); 8852 this.push(new HInvokeForeign(element, arguments, this.unquote(literal)));
9135 } 8853 }
9136 else { 8854 else {
9137 var selector = (($0 = node.selector) && $0.is$Identifier()); 8855 var selector = node.selector;
9138 this.push(new HInvoke(element, arguments)); 8856 this.push(new HInvoke(element, arguments));
9139 } 8857 }
9140 } 8858 }
9141 } 8859 }
9142 SsaBuilder.prototype.visitSendSet = function(node) { 8860 SsaBuilder.prototype.visitSendSet = function(node) {
9143 this.stack.add(this.updateDefinition(node)); 8861 this.stack.add(this.updateDefinition(node));
9144 } 8862 }
9145 SsaBuilder.prototype.visitLiteralInt = function(node) { 8863 SsaBuilder.prototype.visitLiteralInt = function(node) {
9146 this.push(new HLiteral(node.get$value())); 8864 this.push(new HLiteral(node.get$value()));
9147 } 8865 }
9148 SsaBuilder.prototype.visitLiteralDouble = function(node) { 8866 SsaBuilder.prototype.visitLiteralDouble = function(node) {
9149 this.push(new HLiteral(node.get$value())); 8867 this.push(new HLiteral(node.get$value()));
9150 } 8868 }
9151 SsaBuilder.prototype.visitLiteralBool = function(node) { 8869 SsaBuilder.prototype.visitLiteralBool = function(node) {
9152 this.push(new HLiteral(node.get$value())); 8870 this.push(new HLiteral(node.get$value()));
9153 } 8871 }
9154 SsaBuilder.prototype.visitLiteralString = function(node) { 8872 SsaBuilder.prototype.visitLiteralString = function(node) {
9155 this.push(new HLiteral(node.get$value())); 8873 this.push(new HLiteral(node.get$value()));
9156 } 8874 }
9157 SsaBuilder.prototype.visitNodeList = function(node) { 8875 SsaBuilder.prototype.visitNodeList = function(node) {
9158 var $0;
9159 for (var link = node.nodes; 8876 for (var link = node.nodes;
9160 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 8877 !link.isEmpty(); link = link.get$tail()) {
9161 this.visit((($0 = link.get$head()) && $0.is$Node())); 8878 this.visit(link.get$head());
9162 } 8879 }
9163 } 8880 }
9164 SsaBuilder.prototype.visitOperator = function(node) { 8881 SsaBuilder.prototype.visitOperator = function(node) {
9165 this.compiler.unimplemented("SsaBuilder.visitOperator"); 8882 this.compiler.unimplemented("SsaBuilder.visitOperator");
9166 } 8883 }
9167 SsaBuilder.prototype.visitReturn = function(node) { 8884 SsaBuilder.prototype.visitReturn = function(node) {
9168 if (node.expression == null) { 8885 if (node.expression == null) {
9169 this.compiler.unimplemented("SsaBuilder: return without expression"); 8886 this.compiler.unimplemented("SsaBuilder: return without expression");
9170 } 8887 }
9171 this.visit(node.expression); 8888 this.visit(node.expression);
9172 var value = this.pop(); 8889 var value = this.pop();
9173 this.close(new HReturn(value)).addSuccessor(this.graph.exit); 8890 this.close(new HReturn(value)).addSuccessor(this.graph.exit);
9174 } 8891 }
9175 SsaBuilder.prototype.visitThrow = function(node) { 8892 SsaBuilder.prototype.visitThrow = function(node) {
9176 if (node.expression == null) { 8893 if (node.expression == null) {
9177 this.compiler.unimplemented("SsaBuilder: throw without expression"); 8894 this.compiler.unimplemented("SsaBuilder: throw without expression");
9178 } 8895 }
9179 this.visit(node.expression); 8896 this.visit(node.expression);
9180 this.close(new HThrow(this.pop())); 8897 this.close(new HThrow(this.pop()));
9181 } 8898 }
9182 SsaBuilder.prototype.visitTypeAnnotation = function(node) { 8899 SsaBuilder.prototype.visitTypeAnnotation = function(node) {
9183 8900
9184 } 8901 }
9185 SsaBuilder.prototype.updateDefinition = function(node) { 8902 SsaBuilder.prototype.updateDefinition = function(node) {
9186 var $0;
9187 if (node.receiver != null) { 8903 if (node.receiver != null) {
9188 this.compiler.unimplemented("SsaBuilder: property access"); 8904 this.compiler.unimplemented("SsaBuilder: property access");
9189 } 8905 }
9190 var link = node.get$arguments(); 8906 var link = node.get$arguments();
9191 $assert(!$notnull_bool(link.isEmpty()) && $notnull_bool(link.get$tail().isEmpt y$0()), "!link.isEmpty() && link.tail.isEmpty()", "builder.dart", 443, 12); 8907 this.visit(link.get$head());
9192 this.visit((($0 = link.get$head()) && $0.is$Node()));
9193 var value = this.pop(); 8908 var value = this.pop();
9194 this.definitions.$setindex(this.elements.$index(node), value); 8909 this.definitions.$setindex(this.elements.$index(node), value);
9195 return value; 8910 return value;
9196 } 8911 }
9197 SsaBuilder.prototype.visitVariableDefinitions = function(node) { 8912 SsaBuilder.prototype.visitVariableDefinitions = function(node) {
9198 var $0;
9199 for (var link = node.definitions.nodes; 8913 for (var link = node.definitions.nodes;
9200 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 8914 !link.isEmpty(); link = link.get$tail()) {
9201 var definition = (($0 = link.get$head()) && $0.is$Node()); 8915 var definition = link.get$head();
9202 if ((definition instanceof Identifier)) { 8916 if ((definition instanceof Identifier)) {
9203 this.compiler.unimplemented("SsaBuilder.visitVariableDefinitions without i nitial value"); 8917 this.compiler.unimplemented("SsaBuilder.visitVariableDefinitions without i nitial value");
9204 } 8918 }
9205 else { 8919 else {
9206 $assert((definition instanceof SendSet), "definition is SendSet", "builder .dart", 459, 16); 8920 this.updateDefinition(definition);
9207 this.updateDefinition((definition && definition.is$SendSet()));
9208 } 8921 }
9209 } 8922 }
9210 } 8923 }
9211 SsaBuilder.prototype.add$1 = function($0) { 8924 SsaBuilder.prototype.add$1 = function($0) {
9212 return this.add(($0 && $0.is$HInstruction())); 8925 return this.add($0);
9213 }; 8926 };
9214 SsaBuilder.prototype.visit$1 = function($0) { 8927 SsaBuilder.prototype.visit$1 = function($0) {
9215 return this.visit(($0 && $0.is$Node())); 8928 return this.visit($0);
9216 }; 8929 };
9217 // ********** Code for SsaCodeGeneratorTask ************** 8930 // ********** Code for SsaCodeGeneratorTask **************
9218 function SsaCodeGeneratorTask(compiler) { 8931 function SsaCodeGeneratorTask(compiler) {
9219 CompilerTask.call(this, compiler); 8932 CompilerTask.call(this, compiler);
9220 // Initializers done 8933 // Initializers done
9221 } 8934 }
9222 $inherits(SsaCodeGeneratorTask, CompilerTask); 8935 $inherits(SsaCodeGeneratorTask, CompilerTask);
9223 SsaCodeGeneratorTask.prototype.get$name = function() { 8936 SsaCodeGeneratorTask.prototype.get$name = function() {
9224 return 'SSA code generator'; 8937 return 'SSA code generator';
9225 } 8938 }
9226 SsaCodeGeneratorTask.prototype.generate = function(tree, graph) { 8939 SsaCodeGeneratorTask.prototype.generate = function(tree, graph) {
9227 var $this = this; // closure support 8940 var $this = this; // closure support
9228 return $assert_String(this.measure((function () { 8941 return this.measure((function () {
9229 var $0; 8942 var function_ = tree;
9230 var function_ = (tree && tree.is$FunctionExpression()); 8943 var name = function_.name;
9231 var name = (($0 = function_.name) && $0.is$Identifier());
9232 if (false/*null.GENERATE_SSA_TRACE*/) { 8944 if (false/*null.GENERATE_SSA_TRACE*/) {
9233 HTracer.HTracer$singleton$factory().traceGraph("codegen", graph); 8945 HTracer.HTracer$singleton$factory().traceGraph("codegen", graph);
9234 } 8946 }
9235 var code = $this.generateMethod(name.get$source(), SsaCodeGeneratorTask.coun tParameters(function_), graph); 8947 var code = $this.generateMethod(name.get$source(), SsaCodeGeneratorTask.coun tParameters(function_), graph);
9236 return code; 8948 return code;
9237 }) 8949 })
9238 )); 8950 );
9239 } 8951 }
9240 SsaCodeGeneratorTask.prototype.generateMethod = function(methodName, parameterCo unt, graph) { 8952 SsaCodeGeneratorTask.prototype.generateMethod = function(methodName, parameterCo unt, graph) {
9241 var buffer = new StringBufferImpl(""); 8953 var buffer = new StringBufferImpl("");
9242 var codegen = new SsaCodeGenerator(this.compiler, buffer); 8954 var codegen = new SsaCodeGenerator(this.compiler, buffer);
9243 graph.assignInstructionIds(); 8955 graph.assignInstructionIds();
9244 codegen.visitGraph(graph); 8956 codegen.visitGraph(graph);
9245 var parameters = new StringBufferImpl(""); 8957 var parameters = new StringBufferImpl("");
9246 for (var i = 0; 8958 for (var i = 0;
9247 i < parameterCount; i++) { 8959 i < parameterCount; i++) {
9248 if (i != 0) parameters.add(', '); 8960 if (i != 0) parameters.add(', ');
9249 parameters.add(SsaCodeGenerator.parameter(i)); 8961 parameters.add(SsaCodeGenerator.parameter(i));
9250 } 8962 }
9251 return ('function ' + methodName + '(' + parameters + ') {\n' + buffer + '}\n' ); 8963 return ('function ' + methodName + '(' + parameters + ') {\n' + buffer + '}\n' );
9252 } 8964 }
9253 SsaCodeGeneratorTask.countParameters = function(function_) { 8965 SsaCodeGeneratorTask.countParameters = function(function_) {
9254 var $0;
9255 var result = 0; 8966 var result = 0;
9256 for (var link = function_.parameters.nodes; 8967 for (var link = function_.parameters.nodes;
9257 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 8968 !link.isEmpty(); link = link.get$tail()) {
9258 result++; 8969 result++;
9259 } 8970 }
9260 return result; 8971 return result;
9261 } 8972 }
9262 // ********** Code for SsaCodeGenerator ************** 8973 // ********** Code for SsaCodeGenerator **************
9263 function SsaCodeGenerator(compiler, buffer) { 8974 function SsaCodeGenerator(compiler, buffer) {
9264 this.indent = 0 8975 this.indent = 0
9265 this.compiler = compiler; 8976 this.compiler = compiler;
9266 this.buffer = buffer; 8977 this.buffer = buffer;
9267 // Initializers done 8978 // Initializers done
9268 } 8979 }
9269 SsaCodeGenerator.prototype.is$HVisitor = function(){return this;};
9270 SsaCodeGenerator.prototype.visitGraph = function(graph) { 8980 SsaCodeGenerator.prototype.visitGraph = function(graph) {
9271 this.currentGraph = graph; 8981 this.currentGraph = graph;
9272 this.indent++; 8982 this.indent++;
9273 this.visitBasicBlock(graph.entry); 8983 this.visitBasicBlock(graph.entry);
9274 } 8984 }
9275 SsaCodeGenerator.temporary = function(instruction) { 8985 SsaCodeGenerator.temporary = function(instruction) {
9276 return ('t' + instruction.id + ''); 8986 return ('t' + instruction.id + '');
9277 } 8987 }
9278 SsaCodeGenerator.parameter = function(index) { 8988 SsaCodeGenerator.parameter = function(index) {
9279 return ('p' + index + ''); 8989 return ('p' + index + '');
9280 } 8990 }
9281 SsaCodeGenerator.prototype.invoke = function(element, arguments) { 8991 SsaCodeGenerator.prototype.invoke = function(element, arguments) {
9282 var $0;
9283 this.buffer.add(('' + element.name + '(')); 8992 this.buffer.add(('' + element.name + '('));
9284 for (var i = 0; 8993 for (var i = 0;
9285 i < arguments.length; i++) { 8994 i < arguments.length; i++) {
9286 if (i != 0) this.buffer.add(', '); 8995 if (i != 0) this.buffer.add(', ');
9287 this.use((($0 = arguments.$index(i)) && $0.is$HInstruction())); 8996 this.use(arguments.$index(i));
9288 } 8997 }
9289 this.buffer.add(")"); 8998 this.buffer.add(")");
9290 } 8999 }
9291 SsaCodeGenerator.prototype.define = function(instruction) { 9000 SsaCodeGenerator.prototype.define = function(instruction) {
9292 var $0;
9293 var usedBy = instruction.get$usedBy(); 9001 var usedBy = instruction.get$usedBy();
9294 if (usedBy.length == 1 && (usedBy.$index(0) instanceof HPhi)) { 9002 if (usedBy.length == 1 && (usedBy.$index(0) instanceof HPhi)) {
9295 this.buffer.add(('var ' + SsaCodeGenerator.temporary((($0 = usedBy.$index(0) ) && $0.is$HInstruction())) + ' = ')); 9003 this.buffer.add(('var ' + SsaCodeGenerator.temporary(usedBy.$index(0)) + ' = '));
9296 this.visit(instruction); 9004 this.visit(instruction);
9297 } 9005 }
9298 else { 9006 else {
9299 var instructionId = SsaCodeGenerator.temporary(instruction); 9007 var instructionId = SsaCodeGenerator.temporary(instruction);
9300 this.buffer.add(('var ' + instructionId + ' = ')); 9008 this.buffer.add(('var ' + instructionId + ' = '));
9301 this.visit(instruction); 9009 this.visit(instruction);
9302 for (var i = 0; 9010 for (var i = 0;
9303 i < usedBy.length; i++) { 9011 i < usedBy.length; i++) {
9304 if ((usedBy.$index(i) instanceof HPhi)) { 9012 if ((usedBy.$index(i) instanceof HPhi)) {
9305 this.buffer.add(';\n'); 9013 this.buffer.add(';\n');
9306 this.addIndentation(); 9014 this.addIndentation();
9307 this.buffer.add(('var ' + SsaCodeGenerator.temporary((($0 = usedBy.$inde x(i)) && $0.is$HInstruction())) + ' = ' + instructionId + '')); 9015 this.buffer.add(('var ' + SsaCodeGenerator.temporary(usedBy.$index(i)) + ' = ' + instructionId + ''));
9308 } 9016 }
9309 } 9017 }
9310 } 9018 }
9311 } 9019 }
9312 SsaCodeGenerator.prototype.use = function(argument) { 9020 SsaCodeGenerator.prototype.use = function(argument) {
9313 if ($notnull_bool(argument.generateAtUseSite())) { 9021 if (argument.generateAtUseSite()) {
9314 this.visit(argument); 9022 this.visit(argument);
9315 } 9023 }
9316 else { 9024 else {
9317 this.buffer.add(SsaCodeGenerator.temporary(argument)); 9025 this.buffer.add(SsaCodeGenerator.temporary(argument));
9318 } 9026 }
9319 } 9027 }
9320 SsaCodeGenerator.prototype.visit = function(node) { 9028 SsaCodeGenerator.prototype.visit = function(node) {
9321 return node.accept$1(this); 9029 return node.accept$1(this);
9322 } 9030 }
9323 SsaCodeGenerator.prototype.visitBasicBlock = function(node) { 9031 SsaCodeGenerator.prototype.visitBasicBlock = function(node) {
9324 if ($notnull_bool(node.isLoopHeader)) { 9032 if (node.isLoopHeader) {
9325 this.buffer.add('while(true) {\n'); 9033 this.buffer.add('while(true) {\n');
9326 this.indent++; 9034 this.indent++;
9327 } 9035 }
9328 this.currentBlock = node; 9036 this.currentBlock = node;
9329 var instruction = node.first; 9037 var instruction = node.first;
9330 while (instruction != null) { 9038 while (instruction != null) {
9331 if (!$notnull_bool(instruction.generateAtUseSite())) { 9039 if (!instruction.generateAtUseSite()) {
9332 this.addIndentation(); 9040 this.addIndentation();
9333 if (instruction.get$usedBy().isEmpty() || (instruction instanceof HPhi)) { 9041 if (instruction.get$usedBy().isEmpty() || (instruction instanceof HPhi)) {
9334 this.visit(instruction); 9042 this.visit(instruction);
9335 } 9043 }
9336 else { 9044 else {
9337 this.define(instruction); 9045 this.define(instruction);
9338 } 9046 }
9339 this.buffer.add(';\n'); 9047 this.buffer.add(';\n');
9340 } 9048 }
9341 instruction = instruction.next; 9049 instruction = instruction.next;
(...skipping 14 matching lines...) Expand all
9356 SsaCodeGenerator.prototype.visitSubtract = function(node) { 9064 SsaCodeGenerator.prototype.visitSubtract = function(node) {
9357 return this.visitInvoke(node); 9065 return this.visitInvoke(node);
9358 } 9066 }
9359 SsaCodeGenerator.prototype.visitTruncatingDivide = function(node) { 9067 SsaCodeGenerator.prototype.visitTruncatingDivide = function(node) {
9360 return this.visitInvoke(node); 9068 return this.visitInvoke(node);
9361 } 9069 }
9362 SsaCodeGenerator.prototype.visitExit = function(node) { 9070 SsaCodeGenerator.prototype.visitExit = function(node) {
9363 9071
9364 } 9072 }
9365 SsaCodeGenerator.prototype.visitGoto = function(node) { 9073 SsaCodeGenerator.prototype.visitGoto = function(node) {
9366 var $0;
9367 $assert(this.currentBlock.successors.length == 1, "currentBlock.successors.len gth == 1", "codegen.dart", 150, 12);
9368 var dominated = this.currentBlock.dominatedBlocks; 9074 var dominated = this.currentBlock.dominatedBlocks;
9369 if (dominated.isEmpty()) return; 9075 if (dominated.isEmpty()) return;
9370 if (dominated.length > 2) unreachable(); 9076 if (dominated.length > 2) unreachable();
9371 if (dominated.length == 2 && this.currentBlock !== this.currentGraph.entry) { 9077 if (dominated.length == 2 && this.currentBlock !== this.currentGraph.entry) {
9372 unreachable(); 9078 unreachable();
9373 } 9079 }
9374 $assert($eq(dominated.$index(0), this.currentBlock.successors.$index(0)), "dom inated[0] == currentBlock.successors[0]", "codegen.dart", 162, 12); 9080 this.visitBasicBlock(dominated.$index(0));
9375 this.visitBasicBlock((($0 = dominated.$index(0)) && $0.is$HBasicBlock()));
9376 } 9081 }
9377 SsaCodeGenerator.prototype.visitIf = function(node) { 9082 SsaCodeGenerator.prototype.visitIf = function(node) {
9378 var $0;
9379 var ifBlock = this.currentBlock; 9083 var ifBlock = this.currentBlock;
9380 this.buffer.add('if ('); 9084 this.buffer.add('if (');
9381 this.use((($0 = node.inputs.$index(0)) && $0.is$HInstruction())); 9085 this.use(node.inputs.$index(0));
9382 this.buffer.add(') {\n'); 9086 this.buffer.add(') {\n');
9383 this.indent++; 9087 this.indent++;
9384 var dominated = this.currentBlock.dominatedBlocks; 9088 var dominated = this.currentBlock.dominatedBlocks;
9385 $assert(dominated.$index(0) === ifBlock.successors.$index(0), "dominated[0] == = ifBlock.successors[0]", "codegen.dart", 175, 12); 9089 this.visitBasicBlock(ifBlock.successors.$index(0));
9386 this.visitBasicBlock((($0 = ifBlock.successors.$index(0)) && $0.is$HBasicBlock ()));
9387 this.indent--; 9090 this.indent--;
9388 this.addIndentation(); 9091 this.addIndentation();
9389 var nextDominatedIndex; 9092 var nextDominatedIndex;
9390 if ($notnull_bool(node.hasElse)) { 9093 if (node.hasElse) {
9391 $assert(dominated.$index(1) === ifBlock.successors.$index(1), "dominated[1] === ifBlock.successors[1]", "codegen.dart", 181, 14);
9392 this.buffer.add('} else {\n'); 9094 this.buffer.add('} else {\n');
9393 this.indent++; 9095 this.indent++;
9394 this.visitBasicBlock((($0 = ifBlock.successors.$index(1)) && $0.is$HBasicBlo ck())); 9096 this.visitBasicBlock(ifBlock.successors.$index(1));
9395 this.indent--; 9097 this.indent--;
9396 nextDominatedIndex = 2; 9098 nextDominatedIndex = 2;
9397 this.addIndentation(); 9099 this.addIndentation();
9398 this.buffer.add("}\n"); 9100 this.buffer.add("}\n");
9399 } 9101 }
9400 else { 9102 else {
9401 this.buffer.add("}\n"); 9103 this.buffer.add("}\n");
9402 nextDominatedIndex = 1; 9104 nextDominatedIndex = 1;
9403 } 9105 }
9404 $assert(dominated.length <= nextDominatedIndex + 1, "dominated.length <= nextD ominatedIndex + 1", "codegen.dart", 193, 12);
9405 if (dominated.length == nextDominatedIndex + 1) { 9106 if (dominated.length == nextDominatedIndex + 1) {
9406 this.visitBasicBlock((($0 = dominated.$index(nextDominatedIndex)) && $0.is$H BasicBlock())); 9107 this.visitBasicBlock(dominated.$index(nextDominatedIndex));
9407 } 9108 }
9408 } 9109 }
9409 SsaCodeGenerator.prototype.visitInvoke = function(node) { 9110 SsaCodeGenerator.prototype.visitInvoke = function(node) {
9410 this.compiler.worklist.add(node.element); 9111 this.compiler.worklist.add(node.element);
9411 this.invoke(node.element, node.inputs); 9112 this.invoke(node.element, node.inputs);
9412 } 9113 }
9413 SsaCodeGenerator.prototype.visitInvokeForeign = function(node) { 9114 SsaCodeGenerator.prototype.visitInvokeForeign = function(node) {
9414 var $0;
9415 if (!node.inputs.isEmpty()) { 9115 if (!node.inputs.isEmpty()) {
9416 this.buffer.add("(function foreign(\$0"); 9116 this.buffer.add("(function foreign(\$0");
9417 for (var i = 1; 9117 for (var i = 1;
9418 i < node.inputs.length; i++) { 9118 i < node.inputs.length; i++) {
9419 this.buffer.add((', \$' + i + '')); 9119 this.buffer.add((', \$' + i + ''));
9420 } 9120 }
9421 this.buffer.add(') { return '); 9121 this.buffer.add(') { return ');
9422 } 9122 }
9423 this.buffer.add(node.code); 9123 this.buffer.add(node.code);
9424 if (!node.inputs.isEmpty()) { 9124 if (!node.inputs.isEmpty()) {
9425 this.buffer.add('; }) ('); 9125 this.buffer.add('; }) (');
9426 this.use((($0 = node.inputs.$index(0)) && $0.is$HInstruction())); 9126 this.use(node.inputs.$index(0));
9427 for (var i = 1; 9127 for (var i = 1;
9428 i < node.inputs.length; i++) { 9128 i < node.inputs.length; i++) {
9429 this.buffer.add(', '); 9129 this.buffer.add(', ');
9430 this.use((($0 = node.inputs.$index(1)) && $0.is$HInstruction())); 9130 this.use(node.inputs.$index(1));
9431 } 9131 }
9432 this.buffer.add(')'); 9132 this.buffer.add(')');
9433 } 9133 }
9434 } 9134 }
9435 SsaCodeGenerator.prototype.visitLiteral = function(node) { 9135 SsaCodeGenerator.prototype.visitLiteral = function(node) {
9436 this.buffer.add(node.value); 9136 this.buffer.add(node.value);
9437 } 9137 }
9438 SsaCodeGenerator.prototype.visitLoopBranch = function(node) { 9138 SsaCodeGenerator.prototype.visitLoopBranch = function(node) {
9439 var $0;
9440 var branchBlock = this.currentBlock; 9139 var branchBlock = this.currentBlock;
9441 this.buffer.add('if (!('); 9140 this.buffer.add('if (!(');
9442 this.use((($0 = node.inputs.$index(0)) && $0.is$HInstruction())); 9141 this.use(node.inputs.$index(0));
9443 this.buffer.add(')) break;\n'); 9142 this.buffer.add(')) break;\n');
9444 var dominated = this.currentBlock.dominatedBlocks; 9143 var dominated = this.currentBlock.dominatedBlocks;
9445 $assert(dominated.length == 2, "dominated.length == 2", "codegen.dart", 238, 1 2);
9446 $assert(dominated.$index(0) === branchBlock.successors.$index(0), "dominated[0 ] === branchBlock.successors[0]", "codegen.dart", 239, 12);
9447 this.visit(dominated.$index(0)); 9144 this.visit(dominated.$index(0));
9448 this.indent--; 9145 this.indent--;
9449 this.addIndentation(); 9146 this.addIndentation();
9450 this.buffer.add('}\n'); 9147 this.buffer.add('}\n');
9451 $assert(dominated.$index(1) === branchBlock.successors.$index(1), "dominated[1 ] === branchBlock.successors[1]", "codegen.dart", 244, 12);
9452 this.visit(dominated.$index(1)); 9148 this.visit(dominated.$index(1));
9453 } 9149 }
9454 SsaCodeGenerator.prototype.visitParameter = function(node) { 9150 SsaCodeGenerator.prototype.visitParameter = function(node) {
9455 this.buffer.add(SsaCodeGenerator.parameter(node.parameterIndex)); 9151 this.buffer.add(SsaCodeGenerator.parameter(node.parameterIndex));
9456 } 9152 }
9457 SsaCodeGenerator.prototype.visitPhi = function(node) { 9153 SsaCodeGenerator.prototype.visitPhi = function(node) {
9458 var $0;
9459 var usedBy = node.get$usedBy(); 9154 var usedBy = node.get$usedBy();
9460 var firstPhi = true; 9155 var firstPhi = true;
9461 for (var i = 0; 9156 for (var i = 0;
9462 i < usedBy.length; i++) { 9157 i < usedBy.length; i++) {
9463 if ((usedBy.$index(i) instanceof HPhi)) { 9158 if ((usedBy.$index(i) instanceof HPhi)) {
9464 if (!$notnull_bool(firstPhi)) { 9159 if (!firstPhi) {
9465 this.buffer.add(";\n"); 9160 this.buffer.add(";\n");
9466 this.addIndentation(); 9161 this.addIndentation();
9467 } 9162 }
9468 this.buffer.add(("var " + SsaCodeGenerator.temporary((($0 = usedBy.$index( i)) && $0.is$HInstruction())) + " = " + SsaCodeGenerator.temporary(node) + "")); 9163 this.buffer.add(("var " + SsaCodeGenerator.temporary(usedBy.$index(i)) + " = " + SsaCodeGenerator.temporary(node) + ""));
9469 firstPhi = false; 9164 firstPhi = false;
9470 } 9165 }
9471 } 9166 }
9472 } 9167 }
9473 SsaCodeGenerator.prototype.visitReturn = function(node) { 9168 SsaCodeGenerator.prototype.visitReturn = function(node) {
9474 var $0;
9475 this.buffer.add('return '); 9169 this.buffer.add('return ');
9476 this.use((($0 = node.inputs.$index(0)) && $0.is$HInstruction())); 9170 this.use(node.inputs.$index(0));
9477 } 9171 }
9478 SsaCodeGenerator.prototype.visitThrow = function(node) { 9172 SsaCodeGenerator.prototype.visitThrow = function(node) {
9479 var $0;
9480 this.buffer.add('throw '); 9173 this.buffer.add('throw ');
9481 this.use((($0 = node.inputs.$index(0)) && $0.is$HInstruction())); 9174 this.use(node.inputs.$index(0));
9482 } 9175 }
9483 SsaCodeGenerator.prototype.addIndentation = function() { 9176 SsaCodeGenerator.prototype.addIndentation = function() {
9484 for (var i = 0; 9177 for (var i = 0;
9485 i < this.indent; i++) { 9178 i < this.indent; i++) {
9486 this.buffer.add(' '); 9179 this.buffer.add(' ');
9487 } 9180 }
9488 } 9181 }
9489 SsaCodeGenerator.prototype.visit$1 = SsaCodeGenerator.prototype.visit; 9182 SsaCodeGenerator.prototype.visit$1 = function($0) {
9183 return this.visit($0);
9184 };
9490 // ********** Code for HGraphVisitor ************** 9185 // ********** Code for HGraphVisitor **************
9491 function HGraphVisitor() { 9186 function HGraphVisitor() {
9492 // Initializers done 9187 // Initializers done
9493 } 9188 }
9494 HGraphVisitor.prototype.visitDominatorTree = function(graph) { 9189 HGraphVisitor.prototype.visitDominatorTree = function(graph) {
9495 var $this = this; // closure support 9190 var $this = this; // closure support
9496 function visitBasicBlockAndSuccessors(block) { 9191 function visitBasicBlockAndSuccessors(block) {
9497 var $0;
9498 $this.visitBasicBlock(block); 9192 $this.visitBasicBlock(block);
9499 var dominated = block.dominatedBlocks; 9193 var dominated = block.dominatedBlocks;
9500 for (var i = 0; 9194 for (var i = 0;
9501 i < dominated.length; i++) { 9195 i < dominated.length; i++) {
9502 visitBasicBlockAndSuccessors((($0 = dominated.$index(i)) && $0.is$HBasicBl ock())); 9196 visitBasicBlockAndSuccessors(dominated.$index(i));
9503 } 9197 }
9504 } 9198 }
9505 visitBasicBlockAndSuccessors(graph.entry); 9199 visitBasicBlockAndSuccessors(graph.entry);
9506 } 9200 }
9507 HGraphVisitor.prototype.visitPostDominatorTree = function(graph) { 9201 HGraphVisitor.prototype.visitPostDominatorTree = function(graph) {
9508 var $this = this; // closure support 9202 var $this = this; // closure support
9509 function visitBasicBlockAndSuccessors(block) { 9203 function visitBasicBlockAndSuccessors(block) {
9510 var $0;
9511 var dominated = block.dominatedBlocks; 9204 var dominated = block.dominatedBlocks;
9512 for (var i = dominated.length - 1; 9205 for (var i = dominated.length - 1;
9513 i >= 0; i--) { 9206 i >= 0; i--) {
9514 visitBasicBlockAndSuccessors((($0 = dominated.$index(i)) && $0.is$HBasicBl ock())); 9207 visitBasicBlockAndSuccessors(dominated.$index(i));
9515 } 9208 }
9516 $this.visitBasicBlock(block); 9209 $this.visitBasicBlock(block);
9517 } 9210 }
9518 visitBasicBlockAndSuccessors(graph.entry); 9211 visitBasicBlockAndSuccessors(graph.entry);
9519 } 9212 }
9520 // ********** Code for HInstructionVisitor ************** 9213 // ********** Code for HInstructionVisitor **************
9521 function HInstructionVisitor() { 9214 function HInstructionVisitor() {
9522 HGraphVisitor.call(this); 9215 HGraphVisitor.call(this);
9523 // Initializers done 9216 // Initializers done
9524 } 9217 }
9525 $inherits(HInstructionVisitor, HGraphVisitor); 9218 $inherits(HInstructionVisitor, HGraphVisitor);
9526 HInstructionVisitor.prototype.visitBasicBlock = function(node) { 9219 HInstructionVisitor.prototype.visitBasicBlock = function(node) {
9527 this.currentBlock = node; 9220 this.currentBlock = node;
9528 var instruction = node.first; 9221 var instruction = node.first;
9529 while (instruction != null) { 9222 while (instruction != null) {
9530 this.visitInstruction(instruction); 9223 this.visitInstruction(instruction);
9531 instruction = instruction.next; 9224 instruction = instruction.next;
9532 } 9225 }
9533 } 9226 }
9534 // ********** Code for HGraph ************** 9227 // ********** Code for HGraph **************
9535 function HGraph() { 9228 function HGraph() {
9536 this.blocks = new ListFactory(); 9229 this.blocks = new ListFactory();
9537 // Initializers done 9230 // Initializers done
9538 this.entry = this.addNewBlock(); 9231 this.entry = this.addNewBlock();
9539 this.exit = new HBasicBlock(); 9232 this.exit = new HBasicBlock();
9540 } 9233 }
9541 HGraph.prototype.is$HGraph = function(){return this;};
9542 HGraph.prototype.addBlock = function(block) { 9234 HGraph.prototype.addBlock = function(block) {
9543 var id = this.blocks.length; 9235 var id = this.blocks.length;
9544 block.id = id; 9236 block.id = id;
9545 this.blocks.add(block); 9237 this.blocks.add(block);
9546 $assert(this.blocks.$index(id) === block, "blocks[id] === block", "nodes.dart" , 85, 12);
9547 } 9238 }
9548 HGraph.prototype.addNewBlock = function() { 9239 HGraph.prototype.addNewBlock = function() {
9549 var result = new HBasicBlock(); 9240 var result = new HBasicBlock();
9550 this.addBlock(result); 9241 this.addBlock(result);
9551 return result; 9242 return result;
9552 } 9243 }
9553 HGraph.prototype.finalize = function() { 9244 HGraph.prototype.finalize = function() {
9554 this.addBlock(this.exit); 9245 this.addBlock(this.exit);
9555 this.exit.open(); 9246 this.exit.open();
9556 this.exit.close(new HExit()); 9247 this.exit.close(new HExit());
9557 this.assignDominators(); 9248 this.assignDominators();
9558 } 9249 }
9559 HGraph.prototype.assignDominators = function() { 9250 HGraph.prototype.assignDominators = function() {
9560 var $0;
9561 for (var i = 0, length = this.blocks.length; 9251 for (var i = 0, length = this.blocks.length;
9562 i < length; i++) { 9252 i < length; i++) {
9563 var block = (($0 = this.blocks.$index(i)) && $0.is$HBasicBlock()); 9253 var block = this.blocks.$index(i);
9564 var predecessors = block.predecessors; 9254 var predecessors = block.predecessors;
9565 if ($notnull_bool(block.isLoopHeader)) { 9255 if (block.isLoopHeader) {
9566 $assert(predecessors.length >= 2, "predecessors.length >= 2", "nodes.dart" , 109, 16); 9256 block.assignCommonDominator(predecessors.$index(0));
9567 block.assignCommonDominator((($0 = predecessors.$index(0)) && $0.is$HBasic Block()));
9568 } 9257 }
9569 else { 9258 else {
9570 for (var j = predecessors.length - 1; 9259 for (var j = predecessors.length - 1;
9571 j >= 0; j--) { 9260 j >= 0; j--) {
9572 block.assignCommonDominator((($0 = predecessors.$index(j)) && $0.is$HBas icBlock())); 9261 block.assignCommonDominator(predecessors.$index(j));
9573 } 9262 }
9574 } 9263 }
9575 } 9264 }
9576 } 9265 }
9577 HGraph.prototype.assignInstructionIds = function() { 9266 HGraph.prototype.assignInstructionIds = function() {
9578 function handleDominatorTree(root, id) { 9267 function handleDominatorTree(root, id) {
9579 var $0;
9580 id = root.assignInstructionIds(id); 9268 id = root.assignInstructionIds(id);
9581 var dominatedBlocks = root.dominatedBlocks; 9269 var dominatedBlocks = root.dominatedBlocks;
9582 for (var i = 0, length = dominatedBlocks.length; 9270 for (var i = 0, length = dominatedBlocks.length;
9583 i < length; i++) { 9271 i < length; i++) {
9584 id = handleDominatorTree((($0 = dominatedBlocks.$index(i)) && $0.is$HBasic Block()), id); 9272 id = handleDominatorTree(dominatedBlocks.$index(i), id);
9585 } 9273 }
9586 return id; 9274 return id;
9587 } 9275 }
9588 handleDominatorTree(this.entry, 0); 9276 handleDominatorTree(this.entry, 0);
9589 } 9277 }
9590 HGraph.prototype.isValid = function() { 9278 HGraph.prototype.isValid = function() {
9591 var validator = new HValidator(); 9279 var validator = new HValidator();
9592 validator.visitGraph(this); 9280 validator.visitGraph(this);
9593 return validator.isValid; 9281 return validator.isValid;
9594 } 9282 }
9595 // ********** Code for HBaseVisitor ************** 9283 // ********** Code for HBaseVisitor **************
9596 function HBaseVisitor() { 9284 function HBaseVisitor() {
9597 HGraphVisitor.call(this); 9285 HGraphVisitor.call(this);
9598 // Initializers done 9286 // Initializers done
9599 } 9287 }
9600 $inherits(HBaseVisitor, HGraphVisitor); 9288 $inherits(HBaseVisitor, HGraphVisitor);
9601 HBaseVisitor.prototype.is$HVisitor = function(){return this;};
9602 HBaseVisitor.prototype.visitBasicBlock = function(node) { 9289 HBaseVisitor.prototype.visitBasicBlock = function(node) {
9603 this.currentBlock = node; 9290 this.currentBlock = node;
9604 var instruction = node.first; 9291 var instruction = node.first;
9605 while (instruction != null) { 9292 while (instruction != null) {
9606 instruction.accept(this); 9293 instruction.accept(this);
9607 instruction = instruction.next; 9294 instruction = instruction.next;
9608 } 9295 }
9609 } 9296 }
9610 HBaseVisitor.prototype.visitInstruction = function(HInstruction) { 9297 HBaseVisitor.prototype.visitInstruction = function(HInstruction) {
9611 9298
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
9670 HBaseVisitor.prototype.visitTruncatingDivide = function(node) { 9357 HBaseVisitor.prototype.visitTruncatingDivide = function(node) {
9671 return this.visitArithmetic(node); 9358 return this.visitArithmetic(node);
9672 } 9359 }
9673 // ********** Code for HInstructionList ************** 9360 // ********** Code for HInstructionList **************
9674 function HInstructionList() {} 9361 function HInstructionList() {}
9675 HInstructionList.prototype.isEmpty = function() { 9362 HInstructionList.prototype.isEmpty = function() {
9676 return this.first == null; 9363 return this.first == null;
9677 } 9364 }
9678 HInstructionList.prototype.addAfter = function(cursor, instruction) { 9365 HInstructionList.prototype.addAfter = function(cursor, instruction) {
9679 if (cursor == null) { 9366 if (cursor == null) {
9680 $assert(this.isEmpty(), "isEmpty()", "nodes.dart", 185, 14);
9681 this.first = this.last = instruction; 9367 this.first = this.last = instruction;
9682 } 9368 }
9683 else if (cursor === this.last) { 9369 else if (cursor === this.last) {
9684 this.last.next = instruction; 9370 this.last.next = instruction;
9685 instruction.previous = this.last; 9371 instruction.previous = this.last;
9686 this.last = instruction; 9372 this.last = instruction;
9687 } 9373 }
9688 else { 9374 else {
9689 instruction.previous = cursor; 9375 instruction.previous = cursor;
9690 instruction.next = cursor.next; 9376 instruction.next = cursor.next;
9691 cursor.next.previous = instruction; 9377 cursor.next.previous = instruction;
9692 cursor.next = instruction; 9378 cursor.next = instruction;
9693 } 9379 }
9694 instruction.notifyAddedToBlock(); 9380 instruction.notifyAddedToBlock();
9695 } 9381 }
9696 HInstructionList.prototype.remove = function(instruction) { 9382 HInstructionList.prototype.remove = function(instruction) {
9697 $assert(this.contains(instruction), "contains(instruction)", "nodes.dart", 201 , 12);
9698 $assert(instruction.isInBasicBlock(), "instruction.isInBasicBlock()", "nodes.d art", 202, 12);
9699 $assert(instruction.get$usedBy().isEmpty(), "instruction.usedBy.isEmpty()", "n odes.dart", 203, 12);
9700 if (instruction.previous == null) { 9383 if (instruction.previous == null) {
9701 this.first = instruction.next; 9384 this.first = instruction.next;
9702 } 9385 }
9703 else { 9386 else {
9704 instruction.previous.next = instruction.next; 9387 instruction.previous.next = instruction.next;
9705 } 9388 }
9706 if (instruction.next == null) { 9389 if (instruction.next == null) {
9707 this.last = instruction.previous; 9390 this.last = instruction.previous;
9708 } 9391 }
9709 else { 9392 else {
9710 instruction.next.previous = instruction.previous; 9393 instruction.next.previous = instruction.previous;
9711 } 9394 }
9712 instruction.notifyRemovedFromBlock(); 9395 instruction.notifyRemovedFromBlock();
9713 } 9396 }
9714 HInstructionList.prototype.contains = function(instruction) { 9397 HInstructionList.prototype.contains = function(instruction) {
9715 var cursor = this.first; 9398 var cursor = this.first;
9716 while (cursor != null) { 9399 while (cursor != null) {
9717 if (cursor === instruction) return true; 9400 if (cursor === instruction) return true;
9718 cursor = cursor.next; 9401 cursor = cursor.next;
9719 } 9402 }
9720 return false; 9403 return false;
9721 } 9404 }
9722 HInstructionList.prototype.contains$1 = function($0) { 9405 HInstructionList.prototype.contains$1 = function($0) {
9723 return this.contains(($0 && $0.is$HInstruction())); 9406 return this.contains($0);
9724 }; 9407 };
9725 HInstructionList.prototype.isEmpty$0 = function() { 9408 HInstructionList.prototype.isEmpty$0 = function() {
9726 return this.isEmpty(); 9409 return this.isEmpty();
9727 }; 9410 };
9728 HInstructionList.prototype.last$0 = function() { 9411 HInstructionList.prototype.last$0 = function() {
9729 return this.last(); 9412 return this.last();
9730 }; 9413 };
9731 // ********** Code for HBasicBlock ************** 9414 // ********** Code for HBasicBlock **************
9732 function HBasicBlock() { 9415 function HBasicBlock() {
9733 this.status = 0/*HBasicBlock.STATUS_NEW*/ 9416 this.status = 0/*HBasicBlock.STATUS_NEW*/
9734 this.isLoopHeader = false 9417 this.isLoopHeader = false
9735 this.dominator = null 9418 this.dominator = null
9736 HBasicBlock.withId$ctor.call(this, null); 9419 HBasicBlock.withId$ctor.call(this, null);
9737 // Initializers done 9420 // Initializers done
9738 } 9421 }
9739 HBasicBlock.withId$ctor = function(id) { 9422 HBasicBlock.withId$ctor = function(id) {
9740 this.status = 0/*HBasicBlock.STATUS_NEW*/ 9423 this.status = 0/*HBasicBlock.STATUS_NEW*/
9741 this.isLoopHeader = false 9424 this.isLoopHeader = false
9742 this.dominator = null 9425 this.dominator = null
9743 this.id = id; 9426 this.id = id;
9744 this.predecessors = []; 9427 this.predecessors = [];
9745 this.successors = const$13/*const []*/; 9428 this.successors = const$13/*const []*/;
9746 this.dominatedBlocks = []; 9429 this.dominatedBlocks = [];
9747 // Initializers done 9430 // Initializers done
9748 } 9431 }
9749 HBasicBlock.withId$ctor.prototype = HBasicBlock.prototype; 9432 HBasicBlock.withId$ctor.prototype = HBasicBlock.prototype;
9750 $inherits(HBasicBlock, HInstructionList); 9433 $inherits(HBasicBlock, HInstructionList);
9751 HBasicBlock.prototype.is$HBasicBlock = function(){return this;};
9752 HBasicBlock.prototype.isNew = function() { 9434 HBasicBlock.prototype.isNew = function() {
9753 return this.status == 0/*HBasicBlock.STATUS_NEW*/; 9435 return this.status == 0/*HBasicBlock.STATUS_NEW*/;
9754 } 9436 }
9755 HBasicBlock.prototype.isOpen = function() { 9437 HBasicBlock.prototype.isOpen = function() {
9756 return this.status == 1/*HBasicBlock.STATUS_OPEN*/; 9438 return this.status == 1/*HBasicBlock.STATUS_OPEN*/;
9757 } 9439 }
9758 HBasicBlock.prototype.isClosed = function() { 9440 HBasicBlock.prototype.isClosed = function() {
9759 return this.status == 2/*HBasicBlock.STATUS_CLOSED*/; 9441 return this.status == 2/*HBasicBlock.STATUS_CLOSED*/;
9760 } 9442 }
9761 HBasicBlock.prototype.open = function() { 9443 HBasicBlock.prototype.open = function() {
9762 $assert(this.isNew(), "isNew()", "nodes.dart", 256, 12);
9763 this.status = 1/*HBasicBlock.STATUS_OPEN*/; 9444 this.status = 1/*HBasicBlock.STATUS_OPEN*/;
9764 } 9445 }
9765 HBasicBlock.prototype.close = function(end) { 9446 HBasicBlock.prototype.close = function(end) {
9766 $assert(this.isOpen(), "isOpen()", "nodes.dart", 261, 12);
9767 this.addAfter(this.last, end); 9447 this.addAfter(this.last, end);
9768 this.status = 2/*HBasicBlock.STATUS_CLOSED*/; 9448 this.status = 2/*HBasicBlock.STATUS_CLOSED*/;
9769 } 9449 }
9770 HBasicBlock.prototype.assignInstructionIds = function(id) { 9450 HBasicBlock.prototype.assignInstructionIds = function(id) {
9771 var instruction = this.first; 9451 var instruction = this.first;
9772 while (instruction != null) { 9452 while (instruction != null) {
9773 instruction.id = id++; 9453 instruction.id = id++;
9774 instruction = instruction.next; 9454 instruction = instruction.next;
9775 } 9455 }
9776 return id; 9456 return id;
9777 } 9457 }
9778 HBasicBlock.prototype.accept = function(visitor) { 9458 HBasicBlock.prototype.accept = function(visitor) {
9779 return visitor.visitBasicBlock(this); 9459 return visitor.visitBasicBlock(this);
9780 } 9460 }
9781 HBasicBlock.prototype.add = function(instruction) { 9461 HBasicBlock.prototype.add = function(instruction) {
9782 $assert(!(instruction instanceof HControlFlow), "instruction is !HControlFlow" , "nodes.dart", 289, 12);
9783 HInstructionList.prototype.addAfter.call(this, this.last, instruction); 9462 HInstructionList.prototype.addAfter.call(this, this.last, instruction);
9784 } 9463 }
9785 HBasicBlock.prototype.addSuccessor = function(block) { 9464 HBasicBlock.prototype.addSuccessor = function(block) {
9786 $assert($notnull_bool(this.isClosed()) && ($notnull_bool(block.isNew()) || blo ck.id < this.id), "isClosed() && (block.isNew() || block.id < id)", "nodes.dart" , 295, 12);
9787 if (this.successors.isEmpty()) { 9465 if (this.successors.isEmpty()) {
9788 this.successors = [block]; 9466 this.successors = [block];
9789 } 9467 }
9790 else { 9468 else {
9791 this.successors.add(block); 9469 this.successors.add(block);
9792 } 9470 }
9793 block.predecessors.add(this); 9471 block.predecessors.add(this);
9794 } 9472 }
9795 HBasicBlock.prototype.addAfter = function(cursor, instruction) { 9473 HBasicBlock.prototype.addAfter = function(cursor, instruction) {
9796 $assert($notnull_bool(this.isOpen()) || $notnull_bool(this.isClosed()), "isOpe n() || isClosed()", "nodes.dart", 305, 12);
9797 HInstructionList.prototype.addAfter.call(this, cursor, instruction); 9474 HInstructionList.prototype.addAfter.call(this, cursor, instruction);
9798 } 9475 }
9799 HBasicBlock.prototype.remove = function(instruction) { 9476 HBasicBlock.prototype.remove = function(instruction) {
9800 $assert($notnull_bool(this.isOpen()) || $notnull_bool(this.isClosed()), "isOpe n() || isClosed()", "nodes.dart", 310, 12);
9801 HInstructionList.prototype.remove.call(this, instruction); 9477 HInstructionList.prototype.remove.call(this, instruction);
9802 } 9478 }
9803 HBasicBlock.prototype.rewrite = function(from, to) { 9479 HBasicBlock.prototype.rewrite = function(from, to) {
9804 var $list = from.get$usedBy(); 9480 var $list = from.get$usedBy();
9805 for (var $i = 0;$i < $list.length; $i++) { 9481 for (var $i = 0;$i < $list.length; $i++) {
9806 var use = $list.$index($i); 9482 var use = $list.$index($i);
9807 HBasicBlock.rewriteInput(use, from, to); 9483 HBasicBlock.rewriteInput(use, from, to);
9808 } 9484 }
9809 to.get$usedBy().addAll(from.get$usedBy()); 9485 to.get$usedBy().addAll(from.get$usedBy());
9810 from._usedBy = []; 9486 from._usedBy = [];
9811 } 9487 }
9812 HBasicBlock.rewriteInput = function(instruction, from, to) { 9488 HBasicBlock.rewriteInput = function(instruction, from, to) {
9813 var inputs = instruction.inputs; 9489 var inputs = instruction.inputs;
9814 for (var i = 0; 9490 for (var i = 0;
9815 i < inputs.length; i++) { 9491 i < inputs.length; i++) {
9816 if (inputs.$index(i) === from) inputs.$setindex(i, to); 9492 if (inputs.$index(i) === from) inputs.$setindex(i, to);
9817 } 9493 }
9818 } 9494 }
9819 HBasicBlock.prototype.isExitBlock = function() { 9495 HBasicBlock.prototype.isExitBlock = function() {
9820 return this.first === this.last && (this.first instanceof HExit); 9496 return this.first === this.last && (this.first instanceof HExit);
9821 } 9497 }
9822 HBasicBlock.prototype.addDominatedBlock = function(block) { 9498 HBasicBlock.prototype.addDominatedBlock = function(block) {
9823 $assert(this.isClosed(), "isClosed()", "nodes.dart", 340, 12);
9824 $assert(this.id != null && block.id != null, "id !== null && block.id !== null ", "nodes.dart", 341, 12);
9825 $assert(this.dominatedBlocks.indexOf(block) < 0, "dominatedBlocks.indexOf(bloc k) < 0", "nodes.dart", 342, 12);
9826 var index = this.dominatedBlocks.length; 9499 var index = this.dominatedBlocks.length;
9827 while (index > 0 && this.dominatedBlocks.$index(index - 1).id > block.id) { 9500 while (index > 0 && this.dominatedBlocks.$index(index - 1).id > block.id) {
9828 index--; 9501 index--;
9829 } 9502 }
9830 if (index == this.dominatedBlocks.length) { 9503 if (index == this.dominatedBlocks.length) {
9831 this.dominatedBlocks.add(block); 9504 this.dominatedBlocks.add(block);
9832 } 9505 }
9833 else { 9506 else {
9834 this.dominatedBlocks.insertRange(index, 1, block); 9507 this.dominatedBlocks.insertRange(index, 1, block);
9835 } 9508 }
9836 $assert(block.dominator == null, "block.dominator === null", "nodes.dart", 355 , 12);
9837 block.dominator = this; 9509 block.dominator = this;
9838 } 9510 }
9839 HBasicBlock.prototype.removeDominatedBlock = function(block) { 9511 HBasicBlock.prototype.removeDominatedBlock = function(block) {
9840 $assert(this.isClosed(), "isClosed()", "nodes.dart", 360, 12);
9841 $assert(this.id != null && block.id != null, "id !== null && block.id !== null ", "nodes.dart", 361, 12);
9842 var index = this.dominatedBlocks.indexOf(block); 9512 var index = this.dominatedBlocks.indexOf(block);
9843 $assert(index >= 0, "index >= 0", "nodes.dart", 363, 12);
9844 if (index == this.dominatedBlocks.length - 1) { 9513 if (index == this.dominatedBlocks.length - 1) {
9845 this.dominatedBlocks.removeLast(); 9514 this.dominatedBlocks.removeLast();
9846 } 9515 }
9847 else { 9516 else {
9848 this.dominatedBlocks.removeRange(index, 1); 9517 this.dominatedBlocks.removeRange(index, 1);
9849 } 9518 }
9850 $assert(block.dominator === this, "block.dominator === this", "nodes.dart", 36 9, 12);
9851 block.dominator = null; 9519 block.dominator = null;
9852 } 9520 }
9853 HBasicBlock.prototype.assignCommonDominator = function(predecessor) { 9521 HBasicBlock.prototype.assignCommonDominator = function(predecessor) {
9854 $assert(this.isClosed(), "isClosed()", "nodes.dart", 374, 12);
9855 if (this.dominator == null) { 9522 if (this.dominator == null) {
9856 predecessor.addDominatedBlock(this); 9523 predecessor.addDominatedBlock(this);
9857 } 9524 }
9858 else if (predecessor.dominator != null) { 9525 else if (predecessor.dominator != null) {
9859 var first = this.dominator; 9526 var first = this.dominator;
9860 var second = predecessor; 9527 var second = predecessor;
9861 while (first !== second) { 9528 while (first !== second) {
9862 if (first.id > second.id) { 9529 if (first.id > second.id) {
9863 first = first.dominator; 9530 first = first.dominator;
9864 } 9531 }
9865 else { 9532 else {
9866 second = second.dominator; 9533 second = second.dominator;
9867 } 9534 }
9868 $assert(first != null && second != null, "first !== null && second !== nul l", "nodes.dart", 391, 16);
9869 } 9535 }
9870 if (this.dominator !== first) { 9536 if (this.dominator !== first) {
9871 this.dominator.removeDominatedBlock(this); 9537 this.dominator.removeDominatedBlock(this);
9872 first.addDominatedBlock(this); 9538 first.addDominatedBlock(this);
9873 } 9539 }
9874 } 9540 }
9875 } 9541 }
9876 HBasicBlock.prototype.forEachPhi = function(f) { 9542 HBasicBlock.prototype.forEachPhi = function(f) {
9877 var current = this.first; 9543 var current = this.first;
9878 while (current != null && (current instanceof HPhi)) { 9544 while (current != null && (current instanceof HPhi)) {
9879 f((current && current.is$HPhi())); 9545 f(current);
9880 current = current.next; 9546 current = current.next;
9881 } 9547 }
9882 } 9548 }
9883 HBasicBlock.prototype.accept$1 = function($0) { 9549 HBasicBlock.prototype.accept$1 = function($0) {
9884 return this.accept(($0 && $0.is$HVisitor())); 9550 return this.accept($0);
9885 }; 9551 };
9886 HBasicBlock.prototype.add$1 = function($0) { 9552 HBasicBlock.prototype.add$1 = function($0) {
9887 return this.add(($0 && $0.is$HInstruction())); 9553 return this.add($0);
9888 }; 9554 };
9889 HBasicBlock.prototype.isExitBlock$0 = function() { 9555 HBasicBlock.prototype.isExitBlock$0 = function() {
9890 return this.isExitBlock(); 9556 return this.isExitBlock();
9891 }; 9557 };
9892 // ********** Code for HInstruction ************** 9558 // ********** Code for HInstruction **************
9893 function HInstruction(inputs) { 9559 function HInstruction(inputs) {
9894 this._usedBy = null 9560 this._usedBy = null
9895 this.previous = null 9561 this.previous = null
9896 this.next = null 9562 this.next = null
9897 this.flags = 0 9563 this.flags = 0
9898 this.inputs = inputs; 9564 this.inputs = inputs;
9899 // Initializers done 9565 // Initializers done
9900 this.prepareGvn(); 9566 this.prepareGvn();
9901 } 9567 }
9902 HInstruction.prototype.is$HInstruction = function(){return this;};
9903 HInstruction.prototype.getFlag = function(position) { 9568 HInstruction.prototype.getFlag = function(position) {
9904 return (this.flags & (1 << position)) != 0; 9569 return (this.flags & (1 << position)) != 0;
9905 } 9570 }
9906 HInstruction.prototype.setFlag = function(position) { 9571 HInstruction.prototype.setFlag = function(position) {
9907 this.flags |= (1 << position); 9572 this.flags |= (1 << position);
9908 } 9573 }
9909 HInstruction.prototype.getChangesFlags = function() { 9574 HInstruction.prototype.getChangesFlags = function() {
9910 return this.flags & (1)/*((1 << FLAG_CHANGES_COUNT) - 1)*/; 9575 return this.flags & (1)/*((1 << FLAG_CHANGES_COUNT) - 1)*/;
9911 } 9576 }
9912 HInstruction.prototype.hasSideEffects = function() { 9577 HInstruction.prototype.hasSideEffects = function() {
(...skipping 18 matching lines...) Expand all
9931 this.setFlag(3/*HInstruction.FLAG_USE_GVN*/); 9596 this.setFlag(3/*HInstruction.FLAG_USE_GVN*/);
9932 } 9597 }
9933 HInstruction.prototype.get$usedBy = function() { 9598 HInstruction.prototype.get$usedBy = function() {
9934 if (this._usedBy == null) return const$13/*const []*/; 9599 if (this._usedBy == null) return const$13/*const []*/;
9935 return this._usedBy; 9600 return this._usedBy;
9936 } 9601 }
9937 HInstruction.prototype.isInBasicBlock = function() { 9602 HInstruction.prototype.isInBasicBlock = function() {
9938 return this._usedBy != null; 9603 return this._usedBy != null;
9939 } 9604 }
9940 HInstruction.prototype.notifyAddedToBlock = function() { 9605 HInstruction.prototype.notifyAddedToBlock = function() {
9941 $assert(!$notnull_bool(this.isInBasicBlock()), "!isInBasicBlock()", "nodes.dar t", 507, 12);
9942 this._usedBy = []; 9606 this._usedBy = [];
9943 for (var i = 0; 9607 for (var i = 0;
9944 i < this.inputs.length; i++) { 9608 i < this.inputs.length; i++) {
9945 $assert(this.inputs.$index(i).isInBasicBlock$0(), "inputs[i].isInBasicBlock( )", "nodes.dart", 511, 14);
9946 this.inputs.$index(i).get$usedBy().add(this); 9609 this.inputs.$index(i).get$usedBy().add(this);
9947 } 9610 }
9948 $assert(this.isValid(), "isValid()", "nodes.dart", 514, 12);
9949 } 9611 }
9950 HInstruction.prototype.notifyRemovedFromBlock = function() { 9612 HInstruction.prototype.notifyRemovedFromBlock = function() {
9951 $assert(this.isInBasicBlock(), "isInBasicBlock()", "nodes.dart", 518, 12);
9952 $assert(this.get$usedBy().isEmpty(), "usedBy.isEmpty()", "nodes.dart", 519, 12 );
9953 for (var i = 0; 9613 for (var i = 0;
9954 i < this.inputs.length; i++) { 9614 i < this.inputs.length; i++) {
9955 var inputUsedBy = this.inputs.$index(i).get$usedBy(); 9615 var inputUsedBy = this.inputs.$index(i).get$usedBy();
9956 for (var j = 0; 9616 for (var j = 0;
9957 j < inputUsedBy.length; j++) { 9617 j < inputUsedBy.length; j++) {
9958 if (inputUsedBy.$index(j) === this) { 9618 if (inputUsedBy.$index(j) === this) {
9959 inputUsedBy.$setindex(j, inputUsedBy.$index(inputUsedBy.length - 1)); 9619 inputUsedBy.$setindex(j, inputUsedBy.$index(inputUsedBy.length - 1));
9960 inputUsedBy.removeLast(); 9620 inputUsedBy.removeLast();
9961 break; 9621 break;
9962 } 9622 }
9963 } 9623 }
9964 } 9624 }
9965 this._usedBy = null; 9625 this._usedBy = null;
9966 $assert(this.isValid(), "isValid()", "nodes.dart", 533, 12);
9967 } 9626 }
9968 HInstruction.prototype.isLiteralNumber = function() { 9627 HInstruction.prototype.isLiteralNumber = function() {
9969 return false; 9628 return false;
9970 } 9629 }
9971 HInstruction.prototype.isLiteralString = function() { 9630 HInstruction.prototype.isLiteralString = function() {
9972 return false; 9631 return false;
9973 } 9632 }
9974 HInstruction.prototype.isValid = function() { 9633 HInstruction.prototype.isValid = function() {
9975 var validator = new HValidator(); 9634 var validator = new HValidator();
9976 validator.visitInstruction(this); 9635 validator.visitInstruction(this);
9977 return validator.isValid; 9636 return validator.isValid;
9978 } 9637 }
9979 HInstruction.prototype.accept$1 = function($0) { 9638 HInstruction.prototype.accept$1 = function($0) {
9980 return this.accept(($0 && $0.is$HVisitor())); 9639 return this.accept($0);
9981 }; 9640 };
9982 HInstruction.prototype.isInBasicBlock$0 = function() { 9641 HInstruction.prototype.isInBasicBlock$0 = function() {
9983 return this.isInBasicBlock(); 9642 return this.isInBasicBlock();
9984 }; 9643 };
9985 HInstruction.prototype.isLiteralNumber$0 = function() { 9644 HInstruction.prototype.isLiteralNumber$0 = function() {
9986 return this.isLiteralNumber(); 9645 return this.isLiteralNumber();
9987 }; 9646 };
9988 HInstruction.prototype.isLiteralString$0 = function() { 9647 HInstruction.prototype.isLiteralString$0 = function() {
9989 return this.isLiteralString(); 9648 return this.isLiteralString();
9990 }; 9649 };
(...skipping 29 matching lines...) Expand all
10020 } 9679 }
10021 $inherits(HInvoke, HInstruction); 9680 $inherits(HInvoke, HInstruction);
10022 HInvoke.prototype.get$element = function() { return this.element; }; 9681 HInvoke.prototype.get$element = function() { return this.element; };
10023 HInvoke.prototype.toString = function() { 9682 HInvoke.prototype.toString = function() {
10024 return ('invoke: ' + this.element.name + ''); 9683 return ('invoke: ' + this.element.name + '');
10025 } 9684 }
10026 HInvoke.prototype.accept = function(visitor) { 9685 HInvoke.prototype.accept = function(visitor) {
10027 return visitor.visitInvoke(this); 9686 return visitor.visitInvoke(this);
10028 } 9687 }
10029 HInvoke.prototype.accept$1 = function($0) { 9688 HInvoke.prototype.accept$1 = function($0) {
10030 return this.accept(($0 && $0.is$HVisitor())); 9689 return this.accept($0);
10031 }; 9690 };
10032 HInvoke.prototype.toString$0 = function() { 9691 HInvoke.prototype.toString$0 = function() {
10033 return this.toString(); 9692 return this.toString();
10034 }; 9693 };
10035 // ********** Code for HInvokeForeign ************** 9694 // ********** Code for HInvokeForeign **************
10036 function HInvokeForeign(element, inputs, code) { 9695 function HInvokeForeign(element, inputs, code) {
10037 this.code = code; 9696 this.code = code;
10038 HInvoke.call(this, element, inputs); 9697 HInvoke.call(this, element, inputs);
10039 // Initializers done 9698 // Initializers done
10040 } 9699 }
10041 $inherits(HInvokeForeign, HInvoke); 9700 $inherits(HInvokeForeign, HInvoke);
10042 HInvokeForeign.prototype.accept = function(visitor) { 9701 HInvokeForeign.prototype.accept = function(visitor) {
10043 return visitor.visitInvokeForeign(this); 9702 return visitor.visitInvokeForeign(this);
10044 } 9703 }
10045 HInvokeForeign.prototype.accept$1 = function($0) { 9704 HInvokeForeign.prototype.accept$1 = function($0) {
10046 return this.accept(($0 && $0.is$HVisitor())); 9705 return this.accept($0);
10047 }; 9706 };
10048 // ********** Code for HArithmetic ************** 9707 // ********** Code for HArithmetic **************
10049 function HArithmetic(element, inputs) { 9708 function HArithmetic(element, inputs) {
10050 HInvoke.call(this, element, inputs); 9709 HInvoke.call(this, element, inputs);
10051 // Initializers done 9710 // Initializers done
10052 } 9711 }
10053 $inherits(HArithmetic, HInvoke); 9712 $inherits(HArithmetic, HInvoke);
10054 HArithmetic.prototype.prepareGvn = function() { 9713 HArithmetic.prototype.prepareGvn = function() {
10055 if (!(this.inputs.$index(0) instanceof HLiteral)) return; 9714 if (!(this.inputs.$index(0) instanceof HLiteral)) return;
10056 this.clearAllSideEffects(); 9715 this.clearAllSideEffects();
10057 this.setUseGvn(); 9716 this.setUseGvn();
10058 } 9717 }
10059 // ********** Code for HAdd ************** 9718 // ********** Code for HAdd **************
10060 function HAdd(element, inputs) { 9719 function HAdd(element, inputs) {
10061 HArithmetic.call(this, element, inputs); 9720 HArithmetic.call(this, element, inputs);
10062 // Initializers done 9721 // Initializers done
10063 } 9722 }
10064 $inherits(HAdd, HArithmetic); 9723 $inherits(HAdd, HArithmetic);
10065 HAdd.prototype.prepareGvn = function() { 9724 HAdd.prototype.prepareGvn = function() {
10066 if (!$notnull_bool(this.inputs.$index(0).isLiteralNumber$0())) return; 9725 if (!this.inputs.$index(0).isLiteralNumber$0()) return;
10067 this.clearAllSideEffects(); 9726 this.clearAllSideEffects();
10068 this.setUseGvn(); 9727 this.setUseGvn();
10069 } 9728 }
10070 HAdd.prototype.accept = function(visitor) { 9729 HAdd.prototype.accept = function(visitor) {
10071 return visitor.visitAdd(this); 9730 return visitor.visitAdd(this);
10072 } 9731 }
10073 HAdd.prototype.evaluate = function(a, b) { 9732 HAdd.prototype.evaluate = function(a, b) {
10074 return a + b; 9733 return a + b;
10075 } 9734 }
10076 HAdd.prototype.accept$1 = function($0) { 9735 HAdd.prototype.accept$1 = function($0) {
10077 return this.accept(($0 && $0.is$HVisitor())); 9736 return this.accept($0);
10078 }; 9737 };
10079 // ********** Code for HDivide ************** 9738 // ********** Code for HDivide **************
10080 function HDivide(element, inputs) { 9739 function HDivide(element, inputs) {
10081 HArithmetic.call(this, element, inputs); 9740 HArithmetic.call(this, element, inputs);
10082 // Initializers done 9741 // Initializers done
10083 } 9742 }
10084 $inherits(HDivide, HArithmetic); 9743 $inherits(HDivide, HArithmetic);
10085 HDivide.prototype.accept = function(visitor) { 9744 HDivide.prototype.accept = function(visitor) {
10086 return visitor.visitDivide(this); 9745 return visitor.visitDivide(this);
10087 } 9746 }
10088 HDivide.prototype.evaluate = function(a, b) { 9747 HDivide.prototype.evaluate = function(a, b) {
10089 return a / b; 9748 return a / b;
10090 } 9749 }
10091 HDivide.prototype.accept$1 = function($0) { 9750 HDivide.prototype.accept$1 = function($0) {
10092 return this.accept(($0 && $0.is$HVisitor())); 9751 return this.accept($0);
10093 }; 9752 };
10094 // ********** Code for HMultiply ************** 9753 // ********** Code for HMultiply **************
10095 function HMultiply(element, inputs) { 9754 function HMultiply(element, inputs) {
10096 HArithmetic.call(this, element, inputs); 9755 HArithmetic.call(this, element, inputs);
10097 // Initializers done 9756 // Initializers done
10098 } 9757 }
10099 $inherits(HMultiply, HArithmetic); 9758 $inherits(HMultiply, HArithmetic);
10100 HMultiply.prototype.accept = function(visitor) { 9759 HMultiply.prototype.accept = function(visitor) {
10101 return visitor.visitMultiply(this); 9760 return visitor.visitMultiply(this);
10102 } 9761 }
10103 HMultiply.prototype.evaluate = function(a, b) { 9762 HMultiply.prototype.evaluate = function(a, b) {
10104 return a * b; 9763 return a * b;
10105 } 9764 }
10106 HMultiply.prototype.accept$1 = function($0) { 9765 HMultiply.prototype.accept$1 = function($0) {
10107 return this.accept(($0 && $0.is$HVisitor())); 9766 return this.accept($0);
10108 }; 9767 };
10109 // ********** Code for HSubtract ************** 9768 // ********** Code for HSubtract **************
10110 function HSubtract(element, inputs) { 9769 function HSubtract(element, inputs) {
10111 HArithmetic.call(this, element, inputs); 9770 HArithmetic.call(this, element, inputs);
10112 // Initializers done 9771 // Initializers done
10113 } 9772 }
10114 $inherits(HSubtract, HArithmetic); 9773 $inherits(HSubtract, HArithmetic);
10115 HSubtract.prototype.accept = function(visitor) { 9774 HSubtract.prototype.accept = function(visitor) {
10116 return visitor.visitSubtract(this); 9775 return visitor.visitSubtract(this);
10117 } 9776 }
10118 HSubtract.prototype.evaluate = function(a, b) { 9777 HSubtract.prototype.evaluate = function(a, b) {
10119 return a - b; 9778 return a - b;
10120 } 9779 }
10121 HSubtract.prototype.accept$1 = function($0) { 9780 HSubtract.prototype.accept$1 = function($0) {
10122 return this.accept(($0 && $0.is$HVisitor())); 9781 return this.accept($0);
10123 }; 9782 };
10124 // ********** Code for HTruncatingDivide ************** 9783 // ********** Code for HTruncatingDivide **************
10125 function HTruncatingDivide(element, inputs) { 9784 function HTruncatingDivide(element, inputs) {
10126 HArithmetic.call(this, element, inputs); 9785 HArithmetic.call(this, element, inputs);
10127 // Initializers done 9786 // Initializers done
10128 } 9787 }
10129 $inherits(HTruncatingDivide, HArithmetic); 9788 $inherits(HTruncatingDivide, HArithmetic);
10130 HTruncatingDivide.prototype.accept = function(visitor) { 9789 HTruncatingDivide.prototype.accept = function(visitor) {
10131 return visitor.visitTruncatingDivide(this); 9790 return visitor.visitTruncatingDivide(this);
10132 } 9791 }
10133 HTruncatingDivide.prototype.evaluate = function(a, b) { 9792 HTruncatingDivide.prototype.evaluate = function(a, b) {
10134 return $truncdiv(a, b); 9793 return $truncdiv(a, b);
10135 } 9794 }
10136 HTruncatingDivide.prototype.accept$1 = function($0) { 9795 HTruncatingDivide.prototype.accept$1 = function($0) {
10137 return this.accept(($0 && $0.is$HVisitor())); 9796 return this.accept($0);
10138 }; 9797 };
10139 // ********** Code for HEquals ************** 9798 // ********** Code for HEquals **************
10140 function HEquals(element, inputs) { 9799 function HEquals(element, inputs) {
10141 HInvoke.call(this, element, inputs); 9800 HInvoke.call(this, element, inputs);
10142 // Initializers done 9801 // Initializers done
10143 } 9802 }
10144 $inherits(HEquals, HInvoke); 9803 $inherits(HEquals, HInvoke);
10145 HEquals.prototype.prepareGvn = function() { 9804 HEquals.prototype.prepareGvn = function() {
10146 if (!(this.inputs.$index(0) instanceof HLiteral)) return; 9805 if (!(this.inputs.$index(0) instanceof HLiteral)) return;
10147 this.clearAllSideEffects(); 9806 this.clearAllSideEffects();
10148 this.setUseGvn(); 9807 this.setUseGvn();
10149 } 9808 }
10150 HEquals.prototype.accept = function(visitor) { 9809 HEquals.prototype.accept = function(visitor) {
10151 return visitor.visitEquals(this); 9810 return visitor.visitEquals(this);
10152 } 9811 }
10153 HEquals.prototype.accept$1 = function($0) { 9812 HEquals.prototype.accept$1 = function($0) {
10154 return this.accept(($0 && $0.is$HVisitor())); 9813 return this.accept($0);
10155 }; 9814 };
10156 // ********** Code for HExit ************** 9815 // ********** Code for HExit **************
10157 function HExit() { 9816 function HExit() {
10158 HControlFlow.call(this, const$13/*const []*/); 9817 HControlFlow.call(this, const$13/*const []*/);
10159 // Initializers done 9818 // Initializers done
10160 } 9819 }
10161 $inherits(HExit, HControlFlow); 9820 $inherits(HExit, HControlFlow);
10162 HExit.prototype.toString = function() { 9821 HExit.prototype.toString = function() {
10163 return 'exit'; 9822 return 'exit';
10164 } 9823 }
10165 HExit.prototype.accept = function(visitor) { 9824 HExit.prototype.accept = function(visitor) {
10166 return visitor.visitExit(this); 9825 return visitor.visitExit(this);
10167 } 9826 }
10168 HExit.prototype.accept$1 = function($0) { 9827 HExit.prototype.accept$1 = function($0) {
10169 return this.accept(($0 && $0.is$HVisitor())); 9828 return this.accept($0);
10170 }; 9829 };
10171 HExit.prototype.toString$0 = function() { 9830 HExit.prototype.toString$0 = function() {
10172 return this.toString(); 9831 return this.toString();
10173 }; 9832 };
10174 // ********** Code for HGoto ************** 9833 // ********** Code for HGoto **************
10175 function HGoto() { 9834 function HGoto() {
10176 HControlFlow.call(this, const$13/*const []*/); 9835 HControlFlow.call(this, const$13/*const []*/);
10177 // Initializers done 9836 // Initializers done
10178 } 9837 }
10179 $inherits(HGoto, HControlFlow); 9838 $inherits(HGoto, HControlFlow);
10180 HGoto.prototype.toString = function() { 9839 HGoto.prototype.toString = function() {
10181 return 'goto'; 9840 return 'goto';
10182 } 9841 }
10183 HGoto.prototype.accept = function(visitor) { 9842 HGoto.prototype.accept = function(visitor) {
10184 return visitor.visitGoto(this); 9843 return visitor.visitGoto(this);
10185 } 9844 }
10186 HGoto.prototype.accept$1 = function($0) { 9845 HGoto.prototype.accept$1 = function($0) {
10187 return this.accept(($0 && $0.is$HVisitor())); 9846 return this.accept($0);
10188 }; 9847 };
10189 HGoto.prototype.toString$0 = function() { 9848 HGoto.prototype.toString$0 = function() {
10190 return this.toString(); 9849 return this.toString();
10191 }; 9850 };
10192 // ********** Code for HIf ************** 9851 // ********** Code for HIf **************
10193 function HIf(condition, hasElse) { 9852 function HIf(condition, hasElse) {
10194 this.hasElse = hasElse; 9853 this.hasElse = hasElse;
10195 HConditionalBranch.call(this, [condition]); 9854 HConditionalBranch.call(this, [condition]);
10196 // Initializers done 9855 // Initializers done
10197 } 9856 }
10198 $inherits(HIf, HConditionalBranch); 9857 $inherits(HIf, HConditionalBranch);
10199 HIf.prototype.toString = function() { 9858 HIf.prototype.toString = function() {
10200 return 'if'; 9859 return 'if';
10201 } 9860 }
10202 HIf.prototype.accept = function(visitor) { 9861 HIf.prototype.accept = function(visitor) {
10203 return visitor.visitIf(this); 9862 return visitor.visitIf(this);
10204 } 9863 }
10205 HIf.prototype.accept$1 = function($0) { 9864 HIf.prototype.accept$1 = function($0) {
10206 return this.accept(($0 && $0.is$HVisitor())); 9865 return this.accept($0);
10207 }; 9866 };
10208 HIf.prototype.toString$0 = function() { 9867 HIf.prototype.toString$0 = function() {
10209 return this.toString(); 9868 return this.toString();
10210 }; 9869 };
10211 // ********** Code for HLoopBranch ************** 9870 // ********** Code for HLoopBranch **************
10212 function HLoopBranch(condition) { 9871 function HLoopBranch(condition) {
10213 HConditionalBranch.call(this, [condition]); 9872 HConditionalBranch.call(this, [condition]);
10214 // Initializers done 9873 // Initializers done
10215 } 9874 }
10216 $inherits(HLoopBranch, HConditionalBranch); 9875 $inherits(HLoopBranch, HConditionalBranch);
10217 HLoopBranch.prototype.toString = function() { 9876 HLoopBranch.prototype.toString = function() {
10218 return 'loop-branch'; 9877 return 'loop-branch';
10219 } 9878 }
10220 HLoopBranch.prototype.accept = function(visitor) { 9879 HLoopBranch.prototype.accept = function(visitor) {
10221 return visitor.visitLoopBranch(this); 9880 return visitor.visitLoopBranch(this);
10222 } 9881 }
10223 HLoopBranch.prototype.accept$1 = function($0) { 9882 HLoopBranch.prototype.accept$1 = function($0) {
10224 return this.accept(($0 && $0.is$HVisitor())); 9883 return this.accept($0);
10225 }; 9884 };
10226 HLoopBranch.prototype.toString$0 = function() { 9885 HLoopBranch.prototype.toString$0 = function() {
10227 return this.toString(); 9886 return this.toString();
10228 }; 9887 };
10229 // ********** Code for HLiteral ************** 9888 // ********** Code for HLiteral **************
10230 function HLiteral(value) { 9889 function HLiteral(value) {
10231 this.value = value; 9890 this.value = value;
10232 HInstruction.call(this, []); 9891 HInstruction.call(this, []);
10233 // Initializers done 9892 // Initializers done
10234 } 9893 }
10235 $inherits(HLiteral, HInstruction); 9894 $inherits(HLiteral, HInstruction);
10236 HLiteral.prototype.is$HLiteral = function(){return this;};
10237 HLiteral.prototype.get$value = function() { return this.value; }; 9895 HLiteral.prototype.get$value = function() { return this.value; };
10238 HLiteral.prototype.prepareGvn = function() { 9896 HLiteral.prototype.prepareGvn = function() {
10239 this.clearAllSideEffects(); 9897 this.clearAllSideEffects();
10240 this.setUseGvn(); 9898 this.setUseGvn();
10241 } 9899 }
10242 HLiteral.prototype.toString = function() { 9900 HLiteral.prototype.toString = function() {
10243 return ('literal: ' + this.value + ''); 9901 return ('literal: ' + this.value + '');
10244 } 9902 }
10245 HLiteral.prototype.accept = function(visitor) { 9903 HLiteral.prototype.accept = function(visitor) {
10246 return visitor.visitLiteral(this); 9904 return visitor.visitLiteral(this);
10247 } 9905 }
10248 HLiteral.prototype.isLiteralNumber = function() { 9906 HLiteral.prototype.isLiteralNumber = function() {
10249 return (typeof(this.value) == 'number'); 9907 return (typeof(this.value) == 'number');
10250 } 9908 }
10251 HLiteral.prototype.isLiteralString = function() { 9909 HLiteral.prototype.isLiteralString = function() {
10252 var $0; 9910 var $0;
10253 return !!(($0 = this.value) && $0.is$SourceString); 9911 return !!(($0 = this.value) && $0.is$SourceString);
10254 } 9912 }
10255 HLiteral.prototype.accept$1 = function($0) { 9913 HLiteral.prototype.accept$1 = function($0) {
10256 return this.accept(($0 && $0.is$HVisitor())); 9914 return this.accept($0);
10257 }; 9915 };
10258 HLiteral.prototype.isLiteralNumber$0 = function() { 9916 HLiteral.prototype.isLiteralNumber$0 = function() {
10259 return this.isLiteralNumber(); 9917 return this.isLiteralNumber();
10260 }; 9918 };
10261 HLiteral.prototype.isLiteralString$0 = function() { 9919 HLiteral.prototype.isLiteralString$0 = function() {
10262 return this.isLiteralString(); 9920 return this.isLiteralString();
10263 }; 9921 };
10264 HLiteral.prototype.toString$0 = function() { 9922 HLiteral.prototype.toString$0 = function() {
10265 return this.toString(); 9923 return this.toString();
10266 }; 9924 };
10267 // ********** Code for HParameter ************** 9925 // ********** Code for HParameter **************
10268 function HParameter(parameterIndex) { 9926 function HParameter(parameterIndex) {
10269 this.parameterIndex = parameterIndex; 9927 this.parameterIndex = parameterIndex;
10270 HInstruction.call(this, []); 9928 HInstruction.call(this, []);
10271 // Initializers done 9929 // Initializers done
10272 } 9930 }
10273 $inherits(HParameter, HInstruction); 9931 $inherits(HParameter, HInstruction);
10274 HParameter.prototype.prepareGvn = function() { 9932 HParameter.prototype.prepareGvn = function() {
10275 this.clearAllSideEffects(); 9933 this.clearAllSideEffects();
10276 } 9934 }
10277 HParameter.prototype.toString = function() { 9935 HParameter.prototype.toString = function() {
10278 return ('parameter ' + this.parameterIndex + ''); 9936 return ('parameter ' + this.parameterIndex + '');
10279 } 9937 }
10280 HParameter.prototype.accept = function(visitor) { 9938 HParameter.prototype.accept = function(visitor) {
10281 return visitor.visitParameter(this); 9939 return visitor.visitParameter(this);
10282 } 9940 }
10283 HParameter.prototype.accept$1 = function($0) { 9941 HParameter.prototype.accept$1 = function($0) {
10284 return this.accept(($0 && $0.is$HVisitor())); 9942 return this.accept($0);
10285 }; 9943 };
10286 HParameter.prototype.toString$0 = function() { 9944 HParameter.prototype.toString$0 = function() {
10287 return this.toString(); 9945 return this.toString();
10288 }; 9946 };
10289 // ********** Code for HPhi ************** 9947 // ********** Code for HPhi **************
10290 function HPhi() {} 9948 function HPhi() {}
10291 HPhi.singleInput$ctor = function(element, input) { 9949 HPhi.singleInput$ctor = function(element, input) {
10292 this.element = element; 9950 this.element = element;
10293 HInstruction.call(this, [input]); 9951 HInstruction.call(this, [input]);
10294 // Initializers done 9952 // Initializers done
10295 } 9953 }
10296 HPhi.singleInput$ctor.prototype = HPhi.prototype; 9954 HPhi.singleInput$ctor.prototype = HPhi.prototype;
10297 HPhi.manyInputs$ctor = function(element, inputs) { 9955 HPhi.manyInputs$ctor = function(element, inputs) {
10298 this.element = element; 9956 this.element = element;
10299 HInstruction.call(this, inputs); 9957 HInstruction.call(this, inputs);
10300 // Initializers done 9958 // Initializers done
10301 } 9959 }
10302 HPhi.manyInputs$ctor.prototype = HPhi.prototype; 9960 HPhi.manyInputs$ctor.prototype = HPhi.prototype;
10303 $inherits(HPhi, HInstruction); 9961 $inherits(HPhi, HInstruction);
10304 HPhi.prototype.is$HPhi = function(){return this;};
10305 HPhi.prototype.get$element = function() { return this.element; }; 9962 HPhi.prototype.get$element = function() { return this.element; };
10306 HPhi.prototype.addInput = function(input) { 9963 HPhi.prototype.addInput = function(input) {
10307 $assert(this.isInBasicBlock(), "isInBasicBlock()", "nodes.dart", 701, 12);
10308 this.inputs.add(input); 9964 this.inputs.add(input);
10309 input.get$usedBy().add(this); 9965 input.get$usedBy().add(this);
10310 } 9966 }
10311 HPhi.prototype.toString = function() { 9967 HPhi.prototype.toString = function() {
10312 return 'phi'; 9968 return 'phi';
10313 } 9969 }
10314 HPhi.prototype.accept = function(visitor) { 9970 HPhi.prototype.accept = function(visitor) {
10315 return visitor.visitPhi(this); 9971 return visitor.visitPhi(this);
10316 } 9972 }
10317 HPhi.prototype.accept$1 = function($0) { 9973 HPhi.prototype.accept$1 = function($0) {
10318 return this.accept(($0 && $0.is$HVisitor())); 9974 return this.accept($0);
10319 }; 9975 };
10320 HPhi.prototype.toString$0 = function() { 9976 HPhi.prototype.toString$0 = function() {
10321 return this.toString(); 9977 return this.toString();
10322 }; 9978 };
10323 // ********** Code for HReturn ************** 9979 // ********** Code for HReturn **************
10324 function HReturn(value) { 9980 function HReturn(value) {
10325 HControlFlow.call(this, [value]); 9981 HControlFlow.call(this, [value]);
10326 // Initializers done 9982 // Initializers done
10327 } 9983 }
10328 $inherits(HReturn, HControlFlow); 9984 $inherits(HReturn, HControlFlow);
10329 HReturn.prototype.toString = function() { 9985 HReturn.prototype.toString = function() {
10330 return 'return'; 9986 return 'return';
10331 } 9987 }
10332 HReturn.prototype.accept = function(visitor) { 9988 HReturn.prototype.accept = function(visitor) {
10333 return visitor.visitReturn(this); 9989 return visitor.visitReturn(this);
10334 } 9990 }
10335 HReturn.prototype.accept$1 = function($0) { 9991 HReturn.prototype.accept$1 = function($0) {
10336 return this.accept(($0 && $0.is$HVisitor())); 9992 return this.accept($0);
10337 }; 9993 };
10338 HReturn.prototype.toString$0 = function() { 9994 HReturn.prototype.toString$0 = function() {
10339 return this.toString(); 9995 return this.toString();
10340 }; 9996 };
10341 // ********** Code for HThrow ************** 9997 // ********** Code for HThrow **************
10342 function HThrow(value) { 9998 function HThrow(value) {
10343 HControlFlow.call(this, [value]); 9999 HControlFlow.call(this, [value]);
10344 // Initializers done 10000 // Initializers done
10345 } 10001 }
10346 $inherits(HThrow, HControlFlow); 10002 $inherits(HThrow, HControlFlow);
10347 HThrow.prototype.toString = function() { 10003 HThrow.prototype.toString = function() {
10348 return 'throw'; 10004 return 'throw';
10349 } 10005 }
10350 HThrow.prototype.accept = function(visitor) { 10006 HThrow.prototype.accept = function(visitor) {
10351 return visitor.visitThrow(this); 10007 return visitor.visitThrow(this);
10352 } 10008 }
10353 HThrow.prototype.accept$1 = function($0) { 10009 HThrow.prototype.accept$1 = function($0) {
10354 return this.accept(($0 && $0.is$HVisitor())); 10010 return this.accept($0);
10355 }; 10011 };
10356 HThrow.prototype.toString$0 = function() { 10012 HThrow.prototype.toString$0 = function() {
10357 return this.toString(); 10013 return this.toString();
10358 }; 10014 };
10359 // ********** Code for SsaOptimizerTask ************** 10015 // ********** Code for SsaOptimizerTask **************
10360 function SsaOptimizerTask(compiler) { 10016 function SsaOptimizerTask(compiler) {
10361 CompilerTask.call(this, compiler); 10017 CompilerTask.call(this, compiler);
10362 // Initializers done 10018 // Initializers done
10363 } 10019 }
10364 $inherits(SsaOptimizerTask, CompilerTask); 10020 $inherits(SsaOptimizerTask, CompilerTask);
(...skipping 15 matching lines...) Expand all
10380 } 10036 }
10381 $inherits(SsaConstantFolder, HBaseVisitor); 10037 $inherits(SsaConstantFolder, HBaseVisitor);
10382 SsaConstantFolder.prototype.visitGraph = function(graph) { 10038 SsaConstantFolder.prototype.visitGraph = function(graph) {
10383 this.visitDominatorTree(graph); 10039 this.visitDominatorTree(graph);
10384 } 10040 }
10385 SsaConstantFolder.prototype.visitBasicBlock = function(block) { 10041 SsaConstantFolder.prototype.visitBasicBlock = function(block) {
10386 var instruction = block.first; 10042 var instruction = block.first;
10387 while (instruction != null) { 10043 while (instruction != null) {
10388 var replacement = instruction.accept(this); 10044 var replacement = instruction.accept(this);
10389 if (replacement !== instruction) { 10045 if (replacement !== instruction) {
10390 block.addAfter(instruction, (replacement && replacement.is$HInstruction()) ); 10046 block.addAfter(instruction, replacement);
10391 block.rewrite(instruction, (replacement && replacement.is$HInstruction())) ; 10047 block.rewrite(instruction, replacement);
10392 block.remove(instruction); 10048 block.remove(instruction);
10393 } 10049 }
10394 instruction = instruction.next; 10050 instruction = instruction.next;
10395 } 10051 }
10396 } 10052 }
10397 SsaConstantFolder.prototype.visitInstruction = function(node) { 10053 SsaConstantFolder.prototype.visitInstruction = function(node) {
10398 return node; 10054 return node;
10399 } 10055 }
10400 SsaConstantFolder.prototype.visitEquals = function(node) { 10056 SsaConstantFolder.prototype.visitEquals = function(node) {
10401 var $0;
10402 var inputs = node.inputs; 10057 var inputs = node.inputs;
10403 if ((inputs.$index(0) instanceof HLiteral) && (inputs.$index(1) instanceof HLi teral)) { 10058 if ((inputs.$index(0) instanceof HLiteral) && (inputs.$index(1) instanceof HLi teral)) {
10404 var op1 = (($0 = inputs.$index(0)) && $0.is$HLiteral()); 10059 var op1 = inputs.$index(0);
10405 var op2 = (($0 = inputs.$index(1)) && $0.is$HLiteral()); 10060 var op2 = inputs.$index(1);
10406 return new HLiteral($eq(op1.value, op2.value)); 10061 return new HLiteral($eq(op1.value, op2.value));
10407 } 10062 }
10408 return node; 10063 return node;
10409 } 10064 }
10410 SsaConstantFolder.prototype.visitArithmetic = function(node) { 10065 SsaConstantFolder.prototype.visitArithmetic = function(node) {
10411 var $0;
10412 var inputs = node.inputs; 10066 var inputs = node.inputs;
10413 $assert(inputs.length == 2, "inputs.length == 2", "optimize.dart", 57, 12); 10067 if (inputs.$index(0).isLiteralNumber$0() && inputs.$index(1).isLiteralNumber$0 ()) {
10414 if ($notnull_bool(inputs.$index(0).isLiteralNumber$0()) && $notnull_bool(input s.$index(1).isLiteralNumber$0())) { 10068 var op1 = inputs.$index(0);
10415 var op1 = (($0 = inputs.$index(0)) && $0.is$HLiteral()); 10069 var op2 = inputs.$index(1);
10416 var op2 = (($0 = inputs.$index(1)) && $0.is$HLiteral());
10417 try { 10070 try {
10418 var folded = node.evaluate($assert_num(op1.value), $assert_num(op2.value)) ; 10071 var folded = node.evaluate(op1.value, op2.value);
10419 return new HLiteral(folded); 10072 return new HLiteral(folded);
10420 } catch (e) { 10073 } catch (e) {
10421 e = $toDartException(e); 10074 e = $toDartException(e);
10422 if (!(e instanceof IntegerDivisionByZeroException)) throw e; 10075 if (!(e instanceof IntegerDivisionByZeroException)) throw e;
10423 return node; 10076 return node;
10424 } 10077 }
10425 } 10078 }
10426 return node; 10079 return node;
10427 } 10080 }
10428 SsaConstantFolder.prototype.visitAdd = function(node) { 10081 SsaConstantFolder.prototype.visitAdd = function(node) {
10429 var $0; 10082 if (node.inputs.$index(0).isLiteralString$0()) {
10430 if ($notnull_bool(node.inputs.$index(0).isLiteralString$0())) { 10083 var op1 = node.inputs.$index(0);
10431 var op1 = (($0 = node.inputs.$index(0)) && $0.is$HLiteral()); 10084 var op2 = node.inputs.$index(1);
10432 var op2 = (($0 = node.inputs.$index(1)) && $0.is$HLiteral());
10433 return new HLiteral(new StringWrapper(("" + op1.value + " + " + op2.value + ""))); 10085 return new HLiteral(new StringWrapper(("" + op1.value + " + " + op2.value + "")));
10434 } 10086 }
10435 return this.visitArithmetic(node); 10087 return this.visitArithmetic(node);
10436 } 10088 }
10437 // ********** Code for SsaDeadCodeEliminator ************** 10089 // ********** Code for SsaDeadCodeEliminator **************
10438 function SsaDeadCodeEliminator() { 10090 function SsaDeadCodeEliminator() {
10439 HGraphVisitor.call(this); 10091 HGraphVisitor.call(this);
10440 // Initializers done 10092 // Initializers done
10441 } 10093 }
10442 $inherits(SsaDeadCodeEliminator, HGraphVisitor); 10094 $inherits(SsaDeadCodeEliminator, HGraphVisitor);
10443 SsaDeadCodeEliminator.isDeadCode = function(instruction) { 10095 SsaDeadCodeEliminator.isDeadCode = function(instruction) {
10444 return !$notnull_bool(instruction.hasSideEffects()) && instruction.get$usedBy( ).isEmpty(); 10096 return !instruction.hasSideEffects() && instruction.get$usedBy().isEmpty();
10445 } 10097 }
10446 SsaDeadCodeEliminator.prototype.visitGraph = function(graph) { 10098 SsaDeadCodeEliminator.prototype.visitGraph = function(graph) {
10447 this.visitPostDominatorTree(graph); 10099 this.visitPostDominatorTree(graph);
10448 } 10100 }
10449 SsaDeadCodeEliminator.prototype.visitBasicBlock = function(block) { 10101 SsaDeadCodeEliminator.prototype.visitBasicBlock = function(block) {
10450 var instruction = block.last; 10102 var instruction = block.last;
10451 while (instruction != null) { 10103 while (instruction != null) {
10452 var previous = instruction.previous; 10104 var previous = instruction.previous;
10453 if ($notnull_bool(SsaDeadCodeEliminator.isDeadCode(instruction))) block.remo ve(instruction); 10105 if (SsaDeadCodeEliminator.isDeadCode(instruction)) block.remove(instruction) ;
10454 instruction = (previous && previous.is$HInstruction()); 10106 instruction = previous;
10455 } 10107 }
10456 } 10108 }
10457 // ********** Code for SsaInstructionMerger ************** 10109 // ********** Code for SsaInstructionMerger **************
10458 function SsaInstructionMerger() { 10110 function SsaInstructionMerger() {
10459 HInstructionVisitor.call(this); 10111 HInstructionVisitor.call(this);
10460 // Initializers done 10112 // Initializers done
10461 } 10113 }
10462 $inherits(SsaInstructionMerger, HInstructionVisitor); 10114 $inherits(SsaInstructionMerger, HInstructionVisitor);
10463 SsaInstructionMerger.prototype.visitGraph = function(graph) { 10115 SsaInstructionMerger.prototype.visitGraph = function(graph) {
10464 this.visitDominatorTree(graph); 10116 this.visitDominatorTree(graph);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
10538 } 10190 }
10539 } 10191 }
10540 HTracer.prototype.addInstructions = function(block) { 10192 HTracer.prototype.addInstructions = function(block) {
10541 var stringifier = new HInstructionStringifier(block); 10193 var stringifier = new HInstructionStringifier(block);
10542 for (var instruction = block.first; 10194 for (var instruction = block.first;
10543 instruction != null; instruction = instruction.next) { 10195 instruction != null; instruction = instruction.next) {
10544 var bci = 0; 10196 var bci = 0;
10545 var uses = instruction.get$usedBy().length; 10197 var uses = instruction.get$usedBy().length;
10546 this.addIndent(); 10198 this.addIndent();
10547 var temporaryId = stringifier.temporaryId(instruction); 10199 var temporaryId = stringifier.temporaryId(instruction);
10548 var instructionString = $assert_String(stringifier.visit(instruction)); 10200 var instructionString = stringifier.visit(instruction);
10549 this.add(("" + bci + " " + uses + " " + temporaryId + " " + instructionStrin g + " <|@\n")); 10201 this.add(("" + bci + " " + uses + " " + temporaryId + " " + instructionStrin g + " <|@\n"));
10550 } 10202 }
10551 } 10203 }
10552 HTracer.prototype.visitBasicBlock = function(block) { 10204 HTracer.prototype.visitBasicBlock = function(block) {
10553 var $this = this; // closure support 10205 var $this = this; // closure support
10554 $assert(block.id != null, "block.id !== null", "tracer.dart", 75, 12);
10555 this.tag("block", (function () { 10206 this.tag("block", (function () {
10556 $this.printProperty("name", ("B" + block.id + "")); 10207 $this.printProperty("name", ("B" + block.id + ""));
10557 $this.printProperty("from_bci", -1); 10208 $this.printProperty("from_bci", -1);
10558 $this.printProperty("to_bci", -1); 10209 $this.printProperty("to_bci", -1);
10559 $this.addPredecessors(block); 10210 $this.addPredecessors(block);
10560 $this.addSuccessors(block); 10211 $this.addSuccessors(block);
10561 $this.printEmptyProperty("xhandlers"); 10212 $this.printEmptyProperty("xhandlers");
10562 $this.printEmptyProperty("flags"); 10213 $this.printEmptyProperty("flags");
10563 if (block.dominator != null) { 10214 if (block.dominator != null) {
10564 $this.printProperty("dominator", ("B" + block.dominator.id + "")); 10215 $this.printProperty("dominator", ("B" + block.dominator.id + ""));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
10607 HTracer.prototype.addIndent = function() { 10258 HTracer.prototype.addIndent = function() {
10608 for (var i = 0; 10259 for (var i = 0;
10609 i < this.indent; i++) { 10260 i < this.indent; i++) {
10610 this.add(" "); 10261 this.add(" ");
10611 } 10262 }
10612 } 10263 }
10613 HTracer.prototype.toString = function() { 10264 HTracer.prototype.toString = function() {
10614 return this.output.toString(); 10265 return this.output.toString();
10615 } 10266 }
10616 HTracer.prototype.add$1 = function($0) { 10267 HTracer.prototype.add$1 = function($0) {
10617 return this.add($assert_String($0)); 10268 return this.add($0);
10618 }; 10269 };
10619 HTracer.prototype.toString$0 = function() { 10270 HTracer.prototype.toString$0 = function() {
10620 return this.toString(); 10271 return this.toString();
10621 }; 10272 };
10622 // ********** Code for HInstructionStringifier ************** 10273 // ********** Code for HInstructionStringifier **************
10623 function HInstructionStringifier(currentBlock) { 10274 function HInstructionStringifier(currentBlock) {
10624 this.currentBlock = currentBlock; 10275 this.currentBlock = currentBlock;
10625 // Initializers done 10276 // Initializers done
10626 } 10277 }
10627 HInstructionStringifier.prototype.is$HVisitor = function(){return this;};
10628 HInstructionStringifier.prototype.visit = function(node) { 10278 HInstructionStringifier.prototype.visit = function(node) {
10629 return node.accept(this); 10279 return node.accept(this);
10630 } 10280 }
10631 HInstructionStringifier.prototype.visitBasicBlock = function(node) { 10281 HInstructionStringifier.prototype.visitBasicBlock = function(node) {
10632 unreachable(); 10282 unreachable();
10633 } 10283 }
10634 HInstructionStringifier.prototype.temporaryId = function(instruction) { 10284 HInstructionStringifier.prototype.temporaryId = function(instruction) {
10635 return ("v" + instruction.id + ""); 10285 return ("v" + instruction.id + "");
10636 } 10286 }
10637 HInstructionStringifier.prototype.visitAdd = function(node) { 10287 HInstructionStringifier.prototype.visitAdd = function(node) {
10638 return this.visitInvoke(node); 10288 return this.visitInvoke(node);
10639 } 10289 }
10640 HInstructionStringifier.prototype.visitDivide = function(node) { 10290 HInstructionStringifier.prototype.visitDivide = function(node) {
10641 return this.visitInvoke(node); 10291 return this.visitInvoke(node);
10642 } 10292 }
10643 HInstructionStringifier.prototype.visitEquals = function(node) { 10293 HInstructionStringifier.prototype.visitEquals = function(node) {
10644 return this.visitInvoke(node); 10294 return this.visitInvoke(node);
10645 } 10295 }
10646 HInstructionStringifier.prototype.visitExit = function(node) { 10296 HInstructionStringifier.prototype.visitExit = function(node) {
10647 return "exit"; 10297 return "exit";
10648 } 10298 }
10649 HInstructionStringifier.prototype.visitGoto = function(node) { 10299 HInstructionStringifier.prototype.visitGoto = function(node) {
10650 var $0; 10300 var target = this.currentBlock.successors.$index(0);
10651 var target = (($0 = this.currentBlock.successors.$index(0)) && $0.is$HBasicBlo ck());
10652 return ("Goto: (B" + target.id + ")"); 10301 return ("Goto: (B" + target.id + ")");
10653 } 10302 }
10654 HInstructionStringifier.prototype.visitIf = function(node) { 10303 HInstructionStringifier.prototype.visitIf = function(node) {
10655 var $0; 10304 var thenBlock = this.currentBlock.successors.$index(0);
10656 var thenBlock = (($0 = this.currentBlock.successors.$index(0)) && $0.is$HBasic Block()); 10305 var elseBlock = this.currentBlock.successors.$index(1);
10657 var elseBlock = (($0 = this.currentBlock.successors.$index(1)) && $0.is$HBasic Block()); 10306 var conditionId = this.temporaryId(node.inputs.$index(0));
10658 var conditionId = this.temporaryId((($0 = node.inputs.$index(0)) && $0.is$HIns truction()));
10659 return ("If (" + conditionId + "): (B" + thenBlock.id + ") else (B" + elseBloc k.id + ")"); 10307 return ("If (" + conditionId + "): (B" + thenBlock.id + ") else (B" + elseBloc k.id + ")");
10660 } 10308 }
10661 HInstructionStringifier.prototype.visitGenericInvoke = function(invokeType, invo ke) { 10309 HInstructionStringifier.prototype.visitGenericInvoke = function(invokeType, invo ke) {
10662 var $0;
10663 var arguments = new StringBufferImpl(""); 10310 var arguments = new StringBufferImpl("");
10664 for (var i = 0; 10311 for (var i = 0;
10665 i < invoke.inputs.length; i++) { 10312 i < invoke.inputs.length; i++) {
10666 if (i != 0) arguments.add(", "); 10313 if (i != 0) arguments.add(", ");
10667 arguments.add(this.temporaryId((($0 = invoke.inputs.$index(i)) && $0.is$HIns truction()))); 10314 arguments.add(this.temporaryId(invoke.inputs.$index(i)));
10668 } 10315 }
10669 return ("" + invokeType + ": " + invoke.element.name + "(" + arguments + ")"); 10316 return ("" + invokeType + ": " + invoke.element.name + "(" + arguments + ")");
10670 } 10317 }
10671 HInstructionStringifier.prototype.visitInvoke = function(invoke) { 10318 HInstructionStringifier.prototype.visitInvoke = function(invoke) {
10672 return this.visitGenericInvoke("Invoke", invoke); 10319 return this.visitGenericInvoke("Invoke", invoke);
10673 } 10320 }
10674 HInstructionStringifier.prototype.visitInvokeForeign = function(invoke) { 10321 HInstructionStringifier.prototype.visitInvokeForeign = function(invoke) {
10675 return this.visitGenericInvoke("InvokeForeign", invoke); 10322 return this.visitGenericInvoke("InvokeForeign", invoke);
10676 } 10323 }
10677 HInstructionStringifier.prototype.visitLiteral = function(literal) { 10324 HInstructionStringifier.prototype.visitLiteral = function(literal) {
10678 return ("Literal " + literal.value + ""); 10325 return ("Literal " + literal.value + "");
10679 } 10326 }
10680 HInstructionStringifier.prototype.visitLoopBranch = function(branch) { 10327 HInstructionStringifier.prototype.visitLoopBranch = function(branch) {
10681 var $0; 10328 var bodyBlock = this.currentBlock.successors.$index(0);
10682 var bodyBlock = (($0 = this.currentBlock.successors.$index(0)) && $0.is$HBasic Block()); 10329 var exitBlock = this.currentBlock.successors.$index(1);
10683 var exitBlock = (($0 = this.currentBlock.successors.$index(1)) && $0.is$HBasic Block()); 10330 var conditionId = this.temporaryId(branch.inputs.$index(0));
10684 var conditionId = this.temporaryId((($0 = branch.inputs.$index(0)) && $0.is$HI nstruction()));
10685 return ("While (" + conditionId + "): (B" + bodyBlock.id + ") then (B" + exitB lock.id + ")"); 10331 return ("While (" + conditionId + "): (B" + bodyBlock.id + ") then (B" + exitB lock.id + ")");
10686 } 10332 }
10687 HInstructionStringifier.prototype.visitMultiply = function(node) { 10333 HInstructionStringifier.prototype.visitMultiply = function(node) {
10688 return this.visitInvoke(node); 10334 return this.visitInvoke(node);
10689 } 10335 }
10690 HInstructionStringifier.prototype.visitParameter = function(node) { 10336 HInstructionStringifier.prototype.visitParameter = function(node) {
10691 return ("p" + node.parameterIndex + ""); 10337 return ("p" + node.parameterIndex + "");
10692 } 10338 }
10693 HInstructionStringifier.prototype.visitPhi = function(phi) { 10339 HInstructionStringifier.prototype.visitPhi = function(phi) {
10694 var $0; 10340 return ("Phi(" + this.temporaryId(phi.inputs.$index(0)) + ", " + this.temporar yId(phi.inputs.$index(1)) + ")");
10695 return ("Phi(" + this.temporaryId((($0 = phi.inputs.$index(0)) && $0.is$HInstr uction())) + ", " + this.temporaryId((($0 = phi.inputs.$index(1)) && $0.is$HInst ruction())) + ")");
10696 } 10341 }
10697 HInstructionStringifier.prototype.visitReturn = function(node) { 10342 HInstructionStringifier.prototype.visitReturn = function(node) {
10698 var $0; 10343 return ("Return " + this.temporaryId(node.inputs.$index(0)) + "");
10699 return ("Return " + this.temporaryId((($0 = node.inputs.$index(0)) && $0.is$HI nstruction())) + "");
10700 } 10344 }
10701 HInstructionStringifier.prototype.visitSubtract = function(node) { 10345 HInstructionStringifier.prototype.visitSubtract = function(node) {
10702 return this.visitInvoke(node); 10346 return this.visitInvoke(node);
10703 } 10347 }
10704 HInstructionStringifier.prototype.visitThrow = function(node) { 10348 HInstructionStringifier.prototype.visitThrow = function(node) {
10705 var $0; 10349 return ("Throw " + this.temporaryId(node.inputs.$index(0)) + "");
10706 return ("Throw " + this.temporaryId((($0 = node.inputs.$index(0)) && $0.is$HIn struction())) + "");
10707 } 10350 }
10708 HInstructionStringifier.prototype.visitTruncatingDivide = function(node) { 10351 HInstructionStringifier.prototype.visitTruncatingDivide = function(node) {
10709 return this.visitInvoke(node); 10352 return this.visitInvoke(node);
10710 } 10353 }
10711 HInstructionStringifier.prototype.visit$1 = function($0) { 10354 HInstructionStringifier.prototype.visit$1 = function($0) {
10712 return this.visit(($0 && $0.is$HInstruction())); 10355 return this.visit($0);
10713 }; 10356 };
10714 // ********** Code for HValidator ************** 10357 // ********** Code for HValidator **************
10715 function HValidator() { 10358 function HValidator() {
10716 this.isValid = true 10359 this.isValid = true
10717 HInstructionVisitor.call(this); 10360 HInstructionVisitor.call(this);
10718 // Initializers done 10361 // Initializers done
10719 } 10362 }
10720 $inherits(HValidator, HInstructionVisitor); 10363 $inherits(HValidator, HInstructionVisitor);
10721 HValidator.prototype.visitGraph = function(graph) { 10364 HValidator.prototype.visitGraph = function(graph) {
10722 this.graph = graph; 10365 this.graph = graph;
10723 this.visitDominatorTree(graph); 10366 this.visitDominatorTree(graph);
10724 } 10367 }
10725 HValidator.prototype.markInvalid = function(reason) { 10368 HValidator.prototype.markInvalid = function(reason) {
10726 print(reason); 10369 print(reason);
10727 this.isValid = false; 10370 this.isValid = false;
10728 } 10371 }
10729 HValidator.prototype.visitBasicBlock = function(block) { 10372 HValidator.prototype.visitBasicBlock = function(block) {
10730 if (!$notnull_bool(this.isValid)) return; 10373 if (!this.isValid) return;
10731 if (block.first == null || block.last == null) { 10374 if (block.first == null || block.last == null) {
10732 this.markInvalid("empty block"); 10375 this.markInvalid("empty block");
10733 } 10376 }
10734 if (!(block.last instanceof HControlFlow)) { 10377 if (!(block.last instanceof HControlFlow)) {
10735 this.markInvalid("block ends with non-tail node."); 10378 this.markInvalid("block ends with non-tail node.");
10736 } 10379 }
10737 if ((block.last instanceof HIf) && block.successors.length != 2) { 10380 if ((block.last instanceof HIf) && block.successors.length != 2) {
10738 this.markInvalid("If node without two successors"); 10381 this.markInvalid("If node without two successors");
10739 } 10382 }
10740 if ((block.last instanceof HConditionalBranch) && block.successors.length != 2 ) { 10383 if ((block.last instanceof HConditionalBranch) && block.successors.length != 2 ) {
10741 this.markInvalid("Conditional node without two successors"); 10384 this.markInvalid("Conditional node without two successors");
10742 } 10385 }
10743 if ((block.last instanceof HGoto) && block.successors.length != 1) { 10386 if ((block.last instanceof HGoto) && block.successors.length != 1) {
10744 this.markInvalid("Goto node without one successor"); 10387 this.markInvalid("Goto node without one successor");
10745 } 10388 }
10746 if ((block.last instanceof HReturn) && (block.successors.length != 1 || !$notn ull_bool(block.successors.$index(0).isExitBlock$0()))) { 10389 if ((block.last instanceof HReturn) && (block.successors.length != 1 || !block .successors.$index(0).isExitBlock$0())) {
10747 this.markInvalid("Return node with > 1 succesor or not going to exit-block") ; 10390 this.markInvalid("Return node with > 1 succesor or not going to exit-block") ;
10748 } 10391 }
10749 if ((block.last instanceof HExit) && !block.successors.isEmpty()) { 10392 if ((block.last instanceof HExit) && !block.successors.isEmpty()) {
10750 this.markInvalid("Exit block with successor"); 10393 this.markInvalid("Exit block with successor");
10751 } 10394 }
10752 if ((block.last instanceof HThrow) && !block.successors.isEmpty()) { 10395 if ((block.last instanceof HThrow) && !block.successors.isEmpty()) {
10753 this.markInvalid("Throw block with successor"); 10396 this.markInvalid("Throw block with successor");
10754 } 10397 }
10755 if (block.successors.isEmpty() && !(block.last instanceof HThrow) && !$notnull _bool(block.isExitBlock())) { 10398 if (block.successors.isEmpty() && !(block.last instanceof HThrow) && !block.is ExitBlock()) {
10756 this.markInvalid("Non-exit or throw block without successor"); 10399 this.markInvalid("Non-exit or throw block without successor");
10757 } 10400 }
10758 if (block.id == null) this.markInvalid("block without id"); 10401 if (block.id == null) this.markInvalid("block without id");
10759 var $list = block.successors; 10402 var $list = block.successors;
10760 for (var $i = 0;$i < $list.length; $i++) { 10403 for (var $i = 0;$i < $list.length; $i++) {
10761 var successor = $list.$index($i); 10404 var successor = $list.$index($i);
10762 if (!$notnull_bool(this.isValid)) break; 10405 if (!this.isValid) break;
10763 if (successor.id == null) this.markInvalid("successor without id"); 10406 if (successor.id == null) this.markInvalid("successor without id");
10764 if (successor.id <= block.id && !$notnull_bool(successor.isLoopHeader)) { 10407 if (successor.id <= block.id && !successor.isLoopHeader) {
10765 this.markInvalid("successor with lower id, but not a loop-header"); 10408 this.markInvalid("successor with lower id, but not a loop-header");
10766 } 10409 }
10767 } 10410 }
10768 var lastId = 0; 10411 var lastId = 0;
10769 var $list = block.dominatedBlocks; 10412 var $list = block.dominatedBlocks;
10770 for (var $i = 0;$i < $list.length; $i++) { 10413 for (var $i = 0;$i < $list.length; $i++) {
10771 var dominated = $list.$index($i); 10414 var dominated = $list.$index($i);
10772 if (!$notnull_bool(this.isValid)) break; 10415 if (!this.isValid) break;
10773 if (dominated.dominator !== block) { 10416 if (dominated.dominator !== block) {
10774 this.markInvalid("dominated block not pointing back"); 10417 this.markInvalid("dominated block not pointing back");
10775 } 10418 }
10776 if (dominated.id == null || dominated.id <= lastId) { 10419 if (dominated.id == null || dominated.id <= lastId) {
10777 this.markInvalid("dominated.id === null or dominated has <= id"); 10420 this.markInvalid("dominated.id === null or dominated has <= id");
10778 } 10421 }
10779 lastId = dominated.id; 10422 lastId = dominated.id;
10780 } 10423 }
10781 if (!$notnull_bool(this.isValid)) return; 10424 if (!this.isValid) return;
10782 HInstructionVisitor.prototype.visitBasicBlock.call(this, block); 10425 HInstructionVisitor.prototype.visitBasicBlock.call(this, block);
10783 } 10426 }
10784 HValidator.countInstruction = function(instructions, instruction) { 10427 HValidator.countInstruction = function(instructions, instruction) {
10785 var result = 0; 10428 var result = 0;
10786 for (var i = 0; 10429 for (var i = 0;
10787 i < instructions.length; i++) { 10430 i < instructions.length; i++) {
10788 if (instructions.$index(i) === instruction) result++; 10431 if (instructions.$index(i) === instruction) result++;
10789 } 10432 }
10790 return result; 10433 return result;
10791 } 10434 }
10792 HValidator.everyInstruction = function(instructions, f) { 10435 HValidator.everyInstruction = function(instructions, f) {
10793 var copy = ListFactory.ListFactory$from$factory(instructions); 10436 var copy = ListFactory.ListFactory$from$factory(instructions);
10794 for (var i = 0; 10437 for (var i = 0;
10795 i < copy.length; i++) { 10438 i < copy.length; i++) {
10796 var current = copy.$index(i); 10439 var current = copy.$index(i);
10797 if (current == null) continue; 10440 if (current == null) continue;
10798 var count = 1; 10441 var count = 1;
10799 for (var j = i + 1; 10442 for (var j = i + 1;
10800 j < copy.length; j++) { 10443 j < copy.length; j++) {
10801 if (copy.$index(j) === current) { 10444 if (copy.$index(j) === current) {
10802 copy.$setindex(j); 10445 copy.$setindex(j);
10803 count++; 10446 count++;
10804 } 10447 }
10805 } 10448 }
10806 if (!$notnull_bool(f.call$2(current, count))) return false; 10449 if (!f.call$2(current, count)) return false;
10807 } 10450 }
10808 return true; 10451 return true;
10809 } 10452 }
10810 HValidator.prototype.visitInstruction = function(instruction) { 10453 HValidator.prototype.visitInstruction = function(instruction) {
10811 var $this = this; // closure support 10454 var $this = this; // closure support
10812 function hasCorrectInputs(instruction) { 10455 function hasCorrectInputs(instruction) {
10813 var inBasicBlock = $assert_bool(instruction.isInBasicBlock$0()); 10456 var inBasicBlock = instruction.isInBasicBlock$0();
10814 return HValidator.everyInstruction(instruction.inputs, (function (input, cou nt) { 10457 return HValidator.everyInstruction(instruction.inputs, (function (input, cou nt) {
10815 if ($notnull_bool(inBasicBlock)) { 10458 if (inBasicBlock) {
10816 return HValidator.countInstruction(input.get$usedBy(), (instruction && i nstruction.is$HInstruction())) == count; 10459 return HValidator.countInstruction(input.get$usedBy(), instruction) == c ount;
10817 } 10460 }
10818 else { 10461 else {
10819 return HValidator.countInstruction(input.get$usedBy(), (instruction && i nstruction.is$HInstruction())) == 0; 10462 return HValidator.countInstruction(input.get$usedBy(), instruction) == 0 ;
10820 } 10463 }
10821 }) 10464 })
10822 ); 10465 );
10823 } 10466 }
10824 function hasCorrectUses(instruction) { 10467 function hasCorrectUses(instruction) {
10825 if (!$notnull_bool(instruction.isInBasicBlock$0())) return true; 10468 if (!instruction.isInBasicBlock$0()) return true;
10826 return HValidator.everyInstruction(instruction.get$usedBy(), (function (use, count) { 10469 return HValidator.everyInstruction(instruction.get$usedBy(), (function (use, count) {
10827 return HValidator.countInstruction(use.inputs, (instruction && instruction .is$HInstruction())) == count; 10470 return HValidator.countInstruction(use.inputs, instruction) == count;
10828 }) 10471 })
10829 ); 10472 );
10830 } 10473 }
10831 this.isValid = $notnull_bool(this.isValid) && $notnull_bool(hasCorrectInputs(i nstruction)) && $notnull_bool(hasCorrectUses(instruction)); 10474 this.isValid = this.isValid && hasCorrectInputs(instruction) && hasCorrectUses (instruction);
10832 } 10475 }
10833 // ********** Code for top level ************** 10476 // ********** Code for top level **************
10834 // ********** Library leg ************** 10477 // ********** Library leg **************
10835 // ********** Code for WorldCompiler ************** 10478 // ********** Code for WorldCompiler **************
10836 function WorldCompiler(world, script) { 10479 function WorldCompiler(world, script) {
10837 this.world = world; 10480 this.world = world;
10838 Compiler.call(this, script); 10481 Compiler.call(this, script);
10839 // Initializers done 10482 // Initializers done
10840 } 10483 }
10841 $inherits(WorldCompiler, Compiler); 10484 $inherits(WorldCompiler, Compiler);
10842 WorldCompiler.prototype.log = function(message) { 10485 WorldCompiler.prototype.log = function(message) {
10843 if ($notnull_bool(options.showInfo)) { 10486 if (options.showInfo) {
10844 this.world.info(('[leg] ' + message + '')); 10487 this.world.info(('[leg] ' + message + ''));
10845 } 10488 }
10846 } 10489 }
10847 WorldCompiler.prototype.run = function() { 10490 WorldCompiler.prototype.run = function() {
10848 var success = Compiler.prototype.run.call(this); 10491 var success = Compiler.prototype.run.call(this);
10849 if ($notnull_bool(success)) { 10492 if (success) {
10850 var code = this.getGeneratedCode(); 10493 var code = this.getGeneratedCode();
10851 this.world.legCode = $assert_String(code); 10494 this.world.legCode = code;
10852 this.world.jsBytesWritten = code.length; 10495 this.world.jsBytesWritten = code.length;
10853 var $list = this.tasks; 10496 var $list = this.tasks;
10854 for (var $i0 = 0;$i0 < $list.length; $i0++) { 10497 for (var $i0 = 0;$i0 < $list.length; $i0++) {
10855 var task = $list.$index($i0); 10498 var task = $list.$index($i0);
10856 this.log(('' + task.get$name() + ' took ' + task.get$timing() + 'msec')); 10499 this.log(('' + task.get$name() + ' took ' + task.get$timing() + 'msec'));
10857 } 10500 }
10858 } 10501 }
10859 return success; 10502 return success;
10860 } 10503 }
10861 WorldCompiler.prototype.spanFromNode = function(node) { 10504 WorldCompiler.prototype.spanFromNode = function(node) {
10862 var begin = node.getBeginToken(); 10505 var begin = node.getBeginToken();
10863 var end = node.getEndToken(); 10506 var end = node.getEndToken();
10864 if (begin == null || end == null) { 10507 if (begin == null || end == null) {
10865 this.cancel(('cannot find tokens to produce error message for ' + node + '.' )); 10508 this.cancel(('cannot find tokens to produce error message for ' + node + '.' ));
10866 } 10509 }
10867 var startOffset = begin.get$charOffset(); 10510 var startOffset = begin.get$charOffset();
10868 var endOffset = end.get$charOffset() + end.toString$0().length; 10511 var endOffset = end.get$charOffset() + end.toString$0().length;
10869 return new SourceSpan(this.script.file, startOffset, endOffset); 10512 return new SourceSpan(this.script.file, startOffset, endOffset);
10870 } 10513 }
10871 WorldCompiler.prototype.reportWarning = function(node, message) { 10514 WorldCompiler.prototype.reportWarning = function(node, message) {
10872 var $0; 10515 this.world.warning(('' + message + '.'), this.spanFromNode(node));
10873 this.world.warning(('' + message + '.'), (($0 = this.spanFromNode(node)) && $0 .is$SourceSpan()));
10874 } 10516 }
10875 // ********** Code for Compiler ************** 10517 // ********** Code for Compiler **************
10876 function Compiler(script) { 10518 function Compiler(script) {
10877 this.script = script; 10519 this.script = script;
10878 // Initializers done 10520 // Initializers done
10879 this.universe = new Universe(); 10521 this.universe = new Universe();
10880 this.worklist = new DoubleLinkedQueue(); 10522 this.worklist = new DoubleLinkedQueue();
10881 this.scanner = new ScannerTask(this); 10523 this.scanner = new ScannerTask(this);
10882 this.parser = new ParserTask(this); 10524 this.parser = new ParserTask(this);
10883 this.resolver = new ResolverTask(this); 10525 this.resolver = new ResolverTask(this);
10884 this.checker = new TypeCheckerTask(this); 10526 this.checker = new TypeCheckerTask(this);
10885 this.builder = new SsaBuilderTask(this); 10527 this.builder = new SsaBuilderTask(this);
10886 this.optimizer = new SsaOptimizerTask(this); 10528 this.optimizer = new SsaOptimizerTask(this);
10887 this.generator = new SsaCodeGeneratorTask(this); 10529 this.generator = new SsaCodeGeneratorTask(this);
10888 this.tasks = [this.scanner, this.parser, this.resolver, this.checker, this.bui lder, this.optimizer, this.generator]; 10530 this.tasks = [this.scanner, this.parser, this.resolver, this.checker, this.bui lder, this.optimizer, this.generator];
10889 } 10531 }
10890 Compiler.prototype.is$Compiler = function(){return this;};
10891 Compiler.prototype.ensure = function(condition) { 10532 Compiler.prototype.ensure = function(condition) {
10892 if (!$notnull_bool(condition)) this.cancel('failed assertion in leg'); 10533 if (!condition) this.cancel('failed assertion in leg');
10893 } 10534 }
10894 Compiler.prototype.unimplemented = function(methodName) { 10535 Compiler.prototype.unimplemented = function(methodName) {
10895 this.cancel(("" + methodName + " not implemented")); 10536 this.cancel(("" + methodName + " not implemented"));
10896 } 10537 }
10897 Compiler.prototype.cancel = function(reason) { 10538 Compiler.prototype.cancel = function(reason) {
10898 $throw(new CompilerCancelledException(reason)); 10539 $throw(new CompilerCancelledException(reason));
10899 } 10540 }
10900 Compiler.prototype.log = function(message) { 10541 Compiler.prototype.log = function(message) {
10901 10542
10902 } 10543 }
(...skipping 16 matching lines...) Expand all
10919 return true; 10560 return true;
10920 } 10561 }
10921 Compiler.prototype.scanCoreLibrary = function() { 10562 Compiler.prototype.scanCoreLibrary = function() {
10922 var fileName = join([options.libDir, '..', 'leg', 'lib', 'core.dart']); 10563 var fileName = join([options.libDir, '..', 'leg', 'lib', 'core.dart']);
10923 var file = readSync(fileName); 10564 var file = readSync(fileName);
10924 this.scanner.scan(new leg_Script(file)); 10565 this.scanner.scan(new leg_Script(file));
10925 var element = new ForeignElement(const$241/*const SourceString('JS')*/); 10566 var element = new ForeignElement(const$241/*const SourceString('JS')*/);
10926 this.universe.define(element); 10567 this.universe.define(element);
10927 } 10568 }
10928 Compiler.prototype.runCompiler = function() { 10569 Compiler.prototype.runCompiler = function() {
10929 var $0;
10930 this.scanCoreLibrary(); 10570 this.scanCoreLibrary();
10931 this.scanner.scan(this.script); 10571 this.scanner.scan(this.script);
10932 var element = this.universe.find(const$244/*Compiler.MAIN*/); 10572 var element = this.universe.find(const$244/*Compiler.MAIN*/);
10933 if (element == null) this.cancel(('Could not find ' + const$244/*Compiler.MAIN */ + '')); 10573 if (element == null) this.cancel(('Could not find ' + const$244/*Compiler.MAIN */ + ''));
10934 this.compileMethod(element); 10574 this.compileMethod(element);
10935 while (!this.worklist.isEmpty()) { 10575 while (!this.worklist.isEmpty()) {
10936 this.compileMethod((($0 = this.worklist.removeLast()) && $0.is$Element())); 10576 this.compileMethod(this.worklist.removeLast());
10937 } 10577 }
10938 } 10578 }
10939 Compiler.prototype.compileMethod = function(element) { 10579 Compiler.prototype.compileMethod = function(element) {
10940 var tree = this.parser.parse(element); 10580 var tree = this.parser.parse(element);
10941 var elements = this.resolver.resolve(tree); 10581 var elements = this.resolver.resolve(tree);
10942 this.checker.check(tree, elements); 10582 this.checker.check(tree, elements);
10943 var graph = this.builder.build(tree, elements); 10583 var graph = this.builder.build(tree, elements);
10944 this.optimizer.optimize(graph); 10584 this.optimizer.optimize(graph);
10945 var code = this.generator.generate(tree, graph); 10585 var code = this.generator.generate(tree, graph);
10946 this.universe.addGeneratedCode(element, code); 10586 this.universe.addGeneratedCode(element, code);
10947 return code; 10587 return code;
10948 } 10588 }
10949 Compiler.prototype.resolveType = function(element) { 10589 Compiler.prototype.resolveType = function(element) {
10950 this.resolver.resolveType(this.parser.parse(element)); 10590 this.resolver.resolveType(this.parser.parse(element));
10951 } 10591 }
10952 Compiler.prototype.getGeneratedCode = function() { 10592 Compiler.prototype.getGeneratedCode = function() {
10953 var $0;
10954 var buffer = new StringBufferImpl(""); 10593 var buffer = new StringBufferImpl("");
10955 var codeBlocks = (($0 = this.universe.generatedCode.getValues()) && $0.is$List $String()); 10594 var codeBlocks = this.universe.generatedCode.getValues();
10956 for (var i = codeBlocks.length - 1; 10595 for (var i = codeBlocks.length - 1;
10957 i >= 0; i--) { 10596 i >= 0; i--) {
10958 buffer.add(codeBlocks.$index(i)); 10597 buffer.add(codeBlocks.$index(i));
10959 } 10598 }
10960 buffer.add('main();\n'); 10599 buffer.add('main();\n');
10961 return buffer.toString(); 10600 return buffer.toString();
10962 } 10601 }
10963 Compiler.prototype.reportWarning = function(node, message) { 10602 Compiler.prototype.reportWarning = function(node, message) {
10964 10603
10965 } 10604 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
10998 this.toResolve = new DoubleLinkedQueue(); 10637 this.toResolve = new DoubleLinkedQueue();
10999 CompilerTask.call(this, compiler); 10638 CompilerTask.call(this, compiler);
11000 // Initializers done 10639 // Initializers done
11001 } 10640 }
11002 $inherits(ResolverTask, CompilerTask); 10641 $inherits(ResolverTask, CompilerTask);
11003 ResolverTask.prototype.get$name = function() { 10642 ResolverTask.prototype.get$name = function() {
11004 return 'Resolver'; 10643 return 'Resolver';
11005 } 10644 }
11006 ResolverTask.prototype.resolve = function(tree) { 10645 ResolverTask.prototype.resolve = function(tree) {
11007 var $this = this; // closure support 10646 var $this = this; // closure support
11008 var $0; 10647 return this.measure((function () {
11009 return (($0 = this.measure((function () {
11010 var visitor = new ResolverVisitor($this.compiler); 10648 var visitor = new ResolverVisitor($this.compiler);
11011 visitor.visit(tree); 10649 visitor.visit(tree);
11012 while (!$this.toResolve.isEmpty()) { 10650 while (!$this.toResolve.isEmpty()) {
11013 $this.toResolve.removeFirst().resolve$1($this.compiler); 10651 $this.toResolve.removeFirst().resolve$1($this.compiler);
11014 } 10652 }
11015 return visitor.mapping; 10653 return visitor.mapping;
11016 }) 10654 })
11017 )) && $0.is$Map$Node$Element()); 10655 );
11018 } 10656 }
11019 ResolverTask.prototype.resolveType = function(tree) { 10657 ResolverTask.prototype.resolveType = function(tree) {
11020 var $this = this; // closure support 10658 var $this = this; // closure support
11021 this.measure((function () { 10659 this.measure((function () {
11022 var visitor = new ClassResolverVisitor($this.compiler); 10660 var visitor = new ClassResolverVisitor($this.compiler);
11023 visitor.visit(tree); 10661 visitor.visit(tree);
11024 }) 10662 })
11025 ); 10663 );
11026 } 10664 }
11027 ResolverTask.prototype.resolve$1 = function($0) { 10665 ResolverTask.prototype.resolve$1 = function($0) {
11028 return this.resolve(($0 && $0.is$Node())); 10666 return this.resolve($0);
11029 }; 10667 };
11030 // ********** Code for ErrorMessages ************** 10668 // ********** Code for ErrorMessages **************
11031 function ErrorMessages() {} 10669 function ErrorMessages() {}
11032 ErrorMessages.cannotResolve = function(id) { 10670 ErrorMessages.cannotResolve = function(id) {
11033 return ("cannot resolve " + id + ""); 10671 return ("cannot resolve " + id + "");
11034 } 10672 }
11035 ErrorMessages.cannotResolveType = function(id) { 10673 ErrorMessages.cannotResolveType = function(id) {
11036 return ("cannot resolve type " + id + ""); 10674 return ("cannot resolve type " + id + "");
11037 } 10675 }
11038 ErrorMessages.duplicateDefinition = function(id) { 10676 ErrorMessages.duplicateDefinition = function(id) {
11039 return ("duplicate definition of " + id + ""); 10677 return ("duplicate definition of " + id + "");
11040 } 10678 }
11041 ErrorMessages.notAType = function(id) { 10679 ErrorMessages.notAType = function(id) {
11042 return ("" + id + " is not a type"); 10680 return ("" + id + " is not a type");
11043 } 10681 }
11044 // ********** Code for ResolverVisitor ************** 10682 // ********** Code for ResolverVisitor **************
11045 function ResolverVisitor(compiler) { 10683 function ResolverVisitor(compiler) {
11046 this.compiler = compiler; 10684 this.compiler = compiler;
11047 this.mapping = new LinkedHashMapImplementation(); 10685 this.mapping = new LinkedHashMapImplementation();
11048 this.context = new Scope(new TopScope(compiler.universe)); 10686 this.context = new Scope(new TopScope(compiler.universe));
11049 // Initializers done 10687 // Initializers done
11050 } 10688 }
11051 ResolverVisitor.prototype.is$Visitor = function(){return this;};
11052 ResolverVisitor.prototype.fail = function(node, message) { 10689 ResolverVisitor.prototype.fail = function(node, message) {
11053 this.compiler.cancel(message); 10690 this.compiler.cancel(message);
11054 } 10691 }
11055 ResolverVisitor.prototype.warning = function(node, message) { 10692 ResolverVisitor.prototype.warning = function(node, message) {
11056 this.compiler.reportWarning(node, message); 10693 this.compiler.reportWarning(node, message);
11057 } 10694 }
11058 ResolverVisitor.prototype.visit = function(node) { 10695 ResolverVisitor.prototype.visit = function(node) {
11059 if (node == null) return null; 10696 if (node == null) return null;
11060 return node.accept(this); 10697 return node.accept(this);
11061 } 10698 }
11062 ResolverVisitor.prototype.visitIn = function(node, scope) { 10699 ResolverVisitor.prototype.visitIn = function(node, scope) {
11063 var $0;
11064 this.context = scope; 10700 this.context = scope;
11065 var element = (($0 = this.visit(node)) && $0.is$Element()); 10701 var element = this.visit(node);
11066 this.context = this.context.parent; 10702 this.context = this.context.parent;
11067 return element; 10703 return element;
11068 } 10704 }
11069 ResolverVisitor.prototype.visitBlock = function(node) { 10705 ResolverVisitor.prototype.visitBlock = function(node) {
11070 this.visitIn(node.statements, new Scope(this.context)); 10706 this.visitIn(node.statements, new Scope(this.context));
11071 } 10707 }
11072 ResolverVisitor.prototype.visitExpressionStatement = function(node) { 10708 ResolverVisitor.prototype.visitExpressionStatement = function(node) {
11073 this.visit(node.expression); 10709 this.visit(node.expression);
11074 } 10710 }
11075 ResolverVisitor.prototype.visitFor = function(node) { 10711 ResolverVisitor.prototype.visitFor = function(node) {
11076 var scope = new Scope(this.context); 10712 var scope = new Scope(this.context);
11077 this.visitIn(node.initializer, scope); 10713 this.visitIn(node.initializer, scope);
11078 this.visitIn(node.condition, scope); 10714 this.visitIn(node.condition, scope);
11079 this.visitIn(node.update, scope); 10715 this.visitIn(node.update, scope);
11080 this.visitIn(node.body, scope); 10716 this.visitIn(node.body, scope);
11081 } 10717 }
11082 ResolverVisitor.prototype.visitFunctionExpression = function(node) { 10718 ResolverVisitor.prototype.visitFunctionExpression = function(node) {
11083 var $0;
11084 this.visit(node.returnType); 10719 this.visit(node.returnType);
11085 var enclosingElement = (($0 = this.visit(node.name)) && $0.is$Element()); 10720 var enclosingElement = this.visit(node.name);
11086 var newScope = new Scope.enclosing$ctor(this.context, enclosingElement); 10721 var newScope = new Scope.enclosing$ctor(this.context, enclosingElement);
11087 this.visitIn(node.parameters, newScope); 10722 this.visitIn(node.parameters, newScope);
11088 this.visitIn(node.body, newScope); 10723 this.visitIn(node.body, newScope);
11089 return enclosingElement; 10724 return enclosingElement;
11090 } 10725 }
11091 ResolverVisitor.prototype.visitIdentifier = function(node) { 10726 ResolverVisitor.prototype.visitIdentifier = function(node) {
11092 var element = this.context.lookup(node.get$source()); 10727 var element = this.context.lookup(node.get$source());
11093 if (element == null) this.fail(node, ErrorMessages.cannotResolve(node)); 10728 if (element == null) this.fail(node, ErrorMessages.cannotResolve(node));
11094 return this.useElement(node, element); 10729 return this.useElement(node, element);
11095 } 10730 }
11096 ResolverVisitor.prototype.visitIf = function(node) { 10731 ResolverVisitor.prototype.visitIf = function(node) {
11097 this.visit(node.condition); 10732 this.visit(node.condition);
11098 this.visit(node.thenPart); 10733 this.visit(node.thenPart);
11099 this.visit(node.elsePart); 10734 this.visit(node.elsePart);
11100 } 10735 }
11101 ResolverVisitor.prototype.potentiallyMapOperatorToMethodName = function(name) { 10736 ResolverVisitor.prototype.potentiallyMapOperatorToMethodName = function(name) {
11102 if ($notnull_bool($eq(name, const$247/*const SourceString('+')*/))) return con st$248/*const SourceString('add')*/; 10737 if ($eq(name, const$247/*const SourceString('+')*/)) return const$248/*const S ourceString('add')*/;
11103 if ($notnull_bool($eq(name, const$249/*const SourceString('-')*/))) return con st$250/*const SourceString('sub')*/; 10738 if ($eq(name, const$249/*const SourceString('-')*/)) return const$250/*const S ourceString('sub')*/;
11104 if ($notnull_bool($eq(name, const$251/*const SourceString('*')*/))) return con st$252/*const SourceString('mul')*/; 10739 if ($eq(name, const$251/*const SourceString('*')*/)) return const$252/*const S ourceString('mul')*/;
11105 if ($notnull_bool($eq(name, const$253/*const SourceString('/')*/))) return con st$254/*const SourceString('div')*/; 10740 if ($eq(name, const$253/*const SourceString('/')*/)) return const$254/*const S ourceString('div')*/;
11106 if ($notnull_bool($eq(name, const$255/*const SourceString('~/')*/))) return co nst$256/*const SourceString('tdiv')*/; 10741 if ($eq(name, const$255/*const SourceString('~/')*/)) return const$256/*const SourceString('tdiv')*/;
11107 if ($notnull_bool($eq(name, const$257/*const SourceString('==')*/))) return co nst$258/*const SourceString('eq')*/; 10742 if ($eq(name, const$257/*const SourceString('==')*/)) return const$258/*const SourceString('eq')*/;
11108 if ($notnull_bool($eq(name, const$259/*const SourceString('<')*/))) return con st$260/*const SourceString('lt')*/; 10743 if ($eq(name, const$259/*const SourceString('<')*/)) return const$260/*const S ourceString('lt')*/;
11109 return name; 10744 return name;
11110 } 10745 }
11111 ResolverVisitor.prototype.visitSend = function(node) { 10746 ResolverVisitor.prototype.visitSend = function(node) {
11112 var $0;
11113 this.visit(node.receiver); 10747 this.visit(node.receiver);
11114 var identifier = (($0 = node.selector) && $0.is$Identifier()); 10748 var identifier = node.selector;
11115 var name = this.potentiallyMapOperatorToMethodName(identifier.get$source()); 10749 var name = this.potentiallyMapOperatorToMethodName(identifier.get$source());
11116 var target = this.context.lookup(name); 10750 var target = this.context.lookup(name);
11117 if (target == null) this.fail(node, ErrorMessages.cannotResolve(name)); 10751 if (target == null) this.fail(node, ErrorMessages.cannotResolve(name));
11118 this.visit(node.argumentsNode); 10752 this.visit(node.argumentsNode);
11119 return this.useElement(node, target); 10753 return this.useElement(node, target);
11120 } 10754 }
11121 ResolverVisitor.prototype.visitSendSet = function(node) { 10755 ResolverVisitor.prototype.visitSendSet = function(node) {
11122 var $0; 10756 var receiver = this.visit(node.receiver);
11123 var receiver = (($0 = this.visit(node.receiver)) && $0.is$Element()); 10757 var selector = node.selector;
11124 var selector = (($0 = node.selector) && $0.is$Identifier());
11125 if (receiver != null) { 10758 if (receiver != null) {
11126 this.compiler.unimplemented('Resolver: property access'); 10759 this.compiler.unimplemented('Resolver: property access');
11127 } 10760 }
11128 var target = this.context.lookup(selector.get$source()); 10761 var target = this.context.lookup(selector.get$source());
11129 if (target == null) this.fail(node, ErrorMessages.cannotResolve(node)); 10762 if (target == null) this.fail(node, ErrorMessages.cannotResolve(node));
11130 this.visit(node.argumentsNode); 10763 this.visit(node.argumentsNode);
11131 return this.useElement(node, target); 10764 return this.useElement(node, target);
11132 } 10765 }
11133 ResolverVisitor.prototype.visitLiteralInt = function(node) { 10766 ResolverVisitor.prototype.visitLiteralInt = function(node) {
11134 10767
11135 } 10768 }
11136 ResolverVisitor.prototype.visitLiteralDouble = function(node) { 10769 ResolverVisitor.prototype.visitLiteralDouble = function(node) {
11137 10770
11138 } 10771 }
11139 ResolverVisitor.prototype.visitLiteralBool = function(node) { 10772 ResolverVisitor.prototype.visitLiteralBool = function(node) {
11140 10773
11141 } 10774 }
11142 ResolverVisitor.prototype.visitLiteralString = function(node) { 10775 ResolverVisitor.prototype.visitLiteralString = function(node) {
11143 10776
11144 } 10777 }
11145 ResolverVisitor.prototype.visitNodeList = function(node) { 10778 ResolverVisitor.prototype.visitNodeList = function(node) {
11146 var $0;
11147 for (var link = node.nodes; 10779 for (var link = node.nodes;
11148 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 10780 !link.isEmpty(); link = link.get$tail()) {
11149 this.visit((($0 = link.get$head()) && $0.is$Node())); 10781 this.visit(link.get$head());
11150 } 10782 }
11151 } 10783 }
11152 ResolverVisitor.prototype.visitOperator = function(node) { 10784 ResolverVisitor.prototype.visitOperator = function(node) {
11153 this.fail(node, "Unimplemented in the resolver"); 10785 this.fail(node, "Unimplemented in the resolver");
11154 } 10786 }
11155 ResolverVisitor.prototype.visitReturn = function(node) { 10787 ResolverVisitor.prototype.visitReturn = function(node) {
11156 this.visit(node.expression); 10788 this.visit(node.expression);
11157 } 10789 }
11158 ResolverVisitor.prototype.visitThrow = function(node) { 10790 ResolverVisitor.prototype.visitThrow = function(node) {
11159 this.visit(node.expression); 10791 this.visit(node.expression);
11160 } 10792 }
11161 ResolverVisitor.prototype.visitTypeAnnotation = function(node) { 10793 ResolverVisitor.prototype.visitTypeAnnotation = function(node) {
11162 var name = node.typeName; 10794 var name = node.typeName;
11163 if ($notnull_bool($eq(name.get$source(), const$261/*const SourceString('var')* /))) return null; 10795 if ($eq(name.get$source(), const$261/*const SourceString('var')*/)) return nul l;
11164 if ($notnull_bool($eq(name.get$source(), const$4/*const SourceString('void')*/ ))) return null; 10796 if ($eq(name.get$source(), const$4/*const SourceString('void')*/)) return null ;
11165 var element = this.context.lookup(name.get$source()); 10797 var element = this.context.lookup(name.get$source());
11166 if (element == null) { 10798 if (element == null) {
11167 this.warning(node, ErrorMessages.cannotResolveType(name)); 10799 this.warning(node, ErrorMessages.cannotResolveType(name));
11168 } 10800 }
11169 else if (element.kind !== const$237/*ElementKind.CLASS*/) { 10801 else if (element.kind !== const$237/*ElementKind.CLASS*/) {
11170 this.warning(node, ErrorMessages.notAType(name)); 10802 this.warning(node, ErrorMessages.notAType(name));
11171 } 10803 }
11172 else { 10804 else {
11173 var cls = (element && element.is$ClassElement()); 10805 var cls = element;
11174 this.compiler.resolver.toResolve.add(element); 10806 this.compiler.resolver.toResolve.add(element);
11175 } 10807 }
11176 return this.useElement(node, element); 10808 return this.useElement(node, element);
11177 } 10809 }
11178 ResolverVisitor.prototype.visitVariableDefinitions = function(node) { 10810 ResolverVisitor.prototype.visitVariableDefinitions = function(node) {
11179 this.visit(node.type); 10811 this.visit(node.type);
11180 var visitor = new VariableDefinitionsVisitor(node, this); 10812 var visitor = new VariableDefinitionsVisitor(node, this);
11181 visitor.visit(node.definitions); 10813 visitor.visit(node.definitions);
11182 } 10814 }
11183 ResolverVisitor.prototype.defineElement = function(node, element) { 10815 ResolverVisitor.prototype.defineElement = function(node, element) {
11184 var $0;
11185 this.compiler.ensure(element != null); 10816 this.compiler.ensure(element != null);
11186 this.mapping.$setindex(node, element); 10817 this.mapping.$setindex(node, element);
11187 return (($0 = this.context.add(element)) && $0.is$Element()); 10818 return this.context.add(element);
11188 } 10819 }
11189 ResolverVisitor.prototype.useElement = function(node, element) { 10820 ResolverVisitor.prototype.useElement = function(node, element) {
11190 if (element == null) return null; 10821 if (element == null) return null;
11191 this.mapping.$setindex(node, element); 10822 this.mapping.$setindex(node, element);
11192 return element; 10823 return element;
11193 } 10824 }
11194 ResolverVisitor.prototype.visit$1 = function($0) { 10825 ResolverVisitor.prototype.visit$1 = function($0) {
11195 return this.visit(($0 && $0.is$Node())); 10826 return this.visit($0);
11196 }; 10827 };
11197 // ********** Code for ClassResolverVisitor ************** 10828 // ********** Code for ClassResolverVisitor **************
11198 function ClassResolverVisitor(compiler) { 10829 function ClassResolverVisitor(compiler) {
11199 this.compiler = compiler; 10830 this.compiler = compiler;
11200 this.context = new TopScope(compiler.universe); 10831 this.context = new TopScope(compiler.universe);
11201 // Initializers done 10832 // Initializers done
11202 } 10833 }
11203 ClassResolverVisitor.prototype.is$Visitor = function(){return this;};
11204 ClassResolverVisitor.prototype.visitClassNode = function(node) { 10834 ClassResolverVisitor.prototype.visitClassNode = function(node) {
11205 var $0; 10835 var element = this.context.lookup(node.name.get$source());
11206 var element = (($0 = this.context.lookup(node.name.get$source())) && $0.is$Cla ssElement());
11207 this.compiler.ensure(element != null); 10836 this.compiler.ensure(element != null);
11208 this.compiler.ensure(!$notnull_bool(element.isResolved)); 10837 this.compiler.ensure(!element.isResolved);
11209 element.supertype = this.visit(node.superclass); 10838 element.supertype = this.visit(node.superclass);
11210 for (var link = node.interfaces.nodes; 10839 for (var link = node.interfaces.nodes;
11211 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 10840 !link.isEmpty(); link = link.get$tail()) {
11212 element.interfaces = (($0 = element.interfaces.prepend(this.visit((($0 = lin k.get$head()) && $0.is$Node())))) && $0.is$Link$Type()); 10841 element.interfaces = element.interfaces.prepend(this.visit(link.get$head())) ;
11213 } 10842 }
11214 return element.computeType(this.compiler, null); 10843 return element.computeType(this.compiler, null);
11215 } 10844 }
11216 ClassResolverVisitor.prototype.visitTypeAnnotation = function(node) { 10845 ClassResolverVisitor.prototype.visitTypeAnnotation = function(node) {
11217 var $0;
11218 var name = node.typeName; 10846 var name = node.typeName;
11219 var element = this.context.lookup(name.get$source()); 10847 var element = this.context.lookup(name.get$source());
11220 if (element == null) { 10848 if (element == null) {
11221 this.compiler.cancel(ErrorMessages.cannotResolveType(name)); 10849 this.compiler.cancel(ErrorMessages.cannotResolveType(name));
11222 } 10850 }
11223 else if (element.kind !== const$237/*ElementKind.CLASS*/) { 10851 else if (element.kind !== const$237/*ElementKind.CLASS*/) {
11224 this.compiler.cancel(ErrorMessages.notAType(name)); 10852 this.compiler.cancel(ErrorMessages.notAType(name));
11225 } 10853 }
11226 else { 10854 else {
11227 this.compiler.resolver.toResolve.add(element); 10855 this.compiler.resolver.toResolve.add(element);
11228 return (($0 = element.computeType(this.compiler, null)) && $0.is$Type()); 10856 return element.computeType(this.compiler, null);
11229 } 10857 }
11230 return null; 10858 return null;
11231 } 10859 }
11232 ClassResolverVisitor.prototype.visit = function(node) { 10860 ClassResolverVisitor.prototype.visit = function(node) {
11233 var $0;
11234 if (node == null) return null; 10861 if (node == null) return null;
11235 return (($0 = node.accept(this)) && $0.is$Type()); 10862 return node.accept(this);
11236 } 10863 }
11237 ClassResolverVisitor.prototype.visit$1 = function($0) { 10864 ClassResolverVisitor.prototype.visit$1 = function($0) {
11238 return this.visit(($0 && $0.is$Node())); 10865 return this.visit($0);
11239 }; 10866 };
11240 // ********** Code for VariableDefinitionsVisitor ************** 10867 // ********** Code for VariableDefinitionsVisitor **************
11241 function VariableDefinitionsVisitor(definitions, resolver) { 10868 function VariableDefinitionsVisitor(definitions, resolver) {
11242 this.definitions = definitions; 10869 this.definitions = definitions;
11243 this.resolver = resolver; 10870 this.resolver = resolver;
11244 // Initializers done 10871 // Initializers done
11245 } 10872 }
11246 VariableDefinitionsVisitor.prototype.is$Visitor = function(){return this;};
11247 VariableDefinitionsVisitor.prototype.visitSendSet = function(node) { 10873 VariableDefinitionsVisitor.prototype.visitSendSet = function(node) {
11248 var $0;
11249 $assert(node.get$arguments().get$tail().isEmpty$0(), "node.arguments.tail.isEm pty()", "resolver.dart", 269, 12);
11250 if (node.receiver != null) { 10874 if (node.receiver != null) {
11251 this.resolver.compiler.unimplemented("receiver on a variable definition"); 10875 this.resolver.compiler.unimplemented("receiver on a variable definition");
11252 } 10876 }
11253 var selector = (($0 = node.selector) && $0.is$Identifier()); 10877 var selector = node.selector;
11254 this.resolver.visit((($0 = node.get$arguments().get$head()) && $0.is$Node())); 10878 this.resolver.visit(node.get$arguments().get$head());
11255 return (($0 = this.visit(node.selector)) && $0.is$SourceString()); 10879 return this.visit(node.selector);
11256 } 10880 }
11257 VariableDefinitionsVisitor.prototype.visitIdentifier = function(node) { 10881 VariableDefinitionsVisitor.prototype.visitIdentifier = function(node) {
11258 return node.get$source(); 10882 return node.get$source();
11259 } 10883 }
11260 VariableDefinitionsVisitor.prototype.visitNodeList = function(node) { 10884 VariableDefinitionsVisitor.prototype.visitNodeList = function(node) {
11261 var $0;
11262 for (var link = node.nodes; 10885 for (var link = node.nodes;
11263 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 10886 !link.isEmpty(); link = link.get$tail()) {
11264 var name = (($0 = this.visit((($0 = link.get$head()) && $0.is$Node()))) && $ 0.is$SourceString()); 10887 var name = this.visit(link.get$head());
11265 var element = new VariableElement((($0 = link.get$head()) && $0.is$Node()), this.definitions.type, name, this.resolver.context.enclosingElement); 10888 var element = new VariableElement(link.get$head(), this.definitions.type, na me, this.resolver.context.enclosingElement);
11266 var existing = this.resolver.defineElement((($0 = link.get$head()) && $0.is$ Node()), element); 10889 var existing = this.resolver.defineElement(link.get$head(), element);
11267 if ($ne(existing, element)) { 10890 if ($ne(existing, element)) {
11268 this.resolver.fail(node, ErrorMessages.duplicateDefinition(link.get$head() )); 10891 this.resolver.fail(node, ErrorMessages.duplicateDefinition(link.get$head() ));
11269 } 10892 }
11270 } 10893 }
11271 } 10894 }
11272 VariableDefinitionsVisitor.prototype.visit = function(node) { 10895 VariableDefinitionsVisitor.prototype.visit = function(node) {
11273 return node.accept(this); 10896 return node.accept(this);
11274 } 10897 }
11275 VariableDefinitionsVisitor.prototype.visit$1 = function($0) { 10898 VariableDefinitionsVisitor.prototype.visit$1 = function($0) {
11276 return this.visit(($0 && $0.is$Node())); 10899 return this.visit($0);
11277 }; 10900 };
11278 // ********** Code for Scope ************** 10901 // ********** Code for Scope **************
11279 function Scope(parent) { 10902 function Scope(parent) {
11280 Scope.enclosing$ctor.call(this, parent, parent.enclosingElement); 10903 Scope.enclosing$ctor.call(this, parent, parent.enclosingElement);
11281 // Initializers done 10904 // Initializers done
11282 } 10905 }
11283 Scope.top$ctor = function() { 10906 Scope.top$ctor = function() {
11284 this.parent = null; 10907 this.parent = null;
11285 this.elements = const$246/*const {}*/; 10908 this.elements = const$246/*const {}*/;
11286 this.enclosingElement = null; 10909 this.enclosingElement = null;
11287 // Initializers done 10910 // Initializers done
11288 } 10911 }
11289 Scope.top$ctor.prototype = Scope.prototype; 10912 Scope.top$ctor.prototype = Scope.prototype;
11290 Scope.enclosing$ctor = function(parent, enclosingElement) { 10913 Scope.enclosing$ctor = function(parent, enclosingElement) {
11291 this.parent = parent; 10914 this.parent = parent;
11292 this.enclosingElement = enclosingElement; 10915 this.enclosingElement = enclosingElement;
11293 this.elements = $map([]); 10916 this.elements = $map([]);
11294 // Initializers done 10917 // Initializers done
11295 } 10918 }
11296 Scope.enclosing$ctor.prototype = Scope.prototype; 10919 Scope.enclosing$ctor.prototype = Scope.prototype;
11297 Scope.prototype.get$parent = function() { return this.parent; }; 10920 Scope.prototype.get$parent = function() { return this.parent; };
11298 Scope.prototype.lookup = function(name) { 10921 Scope.prototype.lookup = function(name) {
11299 var $0; 10922 var element = this.elements.$index(name);
11300 var element = (($0 = this.elements.$index(name)) && $0.is$Element());
11301 if (element != null) return element; 10923 if (element != null) return element;
11302 return this.parent.lookup(name); 10924 return this.parent.lookup(name);
11303 } 10925 }
11304 Scope.prototype.add = function(element) { 10926 Scope.prototype.add = function(element) {
11305 var $0; 10927 if (this.elements.containsKey(element.name)) return this.elements.$index(eleme nt.name);
11306 if (this.elements.containsKey(element.name)) return (($0 = this.elements.$inde x(element.name)) && $0.is$Element());
11307 this.elements.$setindex(element.name, element); 10928 this.elements.$setindex(element.name, element);
11308 return element; 10929 return element;
11309 } 10930 }
11310 Scope.prototype.add$1 = function($0) { 10931 Scope.prototype.add$1 = function($0) {
11311 return this.add(($0 && $0.is$Element())); 10932 return this.add($0);
11312 }; 10933 };
11313 Scope.prototype.lookup$1 = function($0) { 10934 Scope.prototype.lookup$1 = function($0) {
11314 return this.lookup(($0 && $0.is$SourceString())); 10935 return this.lookup($0);
11315 }; 10936 };
11316 // ********** Code for TopScope ************** 10937 // ********** Code for TopScope **************
11317 function TopScope(universe) { 10938 function TopScope(universe) {
11318 this.universe = universe; 10939 this.universe = universe;
11319 Scope.top$ctor.call(this); 10940 Scope.top$ctor.call(this);
11320 // Initializers done 10941 // Initializers done
11321 } 10942 }
11322 $inherits(TopScope, Scope); 10943 $inherits(TopScope, Scope);
11323 TopScope.prototype.lookup = function(name) { 10944 TopScope.prototype.lookup = function(name) {
11324 return this.universe.find(name); 10945 return this.universe.find(name);
11325 } 10946 }
11326 TopScope.prototype.add = function(element) { 10947 TopScope.prototype.add = function(element) {
11327 $throw("Cannot add an element in the top scope"); 10948 $throw("Cannot add an element in the top scope");
11328 } 10949 }
11329 TopScope.prototype.add$1 = function($0) { 10950 TopScope.prototype.add$1 = function($0) {
11330 return this.add(($0 && $0.is$Element())); 10951 return this.add($0);
11331 }; 10952 };
11332 TopScope.prototype.lookup$1 = function($0) { 10953 TopScope.prototype.lookup$1 = function($0) {
11333 return this.lookup(($0 && $0.is$SourceString())); 10954 return this.lookup($0);
11334 }; 10955 };
11335 // ********** Code for leg_Script ************** 10956 // ********** Code for leg_Script **************
11336 function leg_Script(file) { 10957 function leg_Script(file) {
11337 this.file = file; 10958 this.file = file;
11338 // Initializers done 10959 // Initializers done
11339 } 10960 }
11340 leg_Script.prototype.get$text = function() { 10961 leg_Script.prototype.get$text = function() {
11341 return this.file.get$text(); 10962 return this.file.get$text();
11342 } 10963 }
11343 // ********** Code for TypeCheckerTask ************** 10964 // ********** Code for TypeCheckerTask **************
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
11393 this.name = name; 11014 this.name = name;
11394 this.element = element; 11015 this.element = element;
11395 // Initializers done 11016 // Initializers done
11396 } 11017 }
11397 SimpleType.named$ctor = function(name) { 11018 SimpleType.named$ctor = function(name) {
11398 this.name = name; 11019 this.name = name;
11399 this.element = new Element(name, null, null); 11020 this.element = new Element(name, null, null);
11400 // Initializers done 11021 // Initializers done
11401 } 11022 }
11402 SimpleType.named$ctor.prototype = SimpleType.prototype; 11023 SimpleType.named$ctor.prototype = SimpleType.prototype;
11403 SimpleType.prototype.is$Type = function(){return this;};
11404 SimpleType.prototype.get$name = function() { return this.name; }; 11024 SimpleType.prototype.get$name = function() { return this.name; };
11405 SimpleType.prototype.get$element = function() { return this.element; }; 11025 SimpleType.prototype.get$element = function() { return this.element; };
11406 SimpleType.prototype.toString = function() { 11026 SimpleType.prototype.toString = function() {
11407 return this.name.toString(); 11027 return this.name.toString();
11408 } 11028 }
11409 SimpleType.prototype.toString$0 = function() { 11029 SimpleType.prototype.toString$0 = function() {
11410 return this.toString(); 11030 return this.toString();
11411 }; 11031 };
11412 // ********** Code for FunctionType ************** 11032 // ********** Code for FunctionType **************
11413 function FunctionType(returnType, parameterTypes) { 11033 function FunctionType(returnType, parameterTypes) {
11414 this.returnType = returnType; 11034 this.returnType = returnType;
11415 this.parameterTypes = parameterTypes; 11035 this.parameterTypes = parameterTypes;
11416 // Initializers done 11036 // Initializers done
11417 } 11037 }
11418 FunctionType.prototype.is$FunctionType = function(){return this;};
11419 FunctionType.prototype.is$Type = function(){return this;};
11420 FunctionType.prototype.get$returnType = function() { return this.returnType; }; 11038 FunctionType.prototype.get$returnType = function() { return this.returnType; };
11421 FunctionType.prototype.toString = function() { 11039 FunctionType.prototype.toString = function() {
11422 var sb = new StringBufferImpl(""); 11040 var sb = new StringBufferImpl("");
11423 var first = true; 11041 var first = true;
11424 sb.add('('); 11042 sb.add('(');
11425 this.parameterTypes.printOn(sb, ', '); 11043 this.parameterTypes.printOn(sb, ', ');
11426 sb.add((') -> ' + this.returnType + '')); 11044 sb.add((') -> ' + this.returnType + ''));
11427 return sb.toString(); 11045 return sb.toString();
11428 } 11046 }
11429 FunctionType.prototype.toString$0 = function() { 11047 FunctionType.prototype.toString$0 = function() {
11430 return this.toString(); 11048 return this.toString();
11431 }; 11049 };
11432 // ********** Code for Types ************** 11050 // ********** Code for Types **************
11433 function Types() { 11051 function Types() {
11434 this.voidType = new SimpleType.named$ctor(const$4/*Types.VOID*/); 11052 this.voidType = new SimpleType.named$ctor(const$4/*Types.VOID*/);
11435 this.intType = new SimpleType.named$ctor(const$6/*Types.INT*/); 11053 this.intType = new SimpleType.named$ctor(const$6/*Types.INT*/);
11436 this.dynamicType = new SimpleType.named$ctor(const$8/*Types.DYNAMIC*/); 11054 this.dynamicType = new SimpleType.named$ctor(const$8/*Types.DYNAMIC*/);
11437 this.stringType = new SimpleType.named$ctor(const$10/*Types.STRING*/); 11055 this.stringType = new SimpleType.named$ctor(const$10/*Types.STRING*/);
11438 // Initializers done 11056 // Initializers done
11439 } 11057 }
11440 Types.prototype.is$Types = function(){return this;};
11441 Types.prototype.lookup = function(s) { 11058 Types.prototype.lookup = function(s) {
11442 if ($notnull_bool($eq(const$4/*Types.VOID*/, s))) { 11059 if ($eq(const$4/*Types.VOID*/, s)) {
11443 return this.voidType; 11060 return this.voidType;
11444 } 11061 }
11445 else if ($notnull_bool($eq(const$6/*Types.INT*/, s))) { 11062 else if ($eq(const$6/*Types.INT*/, s)) {
11446 return this.intType; 11063 return this.intType;
11447 } 11064 }
11448 else if ($notnull_bool($eq(const$8/*Types.DYNAMIC*/, s)) || s.get$stringValue( ) === 'var') { 11065 else if ($eq(const$8/*Types.DYNAMIC*/, s) || s.get$stringValue() === 'var') {
11449 return this.dynamicType; 11066 return this.dynamicType;
11450 } 11067 }
11451 else if ($notnull_bool($eq(const$10/*Types.STRING*/, s))) { 11068 else if ($eq(const$10/*Types.STRING*/, s)) {
11452 return this.stringType; 11069 return this.stringType;
11453 } 11070 }
11454 return null; 11071 return null;
11455 } 11072 }
11456 Types.prototype.isSubtype = function(r, s) { 11073 Types.prototype.isSubtype = function(r, s) {
11457 return r === s || r === this.dynamicType || s === this.dynamicType; 11074 return r === s || r === this.dynamicType || s === this.dynamicType;
11458 } 11075 }
11459 Types.prototype.isAssignable = function(r, s) { 11076 Types.prototype.isAssignable = function(r, s) {
11460 return $notnull_bool(this.isSubtype(r, s)) || $notnull_bool(this.isSubtype(s, r)); 11077 return this.isSubtype(r, s) || this.isSubtype(s, r);
11461 } 11078 }
11462 Types.prototype.lookup$1 = function($0) { 11079 Types.prototype.lookup$1 = function($0) {
11463 return this.lookup(($0 && $0.is$SourceString())); 11080 return this.lookup($0);
11464 }; 11081 };
11465 // ********** Code for CancelTypeCheckException ************** 11082 // ********** Code for CancelTypeCheckException **************
11466 function CancelTypeCheckException(node, reason) { 11083 function CancelTypeCheckException(node, reason) {
11467 this.node = node; 11084 this.node = node;
11468 this.reason = reason; 11085 this.reason = reason;
11469 // Initializers done 11086 // Initializers done
11470 } 11087 }
11471 // ********** Code for TypeCheckerVisitor ************** 11088 // ********** Code for TypeCheckerVisitor **************
11472 function TypeCheckerVisitor(compiler, elements, types) { 11089 function TypeCheckerVisitor(compiler, elements, types) {
11473 this.compiler = compiler; 11090 this.compiler = compiler;
11474 this.elements = elements; 11091 this.elements = elements;
11475 this.types = types; 11092 this.types = types;
11476 // Initializers done 11093 // Initializers done
11477 } 11094 }
11478 TypeCheckerVisitor.prototype.is$Visitor = function(){return this;};
11479 TypeCheckerVisitor.prototype.fail = function(node, reason) { 11095 TypeCheckerVisitor.prototype.fail = function(node, reason) {
11480 var message = 'cannot type-check'; 11096 var message = 'cannot type-check';
11481 if (reason != null) { 11097 if (reason != null) {
11482 message = ('' + message + ': ' + reason + ''); 11098 message = ('' + message + ': ' + reason + '');
11483 } 11099 }
11484 $throw(new CancelTypeCheckException(node, message)); 11100 $throw(new CancelTypeCheckException(node, message));
11485 } 11101 }
11486 TypeCheckerVisitor.prototype.reportTypeWarning = function(node, kind, arguments) { 11102 TypeCheckerVisitor.prototype.reportTypeWarning = function(node, kind, arguments) {
11487 this.compiler.reportWarning(node, new TypeWarning(kind, arguments).getMessage( )); 11103 this.compiler.reportWarning(node, new TypeWarning(kind, arguments).getMessage( ));
11488 } 11104 }
11489 TypeCheckerVisitor.prototype.nonVoidType = function(node) { 11105 TypeCheckerVisitor.prototype.nonVoidType = function(node) {
11490 var type = this.type(node); 11106 var type = this.type(node);
11491 if ($eq(type, this.types.voidType)) { 11107 if ($eq(type, this.types.voidType)) {
11492 this.reportTypeWarning(node, const$277/*WarningKind.VOID_EXPRESSION*/, const $13/*const []*/); 11108 this.reportTypeWarning(node, const$277/*WarningKind.VOID_EXPRESSION*/, const $13/*const []*/);
11493 } 11109 }
11494 return type; 11110 return type;
11495 } 11111 }
11496 TypeCheckerVisitor.prototype.typeWithDefault = function(node, defaultValue) { 11112 TypeCheckerVisitor.prototype.typeWithDefault = function(node, defaultValue) {
11497 return node != null ? this.type(node) : defaultValue; 11113 return node != null ? this.type(node) : defaultValue;
11498 } 11114 }
11499 TypeCheckerVisitor.prototype.type = function(node) { 11115 TypeCheckerVisitor.prototype.type = function(node) {
11500 var $0;
11501 if (node == null) this.fail(null, 'unexpected node: null'); 11116 if (node == null) this.fail(null, 'unexpected node: null');
11502 var result = (($0 = node.accept(this)) && $0.is$Type()); 11117 var result = node.accept(this);
11503 return result; 11118 return result;
11504 } 11119 }
11505 TypeCheckerVisitor.prototype.get$type = function() {
11506 return TypeCheckerVisitor.prototype.type.bind(this);
11507 }
11508 TypeCheckerVisitor.prototype.checkAssignable = function(node, s, t) { 11120 TypeCheckerVisitor.prototype.checkAssignable = function(node, s, t) {
11509 if (!$notnull_bool(this.types.isAssignable(s, t))) { 11121 if (!this.types.isAssignable(s, t)) {
11510 this.reportTypeWarning(node, const$270/*WarningKind.NOT_ASSIGNABLE*/, [s, t] ); 11122 this.reportTypeWarning(node, const$270/*WarningKind.NOT_ASSIGNABLE*/, [s, t] );
11511 } 11123 }
11512 } 11124 }
11513 TypeCheckerVisitor.prototype.visitBlock = function(node) { 11125 TypeCheckerVisitor.prototype.visitBlock = function(node) {
11514 this.type(node.statements); 11126 this.type(node.statements);
11515 return this.types.voidType; 11127 return this.types.voidType;
11516 } 11128 }
11517 TypeCheckerVisitor.prototype.visitClassNode = function(node) { 11129 TypeCheckerVisitor.prototype.visitClassNode = function(node) {
11518 this.fail(node); 11130 this.fail(node);
11519 } 11131 }
11520 TypeCheckerVisitor.prototype.visitExpressionStatement = function(node) { 11132 TypeCheckerVisitor.prototype.visitExpressionStatement = function(node) {
11521 return this.type(node.expression); 11133 return this.type(node.expression);
11522 } 11134 }
11523 TypeCheckerVisitor.prototype.visitFor = function(node) { 11135 TypeCheckerVisitor.prototype.visitFor = function(node) {
11524 this.fail(node); 11136 this.fail(node);
11525 } 11137 }
11526 TypeCheckerVisitor.prototype.visitFunctionExpression = function(node) { 11138 TypeCheckerVisitor.prototype.visitFunctionExpression = function(node) {
11527 var $0; 11139 var functionType = this.elements.$index(node.name).computeType$2(this.compiler , this.types);
11528 var functionType = (($0 = this.elements.$index(node.name).computeType$2(this.c ompiler, this.types)) && $0.is$FunctionType());
11529 var returnType = functionType.returnType; 11140 var returnType = functionType.returnType;
11530 var previous = this.expectedReturnType; 11141 var previous = this.expectedReturnType;
11531 this.expectedReturnType = returnType; 11142 this.expectedReturnType = returnType;
11532 this.type(node.body); 11143 this.type(node.body);
11533 this.expectedReturnType = previous; 11144 this.expectedReturnType = previous;
11534 return functionType; 11145 return functionType;
11535 } 11146 }
11536 TypeCheckerVisitor.prototype.visitIdentifier = function(node) { 11147 TypeCheckerVisitor.prototype.visitIdentifier = function(node) {
11537 this.fail(node); 11148 this.fail(node);
11538 } 11149 }
11539 TypeCheckerVisitor.prototype.visitIf = function(node) { 11150 TypeCheckerVisitor.prototype.visitIf = function(node) {
11540 this.type(node.condition); 11151 this.type(node.condition);
11541 this.type(node.thenPart); 11152 this.type(node.thenPart);
11542 if ($notnull_bool(node.get$hasElsePart())) this.type(node.elsePart); 11153 if (node.get$hasElsePart()) this.type(node.elsePart);
11543 return this.types.voidType; 11154 return this.types.voidType;
11544 } 11155 }
11545 TypeCheckerVisitor.prototype.visitSend = function(node) { 11156 TypeCheckerVisitor.prototype.visitSend = function(node) {
11546 var $0;
11547 var target = this.elements.$index(node); 11157 var target = this.elements.$index(node);
11548 var selector = (($0 = node.selector) && $0.is$Identifier()); 11158 var selector = node.selector;
11549 if (target != null) { 11159 if (target != null) {
11550 var name = selector.get$source(); 11160 var name = selector.get$source();
11551 if ($notnull_bool($eq(name, const$247/*const SourceString('+')*/)) || $notnu ll_bool($eq(name, const$274/*const SourceString('=')*/)) || $notnull_bool($eq(na me, const$249/*const SourceString('-')*/)) || $notnull_bool($eq(name, const$251/ *const SourceString('*')*/)) || $notnull_bool($eq(name, const$253/*const SourceS tring('/')*/)) || $notnull_bool($eq(name, const$259/*const SourceString('<')*/)) || $notnull_bool($eq(name, const$255/*const SourceString('~/')*/))) { 11161 if ($eq(name, const$247/*const SourceString('+')*/) || $eq(name, const$274/* const SourceString('=')*/) || $eq(name, const$249/*const SourceString('-')*/) || $eq(name, const$251/*const SourceString('*')*/) || $eq(name, const$253/*const S ourceString('/')*/) || $eq(name, const$259/*const SourceString('<')*/) || $eq(na me, const$255/*const SourceString('~/')*/)) {
11552 return this.types.dynamicType; 11162 return this.types.dynamicType;
11553 } 11163 }
11554 var targetType = target.computeType$2(this.compiler, this.types); 11164 var targetType = target.computeType$2(this.compiler, this.types);
11555 if ($notnull_bool(node.get$isPropertyAccess())) { 11165 if (node.get$isPropertyAccess()) {
11556 return (targetType && targetType.is$Type()); 11166 return targetType;
11557 } 11167 }
11558 else if ($notnull_bool(node.get$isFunctionObjectInvocation())) { 11168 else if (node.get$isFunctionObjectInvocation()) {
11559 this.fail(node); 11169 this.fail(node);
11560 } 11170 }
11561 else { 11171 else {
11562 if (!(targetType instanceof FunctionType)) { 11172 if (!(targetType instanceof FunctionType)) {
11563 if ((target instanceof ForeignElement)) { 11173 if ((target instanceof ForeignElement)) {
11564 return this.types.dynamicType; 11174 return this.types.dynamicType;
11565 } 11175 }
11566 this.fail(node, 'can only handle function types'); 11176 this.fail(node, 'can only handle function types');
11567 } 11177 }
11568 var funType = (targetType && targetType.is$FunctionType()); 11178 var funType = targetType;
11569 var formals = funType.parameterTypes; 11179 var formals = funType.parameterTypes;
11570 var arguments = node.get$arguments(); 11180 var arguments = node.get$arguments();
11571 while ((!$notnull_bool(formals.isEmpty())) && (!$notnull_bool(arguments.is Empty()))) { 11181 while ((!formals.isEmpty()) && (!arguments.isEmpty())) {
11572 var argument = (($0 = arguments.get$head()) && $0.is$Node()); 11182 var argument = arguments.get$head();
11573 var argumentType = this.type(argument); 11183 var argumentType = this.type(argument);
11574 this.checkAssignable(argument, argumentType, (($0 = formals.get$head()) && $0.is$Type())); 11184 this.checkAssignable(argument, argumentType, formals.get$head());
11575 formals = (($0 = formals.get$tail()) && $0.is$Link$Type()); 11185 formals = formals.get$tail();
11576 arguments = (($0 = arguments.get$tail()) && $0.is$Link$Node()); 11186 arguments = arguments.get$tail();
11577 } 11187 }
11578 if (!$notnull_bool(formals.isEmpty())) { 11188 if (!formals.isEmpty()) {
11579 this.compiler.reportWarning(node, 'missing argument'); 11189 this.compiler.reportWarning(node, 'missing argument');
11580 } 11190 }
11581 if (!$notnull_bool(arguments.isEmpty())) { 11191 if (!arguments.isEmpty()) {
11582 this.compiler.reportWarning((($0 = arguments.get$head()) && $0.is$Node() ), 'additional arguments'); 11192 this.compiler.reportWarning(arguments.get$head(), 'additional arguments' );
11583 } 11193 }
11584 return funType.returnType; 11194 return funType.returnType;
11585 } 11195 }
11586 } 11196 }
11587 else { 11197 else {
11588 this.fail(node, ('unresolved send ' + selector.get$source() + '')); 11198 this.fail(node, ('unresolved send ' + selector.get$source() + ''));
11589 } 11199 }
11590 } 11200 }
11591 TypeCheckerVisitor.prototype.visitSendSet = function(node) { 11201 TypeCheckerVisitor.prototype.visitSendSet = function(node) {
11592 var $0; 11202 this.compiler.ensure(node.get$arguments() != null && !node.get$arguments().isE mpty());
11593 this.compiler.ensure(node.get$arguments() != null && !$notnull_bool(node.get$a rguments().isEmpty())); 11203 var targetType = this.elements.$index(node).computeType$2(this.compiler, this. types);
11594 var targetType = (($0 = this.elements.$index(node).computeType$2(this.compiler , this.types)) && $0.is$Type()); 11204 var value = node.get$arguments().get$head();
11595 var value = (($0 = node.get$arguments().get$head()) && $0.is$Node());
11596 this.checkAssignable(value, this.type(value), targetType); 11205 this.checkAssignable(value, this.type(value), targetType);
11597 return targetType; 11206 return targetType;
11598 } 11207 }
11599 TypeCheckerVisitor.prototype.visitLiteralInt = function(node) { 11208 TypeCheckerVisitor.prototype.visitLiteralInt = function(node) {
11600 return this.types.intType; 11209 return this.types.intType;
11601 } 11210 }
11602 TypeCheckerVisitor.prototype.visitLiteralDouble = function(node) { 11211 TypeCheckerVisitor.prototype.visitLiteralDouble = function(node) {
11603 return this.types.dynamicType; 11212 return this.types.dynamicType;
11604 } 11213 }
11605 TypeCheckerVisitor.prototype.visitLiteralBool = function(node) { 11214 TypeCheckerVisitor.prototype.visitLiteralBool = function(node) {
11606 return this.types.dynamicType; 11215 return this.types.dynamicType;
11607 } 11216 }
11608 TypeCheckerVisitor.prototype.visitLiteralString = function(node) { 11217 TypeCheckerVisitor.prototype.visitLiteralString = function(node) {
11609 return this.types.stringType; 11218 return this.types.stringType;
11610 } 11219 }
11611 TypeCheckerVisitor.prototype.visitNodeList = function(node) { 11220 TypeCheckerVisitor.prototype.visitNodeList = function(node) {
11612 var $0;
11613 for (var link = node.nodes; 11221 for (var link = node.nodes;
11614 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 11222 !link.isEmpty(); link = link.get$tail()) {
11615 this.type((($0 = link.get$head()) && $0.is$Node())); 11223 this.type(link.get$head());
11616 } 11224 }
11617 return null; 11225 return null;
11618 } 11226 }
11619 TypeCheckerVisitor.prototype.visitOperator = function(node) { 11227 TypeCheckerVisitor.prototype.visitOperator = function(node) {
11620 return this.types.dynamicType; 11228 return this.types.dynamicType;
11621 } 11229 }
11622 TypeCheckerVisitor.prototype.visitReturn = function(node) { 11230 TypeCheckerVisitor.prototype.visitReturn = function(node) {
11623 var expression = node.expression; 11231 var expression = node.expression;
11624 var isVoidFunction = (this.expectedReturnType === this.types.voidType); 11232 var isVoidFunction = (this.expectedReturnType === this.types.voidType);
11625 if (expression != null) { 11233 if (expression != null) {
11626 var expressionType = this.type(expression); 11234 var expressionType = this.type(expression);
11627 if (isVoidFunction && !$notnull_bool(this.types.isAssignable(expressionType, this.types.voidType))) { 11235 if (isVoidFunction && !this.types.isAssignable(expressionType, this.types.vo idType)) {
11628 this.reportTypeWarning(expression, const$268/*WarningKind.RETURN_VALUE_IN_ VOID*/, const$13/*const []*/); 11236 this.reportTypeWarning(expression, const$268/*WarningKind.RETURN_VALUE_IN_ VOID*/, const$13/*const []*/);
11629 } 11237 }
11630 else { 11238 else {
11631 this.checkAssignable(expression, expressionType, this.expectedReturnType); 11239 this.checkAssignable(expression, expressionType, this.expectedReturnType);
11632 } 11240 }
11633 } 11241 }
11634 else if (!$notnull_bool(this.types.isAssignable(this.expectedReturnType, this. types.voidType))) { 11242 else if (!this.types.isAssignable(this.expectedReturnType, this.types.voidType )) {
11635 this.reportTypeWarning(node, const$272/*WarningKind.RETURN_NOTHING*/, [this. expectedReturnType]); 11243 this.reportTypeWarning(node, const$272/*WarningKind.RETURN_NOTHING*/, [this. expectedReturnType]);
11636 } 11244 }
11637 return null; 11245 return null;
11638 } 11246 }
11639 TypeCheckerVisitor.prototype.visitThrow = function(node) { 11247 TypeCheckerVisitor.prototype.visitThrow = function(node) {
11640 if (node.expression != null) this.type(node.expression); 11248 if (node.expression != null) this.type(node.expression);
11641 return this.types.voidType; 11249 return this.types.voidType;
11642 } 11250 }
11643 TypeCheckerVisitor.prototype.visitTypeAnnotation = function(node) { 11251 TypeCheckerVisitor.prototype.visitTypeAnnotation = function(node) {
11644 if (node.typeName == null) return this.types.dynamicType; 11252 if (node.typeName == null) return this.types.dynamicType;
11645 var name = node.typeName.get$source(); 11253 var name = node.typeName.get$source();
11646 var type = this.types.lookup(name); 11254 var type = this.types.lookup(name);
11647 if (type == null) this.fail(node, ('unsupported type ' + name + '')); 11255 if (type == null) this.fail(node, ('unsupported type ' + name + ''));
11648 return type; 11256 return type;
11649 } 11257 }
11650 TypeCheckerVisitor.prototype.visitVariableDefinitions = function(node) { 11258 TypeCheckerVisitor.prototype.visitVariableDefinitions = function(node) {
11651 var $0;
11652 var type = this.typeWithDefault(node.type, this.types.dynamicType); 11259 var type = this.typeWithDefault(node.type, this.types.dynamicType);
11653 if ($eq(type, this.types.voidType)) { 11260 if ($eq(type, this.types.voidType)) {
11654 this.reportTypeWarning(node.type, const$275/*WarningKind.VOID_VARIABLE*/, co nst$13/*const []*/); 11261 this.reportTypeWarning(node.type, const$275/*WarningKind.VOID_VARIABLE*/, co nst$13/*const []*/);
11655 type = this.types.dynamicType; 11262 type = this.types.dynamicType;
11656 } 11263 }
11657 for (var link = node.definitions.nodes; 11264 for (var link = node.definitions.nodes;
11658 !$notnull_bool(link.isEmpty()); link = (($0 = link.get$tail()) && $0.is$Link$ Node())) { 11265 !link.isEmpty(); link = link.get$tail()) {
11659 var initialization = (($0 = link.get$head()) && $0.is$Node()); 11266 var initialization = link.get$head();
11660 this.compiler.ensure((initialization instanceof Identifier) || (initializati on instanceof Send)); 11267 this.compiler.ensure((initialization instanceof Identifier) || (initializati on instanceof Send));
11661 if ((initialization instanceof Send)) { 11268 if ((initialization instanceof Send)) {
11662 var initializer = this.nonVoidType((($0 = link.get$head()) && $0.is$Node() )); 11269 var initializer = this.nonVoidType(link.get$head());
11663 this.checkAssignable(node, type, initializer); 11270 this.checkAssignable(node, type, initializer);
11664 } 11271 }
11665 } 11272 }
11666 return null; 11273 return null;
11667 } 11274 }
11668 // ********** Code for Universe ************** 11275 // ********** Code for Universe **************
11669 function Universe() { 11276 function Universe() {
11670 this.elements = $map([]); 11277 this.elements = $map([]);
11671 this.generatedCode = $map([]); 11278 this.generatedCode = $map([]);
11672 this.scope = new Element(const$2, null, null); 11279 this.scope = new Element(const$2, null, null);
11673 // Initializers done 11280 // Initializers done
11674 } 11281 }
11675 Universe.prototype.find = function(name) { 11282 Universe.prototype.find = function(name) {
11676 var $0; 11283 return this.elements.$index(name);
11677 return (($0 = this.elements.$index(name)) && $0.is$Element());
11678 } 11284 }
11679 Universe.prototype.define = function(element) { 11285 Universe.prototype.define = function(element) {
11680 $assert(this.elements.$index(element.name) == null, "elements[element.name] == null", "universe.dart", 20, 12);
11681 this.elements.$setindex(element.name, element); 11286 this.elements.$setindex(element.name, element);
11682 } 11287 }
11683 Universe.prototype.addGeneratedCode = function(element, code) { 11288 Universe.prototype.addGeneratedCode = function(element, code) {
11684 this.generatedCode.$setindex(element, code); 11289 this.generatedCode.$setindex(element, code);
11685 } 11290 }
11686 // ********** Code for top level ************** 11291 // ********** Code for top level **************
11687 function unreachable() { 11292 function unreachable() {
11688 $throw(const$295/*const Exception("Internal Error (Leg): UNREACHABLE")*/); 11293 $throw(const$295/*const Exception("Internal Error (Leg): UNREACHABLE")*/);
11689 } 11294 }
11690 function compile(world) { 11295 function compile(world) {
11691 var file = world.readFile(options.dartScript); 11296 var file = world.readFile(options.dartScript);
11692 var script = new leg_Script(file); 11297 var script = new leg_Script(file);
11693 var compiler = new WorldCompiler(world, script); 11298 var compiler = new WorldCompiler(world, script);
11694 return compiler.run(); 11299 return compiler.run();
11695 } 11300 }
11696 // ********** Library lang ************** 11301 // ********** Library lang **************
11697 // ********** Code for CodeWriter ************** 11302 // ********** Code for CodeWriter **************
11698 function CodeWriter() { 11303 function CodeWriter() {
11699 this._indentation = 0 11304 this._indentation = 0
11700 this._pendingIndent = false 11305 this._pendingIndent = false
11701 this.writeComments = true 11306 this.writeComments = true
11702 this._buf = new StringBufferImpl(""); 11307 this._buf = new StringBufferImpl("");
11703 // Initializers done 11308 // Initializers done
11704 } 11309 }
11705 CodeWriter.prototype.is$CodeWriter = function(){return this;};
11706 CodeWriter.prototype.get$text = function() { 11310 CodeWriter.prototype.get$text = function() {
11707 return this._buf.toString(); 11311 return this._buf.toString();
11708 } 11312 }
11709 CodeWriter.prototype._indent = function() { 11313 CodeWriter.prototype._indent = function() {
11710 this._pendingIndent = false; 11314 this._pendingIndent = false;
11711 for (var i = 0; 11315 for (var i = 0;
11712 i < this._indentation; i++) { 11316 i < this._indentation; i++) {
11713 this._buf.add(' '/*CodeWriter.INDENTATION*/); 11317 this._buf.add(' '/*CodeWriter.INDENTATION*/);
11714 } 11318 }
11715 } 11319 }
11716 CodeWriter.prototype.comment = function(text) { 11320 CodeWriter.prototype.comment = function(text) {
11717 if ($notnull_bool(this.writeComments)) { 11321 if (this.writeComments) {
11718 this.writeln(text); 11322 this.writeln(text);
11719 } 11323 }
11720 } 11324 }
11721 CodeWriter.prototype.write = function(text) { 11325 CodeWriter.prototype.write = function(text) {
11722 if (text.length == 0) return; 11326 if (text.length == 0) return;
11723 if ($notnull_bool(this._pendingIndent)) this._indent(); 11327 if (this._pendingIndent) this._indent();
11724 if (text.indexOf('\n', 0) != -1) { 11328 if (text.indexOf('\n', 0) != -1) {
11725 var lines = text.split('\n'); 11329 var lines = text.split('\n');
11726 for (var i = 0; 11330 for (var i = 0;
11727 i < lines.length - 1; i++) { 11331 i < lines.length - 1; i++) {
11728 this.writeln($assert_String(lines.$index(i))); 11332 this.writeln(lines.$index(i));
11729 } 11333 }
11730 this.write($assert_String(lines.$index(lines.length - 1))); 11334 this.write(lines.$index(lines.length - 1));
11731 } 11335 }
11732 else { 11336 else {
11733 this._buf.add(text); 11337 this._buf.add(text);
11734 } 11338 }
11735 } 11339 }
11736 CodeWriter.prototype.writeln = function(text) { 11340 CodeWriter.prototype.writeln = function(text) {
11737 if (text != null) { 11341 if (text != null) {
11738 this.write(text); 11342 this.write(text);
11739 } 11343 }
11740 if (!text.endsWith('\n')) this._buf.add('\n'/*CodeWriter.NEWLINE*/); 11344 if (!text.endsWith('\n')) this._buf.add('\n'/*CodeWriter.NEWLINE*/);
(...skipping 23 matching lines...) Expand all
11764 this.useMap = false 11368 this.useMap = false
11765 this.useAssert = false 11369 this.useAssert = false
11766 this.useNotNullBool = false 11370 this.useNotNullBool = false
11767 this.useIndex = false 11371 this.useIndex = false
11768 this.useSetIndex = false 11372 this.useSetIndex = false
11769 this.useToString = false 11373 this.useToString = false
11770 this._usedOperators = $map([]); 11374 this._usedOperators = $map([]);
11771 // Initializers done 11375 // Initializers done
11772 } 11376 }
11773 CoreJs.prototype.useOperator = function(name) { 11377 CoreJs.prototype.useOperator = function(name) {
11774 if ($notnull_bool($ne(this._usedOperators.$index(name), null))) return; 11378 if ($ne(this._usedOperators.$index(name), null)) return;
11775 var code; 11379 var code;
11776 switch (name) { 11380 switch (name) {
11777 case '\$ne': 11381 case '\$ne':
11778 11382
11779 code = "function $ne(x, y) {\n if (x == null) return y != null;\n return (typeof(x) == 'number' && typeof(y) == 'number') ||\n (typeof(x) == 'bo olean' && typeof(y) == 'boolean') ||\n (typeof(x) == 'string' && typeof( y) == 'string')\n ? x != y : !x.$eq(y);\n}"; 11383 code = "function $ne(x, y) {\n if (x == null) return y != null;\n return (typeof(x) == 'number' && typeof(y) == 'number') ||\n (typeof(x) == 'bo olean' && typeof(y) == 'boolean') ||\n (typeof(x) == 'string' && typeof( y) == 'string')\n ? x != y : !x.$eq(y);\n}";
11780 break; 11384 break;
11781 11385
11782 case '\$eq': 11386 case '\$eq':
11783 11387
11784 code = "function $eq(x, y) {\n if (x == null) return y == null;\n return (typeof(x) == 'number' && typeof(y) == 'number') ||\n (typeof(x) == 'bo olean' && typeof(y) == 'boolean') ||\n (typeof(x) == 'string' && typeof( y) == 'string')\n ? x == y : x.$eq(y);\n}\n// TODO(jimhug): Should this or sh ould it not match equals?\nObject.prototype.$eq = function(other) { return this === other; }"; 11388 code = "function $eq(x, y) {\n if (x == null) return y == null;\n return (typeof(x) == 'number' && typeof(y) == 'number') ||\n (typeof(x) == 'bo olean' && typeof(y) == 'boolean') ||\n (typeof(x) == 'string' && typeof( y) == 'string')\n ? x == y : x.$eq(y);\n}\n// TODO(jimhug): Should this or sh ould it not match equals?\nObject.prototype.$eq = function(other) { return this === other; }";
(...skipping 28 matching lines...) Expand all
11813 default: 11417 default:
11814 11418
11815 var op = TokenKind.rawOperatorFromMethod(name); 11419 var op = TokenKind.rawOperatorFromMethod(name);
11816 code = ("function " + name + "(x, y) {\n return (typeof(x) == 'number' && typeof(y) == 'number')\n ? x " + op + " y : x." + name + "(y);\n}"); 11420 code = ("function " + name + "(x, y) {\n return (typeof(x) == 'number' && typeof(y) == 'number')\n ? x " + op + " y : x." + name + "(y);\n}");
11817 break; 11421 break;
11818 11422
11819 } 11423 }
11820 this._usedOperators.$setindex(name, code); 11424 this._usedOperators.$setindex(name, code);
11821 } 11425 }
11822 CoreJs.prototype.generate = function(w) { 11426 CoreJs.prototype.generate = function(w) {
11823 if ($notnull_bool(this.useVarMethod)) { 11427 if (this.useVarMethod) {
11824 this.useTypeNameOf = true; 11428 this.useTypeNameOf = true;
11825 w.writeln("function $varMethod(name, methods) {\n Object.prototype[name] = function() {\n $patchMethod(this, name, methods);\n return this[name].appl y(this, Array.prototype.slice.call(arguments));\n };\n}\nfunction $patchMethod( obj, name, methods) {\n // Get the prototype to patch.\n // Don't overwrite an existing stub, like the one on Object.prototype\n var proto = Object.getProtot ypeOf(obj);\n if (!proto || proto.hasOwnProperty(name)) proto = obj;\n var met hod;\n while (obj && !(method = methods[obj.$typeNameOf()])) {\n obj = Objec t.getPrototypeOf(obj);\n }\n obj[name] = method || methods['Object'];\n}"); 11429 w.writeln("function $varMethod(name, methods) {\n Object.prototype[name] = function() {\n $patchMethod(this, name, methods);\n return this[name].appl y(this, Array.prototype.slice.call(arguments));\n };\n}\nfunction $patchMethod( obj, name, methods) {\n // Get the prototype to patch.\n // Don't overwrite an existing stub, like the one on Object.prototype\n var proto = Object.getProtot ypeOf(obj);\n if (!proto || proto.hasOwnProperty(name)) proto = obj;\n var met hod;\n while (obj && !(method = methods[obj.$typeNameOf()])) {\n obj = Objec t.getPrototypeOf(obj);\n }\n obj[name] = method || methods['Object'];\n}");
11826 } 11430 }
11827 if ($notnull_bool(this.useGenStub)) { 11431 if (this.useGenStub) {
11828 this.useThrow = true; 11432 this.useThrow = true;
11829 w.writeln("/**\n * Generates a dynamic call stub for a function.\n * Our goa l is to create a stub method like this on-the-fly:\n * function($0, $1, captur e) { this($0, $1, true, capture); }\n *\n * This stub then replaces the dynamic one on Function, with one that is\n * specialized for that particular function, taking into account its default\n * arguments.\n */\nFunction.prototype.$genStub = function(argsLength, names) {\n // TODO(jmesserly): only emit $genStub if ac tually needed\n\n // Fast path: if no named arguments and arg count matches\n if (this.length == argsLength && !names) {\n return this;\n }\n\n function $throwArgMismatch() {\n // TODO(jmesserly): better error message\n $throw( new ClosureArgumentMismatchException());\n }\n\n var paramsNamed = this.$optio nal ? (this.$optional.length / 2) : 0;\n var paramsBare = this.length - paramsN amed;\n var argsNamed = names ? names.length : 0;\n var argsBare = argsLength - argsNamed;\n\n // Check we got the right number of arguments\n if (argsBare < paramsBare || argsLength > this.length ||\n argsNamed > paramsNamed) {\n return $throwArgMismatch;\n }\n\n // First, fill in all of the default valu es\n var p = new Array(paramsBare);\n if (paramsNamed) {\n p = p.concat(thi s.$optional.slice(paramsNamed));\n }\n // Fill in positional args\n var a = n ew Array(argsLength);\n for (var i = 0; i < argsBare; i++) {\n p[i] = a[i] = '$' + i;\n }\n // Then overwrite with supplied values for optional args\n va r lastParameterIndex;\n var namesInOrder = true;\n for (var i = 0; i < argsNam ed; i++) {\n var name = names[i];\n a[i + argsBare] = name;\n var j = t his.$optional.indexOf(name, 0);\n if (j < 0 || j >= paramsNamed) {\n ret urn $throwArgMismatch;\n } else if (lastParameterIndex && lastParameterIndex > j) {\n namesInOrder = false;\n }\n p[j + paramsBare] = name;\n l astParameterIndex = j;\n }\n\n if (this.length == argsLength && namesInOrder) {\n // Fast path #2: named arguments, but they're in order.\n return this; \n }\n\n // Note: using Function instead of 'eval' to get a clean scope.\n // TODO(jmesserly): evaluate the performance of these stubs.\n var f = 'function( ' + a.join(',') + '){return $f(' + p.join(',') + ');}';\n return new Function(' $f', 'return ' + f + '').call(null, this);\n}"); 11433 w.writeln("/**\n * Generates a dynamic call stub for a function.\n * Our goa l is to create a stub method like this on-the-fly:\n * function($0, $1, captur e) { this($0, $1, true, capture); }\n *\n * This stub then replaces the dynamic one on Function, with one that is\n * specialized for that particular function, taking into account its default\n * arguments.\n */\nFunction.prototype.$genStub = function(argsLength, names) {\n // TODO(jmesserly): only emit $genStub if ac tually needed\n\n // Fast path: if no named arguments and arg count matches\n if (this.length == argsLength && !names) {\n return this;\n }\n\n function $throwArgMismatch() {\n // TODO(jmesserly): better error message\n $throw( new ClosureArgumentMismatchException());\n }\n\n var paramsNamed = this.$optio nal ? (this.$optional.length / 2) : 0;\n var paramsBare = this.length - paramsN amed;\n var argsNamed = names ? names.length : 0;\n var argsBare = argsLength - argsNamed;\n\n // Check we got the right number of arguments\n if (argsBare < paramsBare || argsLength > this.length ||\n argsNamed > paramsNamed) {\n return $throwArgMismatch;\n }\n\n // First, fill in all of the default valu es\n var p = new Array(paramsBare);\n if (paramsNamed) {\n p = p.concat(thi s.$optional.slice(paramsNamed));\n }\n // Fill in positional args\n var a = n ew Array(argsLength);\n for (var i = 0; i < argsBare; i++) {\n p[i] = a[i] = '$' + i;\n }\n // Then overwrite with supplied values for optional args\n va r lastParameterIndex;\n var namesInOrder = true;\n for (var i = 0; i < argsNam ed; i++) {\n var name = names[i];\n a[i + argsBare] = name;\n var j = t his.$optional.indexOf(name, 0);\n if (j < 0 || j >= paramsNamed) {\n ret urn $throwArgMismatch;\n } else if (lastParameterIndex && lastParameterIndex > j) {\n namesInOrder = false;\n }\n p[j + paramsBare] = name;\n l astParameterIndex = j;\n }\n\n if (this.length == argsLength && namesInOrder) {\n // Fast path #2: named arguments, but they're in order.\n return this; \n }\n\n // Note: using Function instead of 'eval' to get a clean scope.\n // TODO(jmesserly): evaluate the performance of these stubs.\n var f = 'function( ' + a.join(',') + '){return $f(' + p.join(',') + ');}';\n return new Function(' $f', 'return ' + f + '').call(null, this);\n}");
11830 } 11434 }
11831 if ($notnull_bool(this.useStackTraceOf)) { 11435 if (this.useStackTraceOf) {
11832 w.writeln("function $stackTraceOf(e) {\n // TODO(jmesserly): we shouldn't b e relying on the e.stack property.\n // Need to mangle it.\n return e.stack ? e.stack : null;\n}"); 11436 w.writeln("function $stackTraceOf(e) {\n // TODO(jmesserly): we shouldn't b e relying on the e.stack property.\n // Need to mangle it.\n return e.stack ? e.stack : null;\n}");
11833 } 11437 }
11834 if ($notnull_bool(this.useToDartException)) { 11438 if (this.useToDartException) {
11835 w.writeln("// Translate a JavaScript exception to a Dart exception\n// TODO( jmesserly): cross browser support. This is Chrome specific.\nfunction $toDartExc eption(e) {\n var res = e;\n if (e instanceof TypeError) {\n switch(e.type) {\n case 'property_not_function':\n case 'called_non_callable':\n if (e.arguments[0] == null) {\n res = new NullPointerException();\n } else {\n res = new ObjectNotClosureException();\n }\n break;\n case 'non_object_property_call':\n case 'non_object_pr operty_load':\n res = new NullPointerException();\n break;\n case 'undefined_method':\n if (e.arguments[0] == 'call' || e.arguments[0] == 'apply') {\n res = new ObjectNotClosureException();\n } else {\n // TODO(jmesserly): can this ever happen?\n res = new NoS uchMethodException('', e.arguments[0], []);\n }\n break;\n }\n } else if (e instanceof RangeError) {\n if (e.message.indexOf('call stack') >= 0) {\n res = new StackOverflowException();\n }\n }\n // TODO(jmesse rly): setting the stack property is not a long term solution.\n // Also it caus es the exception to print as if it were a TypeError or\n // RangeError, instead of using the proper toString.\n res.stack = e.stack;\n return res;\n}"); 11439 w.writeln("// Translate a JavaScript exception to a Dart exception\n// TODO( jmesserly): cross browser support. This is Chrome specific.\nfunction $toDartExc eption(e) {\n var res = e;\n if (e instanceof TypeError) {\n switch(e.type) {\n case 'property_not_function':\n case 'called_non_callable':\n if (e.arguments[0] == null) {\n res = new NullPointerException();\n } else {\n res = new ObjectNotClosureException();\n }\n break;\n case 'non_object_property_call':\n case 'non_object_pr operty_load':\n res = new NullPointerException();\n break;\n case 'undefined_method':\n if (e.arguments[0] == 'call' || e.arguments[0] == 'apply') {\n res = new ObjectNotClosureException();\n } else {\n // TODO(jmesserly): can this ever happen?\n res = new NoS uchMethodException('', e.arguments[0], []);\n }\n break;\n }\n } else if (e instanceof RangeError) {\n if (e.message.indexOf('call stack') >= 0) {\n res = new StackOverflowException();\n }\n }\n // TODO(jmesse rly): setting the stack property is not a long term solution.\n // Also it caus es the exception to print as if it were a TypeError or\n // RangeError, instead of using the proper toString.\n res.stack = e.stack;\n return res;\n}");
11836 } 11440 }
11837 if ($notnull_bool(this.useNotNullBool)) { 11441 if (this.useNotNullBool) {
11838 this.useThrow = true; 11442 this.useThrow = true;
11839 w.writeln("function $notnull_bool(test) {\n return (test === true || test = == false) ? test : test.is$bool(); // TypeError\n}"); 11443 w.writeln("function $notnull_bool(test) {\n return (test === true || test = == false) ? test : test.is$bool(); // TypeError\n}");
11840 } 11444 }
11841 if ($notnull_bool(this.useAssert)) { 11445 if (this.useAssert) {
11842 this.useThrow = true; 11446 this.useThrow = true;
11843 w.writeln("function $assert(test, text, url, line, column) {\n if (typeof t est == 'function') test = test();\n if (!test) $throw(new AssertError(text, url , line, column));\n}"); 11447 w.writeln("function $assert(test, text, url, line, column) {\n if (typeof t est == 'function') test = test();\n if (!test) $throw(new AssertError(text, url , line, column));\n}");
11844 } 11448 }
11845 if ($notnull_bool(this.useThrow)) { 11449 if (this.useThrow) {
11846 w.writeln("function $throw(e) {\n // If e is not a value, we can use V8's c aptureStackTrace utility method.\n // TODO(jmesserly): capture the stack trace on other JS engines.\n if (e && (typeof e == 'object') && Error.captureStackTra ce) {\n // TODO(jmesserly): this will clobber the e.stack property\n Error .captureStackTrace(e, $throw);\n }\n throw e;\n}"); 11450 w.writeln("function $throw(e) {\n // If e is not a value, we can use V8's c aptureStackTrace utility method.\n // TODO(jmesserly): capture the stack trace on other JS engines.\n if (e && (typeof e == 'object') && Error.captureStackTra ce) {\n // TODO(jmesserly): this will clobber the e.stack property\n Error .captureStackTrace(e, $throw);\n }\n throw e;\n}");
11847 } 11451 }
11848 if ($notnull_bool(this.useMap)) { 11452 if (this.useMap) {
11849 w.writeln("function $map(items) {\n var ret = new HashMapImplementation();\ n for (var i=0; i < items.length;) {\n ret.$setindex(items[i++], items[i++]) ;\n }\n return ret;\n}"); 11453 w.writeln("function $map(items) {\n var ret = new HashMapImplementation();\ n for (var i=0; i < items.length;) {\n ret.$setindex(items[i++], items[i++]) ;\n }\n return ret;\n}");
11850 } 11454 }
11851 if ($notnull_bool(this.useToString)) { 11455 if (this.useToString) {
11852 w.writeln("function $toString(o) {\n if (o == null) return 'null';\n var t = typeof(o);\n if (t == 'object') { return o.toString(); }\n else if (t == 's tring') { return o; }\n else if (t == 'bool') { return ''+o; }\n else if (t == 'number') { return ''+o; }\n else return o.toString();\n}"); 11456 w.writeln("function $toString(o) {\n if (o == null) return 'null';\n var t = typeof(o);\n if (t == 'object') { return o.toString(); }\n else if (t == 's tring') { return o; }\n else if (t == 'bool') { return ''+o; }\n else if (t == 'number') { return ''+o; }\n else return o.toString();\n}");
11853 } 11457 }
11854 if ($notnull_bool(this.useTypeNameOf)) { 11458 if (this.useTypeNameOf) {
11855 w.writeln("Object.prototype.$typeNameOf = function() {\n if ((typeof(window ) != 'undefined' && window.constructor.name == 'DOMWindow')\n || typeof(pro cess) != 'undefined') { // fast-path for Chrome and Node\n return this.constr uctor.name;\n }\n var str = Object.prototype.toString.call(this);\n return st r.substring(8, str.length - 1);\n}"); 11459 w.writeln("Object.prototype.$typeNameOf = function() {\n if ((typeof(window ) != 'undefined' && window.constructor.name == 'DOMWindow')\n || typeof(pro cess) != 'undefined') { // fast-path for Chrome and Node\n return this.constr uctor.name;\n }\n var str = Object.prototype.toString.call(this);\n return st r.substring(8, str.length - 1);\n}");
11856 } 11460 }
11857 if ($notnull_bool(this.useIndex)) { 11461 if (this.useIndex) {
11858 w.writeln("Object.prototype.$index = function(i) { return this[i]; }\nArray. prototype.$index = function(i) { return this[i]; }\nString.prototype.$index = fu nction(i) { return this[i]; }"); 11462 w.writeln("Object.prototype.$index = function(i) { return this[i]; }\nArray. prototype.$index = function(i) { return this[i]; }\nString.prototype.$index = fu nction(i) { return this[i]; }");
11859 } 11463 }
11860 if ($notnull_bool(this.useSetIndex)) { 11464 if (this.useSetIndex) {
11861 w.writeln("Object.prototype.$setindex = function(i, value) { return this[i] = value; }\nArray.prototype.$setindex = function(i, value) { return this[i] = va lue; }"); 11465 w.writeln("Object.prototype.$setindex = function(i, value) { return this[i] = value; }\nArray.prototype.$setindex = function(i, value) { return this[i] = va lue; }");
11862 } 11466 }
11863 var $list = orderValuesByKeys(this._usedOperators); 11467 var $list = orderValuesByKeys(this._usedOperators);
11864 for (var $i = 0;$i < $list.length; $i++) { 11468 for (var $i = 0;$i < $list.length; $i++) {
11865 var opImpl = $list.$index($i); 11469 var opImpl = $list.$index($i);
11866 w.writeln($assert_String(opImpl)); 11470 w.writeln(opImpl);
11867 } 11471 }
11868 } 11472 }
11869 CoreJs.prototype.generate$1 = function($0) { 11473 CoreJs.prototype.generate$1 = function($0) {
11870 return this.generate(($0 && $0.is$CodeWriter())); 11474 return this.generate($0);
11871 }; 11475 };
11872 // ********** Code for WorldGenerator ************** 11476 // ********** Code for WorldGenerator **************
11873 function WorldGenerator(main, writer) { 11477 function WorldGenerator(main, writer) {
11874 this._inheritsGenerated = false 11478 this._inheritsGenerated = false
11875 this.main = main; 11479 this.main = main;
11876 this.writer = writer; 11480 this.writer = writer;
11877 this.globals = $map([]); 11481 this.globals = $map([]);
11878 this.corejs = new CoreJs(); 11482 this.corejs = new CoreJs();
11879 // Initializers done 11483 // Initializers done
11880 } 11484 }
11881 WorldGenerator.prototype.run = function() { 11485 WorldGenerator.prototype.run = function() {
11882 var $0;
11883 var metaGen = new MethodGenerator(this.main, null); 11486 var metaGen = new MethodGenerator(this.main, null);
11884 var mainCall = this.main.invoke((metaGen && metaGen.is$MethodGenerator()), nul l, null, Arguments.get$EMPTY(), false); 11487 var mainCall = this.main.invoke(metaGen, null, null, Arguments.get$EMPTY(), fa lse);
11885 this.main.declaringType.markUsed(); 11488 this.main.declaringType.markUsed();
11886 world.corelib.types.$index('BadNumberFormatException').markUsed$0(); 11489 world.corelib.types.$index('BadNumberFormatException').markUsed$0();
11887 world.get$coreimpl().types.$index('NumImplementation').markUsed$0(); 11490 world.get$coreimpl().types.$index('NumImplementation').markUsed$0();
11888 world.get$coreimpl().types.$index('StringImplementation').markUsed$0(); 11491 world.get$coreimpl().types.$index('StringImplementation').markUsed$0();
11889 world.get$coreimpl().types.$index('MatchImplementation').markUsed$0(); 11492 world.get$coreimpl().types.$index('MatchImplementation').markUsed$0();
11890 this.genMethod((($0 = world.get$coreimpl().types.$index('MatchImplementation') .getConstructor$1('')) && $0.is$Member())); 11493 this.genMethod(world.get$coreimpl().types.$index('MatchImplementation').getCon structor$1(''));
11891 this.writeTypes(world.get$coreimpl()); 11494 this.writeTypes(world.get$coreimpl());
11892 this.writeTypes(world.corelib); 11495 this.writeTypes(world.corelib);
11893 this.writeTypes(this.main.declaringType.get$library()); 11496 this.writeTypes(this.main.declaringType.get$library());
11894 this._writeGlobals(); 11497 this._writeGlobals();
11895 this.writer.writeln(('RunEntry(function() {' + mainCall.code + ';}, []);')); 11498 this.writer.writeln(('RunEntry(function() {' + mainCall.code + ';}, []);'));
11896 } 11499 }
11897 WorldGenerator.prototype.globalForStaticField = function(field, fieldValue, depe ndencies) { 11500 WorldGenerator.prototype.globalForStaticField = function(field, fieldValue, depe ndencies) {
11898 var $0;
11899 var fullname = ("" + field.declaringType.get$jsname() + "." + field.get$jsname () + ""); 11501 var fullname = ("" + field.declaringType.get$jsname() + "." + field.get$jsname () + "");
11900 if (!this.globals.containsKey(fullname)) { 11502 if (!this.globals.containsKey(fullname)) {
11901 this.globals.$setindex(fullname, GlobalValue.GlobalValue$fromStatic$factory( field, fieldValue, dependencies)); 11503 this.globals.$setindex(fullname, GlobalValue.GlobalValue$fromStatic$factory( field, fieldValue, dependencies));
11902 } 11504 }
11903 return (($0 = this.globals.$index(fullname)) && $0.is$GlobalValue()); 11505 return this.globals.$index(fullname);
11904 } 11506 }
11905 WorldGenerator.prototype.globalForConst = function(exp, dependencies) { 11507 WorldGenerator.prototype.globalForConst = function(exp, dependencies) {
11906 var $0;
11907 var code = exp.canonicalCode; 11508 var code = exp.canonicalCode;
11908 if (!this.globals.containsKey(code)) { 11509 if (!this.globals.containsKey(code)) {
11909 this.globals.$setindex(code, GlobalValue.GlobalValue$fromConst$factory(this. globals.get$length(), exp, dependencies)); 11510 this.globals.$setindex(code, GlobalValue.GlobalValue$fromConst$factory(this. globals.get$length(), exp, dependencies));
11910 } 11511 }
11911 return (($0 = this.globals.$index(code)) && $0.is$GlobalValue()); 11512 return this.globals.$index(code);
11912 } 11513 }
11913 WorldGenerator.prototype.writeTypes = function(lib) { 11514 WorldGenerator.prototype.writeTypes = function(lib) {
11914 if ($notnull_bool(lib.isWritten)) return; 11515 if (lib.isWritten) return;
11915 lib.isWritten = true; 11516 lib.isWritten = true;
11916 var $list = lib.imports; 11517 var $list = lib.imports;
11917 for (var $i = 0;$i < $list.length; $i++) { 11518 for (var $i = 0;$i < $list.length; $i++) {
11918 var import_ = $list.$index($i); 11519 var import_ = $list.$index($i);
11919 this.writeTypes(import_.get$library()); 11520 this.writeTypes(import_.get$library());
11920 } 11521 }
11921 for (var i = 0; 11522 for (var i = 0;
11922 i < lib.sources.length; i++) { 11523 i < lib.sources.length; i++) {
11923 lib.sources.$index(i).orderInLibrary = i; 11524 lib.sources.$index(i).orderInLibrary = i;
11924 } 11525 }
11925 this.writer.comment(('// ********** Library ' + lib.name + ' **************') ); 11526 this.writer.comment(('// ********** Library ' + lib.name + ' **************') );
11926 if ($notnull_bool(lib.get$isCore())) { 11527 if (lib.get$isCore()) {
11927 this.writer.comment('// ********** Natives dart:core **************'); 11528 this.writer.comment('// ********** Natives dart:core **************');
11928 this.corejs.generate(this.writer); 11529 this.corejs.generate(this.writer);
11929 } 11530 }
11930 var $list = lib.natives; 11531 var $list = lib.natives;
11931 for (var $i = 0;$i < $list.length; $i++) { 11532 for (var $i = 0;$i < $list.length; $i++) {
11932 var file = $list.$index($i); 11533 var file = $list.$index($i);
11933 var filename = basename(file.filename); 11534 var filename = basename(file.filename);
11934 this.writer.comment(('// ********** Natives ' + filename + ' ************** ')); 11535 this.writer.comment(('// ********** Natives ' + filename + ' ************** '));
11935 this.writer.writeln(file.get$text()); 11536 this.writer.writeln(file.get$text());
11936 } 11537 }
11937 lib.topType.markUsed(); 11538 lib.topType.markUsed();
11938 var $list = this._orderValues(lib.types); 11539 var $list = this._orderValues(lib.types);
11939 for (var $i = 0;$i < $list.length; $i++) { 11540 for (var $i = 0;$i < $list.length; $i++) {
11940 var type = $list.$index($i); 11541 var type = $list.$index($i);
11941 if ($notnull_bool(type.get$isUsed()) && $notnull_bool(type.get$isClass())) { 11542 if (type.get$isUsed() && type.get$isClass()) {
11942 this.writeType((type && type.is$lang_Type())); 11543 this.writeType(type);
11943 if ($notnull_bool(type.get$isGeneric())) { 11544 if (type.get$isGeneric()) {
11944 var $list0 = this._orderValues(type._concreteTypes); 11545 var $list0 = this._orderValues(type._concreteTypes);
11945 for (var $i0 = 0;$i0 < $list0.length; $i0++) { 11546 for (var $i0 = 0;$i0 < $list0.length; $i0++) {
11946 var ct = $list0.$index($i0); 11547 var ct = $list0.$index($i0);
11947 this.writeType((ct && ct.is$lang_Type())); 11548 this.writeType(ct);
11948 } 11549 }
11949 } 11550 }
11950 } 11551 }
11951 if ($notnull_bool(type.get$isFunction()) && type.varStubs != null) { 11552 if (type.get$isFunction() && type.varStubs != null) {
11952 this.writer.comment(('// ********** Code for ' + type.get$jsname() + ' *** ***********')); 11553 this.writer.comment(('// ********** Code for ' + type.get$jsname() + ' *** ***********'));
11953 this._writeDynamicStubs((type && type.is$lang_Type())); 11554 this._writeDynamicStubs(type);
11954 } 11555 }
11955 if (type.typeCheckCode != null) { 11556 if (type.typeCheckCode != null) {
11956 this.writer.writeln(type.typeCheckCode); 11557 this.writer.writeln(type.typeCheckCode);
11957 } 11558 }
11958 } 11559 }
11959 } 11560 }
11960 WorldGenerator.prototype.genMethod = function(meth, enclosingMethod) { 11561 WorldGenerator.prototype.genMethod = function(meth, enclosingMethod) {
11961 if (!$notnull_bool(meth.isGenerated) && !$notnull_bool(meth.get$isAbstract()) && $notnull_bool($ne(meth.get$definition(), null))) { 11562 if (!meth.isGenerated && !meth.get$isAbstract() && $ne(meth.get$definition(), null)) {
11962 new MethodGenerator(meth, enclosingMethod).run(); 11563 new MethodGenerator(meth, enclosingMethod).run();
11963 } 11564 }
11964 } 11565 }
11965 WorldGenerator.prototype._maybeIsTest = function(onType, checkType) { 11566 WorldGenerator.prototype._maybeIsTest = function(onType, checkType) {
11966 if (!$notnull_bool(checkType.isTested)) return; 11567 if (!checkType.isTested) return;
11967 var value = 'false'; 11568 var value = 'false';
11968 if ($notnull_bool(onType.isSubtypeOf(checkType))) { 11569 if (onType.isSubtypeOf(checkType)) {
11969 value = 'function(){return this;}'; 11570 value = 'function(){return this;}';
11970 } 11571 }
11971 this.writer.writeln(('' + onType.get$jsname() + '.prototype.is\$' + checkType. get$jsname() + ' = ') + ('' + value + ';')); 11572 this.writer.writeln(('' + onType.get$jsname() + '.prototype.is\$' + checkType. get$jsname() + ' = ') + ('' + value + ';'));
11972 } 11573 }
11973 WorldGenerator.prototype.writeType = function(type) { 11574 WorldGenerator.prototype.writeType = function(type) {
11974 var $0;
11975 if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$librar y(), world.get$coreimpl()) && type.name.startsWith('ListFactory')) { 11575 if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$librar y(), world.get$coreimpl()) && type.name.startsWith('ListFactory')) {
11976 this.writer.writeln(('' + type.get$jsname() + ' = ' + type.get$genericType() .get$jsname() + ';')); 11576 this.writer.writeln(('' + type.get$jsname() + ' = ' + type.get$genericType() .get$jsname() + ';'));
11977 return; 11577 return;
11978 } 11578 }
11979 var typeName = type.get$jsname() != null ? type.get$jsname() : 'top level'; 11579 var typeName = type.get$jsname() != null ? type.get$jsname() : 'top level';
11980 this.writer.comment(('// ********** Code for ' + typeName + ' **************') ); 11580 this.writer.comment(('// ********** Code for ' + typeName + ' **************') );
11981 if ($notnull_bool(type.get$isNativeType()) && !$notnull_bool(type.get$isTop()) ) { 11581 if (type.get$isNativeType() && !type.get$isTop()) {
11982 var nativeName = type.get$definition().get$nativeType(); 11582 var nativeName = type.get$definition().get$nativeType();
11983 if ($notnull_bool($eq(nativeName, ''))) { 11583 if ($eq(nativeName, '')) {
11984 this.writer.writeln(('function ' + type.get$jsname() + '() {}')); 11584 this.writer.writeln(('function ' + type.get$jsname() + '() {}'));
11985 } 11585 }
11986 else if (type.get$jsname() != nativeName) { 11586 else if (type.get$jsname() != nativeName) {
11987 this.writer.writeln(('' + type.get$jsname() + ' = ' + nativeName + ';')); 11587 this.writer.writeln(('' + type.get$jsname() + ' = ' + nativeName + ';'));
11988 } 11588 }
11989 } 11589 }
11990 if ($notnull_bool(type.get$isTop())) { 11590 if (type.get$isTop()) {
11991 } 11591 }
11992 else if (type.get$constructors().get$length() == 0) { 11592 else if (type.get$constructors().get$length() == 0) {
11993 if (!$notnull_bool(type.get$isNativeType())) { 11593 if (!type.get$isNativeType()) {
11994 this.writer.writeln(('function ' + type.get$jsname() + '() {}')); 11594 this.writer.writeln(('function ' + type.get$jsname() + '() {}'));
11995 } 11595 }
11996 } 11596 }
11997 else { 11597 else {
11998 var standardConstructor = (($0 = type.get$constructors().$index('')) && $0.i s$Member()); 11598 var standardConstructor = type.get$constructors().$index('');
11999 if (standardConstructor == null || standardConstructor.generator == null) { 11599 if (standardConstructor == null || standardConstructor.generator == null) {
12000 if (!$notnull_bool(type.get$isNativeType())) { 11600 if (!type.get$isNativeType()) {
12001 this.writer.writeln(('function ' + type.get$jsname() + '() {}')); 11601 this.writer.writeln(('function ' + type.get$jsname() + '() {}'));
12002 } 11602 }
12003 } 11603 }
12004 else { 11604 else {
12005 standardConstructor.generator.writeDefinition(this.writer, null); 11605 standardConstructor.generator.writeDefinition(this.writer, null);
12006 } 11606 }
12007 var $list = type.get$constructors().getValues(); 11607 var $list = type.get$constructors().getValues();
12008 for (var $i = type.get$constructors().getValues().iterator$0(); $i.hasNext$0 (); ) { 11608 for (var $i = type.get$constructors().getValues().iterator$0(); $i.hasNext$0 (); ) {
12009 var c = $i.next$0(); 11609 var c = $i.next$0();
12010 if ($notnull_bool($ne(c.generator, null)) && $notnull_bool($ne(c, standard Constructor))) { 11610 if ($ne(c.generator, null) && $ne(c, standardConstructor)) {
12011 c.generator.writeDefinition$2(this.writer); 11611 c.generator.writeDefinition$2(this.writer);
12012 } 11612 }
12013 } 11613 }
12014 } 11614 }
12015 if (!$notnull_bool(type.get$isTop())) { 11615 if (!type.get$isTop()) {
12016 if ((type instanceof ConcreteType)) { 11616 if ((type instanceof ConcreteType)) {
12017 this._ensureInheritsHelper(); 11617 this._ensureInheritsHelper();
12018 this.writer.writeln(('\$inherits(' + type.get$jsname() + ', ' + type.get$g enericType().get$jsname() + ');')); 11618 this.writer.writeln(('\$inherits(' + type.get$jsname() + ', ' + type.get$g enericType().get$jsname() + ');'));
12019 } 11619 }
12020 else if (!$notnull_bool(type.get$isNativeType())) { 11620 else if (!type.get$isNativeType()) {
12021 if (type.get$parent() != null && !$notnull_bool(type.get$parent().get$isOb ject())) { 11621 if (type.get$parent() != null && !type.get$parent().get$isObject()) {
12022 this._ensureInheritsHelper(); 11622 this._ensureInheritsHelper();
12023 this.writer.writeln(('\$inherits(' + type.get$jsname() + ', ' + type.get $parent().get$jsname() + ');')); 11623 this.writer.writeln(('\$inherits(' + type.get$jsname() + ', ' + type.get $parent().get$jsname() + ');'));
12024 } 11624 }
12025 } 11625 }
12026 } 11626 }
12027 if (!(type instanceof ConcreteType)) { 11627 if (!(type instanceof ConcreteType)) {
12028 this._maybeIsTest(type, type); 11628 this._maybeIsTest(type, type);
12029 } 11629 }
12030 if (type.get$genericType()._concreteTypes != null) { 11630 if (type.get$genericType()._concreteTypes != null) {
12031 var $list = this._orderValues(type.get$genericType()._concreteTypes); 11631 var $list = this._orderValues(type.get$genericType()._concreteTypes);
12032 for (var $i = 0;$i < $list.length; $i++) { 11632 for (var $i = 0;$i < $list.length; $i++) {
12033 var ct = $list.$index($i); 11633 var ct = $list.$index($i);
12034 this._maybeIsTest(type, (ct && ct.is$lang_Type())); 11634 this._maybeIsTest(type, ct);
12035 } 11635 }
12036 } 11636 }
12037 if (type.get$interfaces() != null) { 11637 if (type.get$interfaces() != null) {
12038 var seen = new HashSetImplementation(); 11638 var seen = new HashSetImplementation();
12039 var worklist = []; 11639 var worklist = [];
12040 worklist.addAll(type.get$interfaces()); 11640 worklist.addAll(type.get$interfaces());
12041 seen.addAll(type.get$interfaces()); 11641 seen.addAll(type.get$interfaces());
12042 while (!worklist.isEmpty()) { 11642 while (!worklist.isEmpty()) {
12043 var interface_ = worklist.removeLast(); 11643 var interface_ = worklist.removeLast();
12044 this._maybeIsTest(type, interface_.get$genericType()); 11644 this._maybeIsTest(type, interface_.get$genericType());
12045 if (interface_.get$genericType()._concreteTypes != null) { 11645 if (interface_.get$genericType()._concreteTypes != null) {
12046 var $list = this._orderValues(interface_.get$genericType()._concreteType s); 11646 var $list = this._orderValues(interface_.get$genericType()._concreteType s);
12047 for (var $i = 0;$i < $list.length; $i++) { 11647 for (var $i = 0;$i < $list.length; $i++) {
12048 var ct = $list.$index($i); 11648 var ct = $list.$index($i);
12049 this._maybeIsTest(type, (ct && ct.is$lang_Type())); 11649 this._maybeIsTest(type, ct);
12050 } 11650 }
12051 } 11651 }
12052 var $list = interface_.get$interfaces(); 11652 var $list = interface_.get$interfaces();
12053 for (var $i = interface_.get$interfaces().iterator$0(); $i.hasNext$0(); ) { 11653 for (var $i = interface_.get$interfaces().iterator$0(); $i.hasNext$0(); ) {
12054 var other = $i.next$0(); 11654 var other = $i.next$0();
12055 if (!seen.contains(other)) { 11655 if (!seen.contains(other)) {
12056 worklist.addLast(other); 11656 worklist.addLast(other);
12057 seen.add(other); 11657 seen.add(other);
12058 } 11658 }
12059 } 11659 }
12060 } 11660 }
12061 } 11661 }
12062 type.get$factories().forEach(this.get$_writeMethod()); 11662 type.get$factories().forEach(this.get$_writeMethod());
12063 var $list = this._orderValues(type.get$members()); 11663 var $list = this._orderValues(type.get$members());
12064 for (var $i = 0;$i < $list.length; $i++) { 11664 for (var $i = 0;$i < $list.length; $i++) {
12065 var member = $list.$index($i); 11665 var member = $list.$index($i);
12066 if ((member instanceof FieldMember)) { 11666 if ((member instanceof FieldMember)) {
12067 this._writeField((member && member.is$FieldMember())); 11667 this._writeField(member);
12068 } 11668 }
12069 if ((member instanceof PropertyMember)) { 11669 if ((member instanceof PropertyMember)) {
12070 this._writeProperty((member && member.is$PropertyMember())); 11670 this._writeProperty(member);
12071 } 11671 }
12072 if ($notnull_bool(member.get$isMethod())) { 11672 if (member.get$isMethod()) {
12073 this._writeMethod((member && member.is$Member())); 11673 this._writeMethod(member);
12074 } 11674 }
12075 } 11675 }
12076 this._writeDynamicStubs(type); 11676 this._writeDynamicStubs(type);
12077 } 11677 }
12078 WorldGenerator.prototype._ensureInheritsHelper = function() { 11678 WorldGenerator.prototype._ensureInheritsHelper = function() {
12079 if ($notnull_bool(this._inheritsGenerated)) return; 11679 if (this._inheritsGenerated) return;
12080 this._inheritsGenerated = true; 11680 this._inheritsGenerated = true;
12081 this.writer.writeln("/** Implements extends for Dart classes on JavaScript pro totypes. */\nfunction $inherits(child, parent) {\n if (child.prototype.__proto_ _) {\n child.prototype.__proto__ = parent.prototype;\n } else {\n functio n tmp() {};\n tmp.prototype = parent.prototype;\n child.prototype = new tm p();\n child.prototype.constructor = child;\n }\n}"); 11681 this.writer.writeln("/** Implements extends for Dart classes on JavaScript pro totypes. */\nfunction $inherits(child, parent) {\n if (child.prototype.__proto_ _) {\n child.prototype.__proto__ = parent.prototype;\n } else {\n functio n tmp() {};\n tmp.prototype = parent.prototype;\n child.prototype = new tm p();\n child.prototype.constructor = child;\n }\n}");
12082 } 11682 }
12083 WorldGenerator.prototype._writeDynamicStubs = function(type) { 11683 WorldGenerator.prototype._writeDynamicStubs = function(type) {
12084 if (type.varStubs != null) { 11684 if (type.varStubs != null) {
12085 var $list = orderValuesByKeys(type.varStubs); 11685 var $list = orderValuesByKeys(type.varStubs);
12086 for (var $i = 0;$i < $list.length; $i++) { 11686 for (var $i = 0;$i < $list.length; $i++) {
12087 var stub = $list.$index($i); 11687 var stub = $list.$index($i);
12088 stub.generate$1(this.writer); 11688 stub.generate$1(this.writer);
12089 } 11689 }
12090 } 11690 }
12091 } 11691 }
12092 WorldGenerator.prototype._writeStaticField = function(field) { 11692 WorldGenerator.prototype._writeStaticField = function(field) {
12093 if ($notnull_bool(field.isFinal)) return; 11693 if (field.isFinal) return;
12094 var fullname = ("" + field.declaringType.get$jsname() + "." + field.get$jsname () + ""); 11694 var fullname = ("" + field.declaringType.get$jsname() + "." + field.get$jsname () + "");
12095 if (this.globals.containsKey(fullname)) { 11695 if (this.globals.containsKey(fullname)) {
12096 var value = this.globals.$index(fullname); 11696 var value = this.globals.$index(fullname);
12097 if ($notnull_bool(field.declaringType.get$isTop()) && !$notnull_bool(field.i sNative)) { 11697 if (field.declaringType.get$isTop() && !field.isNative) {
12098 this.writer.writeln(('var ' + field.get$jsname() + ' = ' + value.exp.code + ';')); 11698 this.writer.writeln(('var ' + field.get$jsname() + ' = ' + value.exp.code + ';'));
12099 } 11699 }
12100 else { 11700 else {
12101 this.writer.writeln(('' + field.declaringType.get$jsname() + '.' + field.g et$jsname() + ' = ' + value.exp.code + ';')); 11701 this.writer.writeln(('' + field.declaringType.get$jsname() + '.' + field.g et$jsname() + ' = ' + value.exp.code + ';'));
12102 } 11702 }
12103 } 11703 }
12104 } 11704 }
12105 WorldGenerator.prototype._writeField = function(field) { 11705 WorldGenerator.prototype._writeField = function(field) {
12106 if ($notnull_bool(field.declaringType.get$isTop()) && !$notnull_bool(field.isN ative) && field.value == null) { 11706 if (field.declaringType.get$isTop() && !field.isNative && field.value == null) {
12107 this.writer.writeln(('var ' + field.get$jsname() + ';')); 11707 this.writer.writeln(('var ' + field.get$jsname() + ';'));
12108 } 11708 }
12109 if ($notnull_bool(field._providePropertySyntax)) { 11709 if (field._providePropertySyntax) {
12110 this.writer.writeln(('' + field.declaringType.get$jsname() + '.prototype.get \$' + field.get$jsname() + ' = ') + ('function() { return this.' + field.get$jsn ame() + '; };')); 11710 this.writer.writeln(('' + field.declaringType.get$jsname() + '.prototype.get \$' + field.get$jsname() + ' = ') + ('function() { return this.' + field.get$jsn ame() + '; };'));
12111 if (!$notnull_bool(field.isFinal)) { 11711 if (!field.isFinal) {
12112 this.writer.writeln(('' + field.declaringType.get$jsname() + '.prototype.s et\$' + field.get$jsname() + ' = ') + ('function(value) { return this.' + field. get$jsname() + ' = value; };')); 11712 this.writer.writeln(('' + field.declaringType.get$jsname() + '.prototype.s et\$' + field.get$jsname() + ' = ') + ('function(value) { return this.' + field. get$jsname() + ' = value; };'));
12113 } 11713 }
12114 } 11714 }
12115 } 11715 }
12116 WorldGenerator.prototype._writeProperty = function(property) { 11716 WorldGenerator.prototype._writeProperty = function(property) {
12117 if (property.getter != null) this._writeMethod(property.getter); 11717 if (property.getter != null) this._writeMethod(property.getter);
12118 if (property.setter != null) this._writeMethod(property.setter); 11718 if (property.setter != null) this._writeMethod(property.setter);
12119 if ($notnull_bool(property._provideFieldSyntax)) { 11719 if (property._provideFieldSyntax) {
12120 this.writer.enterBlock('Object.defineProperty(' + ('' + property.declaringTy pe.get$jsname() + '.prototype, "' + property.get$jsname() + '", {')); 11720 this.writer.enterBlock('Object.defineProperty(' + ('' + property.declaringTy pe.get$jsname() + '.prototype, "' + property.get$jsname() + '", {'));
12121 if (property.getter != null) { 11721 if (property.getter != null) {
12122 this.writer.write(('get: ' + property.declaringType.get$jsname() + '.proto type.' + property.getter.get$jsname() + '')); 11722 this.writer.write(('get: ' + property.declaringType.get$jsname() + '.proto type.' + property.getter.get$jsname() + ''));
12123 this.writer.writeln(property.setter == null ? '' : ','); 11723 this.writer.writeln(property.setter == null ? '' : ',');
12124 } 11724 }
12125 if (property.setter != null) { 11725 if (property.setter != null) {
12126 this.writer.writeln(('set: ' + property.declaringType.get$jsname() + '.pro totype.' + property.setter.get$jsname() + '')); 11726 this.writer.writeln(('set: ' + property.declaringType.get$jsname() + '.pro totype.' + property.setter.get$jsname() + ''));
12127 } 11727 }
12128 this.writer.exitBlock('});'); 11728 this.writer.exitBlock('});');
12129 } 11729 }
(...skipping 19 matching lines...) Expand all
12149 var global = $i.next$0(); 11749 var global = $i.next$0();
12150 if (global.field != null) { 11750 if (global.field != null) {
12151 this._writeStaticField(global.field); 11751 this._writeStaticField(global.field);
12152 } 11752 }
12153 else { 11753 else {
12154 this.writer.writeln(('var ' + global.get$name() + ' = ' + global.exp.code + ';')); 11754 this.writer.writeln(('var ' + global.get$name() + ' = ' + global.exp.code + ';'));
12155 } 11755 }
12156 } 11756 }
12157 } 11757 }
12158 WorldGenerator.prototype._orderValues = function(map) { 11758 WorldGenerator.prototype._orderValues = function(map) {
12159 var $0; 11759 var values = map.getValues();
12160 var values = (($0 = map.getValues()) && $0.is$List());
12161 values.sort(this.get$_compareMembers()); 11760 values.sort(this.get$_compareMembers());
12162 return values; 11761 return values;
12163 } 11762 }
12164 WorldGenerator.prototype._compareMembers = function(x, y) { 11763 WorldGenerator.prototype._compareMembers = function(x, y) {
12165 if (x.get$span() != null && y.get$span() != null) { 11764 if (x.get$span() != null && y.get$span() != null) {
12166 var spans = x.get$span().compareTo(y.get$span()); 11765 var spans = x.get$span().compareTo(y.get$span());
12167 if (spans != 0) return spans; 11766 if (spans != 0) return spans;
12168 } 11767 }
12169 if (x.get$span() == null) return 1; 11768 if (x.get$span() == null) return 1;
12170 if (y.get$span() == null) return -1; 11769 if (y.get$span() == null) return -1;
12171 return $assert_num(x.get$name().compareTo$1(y.get$name())); 11770 return x.get$name().compareTo$1(y.get$name());
12172 } 11771 }
12173 WorldGenerator.prototype.get$_compareMembers = function() { 11772 WorldGenerator.prototype.get$_compareMembers = function() {
12174 return WorldGenerator.prototype._compareMembers.bind(this); 11773 return WorldGenerator.prototype._compareMembers.bind(this);
12175 } 11774 }
12176 WorldGenerator.prototype.useMapFactory = function() { 11775 WorldGenerator.prototype.useMapFactory = function() {
12177 var $0;
12178 this.corejs.useMap = true; 11776 this.corejs.useMap = true;
12179 var factType = world.get$coreimpl().types.$index('HashMapImplementation'); 11777 var factType = world.get$coreimpl().types.$index('HashMapImplementation');
12180 var m = factType.resolveMember$1('\$setindex'); 11778 var m = factType.resolveMember$1('\$setindex');
12181 this.genMethod((($0 = m.get$members().$index(0)) && $0.is$Member())); 11779 this.genMethod(m.get$members().$index(0));
12182 var c = factType.getConstructor$1(''); 11780 var c = factType.getConstructor$1('');
12183 this.genMethod((c && c.is$Member())); 11781 this.genMethod(c);
12184 return (factType && factType.is$lang_Type()); 11782 return factType;
12185 } 11783 }
12186 // ********** Code for BlockScope ************** 11784 // ********** Code for BlockScope **************
12187 function BlockScope(enclosingMethod, parent, reentrant) { 11785 function BlockScope(enclosingMethod, parent, reentrant) {
12188 this.enclosingMethod = enclosingMethod; 11786 this.enclosingMethod = enclosingMethod;
12189 this.parent = parent; 11787 this.parent = parent;
12190 this.reentrant = reentrant; 11788 this.reentrant = reentrant;
12191 this._vars = $map([]); 11789 this._vars = $map([]);
12192 // Initializers done 11790 // Initializers done
12193 if ($notnull_bool(this.get$isMethodScope())) { 11791 if (this.get$isMethodScope()) {
12194 this._closedOver = new HashSetImplementation(); 11792 this._closedOver = new HashSetImplementation();
12195 } 11793 }
12196 else { 11794 else {
12197 this.reentrant = $notnull_bool(this.reentrant) || $notnull_bool(this.parent. reentrant); 11795 this.reentrant = this.reentrant || this.parent.reentrant;
12198 } 11796 }
12199 } 11797 }
12200 BlockScope.prototype.is$BlockScope = function(){return this;};
12201 BlockScope.prototype.get$parent = function() { return this.parent; }; 11798 BlockScope.prototype.get$parent = function() { return this.parent; };
12202 BlockScope.prototype.set$parent = function(value) { return this.parent = value; }; 11799 BlockScope.prototype.set$parent = function(value) { return this.parent = value; };
12203 BlockScope.prototype.get$isMethodScope = function() { 11800 BlockScope.prototype.get$isMethodScope = function() {
12204 return this.parent == null || $ne(this.parent.enclosingMethod, this.enclosingM ethod); 11801 return this.parent == null || $ne(this.parent.enclosingMethod, this.enclosingM ethod);
12205 } 11802 }
12206 BlockScope.prototype.get$methodScope = function() { 11803 BlockScope.prototype.get$methodScope = function() {
12207 var s = this; 11804 var s = this;
12208 while (!$notnull_bool(s.get$isMethodScope())) s = s.get$parent(); 11805 while (!s.get$isMethodScope()) s = s.get$parent();
12209 return (s && s.is$BlockScope()); 11806 return s;
12210 } 11807 }
12211 BlockScope.prototype.lookup = function(name) { 11808 BlockScope.prototype.lookup = function(name) {
12212 var ret = this._vars.$index(name); 11809 var ret = this._vars.$index(name);
12213 if ($notnull_bool($ne(ret, null))) return ret; 11810 if ($ne(ret, null)) return ret;
12214 for (var s = this.parent; 11811 for (var s = this.parent;
12215 $notnull_bool($ne(s, null)); s = s.get$parent()) { 11812 $ne(s, null); s = s.get$parent()) {
12216 ret = s._vars.$index(name); 11813 ret = s._vars.$index(name);
12217 if ($notnull_bool($ne(ret, null))) { 11814 if ($ne(ret, null)) {
12218 if ($ne(s.enclosingMethod, this.enclosingMethod)) { 11815 if ($ne(s.enclosingMethod, this.enclosingMethod)) {
12219 s.get$methodScope()._closedOver.add(ret.code); 11816 s.get$methodScope()._closedOver.add(ret.code);
12220 if (this.enclosingMethod.captures != null && $notnull_bool(s.reentrant)) { 11817 if (this.enclosingMethod.captures != null && s.reentrant) {
12221 this.enclosingMethod.captures.add(ret.code); 11818 this.enclosingMethod.captures.add(ret.code);
12222 } 11819 }
12223 } 11820 }
12224 return ret; 11821 return ret;
12225 } 11822 }
12226 } 11823 }
12227 } 11824 }
12228 BlockScope.prototype._isDefinedInParent = function(name) { 11825 BlockScope.prototype._isDefinedInParent = function(name) {
12229 if ($notnull_bool(this.get$isMethodScope()) && this._closedOver.contains(name) ) return true; 11826 if (this.get$isMethodScope() && this._closedOver.contains(name)) return true;
12230 for (var s = this.parent; 11827 for (var s = this.parent;
12231 $notnull_bool($ne(s, null)); s = s.get$parent()) { 11828 $ne(s, null); s = s.get$parent()) {
12232 if (s._vars.containsKey(name)) return true; 11829 if (s._vars.containsKey(name)) return true;
12233 if ($notnull_bool(s.get$isMethodScope()) && s._closedOver.contains(name)) re turn true; 11830 if (s.get$isMethodScope() && s._closedOver.contains(name)) return true;
12234 } 11831 }
12235 var type = this.enclosingMethod.method.declaringType; 11832 var type = this.enclosingMethod.method.declaringType;
12236 if (type.get$library().lookup(name, null) != null) return true; 11833 if (type.get$library().lookup(name, null) != null) return true;
12237 return false; 11834 return false;
12238 } 11835 }
12239 BlockScope.prototype.create = function(name, type, span, isParameter) { 11836 BlockScope.prototype.create = function(name, type, span, isParameter) {
12240 var jsName = world.toJsIdentifier(name); 11837 var jsName = world.toJsIdentifier(name);
12241 if (this._vars.containsKey(name)) { 11838 if (this._vars.containsKey(name)) {
12242 world.error(('duplicate name "' + name + '"'), span); 11839 world.error(('duplicate name "' + name + '"'), span);
12243 } 11840 }
12244 if (!$notnull_bool(isParameter)) { 11841 if (!isParameter) {
12245 var index = 0; 11842 var index = 0;
12246 while ($notnull_bool(this._isDefinedInParent($assert_String(jsName)))) { 11843 while (this._isDefinedInParent(jsName)) {
12247 jsName = ('' + name + '' + index++ + ''); 11844 jsName = ('' + name + '' + index++ + '');
12248 } 11845 }
12249 } 11846 }
12250 var ret = new Value(type, jsName, span, false); 11847 var ret = new Value(type, jsName, span, false);
12251 this._vars.$setindex(name, ret); 11848 this._vars.$setindex(name, ret);
12252 return (ret && ret.is$Value()); 11849 return ret;
12253 } 11850 }
12254 BlockScope.prototype.declareParameter = function(p) { 11851 BlockScope.prototype.declareParameter = function(p) {
12255 return this.create(p.name, p.type, p.definition.span, true); 11852 return this.create(p.name, p.type, p.definition.span, true);
12256 } 11853 }
12257 BlockScope.prototype.declare = function(id) { 11854 BlockScope.prototype.declare = function(id) {
12258 var type = this.enclosingMethod.method.resolveType(id.type, false); 11855 var type = this.enclosingMethod.method.resolveType(id.type, false);
12259 return this.create(id.name.name, (type && type.is$lang_Type()), id.span, false ); 11856 return this.create(id.name.name, type, id.span, false);
12260 } 11857 }
12261 BlockScope.prototype.getRethrow = function() { 11858 BlockScope.prototype.getRethrow = function() {
12262 var scope = this; 11859 var scope = this;
12263 while (scope.rethrow == null && $notnull_bool($ne(scope.get$parent(), null))) { 11860 while (scope.rethrow == null && $ne(scope.get$parent(), null)) {
12264 scope = scope.get$parent(); 11861 scope = scope.get$parent();
12265 } 11862 }
12266 return scope.rethrow; 11863 return scope.rethrow;
12267 } 11864 }
12268 BlockScope.prototype.lookup$1 = function($0) { 11865 BlockScope.prototype.lookup$1 = function($0) {
12269 return this.lookup($assert_String($0)); 11866 return this.lookup($0);
12270 }; 11867 };
12271 // ********** Code for MethodGenerator ************** 11868 // ********** Code for MethodGenerator **************
12272 function MethodGenerator(method, enclosingMethod) { 11869 function MethodGenerator(method, enclosingMethod) {
12273 var $0;
12274 this.method = method; 11870 this.method = method;
12275 this.enclosingMethod = enclosingMethod; 11871 this.enclosingMethod = enclosingMethod;
12276 this.writer = new CodeWriter(); 11872 this.writer = new CodeWriter();
12277 this.needsThis = false; 11873 this.needsThis = false;
12278 // Initializers done 11874 // Initializers done
12279 if (this.enclosingMethod != null) { 11875 if (this.enclosingMethod != null) {
12280 this._scope = new BlockScope(this, this.enclosingMethod._scope, false); 11876 this._scope = new BlockScope(this, this.enclosingMethod._scope, false);
12281 this.captures = new HashSetImplementation(); 11877 this.captures = new HashSetImplementation();
12282 } 11878 }
12283 else { 11879 else {
12284 this._scope = new BlockScope(this, null, false); 11880 this._scope = new BlockScope(this, null, false);
12285 } 11881 }
12286 if (this.enclosingMethod != null && this.method.name != '') { 11882 if (this.enclosingMethod != null && this.method.name != '') {
12287 var m = (($0 = this.method) && $0.is$MethodMember()); 11883 var m = this.method;
12288 this._scope.create(m.name, m.get$functionType(), m.definition.span, false); 11884 this._scope.create(m.name, m.get$functionType(), m.definition.span, false);
12289 } 11885 }
12290 this._usedTemps = new HashSetImplementation(); 11886 this._usedTemps = new HashSetImplementation();
12291 this._freeTemps = []; 11887 this._freeTemps = [];
12292 } 11888 }
12293 MethodGenerator.prototype.is$MethodGenerator = function(){return this;};
12294 MethodGenerator.prototype.is$TreeVisitor = function(){return this;};
12295 MethodGenerator.prototype.get$library = function() { 11889 MethodGenerator.prototype.get$library = function() {
12296 return this.method.get$library(); 11890 return this.method.get$library();
12297 } 11891 }
12298 MethodGenerator.prototype.findMembers = function(name) { 11892 MethodGenerator.prototype.findMembers = function(name) {
12299 return this.get$library()._findMembers(name); 11893 return this.get$library()._findMembers(name);
12300 } 11894 }
12301 MethodGenerator.prototype.get$isClosure = function() { 11895 MethodGenerator.prototype.get$isClosure = function() {
12302 return (this.enclosingMethod != null); 11896 return (this.enclosingMethod != null);
12303 } 11897 }
12304 MethodGenerator.prototype.get$isStatic = function() { 11898 MethodGenerator.prototype.get$isStatic = function() {
12305 return this.method.get$isStatic(); 11899 return this.method.get$isStatic();
12306 } 11900 }
12307 MethodGenerator.prototype.getTemp = function(value) { 11901 MethodGenerator.prototype.getTemp = function(value) {
12308 return $notnull_bool(value.needsTemp) ? this.forceTemp(value) : value; 11902 return value.needsTemp ? this.forceTemp(value) : value;
12309 } 11903 }
12310 MethodGenerator.prototype.forceTemp = function(value) { 11904 MethodGenerator.prototype.forceTemp = function(value) {
12311 var name; 11905 var name;
12312 if (this._freeTemps.length > 0) { 11906 if (this._freeTemps.length > 0) {
12313 name = $assert_String(this._freeTemps.removeLast()); 11907 name = this._freeTemps.removeLast();
12314 } 11908 }
12315 else { 11909 else {
12316 name = '\$' + this._usedTemps.get$length(); 11910 name = '\$' + this._usedTemps.get$length();
12317 } 11911 }
12318 this._usedTemps.add(name); 11912 this._usedTemps.add(name);
12319 return new Value(value.type, name, value.span, false); 11913 return new Value(value.type, name, value.span, false);
12320 } 11914 }
12321 MethodGenerator.prototype.assignTemp = function(tmp, v) { 11915 MethodGenerator.prototype.assignTemp = function(tmp, v) {
12322 if ($eq(tmp, v)) { 11916 if ($eq(tmp, v)) {
12323 return v; 11917 return v;
12324 } 11918 }
12325 else { 11919 else {
12326 return new Value(v.type, ('(' + tmp.code + ' = ' + v.code + ')'), v.span, tr ue); 11920 return new Value(v.type, ('(' + tmp.code + ' = ' + v.code + ')'), v.span, tr ue);
12327 } 11921 }
12328 } 11922 }
12329 MethodGenerator.prototype.freeTemp = function(value) { 11923 MethodGenerator.prototype.freeTemp = function(value) {
12330 if (this._usedTemps.remove(value.code)) { 11924 if (this._usedTemps.remove(value.code)) {
12331 this._freeTemps.add(value.code); 11925 this._freeTemps.add(value.code);
12332 } 11926 }
12333 else { 11927 else {
12334 world.internalError(('tried to free unused value or non-temp "' + value.code + '"')); 11928 world.internalError(('tried to free unused value or non-temp "' + value.code + '"'));
12335 } 11929 }
12336 } 11930 }
12337 MethodGenerator.prototype.run = function() { 11931 MethodGenerator.prototype.run = function() {
12338 if ($notnull_bool(this.method.isGenerated)) return; 11932 if (this.method.isGenerated) return;
12339 this.method.isGenerated = true; 11933 this.method.isGenerated = true;
12340 this.method.generator = this; 11934 this.method.generator = this;
12341 if ((this.method.get$definition().body instanceof NativeStatement)) { 11935 if ((this.method.get$definition().body instanceof NativeStatement)) {
12342 if ($notnull_bool(this.method.get$definition().body.body == null)) { 11936 if (this.method.get$definition().body.body == null) {
12343 this.method.generator = null; 11937 this.method.generator = null;
12344 } 11938 }
12345 else { 11939 else {
12346 this._paramCode = map(this.method.get$parameters(), (function (p) { 11940 this._paramCode = map(this.method.get$parameters(), (function (p) {
12347 return p.get$name(); 11941 return p.get$name();
12348 }) 11942 })
12349 ); 11943 );
12350 this.writer.write($assert_String(this.method.get$definition().body.body)); 11944 this.writer.write(this.method.get$definition().body.body);
12351 } 11945 }
12352 } 11946 }
12353 else { 11947 else {
12354 this.writeBody(); 11948 this.writeBody();
12355 } 11949 }
12356 } 11950 }
12357 MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) { 11951 MethodGenerator.prototype.writeDefinition = function(defWriter, lambda) {
12358 var $0;
12359 var paramCode = this._paramCode; 11952 var paramCode = this._paramCode;
12360 var names = null; 11953 var names = null;
12361 if (this.captures != null && this.captures.get$length() > 0) { 11954 if (this.captures != null && this.captures.get$length() > 0) {
12362 names = ListFactory.ListFactory$from$factory(this.captures); 11955 names = ListFactory.ListFactory$from$factory(this.captures);
12363 names.sort$1((function (x, y) { 11956 names.sort$1((function (x, y) {
12364 return x.compareTo$1(y); 11957 return x.compareTo$1(y);
12365 }) 11958 })
12366 ); 11959 );
12367 paramCode = ListFactory.ListFactory$from$factory((names && names.is$Iterable ())); 11960 paramCode = ListFactory.ListFactory$from$factory(names);
12368 paramCode.addAll$1(this._paramCode); 11961 paramCode.addAll$1(this._paramCode);
12369 } 11962 }
12370 var _params = ('(' + Strings.join(this._paramCode, ", ") + ')'); 11963 var _params = ('(' + Strings.join(this._paramCode, ", ") + ')');
12371 var params = ('(' + Strings.join((paramCode && paramCode.is$List$String()), ", ") + ')'); 11964 var params = ('(' + Strings.join(paramCode, ", ") + ')');
12372 if ($notnull_bool(this.method.declaringType.get$isTop()) && !$notnull_bool(thi s.get$isClosure())) { 11965 if (this.method.declaringType.get$isTop() && !this.get$isClosure()) {
12373 defWriter.enterBlock(('function ' + this.method.get$jsname() + '' + params + ' {')); 11966 defWriter.enterBlock(('function ' + this.method.get$jsname() + '' + params + ' {'));
12374 } 11967 }
12375 else if ($notnull_bool(this.get$isClosure())) { 11968 else if (this.get$isClosure()) {
12376 if (this.method.name == '') { 11969 if (this.method.name == '') {
12377 defWriter.enterBlock(('(function ' + params + ' {')); 11970 defWriter.enterBlock(('(function ' + params + ' {'));
12378 } 11971 }
12379 else if ($notnull_bool($ne(names, null))) { 11972 else if ($ne(names, null)) {
12380 if (lambda == null) { 11973 if (lambda == null) {
12381 defWriter.enterBlock(('var ' + this.method.get$jsname() + ' = (function' + params + ' {')); 11974 defWriter.enterBlock(('var ' + this.method.get$jsname() + ' = (function' + params + ' {'));
12382 } 11975 }
12383 else { 11976 else {
12384 defWriter.enterBlock(('(function ' + this.method.get$jsname() + '' + par ams + ' {')); 11977 defWriter.enterBlock(('(function ' + this.method.get$jsname() + '' + par ams + ' {'));
12385 } 11978 }
12386 } 11979 }
12387 else { 11980 else {
12388 defWriter.enterBlock(('function ' + this.method.get$jsname() + '' + params + ' {')); 11981 defWriter.enterBlock(('function ' + this.method.get$jsname() + '' + params + ' {'));
12389 } 11982 }
12390 } 11983 }
12391 else if ($notnull_bool(this.method.get$isConstructor())) { 11984 else if (this.method.get$isConstructor()) {
12392 if (this.method.get$constructorName() == '') { 11985 if (this.method.get$constructorName() == '') {
12393 defWriter.enterBlock(('function ' + this.method.declaringType.get$jsname() + '' + params + ' {')); 11986 defWriter.enterBlock(('function ' + this.method.declaringType.get$jsname() + '' + params + ' {'));
12394 } 11987 }
12395 else { 11988 else {
12396 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.' + this.method.get$constructorName() + '\$ctor = function' + params + ' {')); 11989 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.' + this.method.get$constructorName() + '\$ctor = function' + params + ' {'));
12397 } 11990 }
12398 } 11991 }
12399 else if ($notnull_bool(this.method.get$isFactory())) { 11992 else if (this.method.get$isFactory()) {
12400 defWriter.enterBlock(('' + this.method.get$generatedFactoryName() + ' = func tion' + _params + ' {')); 11993 defWriter.enterBlock(('' + this.method.get$generatedFactoryName() + ' = func tion' + _params + ' {'));
12401 } 11994 }
12402 else if ($notnull_bool(this.method.get$isStatic())) { 11995 else if (this.method.get$isStatic()) {
12403 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.' + th is.method.get$jsname() + ' = function' + _params + ' {')); 11996 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.' + th is.method.get$jsname() + ' = function' + _params + ' {'));
12404 } 11997 }
12405 else { 11998 else {
12406 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.protot ype.') + ('' + this.method.get$jsname() + ' = function' + _params + ' {')); 11999 defWriter.enterBlock(('' + this.method.declaringType.get$jsname() + '.protot ype.') + ('' + this.method.get$jsname() + ' = function' + _params + ' {'));
12407 } 12000 }
12408 if ($notnull_bool(this.needsThis)) { 12001 if (this.needsThis) {
12409 defWriter.writeln('var \$this = this; // closure support'); 12002 defWriter.writeln('var \$this = this; // closure support');
12410 } 12003 }
12411 if (this._usedTemps.get$length() > 0 || this._freeTemps.length > 0) { 12004 if (this._usedTemps.get$length() > 0 || this._freeTemps.length > 0) {
12412 $assert(this._usedTemps.get$length() == 0, "_usedTemps.length == 0", "gen.da rt", 695, 14);
12413 this._freeTemps.addAll(this._usedTemps); 12005 this._freeTemps.addAll(this._usedTemps);
12414 this._freeTemps.sort((function (x, y) { 12006 this._freeTemps.sort((function (x, y) {
12415 return x.compareTo$1(y); 12007 return x.compareTo$1(y);
12416 }) 12008 })
12417 ); 12009 );
12418 defWriter.writeln(('var ' + Strings.join(this._freeTemps, ", ") + ';')); 12010 defWriter.writeln(('var ' + Strings.join(this._freeTemps, ", ") + ';'));
12419 } 12011 }
12420 defWriter.writeln(this.writer.get$text()); 12012 defWriter.writeln(this.writer.get$text());
12421 if ($notnull_bool($ne(names, null))) { 12013 if ($ne(names, null)) {
12422 defWriter.exitBlock(('}).bind(null, ' + Strings.join((names && names.is$List $String()), ", ") + ')')); 12014 defWriter.exitBlock(('}).bind(null, ' + Strings.join(names, ", ") + ')'));
12423 } 12015 }
12424 else if ($notnull_bool(this.get$isClosure()) && this.method.name == '') { 12016 else if (this.get$isClosure() && this.method.name == '') {
12425 defWriter.exitBlock('})'); 12017 defWriter.exitBlock('})');
12426 } 12018 }
12427 else { 12019 else {
12428 defWriter.exitBlock('}'); 12020 defWriter.exitBlock('}');
12429 } 12021 }
12430 if ($notnull_bool(this.method.get$isConstructor()) && this.method.get$construc torName() != '') { 12022 if (this.method.get$isConstructor() && this.method.get$constructorName() != '' ) {
12431 defWriter.writeln(('' + this.method.declaringType.get$jsname() + '.' + this. method.get$constructorName() + '\$ctor.prototype = ') + ('' + this.method.declar ingType.get$jsname() + '.prototype;')); 12023 defWriter.writeln(('' + this.method.declaringType.get$jsname() + '.' + this. method.get$constructorName() + '\$ctor.prototype = ') + ('' + this.method.declar ingType.get$jsname() + '.prototype;'));
12432 } 12024 }
12433 this._provideOptionalParamInfo(defWriter); 12025 this._provideOptionalParamInfo(defWriter);
12434 if ((this.method instanceof MethodMember)) { 12026 if ((this.method instanceof MethodMember)) {
12435 var m = (($0 = this.method) && $0.is$MethodMember()); 12027 var m = this.method;
12436 if ($notnull_bool(m._providePropertySyntax)) { 12028 if (m._providePropertySyntax) {
12437 defWriter.enterBlock(('' + m.declaringType.get$jsname() + '.prototype') + ('.get\$' + m.get$jsname() + ' = function() {')); 12029 defWriter.enterBlock(('' + m.declaringType.get$jsname() + '.prototype') + ('.get\$' + m.get$jsname() + ' = function() {'));
12438 defWriter.writeln(('return ' + m.declaringType.get$jsname() + '.prototype. ') + ('' + m.get$jsname() + '.bind(this);')); 12030 defWriter.writeln(('return ' + m.declaringType.get$jsname() + '.prototype. ') + ('' + m.get$jsname() + '.bind(this);'));
12439 defWriter.exitBlock('}'); 12031 defWriter.exitBlock('}');
12440 if ($notnull_bool(m._provideFieldSyntax)) { 12032 if (m._provideFieldSyntax) {
12441 world.internalError('bound m accessed with field syntax'); 12033 world.internalError('bound m accessed with field syntax');
12442 } 12034 }
12443 } 12035 }
12444 } 12036 }
12445 } 12037 }
12446 MethodGenerator.prototype._provideOptionalParamInfo = function(defWriter) { 12038 MethodGenerator.prototype._provideOptionalParamInfo = function(defWriter) {
12447 var $0;
12448 if ((this.method instanceof MethodMember)) { 12039 if ((this.method instanceof MethodMember)) {
12449 var meth = (($0 = this.method) && $0.is$MethodMember()); 12040 var meth = this.method;
12450 if ($notnull_bool(meth._provideOptionalParamInfo)) { 12041 if (meth._provideOptionalParamInfo) {
12451 var optNames = []; 12042 var optNames = [];
12452 var optValues = []; 12043 var optValues = [];
12453 meth.genParameterValues(); 12044 meth.genParameterValues();
12454 var $list = meth.parameters; 12045 var $list = meth.parameters;
12455 for (var $i = 0;$i < $list.length; $i++) { 12046 for (var $i = 0;$i < $list.length; $i++) {
12456 var param = $list.$index($i); 12047 var param = $list.$index($i);
12457 if ($notnull_bool(param.get$isOptional())) { 12048 if (param.get$isOptional()) {
12458 optNames.add$1(param.get$name()); 12049 optNames.add$1(param.get$name());
12459 optValues.add$1(MethodGenerator._escapeString($assert_String(param.get $value().code))); 12050 optValues.add$1(MethodGenerator._escapeString(param.get$value().code)) ;
12460 } 12051 }
12461 } 12052 }
12462 if (optNames.length > 0) { 12053 if (optNames.length > 0) {
12463 var start = ''; 12054 var start = '';
12464 if ($notnull_bool(meth.isStatic)) { 12055 if (meth.isStatic) {
12465 if (!$notnull_bool(meth.declaringType.get$isTop())) { 12056 if (!meth.declaringType.get$isTop()) {
12466 start = meth.declaringType.get$jsname() + '.'; 12057 start = meth.declaringType.get$jsname() + '.';
12467 } 12058 }
12468 } 12059 }
12469 else { 12060 else {
12470 start = meth.declaringType.get$jsname() + '.prototype.'; 12061 start = meth.declaringType.get$jsname() + '.prototype.';
12471 } 12062 }
12472 optNames.addAll$1(optValues); 12063 optNames.addAll$1(optValues);
12473 var optional = "['" + Strings.join((optNames && optNames.is$List$String( )), "', '") + "']"; 12064 var optional = "['" + Strings.join(optNames, "', '") + "']";
12474 defWriter.writeln(('' + start + '' + meth.get$jsname() + '.\$optional = ' + optional + '')); 12065 defWriter.writeln(('' + start + '' + meth.get$jsname() + '.\$optional = ' + optional + ''));
12475 } 12066 }
12476 } 12067 }
12477 } 12068 }
12478 } 12069 }
12479 MethodGenerator.prototype.writeBody = function() { 12070 MethodGenerator.prototype.writeBody = function() {
12480 var initializers = null; 12071 var initializers = null;
12481 var initializedFields = null; 12072 var initializedFields = null;
12482 if ($notnull_bool(this.method.get$isConstructor())) { 12073 if (this.method.get$isConstructor()) {
12483 initializers = []; 12074 initializers = [];
12484 initializedFields = new HashSetImplementation(); 12075 initializedFields = new HashSetImplementation();
12485 var $list = world.gen._orderValues(this.method.declaringType.getAllMembers() ); 12076 var $list = world.gen._orderValues(this.method.declaringType.getAllMembers() );
12486 for (var $i = 0;$i < $list.length; $i++) { 12077 for (var $i = 0;$i < $list.length; $i++) {
12487 var f = $list.$index($i); 12078 var f = $list.$index($i);
12488 if ((f instanceof FieldMember) && !$notnull_bool(f.get$isStatic())) { 12079 if ((f instanceof FieldMember) && !f.get$isStatic()) {
12489 var cv = f.computeValue$0(); 12080 var cv = f.computeValue$0();
12490 if ($notnull_bool($ne(cv, null))) { 12081 if ($ne(cv, null)) {
12491 initializers.add$1(('this.' + f.get$jsname() + ' = ' + cv.code + '')); 12082 initializers.add$1(('this.' + f.get$jsname() + ' = ' + cv.code + ''));
12492 initializedFields.add$1(f.get$name()); 12083 initializedFields.add$1(f.get$name());
12493 } 12084 }
12494 } 12085 }
12495 } 12086 }
12496 } 12087 }
12497 this._paramCode = []; 12088 this._paramCode = [];
12498 var $list = this.method.get$parameters(); 12089 var $list = this.method.get$parameters();
12499 for (var $i = 0;$i < $list.length; $i++) { 12090 for (var $i = 0;$i < $list.length; $i++) {
12500 var p = $list.$index($i); 12091 var p = $list.$index($i);
12501 if ($notnull_bool($ne(initializers, null)) && $notnull_bool(p.isInitializer) ) { 12092 if ($ne(initializers, null) && p.isInitializer) {
12502 var field = this.method.declaringType.getMember($assert_String(p.get$name( ))); 12093 var field = this.method.declaringType.getMember(p.get$name());
12503 if ($notnull_bool(field == null)) { 12094 if (field == null) {
12504 world.error('bad this parameter - no matching field', p.get$definition() .get$span()); 12095 world.error('bad this parameter - no matching field', p.get$definition() .get$span());
12505 } 12096 }
12506 if (!$notnull_bool(field.get$isField())) { 12097 if (!field.get$isField()) {
12507 world.error(('"this.' + p.get$name() + '" does not refer to a field'), p .get$definition().get$span()); 12098 world.error(('"this.' + p.get$name() + '" does not refer to a field'), p .get$definition().get$span());
12508 } 12099 }
12509 var paramValue = new Value(field.get$returnType(), p.get$name(), p.get$def inition().get$span(), false); 12100 var paramValue = new Value(field.get$returnType(), p.get$name(), p.get$def inition().get$span(), false);
12510 this._paramCode.add(paramValue.code); 12101 this._paramCode.add(paramValue.code);
12511 initializers.add$1(('this.' + field.get$jsname() + ' = ' + paramValue.code + ';')); 12102 initializers.add$1(('this.' + field.get$jsname() + ' = ' + paramValue.code + ';'));
12512 initializedFields.add$1(p.get$name()); 12103 initializedFields.add$1(p.get$name());
12513 } 12104 }
12514 else { 12105 else {
12515 var paramValue = this._scope.declareParameter((p && p.is$Parameter())); 12106 var paramValue = this._scope.declareParameter(p);
12516 this._paramCode.add(paramValue.code); 12107 this._paramCode.add(paramValue.code);
12517 } 12108 }
12518 } 12109 }
12519 var body = this.method.get$definition().body; 12110 var body = this.method.get$definition().body;
12520 if ($notnull_bool(body == null) && !$notnull_bool(this.method.get$isConstructo r())) { 12111 if (body == null && !this.method.get$isConstructor()) {
12521 world.error(('unexpected empty body for ' + this.method.name + ''), this.met hod.get$definition().get$span()); 12112 world.error(('unexpected empty body for ' + this.method.name + ''), this.met hod.get$definition().get$span());
12522 } 12113 }
12523 if ($notnull_bool($ne(initializers, null))) { 12114 if ($ne(initializers, null)) {
12524 for (var $i = initializers.iterator$0(); $i.hasNext$0(); ) { 12115 for (var $i = initializers.iterator$0(); $i.hasNext$0(); ) {
12525 var i = $i.next$0(); 12116 var i = $i.next$0();
12526 this.writer.writeln($assert_String(i)); 12117 this.writer.writeln(i);
12527 } 12118 }
12528 var declaredInitializers = this.method.get$definition().initializers; 12119 var declaredInitializers = this.method.get$definition().initializers;
12529 if (declaredInitializers != null) { 12120 if (declaredInitializers != null) {
12530 var initializerCall = null; 12121 var initializerCall = null;
12531 for (var $i = 0;$i < declaredInitializers.length; $i++) { 12122 for (var $i = 0;$i < declaredInitializers.length; $i++) {
12532 var init = declaredInitializers.$index($i); 12123 var init = declaredInitializers.$index($i);
12533 if ((init instanceof CallExpression)) { 12124 if ((init instanceof CallExpression)) {
12534 if ($notnull_bool($ne(initializerCall, null))) { 12125 if ($ne(initializerCall, null)) {
12535 world.error('only one initializer redirecting call is allowed', init .get$span()); 12126 world.error('only one initializer redirecting call is allowed', init .get$span());
12536 } 12127 }
12537 initializerCall = init; 12128 initializerCall = init;
12538 } 12129 }
12539 else if ((init instanceof BinaryExpression) && TokenKind.kindFromAssign( init.op.kind) == 0) { 12130 else if ((init instanceof BinaryExpression) && TokenKind.kindFromAssign( init.op.kind) == 0) {
12540 var left = init.x; 12131 var left = init.x;
12541 if (!((left instanceof DotExpression) && (left.self instanceof ThisExp ression) || (left instanceof VarExpression))) { 12132 if (!((left instanceof DotExpression) && (left.self instanceof ThisExp ression) || (left instanceof VarExpression))) {
12542 world.error('invalid left side of initializer', left.get$span()); 12133 world.error('invalid left side of initializer', left.get$span());
12543 continue; 12134 continue;
12544 } 12135 }
12545 var f = this.method.declaringType.getMember($assert_String(left.get$na me().get$name())); 12136 var f = this.method.declaringType.getMember(left.get$name().get$name() );
12546 if ($notnull_bool(f == null)) { 12137 if (f == null) {
12547 world.error('bad initializer - no matching field', left.get$span()); 12138 world.error('bad initializer - no matching field', left.get$span());
12548 continue; 12139 continue;
12549 } 12140 }
12550 else if (!$notnull_bool(f.get$isField())) { 12141 else if (!f.get$isField()) {
12551 world.error(('"' + left.get$name().get$name() + '" does not refer to a field'), left.get$span()); 12142 world.error(('"' + left.get$name().get$name() + '" does not refer to a field'), left.get$span());
12552 continue; 12143 continue;
12553 } 12144 }
12554 initializedFields.add$1(f.get$name()); 12145 initializedFields.add$1(f.get$name());
12555 this.writer.writeln(('this.' + f.get$jsname() + ' = ' + this.visitValu e(init.y).code + ';')); 12146 this.writer.writeln(('this.' + f.get$jsname() + ' = ' + this.visitValu e(init.y).code + ';'));
12556 } 12147 }
12557 else { 12148 else {
12558 world.error('invalid initializer', init.get$span()); 12149 world.error('invalid initializer', init.get$span());
12559 } 12150 }
12560 } 12151 }
12561 if ($notnull_bool($ne(initializerCall, null))) { 12152 if ($ne(initializerCall, null)) {
12562 var target = this._writeInitializerCall((initializerCall && initializerC all.is$CallExpression())); 12153 var target = this._writeInitializerCall(initializerCall);
12563 if (!$notnull_bool(target.isSuper)) { 12154 if (!target.isSuper) {
12564 if (initializers.length > 0) { 12155 if (initializers.length > 0) {
12565 var $list = this.method.get$parameters(); 12156 var $list = this.method.get$parameters();
12566 for (var $i = 0;$i < $list.length; $i++) { 12157 for (var $i = 0;$i < $list.length; $i++) {
12567 var p = $list.$index($i); 12158 var p = $list.$index($i);
12568 if ($notnull_bool(p.isInitializer)) { 12159 if (p.isInitializer) {
12569 world.error('no initialization allowed on redirecting constructo rs', p.get$definition().get$span()); 12160 world.error('no initialization allowed on redirecting constructo rs', p.get$definition().get$span());
12570 break; 12161 break;
12571 } 12162 }
12572 } 12163 }
12573 } 12164 }
12574 if (declaredInitializers.length > 1) { 12165 if (declaredInitializers.length > 1) {
12575 var init = $notnull_bool($eq(declaredInitializers.$index(0), initial izerCall)) ? declaredInitializers.$index(1) : declaredInitializers.$index(0); 12166 var init = $eq(declaredInitializers.$index(0), initializerCall) ? de claredInitializers.$index(1) : declaredInitializers.$index(0);
12576 world.error('no initialization allowed on redirecting constructors', init.get$span()); 12167 world.error('no initialization allowed on redirecting constructors', init.get$span());
12577 } 12168 }
12578 initializedFields = null; 12169 initializedFields = null;
12579 } 12170 }
12580 } 12171 }
12581 else { 12172 else {
12582 } 12173 }
12583 } 12174 }
12584 this.writer.comment('// Initializers done'); 12175 this.writer.comment('// Initializers done');
12585 } 12176 }
12586 if ($notnull_bool($ne(initializedFields, null))) { 12177 if ($ne(initializedFields, null)) {
12587 var $list = this.method.declaringType.get$members().getKeys(); 12178 var $list = this.method.declaringType.get$members().getKeys();
12588 for (var $i = this.method.declaringType.get$members().getKeys().iterator$0() ; $i.hasNext$0(); ) { 12179 for (var $i = this.method.declaringType.get$members().getKeys().iterator$0() ; $i.hasNext$0(); ) {
12589 var name = $i.next$0(); 12180 var name = $i.next$0();
12590 var member = this.method.declaringType.get$members().$index(name); 12181 var member = this.method.declaringType.get$members().$index(name);
12591 if ((member instanceof FieldMember) && $notnull_bool(member.isFinal) && !$ notnull_bool(member.get$isStatic()) && !$notnull_bool(initializedFields.contains $1(name))) { 12182 if ((member instanceof FieldMember) && member.isFinal && !member.get$isSta tic() && !initializedFields.contains$1(name)) {
12592 world.error(('Field "' + name + '" is final and was not initialized'), t his.method.get$definition().get$span()); 12183 world.error(('Field "' + name + '" is final and was not initialized'), t his.method.get$definition().get$span());
12593 } 12184 }
12594 } 12185 }
12595 } 12186 }
12596 this.visitStatementsInBlock((body && body.is$lang_Statement())); 12187 this.visitStatementsInBlock(body);
12597 } 12188 }
12598 MethodGenerator.prototype._writeInitializerCall = function(node) { 12189 MethodGenerator.prototype._writeInitializerCall = function(node) {
12599 var contructorName = ''; 12190 var contructorName = '';
12600 var targetExp = node.target; 12191 var targetExp = node.target;
12601 if ((targetExp instanceof DotExpression)) { 12192 if ((targetExp instanceof DotExpression)) {
12602 var dot = (targetExp && targetExp.is$DotExpression()); 12193 var dot = targetExp;
12603 targetExp = dot.self; 12194 targetExp = dot.self;
12604 contructorName = dot.name.name; 12195 contructorName = dot.name.name;
12605 } 12196 }
12606 var target = null; 12197 var target = null;
12607 if ((targetExp instanceof SuperExpression)) { 12198 if ((targetExp instanceof SuperExpression)) {
12608 target = this._makeSuperValue((targetExp && targetExp.is$lang_Node())); 12199 target = this._makeSuperValue(targetExp);
12609 } 12200 }
12610 else if ((targetExp instanceof ThisExpression)) { 12201 else if ((targetExp instanceof ThisExpression)) {
12611 target = this._makeThisValue((targetExp && targetExp.is$lang_Node())); 12202 target = this._makeThisValue(targetExp);
12612 } 12203 }
12613 else { 12204 else {
12614 world.error('bad call in initializers', node.span); 12205 world.error('bad call in initializers', node.span);
12615 } 12206 }
12616 var m = target.type.getConstructor$1(contructorName); 12207 var m = target.type.getConstructor$1(contructorName);
12617 this.method.set$initDelegate(m); 12208 this.method.set$initDelegate(m);
12618 var other = m; 12209 var other = m;
12619 while ($notnull_bool($ne(other, null))) { 12210 while ($ne(other, null)) {
12620 if ($notnull_bool($eq(other, this.method))) { 12211 if ($eq(other, this.method)) {
12621 world.error('initialization cycle', node.span); 12212 world.error('initialization cycle', node.span);
12622 break; 12213 break;
12623 } 12214 }
12624 other = other.get$initDelegate(); 12215 other = other.get$initDelegate();
12625 } 12216 }
12626 world.gen.genMethod((m && m.is$Member())); 12217 world.gen.genMethod(m);
12627 var value = m.invoke$4(this, node, target, this._makeArgs(node.arguments)); 12218 var value = m.invoke$4(this, node, target, this._makeArgs(node.arguments));
12628 if ($notnull_bool($ne(target.type, world.objectType))) { 12219 if ($ne(target.type, world.objectType)) {
12629 this.writer.writeln(('' + value.code + ';')); 12220 this.writer.writeln(('' + value.code + ';'));
12630 } 12221 }
12631 return (target && target.is$Value()); 12222 return target;
12632 } 12223 }
12633 MethodGenerator.prototype._makeArgs = function(arguments) { 12224 MethodGenerator.prototype._makeArgs = function(arguments) {
12634 var $0;
12635 var args = []; 12225 var args = [];
12636 var seenLabel = false; 12226 var seenLabel = false;
12637 for (var $i = 0;$i < arguments.length; $i++) { 12227 for (var $i = 0;$i < arguments.length; $i++) {
12638 var arg = arguments.$index($i); 12228 var arg = arguments.$index($i);
12639 if (arg.label != null) { 12229 if (arg.label != null) {
12640 seenLabel = true; 12230 seenLabel = true;
12641 } 12231 }
12642 else if ($notnull_bool(seenLabel)) { 12232 else if (seenLabel) {
12643 world.error('bare argument can not follow named arguments', arg.get$span() ); 12233 world.error('bare argument can not follow named arguments', arg.get$span() );
12644 } 12234 }
12645 args.add$1(this.visitValue((($0 = arg.get$value()) && $0.is$lang_Expression( )))); 12235 args.add$1(this.visitValue(arg.get$value()));
12646 } 12236 }
12647 return new Arguments(arguments, args); 12237 return new Arguments(arguments, args);
12648 } 12238 }
12649 MethodGenerator._escapeString = function(text) { 12239 MethodGenerator._escapeString = function(text) {
12650 return text.replaceAll('\\', '\\\\').replaceAll('"', '\\"').replaceAll('\n', ' \\n').replaceAll('\r', '\\r'); 12240 return text.replaceAll('\\', '\\\\').replaceAll('"', '\\"').replaceAll('\n', ' \\n').replaceAll('\r', '\\r');
12651 } 12241 }
12652 MethodGenerator.prototype.visitStatementsInBlock = function(body) { 12242 MethodGenerator.prototype.visitStatementsInBlock = function(body) {
12653 if ((body instanceof BlockStatement)) { 12243 if ((body instanceof BlockStatement)) {
12654 var block = (body && body.is$BlockStatement()); 12244 var block = body;
12655 var $list = block.body; 12245 var $list = block.body;
12656 for (var $i = 0;$i < $list.length; $i++) { 12246 for (var $i = 0;$i < $list.length; $i++) {
12657 var stmt = $list.$index($i); 12247 var stmt = $list.$index($i);
12658 stmt.visit$1(this); 12248 stmt.visit$1(this);
12659 } 12249 }
12660 } 12250 }
12661 else { 12251 else {
12662 if (body != null) body.visit(this); 12252 if (body != null) body.visit(this);
12663 } 12253 }
12664 return false; 12254 return false;
12665 } 12255 }
12666 MethodGenerator.prototype._pushBlock = function(reentrant) { 12256 MethodGenerator.prototype._pushBlock = function(reentrant) {
12667 this._scope = new BlockScope(this, this._scope, reentrant); 12257 this._scope = new BlockScope(this, this._scope, reentrant);
12668 } 12258 }
12669 MethodGenerator.prototype._popBlock = function() { 12259 MethodGenerator.prototype._popBlock = function() {
12670 this._scope = this._scope.parent; 12260 this._scope = this._scope.parent;
12671 } 12261 }
12672 MethodGenerator.prototype._makeLambdaMethod = function(name, func) { 12262 MethodGenerator.prototype._makeLambdaMethod = function(name, func) {
12673 var meth = new MethodMember(name, this.method.declaringType, func); 12263 var meth = new MethodMember(name, this.method.declaringType, func);
12674 meth.isLambda = true; 12264 meth.isLambda = true;
12675 meth.resolve$1(this.method.declaringType); 12265 meth.resolve$1(this.method.declaringType);
12676 world.gen.genMethod((meth && meth.is$Member()), this); 12266 world.gen.genMethod(meth, this);
12677 return (meth && meth.is$MethodMember()); 12267 return meth;
12678 } 12268 }
12679 MethodGenerator.prototype.visitBool = function(node) { 12269 MethodGenerator.prototype.visitBool = function(node) {
12680 return this.visitValue(node).convertTo$3(this, world.nonNullBool, node); 12270 return this.visitValue(node).convertTo$3(this, world.nonNullBool, node);
12681 } 12271 }
12682 MethodGenerator.prototype.visitValue = function(node) { 12272 MethodGenerator.prototype.visitValue = function(node) {
12683 if (node == null) return null; 12273 if (node == null) return null;
12684 var value = node.visit(this); 12274 var value = node.visit(this);
12685 value.checkFirstClass$1(node.span); 12275 value.checkFirstClass$1(node.span);
12686 return value; 12276 return value;
12687 } 12277 }
12688 MethodGenerator.prototype.visitTypedValue = function(node, expectedType) { 12278 MethodGenerator.prototype.visitTypedValue = function(node, expectedType) {
12689 return this.visitValue(node).convertTo$3(this, expectedType, node); 12279 return this.visitValue(node).convertTo$3(this, expectedType, node);
12690 } 12280 }
12691 MethodGenerator.prototype.visitVoid = function(node) { 12281 MethodGenerator.prototype.visitVoid = function(node) {
12692 if ((node instanceof PostfixExpression)) { 12282 if ((node instanceof PostfixExpression)) {
12693 var value = this.visitPostfixExpression((node && node.is$PostfixExpression() ), true); 12283 var value = this.visitPostfixExpression(node, true);
12694 value.checkFirstClass$1(node.span); 12284 value.checkFirstClass$1(node.span);
12695 return value; 12285 return value;
12696 } 12286 }
12697 return this.visitValue(node); 12287 return this.visitValue(node);
12698 } 12288 }
12699 MethodGenerator.prototype.visitDietStatement = function(node) { 12289 MethodGenerator.prototype.visitDietStatement = function(node) {
12700 var parser = new lang_Parser(node.span.file, false, false, false, node.span.st art); 12290 var parser = new lang_Parser(node.span.file, false, false, false, node.span.st art);
12701 this.visitStatementsInBlock(parser.block$0()); 12291 this.visitStatementsInBlock(parser.block$0());
12702 return false; 12292 return false;
12703 } 12293 }
12704 MethodGenerator.prototype.visitVariableDefinition = function(node) { 12294 MethodGenerator.prototype.visitVariableDefinition = function(node) {
12705 var $0;
12706 var isFinal = false; 12295 var isFinal = false;
12707 if (node.modifiers != null && $notnull_bool($eq(node.modifiers.$index(0).kind, 97/*TokenKind.FINAL*/))) { 12296 if (node.modifiers != null && $eq(node.modifiers.$index(0).kind, 97/*TokenKind .FINAL*/)) {
12708 isFinal = true; 12297 isFinal = true;
12709 } 12298 }
12710 this.writer.write('var '); 12299 this.writer.write('var ');
12711 var type = this.method.resolveType(node.type, false); 12300 var type = this.method.resolveType(node.type, false);
12712 for (var i = 0; 12301 for (var i = 0;
12713 i < node.names.length; i++) { 12302 i < node.names.length; i++) {
12714 var thisType = type; 12303 var thisType = type;
12715 if (i > 0) { 12304 if (i > 0) {
12716 this.writer.write(', '); 12305 this.writer.write(', ');
12717 } 12306 }
12718 var name = node.names.$index(i).get$name(); 12307 var name = node.names.$index(i).get$name();
12719 var value = this.visitValue((($0 = node.values.$index(i)) && $0.is$lang_Expr ession())); 12308 var value = this.visitValue(node.values.$index(i));
12720 if ($notnull_bool(isFinal)) { 12309 if (isFinal) {
12721 if ($notnull_bool(value == null)) { 12310 if (value == null) {
12722 world.error('no value specified for final variable', node.span); 12311 world.error('no value specified for final variable', node.span);
12723 } 12312 }
12724 else { 12313 else {
12725 if ($notnull_bool(thisType.get$isVar())) thisType = value.type; 12314 if (thisType.get$isVar()) thisType = value.type;
12726 } 12315 }
12727 } 12316 }
12728 var val = this._scope.create($assert_String(name), (thisType && thisType.is$ lang_Type()), node.names.$index(i).get$span(), false); 12317 var val = this._scope.create(name, thisType, node.names.$index(i).get$span() , false);
12729 if ($notnull_bool(value == null)) { 12318 if (value == null) {
12730 this.writer.write(('' + val.code + '')); 12319 this.writer.write(('' + val.code + ''));
12731 } 12320 }
12732 else { 12321 else {
12733 value = value.convertTo$3(this, type, node.values.$index(i)); 12322 value = value.convertTo$3(this, type, node.values.$index(i));
12734 this.writer.write(('' + val.code + ' = ' + value.code + '')); 12323 this.writer.write(('' + val.code + ' = ' + value.code + ''));
12735 } 12324 }
12736 } 12325 }
12737 this.writer.writeln(';'); 12326 this.writer.writeln(';');
12738 return false; 12327 return false;
12739 } 12328 }
12740 MethodGenerator.prototype.visitFunctionDefinition = function(node) { 12329 MethodGenerator.prototype.visitFunctionDefinition = function(node) {
12741 var $0;
12742 var name = world.toJsIdentifier(node.name.name); 12330 var name = world.toJsIdentifier(node.name.name);
12743 var meth = this._makeLambdaMethod($assert_String(name), node); 12331 var meth = this._makeLambdaMethod(name, node);
12744 var funcValue = this._scope.create($assert_String(name), (($0 = meth.get$funct ionType()) && $0.is$lang_Type()), this.method.get$definition().get$span(), false ); 12332 var funcValue = this._scope.create(name, meth.get$functionType(), this.method. get$definition().get$span(), false);
12745 meth.generator.writeDefinition$2(this.writer); 12333 meth.generator.writeDefinition$2(this.writer);
12746 return false; 12334 return false;
12747 } 12335 }
12748 MethodGenerator.prototype.visitReturnStatement = function(node) { 12336 MethodGenerator.prototype.visitReturnStatement = function(node) {
12749 if (node.value == null) { 12337 if (node.value == null) {
12750 this.writer.writeln('return;'); 12338 this.writer.writeln('return;');
12751 } 12339 }
12752 else { 12340 else {
12753 if ($notnull_bool(this.method.get$isConstructor())) { 12341 if (this.method.get$isConstructor()) {
12754 world.error('return of value not allowed from constructor', node.span); 12342 world.error('return of value not allowed from constructor', node.span);
12755 } 12343 }
12756 var value = this.visitTypedValue(node.value, this.method.get$returnType()); 12344 var value = this.visitTypedValue(node.value, this.method.get$returnType());
12757 this.writer.writeln(('return ' + value.code + ';')); 12345 this.writer.writeln(('return ' + value.code + ';'));
12758 } 12346 }
12759 return true; 12347 return true;
12760 } 12348 }
12761 MethodGenerator.prototype.visitThrowStatement = function(node) { 12349 MethodGenerator.prototype.visitThrowStatement = function(node) {
12762 if (node.value != null) { 12350 if (node.value != null) {
12763 var value = this.visitValue(node.value); 12351 var value = this.visitValue(node.value);
12764 value.invoke$4(this, 'toString', node, Arguments.get$EMPTY()); 12352 value.invoke$4(this, 'toString', node, Arguments.get$EMPTY());
12765 this.writer.writeln(('\$throw(' + value.code + ');')); 12353 this.writer.writeln(('\$throw(' + value.code + ');'));
12766 world.gen.corejs.useThrow = true; 12354 world.gen.corejs.useThrow = true;
12767 } 12355 }
12768 else { 12356 else {
12769 var rethrow = this._scope.getRethrow(); 12357 var rethrow = this._scope.getRethrow();
12770 if ($notnull_bool(rethrow == null)) { 12358 if (rethrow == null) {
12771 world.error('rethrow outside of catch', node.span); 12359 world.error('rethrow outside of catch', node.span);
12772 } 12360 }
12773 else { 12361 else {
12774 this.writer.writeln(('throw ' + rethrow.code + ';')); 12362 this.writer.writeln(('throw ' + rethrow.code + ';'));
12775 } 12363 }
12776 } 12364 }
12777 return true; 12365 return true;
12778 } 12366 }
12779 MethodGenerator.prototype.visitAssertStatement = function(node) { 12367 MethodGenerator.prototype.visitAssertStatement = function(node) {
12780 var $0;
12781 var test = this.visitValue(node.test); 12368 var test = this.visitValue(node.test);
12782 if ($notnull_bool(options.enableAsserts)) { 12369 if (options.enableAsserts) {
12783 var err = world.corelib.types.$index('AssertError'); 12370 var err = world.corelib.types.$index('AssertError');
12784 world.gen.genMethod((($0 = err.getConstructor$1('')) && $0.is$Member())); 12371 world.gen.genMethod(err.getConstructor$1(''));
12785 world.gen.genMethod((($0 = err.get$members().$index('toString')) && $0.is$Me mber())); 12372 world.gen.genMethod(err.get$members().$index('toString'));
12786 var span = node.test.span; 12373 var span = node.test.span;
12787 var line = span.file.getLine(span.start); 12374 var line = span.file.getLine(span.start);
12788 var column = span.file.getColumn($assert_num(line), span.start); 12375 var column = span.file.getColumn(line, span.start);
12789 this.writer.writeln(('\$assert(' + test.code + ', "' + MethodGenerator._esca peString(span.get$text()) + '",') + (' "' + basename(span.file.filename) + '", ' + (line + 1) + ', ' + (column + 1) + ');')); 12376 this.writer.writeln(('\$assert(' + test.code + ', "' + MethodGenerator._esca peString(span.get$text()) + '",') + (' "' + basename(span.file.filename) + '", ' + (line + 1) + ', ' + (column + 1) + ');'));
12790 world.gen.corejs.useAssert = true; 12377 world.gen.corejs.useAssert = true;
12791 } 12378 }
12792 return false; 12379 return false;
12793 } 12380 }
12794 MethodGenerator.prototype.visitBreakStatement = function(node) { 12381 MethodGenerator.prototype.visitBreakStatement = function(node) {
12795 if (node.label == null) { 12382 if (node.label == null) {
12796 this.writer.writeln('break;'); 12383 this.writer.writeln('break;');
12797 } 12384 }
12798 else { 12385 else {
12799 this.writer.writeln(('break ' + node.label.name + ';')); 12386 this.writer.writeln(('break ' + node.label.name + ';'));
12800 } 12387 }
12801 return true; 12388 return true;
12802 } 12389 }
12803 MethodGenerator.prototype.visitContinueStatement = function(node) { 12390 MethodGenerator.prototype.visitContinueStatement = function(node) {
12804 if (node.label == null) { 12391 if (node.label == null) {
12805 this.writer.writeln('continue;'); 12392 this.writer.writeln('continue;');
12806 } 12393 }
12807 else { 12394 else {
12808 this.writer.writeln(('continue ' + node.label.name + ';')); 12395 this.writer.writeln(('continue ' + node.label.name + ';'));
12809 } 12396 }
12810 return true; 12397 return true;
12811 } 12398 }
12812 MethodGenerator.prototype.visitIfStatement = function(node) { 12399 MethodGenerator.prototype.visitIfStatement = function(node) {
12813 var test = this.visitBool(node.test); 12400 var test = this.visitBool(node.test);
12814 this.writer.write(('if (' + test.code + ') ')); 12401 this.writer.write(('if (' + test.code + ') '));
12815 var exit1 = node.trueBranch.visit(this); 12402 var exit1 = node.trueBranch.visit(this);
12816 if (node.falseBranch != null) { 12403 if (node.falseBranch != null) {
12817 this.writer.write('else '); 12404 this.writer.write('else ');
12818 if ($notnull_bool(node.falseBranch.visit(this)) && $notnull_bool(exit1)) { 12405 if (node.falseBranch.visit(this) && exit1) {
12819 return true; 12406 return true;
12820 } 12407 }
12821 } 12408 }
12822 return false; 12409 return false;
12823 } 12410 }
12824 MethodGenerator.prototype.visitWhileStatement = function(node) { 12411 MethodGenerator.prototype.visitWhileStatement = function(node) {
12825 var test = this.visitBool(node.test); 12412 var test = this.visitBool(node.test);
12826 this.writer.write(('while (' + test.code + ') ')); 12413 this.writer.write(('while (' + test.code + ') '));
12827 this._pushBlock(true); 12414 this._pushBlock(true);
12828 node.body.visit(this); 12415 node.body.visit(this);
(...skipping 18 matching lines...) Expand all
12847 var test = this.visitBool(node.test); 12434 var test = this.visitBool(node.test);
12848 this.writer.write((' ' + test.code + '; ')); 12435 this.writer.write((' ' + test.code + '; '));
12849 } 12436 }
12850 else { 12437 else {
12851 this.writer.write('; '); 12438 this.writer.write('; ');
12852 } 12439 }
12853 var needsComma = false; 12440 var needsComma = false;
12854 var $list = node.step; 12441 var $list = node.step;
12855 for (var $i = 0;$i < $list.length; $i++) { 12442 for (var $i = 0;$i < $list.length; $i++) {
12856 var s = $list.$index($i); 12443 var s = $list.$index($i);
12857 if ($notnull_bool(needsComma)) this.writer.write(', '); 12444 if (needsComma) this.writer.write(', ');
12858 var sv = this.visitVoid((s && s.is$lang_Expression())); 12445 var sv = this.visitVoid(s);
12859 this.writer.write($assert_String(sv.code)); 12446 this.writer.write(sv.code);
12860 needsComma = true; 12447 needsComma = true;
12861 } 12448 }
12862 this.writer.write(') '); 12449 this.writer.write(') ');
12863 this._pushBlock(true); 12450 this._pushBlock(true);
12864 node.body.visit(this); 12451 node.body.visit(this);
12865 this._popBlock(); 12452 this._popBlock();
12866 this._popBlock(); 12453 this._popBlock();
12867 return false; 12454 return false;
12868 } 12455 }
12869 MethodGenerator.prototype.visitForInStatement = function(node) { 12456 MethodGenerator.prototype.visitForInStatement = function(node) {
12870 var $0;
12871 var itemType = this.method.resolveType(node.item.type, false); 12457 var itemType = this.method.resolveType(node.item.type, false);
12872 var itemName = node.item.name.name; 12458 var itemName = node.item.name.name;
12873 var list = node.list.visit(this); 12459 var list = node.list.visit(this);
12874 this._pushBlock(true); 12460 this._pushBlock(true);
12875 var item = this._scope.create($assert_String(itemName), (itemType && itemType. is$lang_Type()), node.item.name.span, false); 12461 var item = this._scope.create(itemName, itemType, node.item.name.span, false);
12876 var listVar = (list && list.is$Value()); 12462 var listVar = list;
12877 if ($notnull_bool(list.needsTemp)) { 12463 if (list.needsTemp) {
12878 listVar = this._scope.create('\$list', (($0 = list.type) && $0.is$lang_Type( )), null, false); 12464 listVar = this._scope.create('\$list', list.type, null, false);
12879 this.writer.writeln(('var ' + listVar.code + ' = ' + list.code + ';')); 12465 this.writer.writeln(('var ' + listVar.code + ' = ' + list.code + ';'));
12880 } 12466 }
12881 if ($notnull_bool(list.type.get$isList())) { 12467 if (list.type.get$isList()) {
12882 var tmpi = this._scope.create('\$i', world.numType, null, false); 12468 var tmpi = this._scope.create('\$i', world.numType, null, false);
12883 this.writer.enterBlock(('for (var ' + tmpi.code + ' = 0;') + ('' + tmpi.code + ' < ' + listVar.code + '.length; ' + tmpi.code + '++) {')); 12469 this.writer.enterBlock(('for (var ' + tmpi.code + ' = 0;') + ('' + tmpi.code + ' < ' + listVar.code + '.length; ' + tmpi.code + '++) {'));
12884 var value = listVar.invoke(this, '\$index', node.list, new Arguments(null, [ tmpi]), false); 12470 var value = listVar.invoke(this, '\$index', node.list, new Arguments(null, [ tmpi]), false);
12885 this.writer.writeln(('var ' + item.code + ' = ' + value.code + ';')); 12471 this.writer.writeln(('var ' + item.code + ' = ' + value.code + ';'));
12886 } 12472 }
12887 else { 12473 else {
12888 this._pushBlock(false); 12474 this._pushBlock(false);
12889 var iterator = list.invoke$4(this, 'iterator', node.list, Arguments.get$EMPT Y()); 12475 var iterator = list.invoke$4(this, 'iterator', node.list, Arguments.get$EMPT Y());
12890 var tmpi = this._scope.create('\$i', (($0 = iterator.type) && $0.is$lang_Typ e()), null, false); 12476 var tmpi = this._scope.create('\$i', iterator.type, null, false);
12891 var hasNext = tmpi.invoke$4(this, 'hasNext', node.list, Arguments.get$EMPTY( )); 12477 var hasNext = tmpi.invoke$4(this, 'hasNext', node.list, Arguments.get$EMPTY( ));
12892 var next = tmpi.invoke$4(this, 'next', node.list, Arguments.get$EMPTY()); 12478 var next = tmpi.invoke$4(this, 'next', node.list, Arguments.get$EMPTY());
12893 this.writer.enterBlock(('for (var ' + tmpi.code + ' = ' + iterator.code + '; ' + hasNext.code + '; ) {')); 12479 this.writer.enterBlock(('for (var ' + tmpi.code + ' = ' + iterator.code + '; ' + hasNext.code + '; ) {'));
12894 this.writer.writeln(('var ' + item.code + ' = ' + next.code + ';')); 12480 this.writer.writeln(('var ' + item.code + ' = ' + next.code + ';'));
12895 } 12481 }
12896 this.visitStatementsInBlock(node.body); 12482 this.visitStatementsInBlock(node.body);
12897 this.writer.exitBlock('}'); 12483 this.writer.exitBlock('}');
12898 this._popBlock(); 12484 this._popBlock();
12899 return false; 12485 return false;
12900 } 12486 }
12901 MethodGenerator.prototype._genToDartException = function(ex, node) { 12487 MethodGenerator.prototype._genToDartException = function(ex, node) {
12902 var types = const$408/*const [ 12488 var types = const$408/*const [
12903 'NullPointerException', 'ObjectNotClosureException', 12489 'NullPointerException', 'ObjectNotClosureException',
12904 'NoSuchMethodException', 'StackOverflowException']*/; 12490 'NoSuchMethodException', 'StackOverflowException']*/;
12905 var target = new Value(world.varType, 'this', node.span, true); 12491 var target = new Value(world.varType, 'this', node.span, true);
12906 for (var $i = types.iterator$0(); $i.hasNext$0(); ) { 12492 for (var $i = types.iterator$0(); $i.hasNext$0(); ) {
12907 var name = $i.next$0(); 12493 var name = $i.next$0();
12908 world.corelib.types.$index(name).markUsed$0(); 12494 world.corelib.types.$index(name).markUsed$0();
12909 world.corelib.types.$index(name).get$members().$index('toString').invoke$4(t his, node, target, Arguments.get$EMPTY()); 12495 world.corelib.types.$index(name).get$members().$index('toString').invoke$4(t his, node, target, Arguments.get$EMPTY());
12910 } 12496 }
12911 this.writer.writeln(('' + ex + ' = \$toDartException(' + ex + ');')); 12497 this.writer.writeln(('' + ex + ' = \$toDartException(' + ex + ');'));
12912 world.gen.corejs.useToDartException = true; 12498 world.gen.corejs.useToDartException = true;
12913 } 12499 }
12914 MethodGenerator.prototype.visitTryStatement = function(node) { 12500 MethodGenerator.prototype.visitTryStatement = function(node) {
12915 var $0;
12916 this.writer.enterBlock('try {'); 12501 this.writer.enterBlock('try {');
12917 this._pushBlock(false); 12502 this._pushBlock(false);
12918 this.visitStatementsInBlock(node.body); 12503 this.visitStatementsInBlock(node.body);
12919 this._popBlock(); 12504 this._popBlock();
12920 if (node.catches.length == 1) { 12505 if (node.catches.length == 1) {
12921 var catch_ = node.catches.$index(0); 12506 var catch_ = node.catches.$index(0);
12922 this._pushBlock(false); 12507 this._pushBlock(false);
12923 var ex = this._scope.declare((($0 = catch_.get$exception()) && $0.is$Declare dIdentifier())); 12508 var ex = this._scope.declare(catch_.get$exception());
12924 this._scope.rethrow = (ex && ex.is$Value()); 12509 this._scope.rethrow = ex;
12925 this.writer.nextBlock(('} catch (' + ex.code + ') {')); 12510 this.writer.nextBlock(('} catch (' + ex.code + ') {'));
12926 if (catch_.trace != null) { 12511 if (catch_.trace != null) {
12927 var trace = this._scope.declare(catch_.trace); 12512 var trace = this._scope.declare(catch_.trace);
12928 this.writer.writeln(('var ' + trace.code + ' = \$stackTraceOf(' + ex.code + ');')); 12513 this.writer.writeln(('var ' + trace.code + ' = \$stackTraceOf(' + ex.code + ');'));
12929 world.gen.corejs.useStackTraceOf = true; 12514 world.gen.corejs.useStackTraceOf = true;
12930 } 12515 }
12931 this._genToDartException($assert_String(ex.code), node); 12516 this._genToDartException(ex.code, node);
12932 if (!$notnull_bool(ex.type.get$isVar())) { 12517 if (!ex.type.get$isVar()) {
12933 var test = ex.instanceOf$3$isTrue$forceCheck(this, ex.type, catch_.get$exc eption().get$span(), false, true); 12518 var test = ex.instanceOf$3$isTrue$forceCheck(this, ex.type, catch_.get$exc eption().get$span(), false, true);
12934 this.writer.writeln(('if (' + test.code + ') throw ' + ex.code + ';')); 12519 this.writer.writeln(('if (' + test.code + ') throw ' + ex.code + ';'));
12935 } 12520 }
12936 this.visitStatementsInBlock((($0 = node.catches.$index(0).body) && $0.is$lan g_Statement())); 12521 this.visitStatementsInBlock(node.catches.$index(0).body);
12937 this._popBlock(); 12522 this._popBlock();
12938 } 12523 }
12939 else if (node.catches.length > 0) { 12524 else if (node.catches.length > 0) {
12940 this._pushBlock(false); 12525 this._pushBlock(false);
12941 var ex = this._scope.create('\$ex', world.varType, null, false); 12526 var ex = this._scope.create('\$ex', world.varType, null, false);
12942 this._scope.rethrow = (ex && ex.is$Value()); 12527 this._scope.rethrow = ex;
12943 this.writer.nextBlock(('} catch (' + ex.code + ') {')); 12528 this.writer.nextBlock(('} catch (' + ex.code + ') {'));
12944 var trace = null; 12529 var trace = null;
12945 if (node.catches.some((function (c) { 12530 if (node.catches.some((function (c) {
12946 return c.trace != null; 12531 return c.trace != null;
12947 }) 12532 })
12948 )) { 12533 )) {
12949 trace = this._scope.create('\$trace', world.varType, null, false); 12534 trace = this._scope.create('\$trace', world.varType, null, false);
12950 this.writer.writeln(('var ' + trace.code + ' = \$stackTraceOf(' + ex.code + ');')); 12535 this.writer.writeln(('var ' + trace.code + ' = \$stackTraceOf(' + ex.code + ');'));
12951 world.gen.corejs.useStackTraceOf = true; 12536 world.gen.corejs.useStackTraceOf = true;
12952 } 12537 }
12953 this._genToDartException($assert_String(ex.code), node); 12538 this._genToDartException(ex.code, node);
12954 var needsRethrow = true; 12539 var needsRethrow = true;
12955 for (var i = 0; 12540 for (var i = 0;
12956 i < node.catches.length; i++) { 12541 i < node.catches.length; i++) {
12957 var catch_ = node.catches.$index(i); 12542 var catch_ = node.catches.$index(i);
12958 this._pushBlock(false); 12543 this._pushBlock(false);
12959 var tmp = this._scope.declare((($0 = catch_.get$exception()) && $0.is$Decl aredIdentifier())); 12544 var tmp = this._scope.declare(catch_.get$exception());
12960 if (!$notnull_bool(tmp.type.get$isVar())) { 12545 if (!tmp.type.get$isVar()) {
12961 var test = ex.instanceOf$3$isTrue$forceCheck(this, tmp.type, catch_.get$ exception().get$span(), true, true); 12546 var test = ex.instanceOf$3$isTrue$forceCheck(this, tmp.type, catch_.get$ exception().get$span(), true, true);
12962 if (i == 0) { 12547 if (i == 0) {
12963 this.writer.enterBlock(('if (' + test.code + ') {')); 12548 this.writer.enterBlock(('if (' + test.code + ') {'));
12964 } 12549 }
12965 else { 12550 else {
12966 this.writer.nextBlock(('} else if (' + test.code + ') {')); 12551 this.writer.nextBlock(('} else if (' + test.code + ') {'));
12967 } 12552 }
12968 } 12553 }
12969 else if (i > 0) { 12554 else if (i > 0) {
12970 this.writer.nextBlock('} else {'); 12555 this.writer.nextBlock('} else {');
12971 } 12556 }
12972 this.writer.writeln(('var ' + tmp.code + ' = ' + ex.code + ';')); 12557 this.writer.writeln(('var ' + tmp.code + ' = ' + ex.code + ';'));
12973 if (catch_.trace != null) { 12558 if (catch_.trace != null) {
12974 var tmptrace = this._scope.declare(catch_.trace); 12559 var tmptrace = this._scope.declare(catch_.trace);
12975 this.writer.writeln(('var ' + tmptrace.code + ' = ' + trace.code + ';')) ; 12560 this.writer.writeln(('var ' + tmptrace.code + ' = ' + trace.code + ';')) ;
12976 } 12561 }
12977 this.visitStatementsInBlock((($0 = catch_.body) && $0.is$lang_Statement()) ); 12562 this.visitStatementsInBlock(catch_.body);
12978 this._popBlock(); 12563 this._popBlock();
12979 if ($notnull_bool(tmp.type.get$isVar())) { 12564 if (tmp.type.get$isVar()) {
12980 if (i + 1 < node.catches.length) { 12565 if (i + 1 < node.catches.length) {
12981 world.warning('Unreachable catch clause', (($0 = node.catches.$index(i + 1)) && $0.is$SourceSpan())); 12566 world.warning('Unreachable catch clause', node.catches.$index(i + 1));
12982 } 12567 }
12983 if (i > 0) { 12568 if (i > 0) {
12984 this.writer.exitBlock('}'); 12569 this.writer.exitBlock('}');
12985 } 12570 }
12986 needsRethrow = false; 12571 needsRethrow = false;
12987 break; 12572 break;
12988 } 12573 }
12989 } 12574 }
12990 if ($notnull_bool(needsRethrow)) { 12575 if (needsRethrow) {
12991 this.writer.nextBlock('} else {'); 12576 this.writer.nextBlock('} else {');
12992 this.writer.writeln(('throw ' + ex.code + ';')); 12577 this.writer.writeln(('throw ' + ex.code + ';'));
12993 this.writer.exitBlock('}'); 12578 this.writer.exitBlock('}');
12994 } 12579 }
12995 this._popBlock(); 12580 this._popBlock();
12996 } 12581 }
12997 if (node.finallyBlock != null) { 12582 if (node.finallyBlock != null) {
12998 this.writer.nextBlock('} finally {'); 12583 this.writer.nextBlock('} finally {');
12999 this._pushBlock(false); 12584 this._pushBlock(false);
13000 this.visitStatementsInBlock(node.finallyBlock); 12585 this.visitStatementsInBlock(node.finallyBlock);
13001 this._popBlock(); 12586 this._popBlock();
13002 } 12587 }
13003 this.writer.exitBlock('}'); 12588 this.writer.exitBlock('}');
13004 return false; 12589 return false;
13005 } 12590 }
13006 MethodGenerator.prototype.visitSwitchStatement = function(node) { 12591 MethodGenerator.prototype.visitSwitchStatement = function(node) {
13007 var test = this.visitValue(node.test); 12592 var test = this.visitValue(node.test);
13008 this.writer.enterBlock(('switch (' + test.code + ') {')); 12593 this.writer.enterBlock(('switch (' + test.code + ') {'));
13009 var $list = node.cases; 12594 var $list = node.cases;
13010 for (var $i = 0;$i < $list.length; $i++) { 12595 for (var $i = 0;$i < $list.length; $i++) {
13011 var case_ = $list.$index($i); 12596 var case_ = $list.$index($i);
13012 if (case_.label != null) { 12597 if (case_.label != null) {
13013 world.error('unimplemented: labeled case statement', case_.get$span()); 12598 world.error('unimplemented: labeled case statement', case_.get$span());
13014 } 12599 }
13015 this._pushBlock(false); 12600 this._pushBlock(false);
13016 for (var i = 0; 12601 for (var i = 0;
13017 i < case_.cases.length; i++) { 12602 i < case_.cases.length; i++) {
13018 var expr = case_.cases.$index(i); 12603 var expr = case_.cases.$index(i);
13019 if ($notnull_bool(expr == null)) { 12604 if (expr == null) {
13020 if (i < case_.cases.length - 1) { 12605 if (i < case_.cases.length - 1) {
13021 world.error('default clause must be the last case', case_.get$span()); 12606 world.error('default clause must be the last case', case_.get$span());
13022 } 12607 }
13023 this.writer.writeln('default:'); 12608 this.writer.writeln('default:');
13024 } 12609 }
13025 else { 12610 else {
13026 var value = this.visitValue((expr && expr.is$lang_Expression())); 12611 var value = this.visitValue(expr);
13027 this.writer.writeln(('case ' + value.code + ':')); 12612 this.writer.writeln(('case ' + value.code + ':'));
13028 } 12613 }
13029 } 12614 }
13030 this.writer.enterBlock(''); 12615 this.writer.enterBlock('');
13031 var caseExits = this._visitAllStatements(case_.statements, false); 12616 var caseExits = this._visitAllStatements(case_.statements, false);
13032 if ($notnull_bool($ne(case_, node.cases.$index(node.cases.length - 1))) && ! $notnull_bool(caseExits)) { 12617 if ($ne(case_, node.cases.$index(node.cases.length - 1)) && !caseExits) {
13033 var span = case_.statements.$index(case_.statements.length - 1).get$span() ; 12618 var span = case_.statements.$index(case_.statements.length - 1).get$span() ;
13034 this.writer.writeln('\$throw(new FallThroughError());'); 12619 this.writer.writeln('\$throw(new FallThroughError());');
13035 world.gen.corejs.useThrow = true; 12620 world.gen.corejs.useThrow = true;
13036 } 12621 }
13037 this.writer.exitBlock(''); 12622 this.writer.exitBlock('');
13038 this._popBlock(); 12623 this._popBlock();
13039 } 12624 }
13040 this.writer.exitBlock('}'); 12625 this.writer.exitBlock('}');
13041 return false; 12626 return false;
13042 } 12627 }
13043 MethodGenerator.prototype._visitAllStatements = function(statementList, exits) { 12628 MethodGenerator.prototype._visitAllStatements = function(statementList, exits) {
13044 for (var i = 0; 12629 for (var i = 0;
13045 i < statementList.length; i++) { 12630 i < statementList.length; i++) {
13046 var stmt = statementList.$index(i); 12631 var stmt = statementList.$index(i);
13047 exits = stmt.visit$1(this); 12632 exits = stmt.visit$1(this);
13048 if ($notnull_bool($ne(stmt, statementList.$index(statementList.length - 1))) && $notnull_bool(exits)) { 12633 if ($ne(stmt, statementList.$index(statementList.length - 1)) && exits) {
13049 world.warning('unreachable code', statementList.$index(i + 1).get$span()); 12634 world.warning('unreachable code', statementList.$index(i + 1).get$span());
13050 } 12635 }
13051 } 12636 }
13052 return $assert_bool(exits); 12637 return exits;
13053 } 12638 }
13054 MethodGenerator.prototype.visitBlockStatement = function(node) { 12639 MethodGenerator.prototype.visitBlockStatement = function(node) {
13055 this._pushBlock(false); 12640 this._pushBlock(false);
13056 this.writer.enterBlock('{'); 12641 this.writer.enterBlock('{');
13057 var exits = this._visitAllStatements(node.body, false); 12642 var exits = this._visitAllStatements(node.body, false);
13058 this.writer.exitBlock('}'); 12643 this.writer.exitBlock('}');
13059 this._popBlock(); 12644 this._popBlock();
13060 return $assert_bool(exits); 12645 return exits;
13061 } 12646 }
13062 MethodGenerator.prototype.visitLabeledStatement = function(node) { 12647 MethodGenerator.prototype.visitLabeledStatement = function(node) {
13063 this.writer.writeln(('' + node.name.name + ':')); 12648 this.writer.writeln(('' + node.name.name + ':'));
13064 node.body.visit(this); 12649 node.body.visit(this);
13065 return false; 12650 return false;
13066 } 12651 }
13067 MethodGenerator.prototype.visitExpressionStatement = function(node) { 12652 MethodGenerator.prototype.visitExpressionStatement = function(node) {
13068 if ((node.body instanceof VarExpression) || (node.body instanceof ThisExpressi on)) { 12653 if ((node.body instanceof VarExpression) || (node.body instanceof ThisExpressi on)) {
13069 world.warning('variable used as statement', node.span); 12654 world.warning('variable used as statement', node.span);
13070 } 12655 }
13071 var value = this.visitVoid(node.body); 12656 var value = this.visitVoid(node.body);
13072 this.writer.writeln(('' + value.code + ';')); 12657 this.writer.writeln(('' + value.code + ';'));
13073 return false; 12658 return false;
13074 } 12659 }
13075 MethodGenerator.prototype.visitEmptyStatement = function(node) { 12660 MethodGenerator.prototype.visitEmptyStatement = function(node) {
13076 this.writer.writeln(';'); 12661 this.writer.writeln(';');
13077 return false; 12662 return false;
13078 } 12663 }
13079 MethodGenerator.prototype._checkNonStatic = function(node) { 12664 MethodGenerator.prototype._checkNonStatic = function(node) {
13080 if ($notnull_bool(this.get$isStatic())) { 12665 if (this.get$isStatic()) {
13081 world.warning('not allowed in static method', node.span); 12666 world.warning('not allowed in static method', node.span);
13082 } 12667 }
13083 } 12668 }
13084 MethodGenerator.prototype._makeSuperValue = function(node) { 12669 MethodGenerator.prototype._makeSuperValue = function(node) {
13085 var parentType = this.method.declaringType.get$parent(); 12670 var parentType = this.method.declaringType.get$parent();
13086 this._checkNonStatic(node); 12671 this._checkNonStatic(node);
13087 if ($notnull_bool(parentType == null)) { 12672 if (parentType == null) {
13088 world.error('no super class', node.span); 12673 world.error('no super class', node.span);
13089 } 12674 }
13090 var ret = new Value(parentType, 'this', node.span, false); 12675 var ret = new Value(parentType, 'this', node.span, false);
13091 ret.isSuper = true; 12676 ret.isSuper = true;
13092 return ret; 12677 return ret;
13093 } 12678 }
13094 MethodGenerator.prototype._getOutermostMethod = function() { 12679 MethodGenerator.prototype._getOutermostMethod = function() {
13095 var result = this; 12680 var result = this;
13096 while (result.enclosingMethod != null) { 12681 while (result.enclosingMethod != null) {
13097 result = result.enclosingMethod; 12682 result = result.enclosingMethod;
(...skipping 19 matching lines...) Expand all
13117 else { 12702 else {
13118 this._checkNonStatic(node); 12703 this._checkNonStatic(node);
13119 return new Value(this.method.declaringType, 'this', node != null ? node.span : null, false); 12704 return new Value(this.method.declaringType, 'this', node != null ? node.span : null, false);
13120 } 12705 }
13121 } 12706 }
13122 MethodGenerator.prototype.visitLambdaExpression = function(node) { 12707 MethodGenerator.prototype.visitLambdaExpression = function(node) {
13123 var name = ''; 12708 var name = '';
13124 if (node.func.name != null) { 12709 if (node.func.name != null) {
13125 name = world.toJsIdentifier(node.func.name.name); 12710 name = world.toJsIdentifier(node.func.name.name);
13126 } 12711 }
13127 var meth = this._makeLambdaMethod($assert_String(name), node.func); 12712 var meth = this._makeLambdaMethod(name, node.func);
13128 var w = new CodeWriter(); 12713 var w = new CodeWriter();
13129 meth.generator.writeDefinition$2(w, node); 12714 meth.generator.writeDefinition$2(w, node);
13130 return new Value(meth.get$functionType(), w.get$text(), node.span, true); 12715 return new Value(meth.get$functionType(), w.get$text(), node.span, true);
13131 } 12716 }
13132 MethodGenerator.prototype.visitCallExpression = function(node) { 12717 MethodGenerator.prototype.visitCallExpression = function(node) {
13133 var $0;
13134 var target; 12718 var target;
13135 var position = node.target; 12719 var position = node.target;
13136 var name = '\$call'; 12720 var name = '\$call';
13137 if ((node.target instanceof DotExpression)) { 12721 if ((node.target instanceof DotExpression)) {
13138 var dot = (($0 = node.target) && $0.is$DotExpression()); 12722 var dot = node.target;
13139 target = dot.self.visit(this); 12723 target = dot.self.visit(this);
13140 name = dot.name.name; 12724 name = dot.name.name;
13141 position = dot.name; 12725 position = dot.name;
13142 } 12726 }
13143 else if ((node.target instanceof VarExpression)) { 12727 else if ((node.target instanceof VarExpression)) {
13144 var varExpr = (($0 = node.target) && $0.is$VarExpression()); 12728 var varExpr = node.target;
13145 name = varExpr.name.name; 12729 name = varExpr.name.name;
13146 target = this._scope.lookup($assert_String(name)); 12730 target = this._scope.lookup(name);
13147 if ($notnull_bool($ne(target, null))) { 12731 if ($ne(target, null)) {
13148 return target.invoke$4(this, '\$call', node, this._makeArgs(node.arguments )); 12732 return target.invoke$4(this, '\$call', node, this._makeArgs(node.arguments ));
13149 } 12733 }
13150 target = this._makeThisOrType(varExpr.span); 12734 target = this._makeThisOrType(varExpr.span);
13151 return target.invoke$4(this, name, node, this._makeArgs(node.arguments)); 12735 return target.invoke$4(this, name, node, this._makeArgs(node.arguments));
13152 } 12736 }
13153 else { 12737 else {
13154 target = node.target.visit(this); 12738 target = node.target.visit(this);
13155 } 12739 }
13156 return target.invoke$4(this, name, position, this._makeArgs(node.arguments)); 12740 return target.invoke$4(this, name, position, this._makeArgs(node.arguments));
13157 } 12741 }
13158 MethodGenerator.prototype.visitIndexExpression = function(node) { 12742 MethodGenerator.prototype.visitIndexExpression = function(node) {
13159 var target = this.visitValue(node.target); 12743 var target = this.visitValue(node.target);
13160 var index = this.visitValue(node.index); 12744 var index = this.visitValue(node.index);
13161 return target.invoke$4(this, '\$index', node, new Arguments(null, [index])); 12745 return target.invoke$4(this, '\$index', node, new Arguments(null, [index]));
13162 } 12746 }
13163 MethodGenerator.prototype.visitBinaryExpression = function(node) { 12747 MethodGenerator.prototype.visitBinaryExpression = function(node) {
13164 var kind = node.op.kind; 12748 var kind = node.op.kind;
13165 if (kind == 35/*TokenKind.AND*/ || kind == 34/*TokenKind.OR*/) { 12749 if (kind == 35/*TokenKind.AND*/ || kind == 34/*TokenKind.OR*/) {
13166 var x = this.visitTypedValue(node.x, world.nonNullBool); 12750 var x = this.visitTypedValue(node.x, world.nonNullBool);
13167 var y = this.visitTypedValue(node.y, world.nonNullBool); 12751 var y = this.visitTypedValue(node.y, world.nonNullBool);
13168 var code = ('' + x.code + ' ' + node.op + ' ' + y.code + ''); 12752 var code = ('' + x.code + ' ' + node.op + ' ' + y.code + '');
13169 if ($notnull_bool(x.get$isConst()) && $notnull_bool(y.get$isConst())) { 12753 if (x.get$isConst() && y.get$isConst()) {
13170 var value = (kind == 35/*TokenKind.AND*/) ? $notnull_bool(x.get$actualValu e()) && $notnull_bool(y.get$actualValue()) : $notnull_bool(x.get$actualValue()) || $notnull_bool(y.get$actualValue()); 12754 var value = (kind == 35/*TokenKind.AND*/) ? x.get$actualValue() && y.get$a ctualValue() : x.get$actualValue() || y.get$actualValue();
13171 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, value, ('' + value + ''), node.span); 12755 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, value, ('' + value + ''), node.span);
13172 } 12756 }
13173 return new Value(world.nonNullBool, code, node.span, true); 12757 return new Value(world.nonNullBool, code, node.span, true);
13174 } 12758 }
13175 else if (kind == 50/*TokenKind.EQ_STRICT*/ || kind == 51/*TokenKind.NE_STRICT* /) { 12759 else if (kind == 50/*TokenKind.EQ_STRICT*/ || kind == 51/*TokenKind.NE_STRICT* /) {
13176 var x = this.visitValue(node.x); 12760 var x = this.visitValue(node.x);
13177 var y = this.visitValue(node.y); 12761 var y = this.visitValue(node.y);
13178 if ($notnull_bool(x.get$isConst()) && $notnull_bool(y.get$isConst())) { 12762 if (x.get$isConst() && y.get$isConst()) {
13179 var value = kind == 50/*TokenKind.EQ_STRICT*/ ? $eq(x.get$actualValue(), y .get$actualValue()) : $ne(x.get$actualValue(), y.get$actualValue()); 12763 var value = kind == 50/*TokenKind.EQ_STRICT*/ ? $eq(x.get$actualValue(), y .get$actualValue()) : $ne(x.get$actualValue(), y.get$actualValue());
13180 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, value, ("" + value + ""), node.span); 12764 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, value, ("" + value + ""), node.span);
13181 } 12765 }
13182 if ($notnull_bool($eq(x.code, 'null')) || $notnull_bool($eq(y.code, 'null')) ) { 12766 if ($eq(x.code, 'null') || $eq(y.code, 'null')) {
13183 var op = node.op.toString().substring(0, 2); 12767 var op = node.op.toString().substring(0, 2);
13184 return new Value(world.nonNullBool, ('' + x.code + ' ' + op + ' ' + y.code + ''), node.span, true); 12768 return new Value(world.nonNullBool, ('' + x.code + ' ' + op + ' ' + y.code + ''), node.span, true);
13185 } 12769 }
13186 else { 12770 else {
13187 return new Value(world.nonNullBool, ('' + x.code + ' ' + node.op + ' ' + y .code + ''), node.span, true); 12771 return new Value(world.nonNullBool, ('' + x.code + ' ' + node.op + ' ' + y .code + ''), node.span, true);
13188 } 12772 }
13189 } 12773 }
13190 var assignKind = TokenKind.kindFromAssign(node.op.kind); 12774 var assignKind = TokenKind.kindFromAssign(node.op.kind);
13191 if (assignKind == -1) { 12775 if (assignKind == -1) {
13192 var x = this.visitValue(node.x); 12776 var x = this.visitValue(node.x);
13193 var y = this.visitValue(node.y); 12777 var y = this.visitValue(node.y);
13194 var name = TokenKind.binaryMethodName(node.op.kind); 12778 var name = TokenKind.binaryMethodName(node.op.kind);
13195 if (node.op.kind == 49/*TokenKind.NE*/) { 12779 if (node.op.kind == 49/*TokenKind.NE*/) {
13196 name = '\$ne'; 12780 name = '\$ne';
13197 } 12781 }
13198 if ($notnull_bool(name == null)) { 12782 if (name == null) {
13199 world.internalError(('unimplemented binary op ' + node.op + ''), node.span ); 12783 world.internalError(('unimplemented binary op ' + node.op + ''), node.span );
13200 return; 12784 return;
13201 } 12785 }
13202 return x.invoke$4(this, name, node, new Arguments(null, [y])); 12786 return x.invoke$4(this, name, node, new Arguments(null, [y]));
13203 } 12787 }
13204 else { 12788 else {
13205 return this._visitAssign(assignKind, node.x, node.y, node, to$call$1(null)); 12789 return this._visitAssign(assignKind, node.x, node.y, node, to$call$1(null));
13206 } 12790 }
13207 } 12791 }
13208 MethodGenerator.prototype._visitAssign = function(kind, xn, yn, position, captur eOriginal) { 12792 MethodGenerator.prototype._visitAssign = function(kind, xn, yn, position, captur eOriginal) {
13209 if (captureOriginal == null) { 12793 if (captureOriginal == null) {
13210 captureOriginal = (function (x) { 12794 captureOriginal = (function (x) {
13211 return x; 12795 return x;
13212 }) 12796 })
13213 ; 12797 ;
13214 } 12798 }
13215 if ((xn instanceof VarExpression)) { 12799 if ((xn instanceof VarExpression)) {
13216 return this._visitVarAssign(kind, (xn && xn.is$VarExpression()), yn, positio n, captureOriginal); 12800 return this._visitVarAssign(kind, xn, yn, position, captureOriginal);
13217 } 12801 }
13218 else if ((xn instanceof IndexExpression)) { 12802 else if ((xn instanceof IndexExpression)) {
13219 return this._visitIndexAssign(kind, (xn && xn.is$IndexExpression()), yn, pos ition, captureOriginal); 12803 return this._visitIndexAssign(kind, xn, yn, position, captureOriginal);
13220 } 12804 }
13221 else if ((xn instanceof DotExpression)) { 12805 else if ((xn instanceof DotExpression)) {
13222 return this._visitDotAssign(kind, (xn && xn.is$DotExpression()), yn, positio n, captureOriginal); 12806 return this._visitDotAssign(kind, xn, yn, position, captureOriginal);
13223 } 12807 }
13224 else { 12808 else {
13225 world.error('illegal lhs', position.span); 12809 world.error('illegal lhs', position.span);
13226 } 12810 }
13227 } 12811 }
13228 MethodGenerator.prototype._visitVarAssign = function(kind, xn, yn, position, cap tureOriginal) { 12812 MethodGenerator.prototype._visitVarAssign = function(kind, xn, yn, position, cap tureOriginal) {
13229 var name = xn.name.name; 12813 var name = xn.name.name;
13230 var x = this._scope.lookup(name); 12814 var x = this._scope.lookup(name);
13231 var y = this.visitValue(yn); 12815 var y = this.visitValue(yn);
13232 if ($notnull_bool(x == null)) { 12816 if (x == null) {
13233 var members = this.method.declaringType.resolveMember(name); 12817 var members = this.method.declaringType.resolveMember(name);
13234 if ($notnull_bool($ne(members, null))) { 12818 if ($ne(members, null)) {
13235 x = this._makeThisOrType(position.span); 12819 x = this._makeThisOrType(position.span);
13236 if (kind == 0) { 12820 if (kind == 0) {
13237 return x.set_$4(this, name, position, y); 12821 return x.set_$4(this, name, position, y);
13238 } 12822 }
13239 else if (!$notnull_bool(members.get$treatAsField()) || $notnull_bool(membe rs.get$containsMethods())) { 12823 else if (!members.get$treatAsField() || members.get$containsMethods()) {
13240 var right = x.get_$3(this, name, position); 12824 var right = x.get_$3(this, name, position);
13241 right = captureOriginal((right && right.is$Value())); 12825 right = captureOriginal(right);
13242 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arguments(null, [y])); 12826 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arguments(null, [y]));
13243 return x.set_$4(this, name, position, y); 12827 return x.set_$4(this, name, position, y);
13244 } 12828 }
13245 else { 12829 else {
13246 x = x.get_$3(this, name, position); 12830 x = x.get_$3(this, name, position);
13247 } 12831 }
13248 } 12832 }
13249 else { 12833 else {
13250 var member = this.get$library().lookup(name, xn.name.span); 12834 var member = this.get$library().lookup(name, xn.name.span);
13251 if (member == null) { 12835 if (member == null) {
13252 world.warning(('can not resolve ' + name + ''), xn.span); 12836 world.warning(('can not resolve ' + name + ''), xn.span);
13253 return this._makeMissingValue(name); 12837 return this._makeMissingValue(name);
13254 } 12838 }
13255 members = new MemberSet(member, false); 12839 members = new MemberSet(member, false);
13256 if (!$notnull_bool(members.get$treatAsField()) || $notnull_bool(members.ge t$containsMethods())) { 12840 if (!members.get$treatAsField() || members.get$containsMethods()) {
13257 if (kind != 0) { 12841 if (kind != 0) {
13258 var right = members._get$3(this, position, x); 12842 var right = members._get$3(this, position, x);
13259 right = captureOriginal((right && right.is$Value())); 12843 right = captureOriginal(right);
13260 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, n ew Arguments(null, [y])); 12844 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, n ew Arguments(null, [y]));
13261 } 12845 }
13262 return members._set$4(this, position, x, y); 12846 return members._set$4(this, position, x, y);
13263 } 12847 }
13264 else { 12848 else {
13265 x = members._get$3(this, position, x); 12849 x = members._get$3(this, position, x);
13266 } 12850 }
13267 } 12851 }
13268 } 12852 }
13269 y = y.convertTo$3(this, x.type, yn); 12853 y = y.convertTo$3(this, x.type, yn);
13270 if (kind == 0) { 12854 if (kind == 0) {
13271 x = captureOriginal((x && x.is$Value())); 12855 x = captureOriginal(x);
13272 return new Value(y.type, ('' + x.code + ' = ' + y.code + ''), position.span, true); 12856 return new Value(y.type, ('' + x.code + ' = ' + y.code + ''), position.span, true);
13273 } 12857 }
13274 else if ($notnull_bool(x.type.get$isNum()) && $notnull_bool(y.type.get$isNum() ) && (kind != 46/*TokenKind.TRUNCDIV*/)) { 12858 else if (x.type.get$isNum() && y.type.get$isNum() && (kind != 46/*TokenKind.TR UNCDIV*/)) {
13275 x = captureOriginal((x && x.is$Value())); 12859 x = captureOriginal(x);
13276 var op = TokenKind.kindToString(kind); 12860 var op = TokenKind.kindToString(kind);
13277 return new Value(y.type, ('' + x.code + ' ' + op + '= ' + y.code + ''), posi tion.span, true); 12861 return new Value(y.type, ('' + x.code + ' ' + op + '= ' + y.code + ''), posi tion.span, true);
13278 } 12862 }
13279 else { 12863 else {
13280 var right = x; 12864 var right = x;
13281 right = captureOriginal((right && right.is$Value())); 12865 right = captureOriginal(right);
13282 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y])); 12866 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y]));
13283 return new Value(y.type, ('' + x.code + ' = ' + y.code + ''), position.span, true); 12867 return new Value(y.type, ('' + x.code + ' = ' + y.code + ''), position.span, true);
13284 } 12868 }
13285 } 12869 }
13286 MethodGenerator.prototype._visitIndexAssign = function(kind, xn, yn, position, c aptureOriginal) { 12870 MethodGenerator.prototype._visitIndexAssign = function(kind, xn, yn, position, c aptureOriginal) {
13287 var target = this.visitValue(xn.target); 12871 var target = this.visitValue(xn.target);
13288 var index = this.visitValue(xn.index); 12872 var index = this.visitValue(xn.index);
13289 var y = this.visitValue(yn); 12873 var y = this.visitValue(yn);
13290 var tmptarget = target; 12874 var tmptarget = target;
13291 var tmpindex = index; 12875 var tmpindex = index;
13292 if (kind != 0) { 12876 if (kind != 0) {
13293 tmptarget = this.getTemp((target && target.is$Value())); 12877 tmptarget = this.getTemp(target);
13294 tmpindex = this.getTemp((index && index.is$Value())); 12878 tmpindex = this.getTemp(index);
13295 index = this.assignTemp((tmpindex && tmpindex.is$Value()), (index && index.i s$Value())); 12879 index = this.assignTemp(tmpindex, index);
13296 var right = tmptarget.invoke$4(this, '\$index', position, new Arguments(null , [tmpindex])); 12880 var right = tmptarget.invoke$4(this, '\$index', position, new Arguments(null , [tmpindex]));
13297 right = captureOriginal((right && right.is$Value())); 12881 right = captureOriginal(right);
13298 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y])); 12882 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y]));
13299 } 12883 }
13300 var ret = this.assignTemp((tmptarget && tmptarget.is$Value()), (target && targ et.is$Value())).invoke(this, '\$setindex', position, new Arguments(null, [index, y]), false); 12884 var ret = this.assignTemp(tmptarget, target).invoke(this, '\$setindex', positi on, new Arguments(null, [index, y]), false);
13301 if ($notnull_bool($ne(tmptarget, target))) this.freeTemp((tmptarget && tmptarg et.is$Value())); 12885 if ($ne(tmptarget, target)) this.freeTemp(tmptarget);
13302 if ($notnull_bool($ne(tmpindex, index))) this.freeTemp((tmpindex && tmpindex.i s$Value())); 12886 if ($ne(tmpindex, index)) this.freeTemp(tmpindex);
13303 return ret; 12887 return ret;
13304 } 12888 }
13305 MethodGenerator.prototype._visitDotAssign = function(kind, xn, yn, position, cap tureOriginal) { 12889 MethodGenerator.prototype._visitDotAssign = function(kind, xn, yn, position, cap tureOriginal) {
13306 var target = xn.self.visit(this); 12890 var target = xn.self.visit(this);
13307 var y = this.visitValue(yn); 12891 var y = this.visitValue(yn);
13308 var tmptarget = target; 12892 var tmptarget = target;
13309 if (kind != 0) { 12893 if (kind != 0) {
13310 tmptarget = this.getTemp((target && target.is$Value())); 12894 tmptarget = this.getTemp(target);
13311 var right = tmptarget.get_$3(this, xn.name.name, xn.name); 12895 var right = tmptarget.get_$3(this, xn.name.name, xn.name);
13312 right = captureOriginal((right && right.is$Value())); 12896 right = captureOriginal(right);
13313 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y])); 12897 y = right.invoke$4(this, TokenKind.binaryMethodName(kind), position, new Arg uments(null, [y]));
13314 } 12898 }
13315 var ret = this.assignTemp((tmptarget && tmptarget.is$Value()), (target && targ et.is$Value())).set_(this, xn.name.name, xn.name, (y && y.is$Value()), false); 12899 var ret = this.assignTemp(tmptarget, target).set_(this, xn.name.name, xn.name, y, false);
13316 if ($notnull_bool($ne(tmptarget, target))) this.freeTemp((tmptarget && tmptarg et.is$Value())); 12900 if ($ne(tmptarget, target)) this.freeTemp(tmptarget);
13317 return ret; 12901 return ret;
13318 } 12902 }
13319 MethodGenerator.prototype.visitUnaryExpression = function(node) { 12903 MethodGenerator.prototype.visitUnaryExpression = function(node) {
13320 var $0;
13321 var value = this.visitValue(node.self); 12904 var value = this.visitValue(node.self);
13322 switch (node.op.kind) { 12905 switch (node.op.kind) {
13323 case 16/*TokenKind.INCR*/: 12906 case 16/*TokenKind.INCR*/:
13324 case 17/*TokenKind.DECR*/: 12907 case 17/*TokenKind.DECR*/:
13325 12908
13326 if ($notnull_bool(value.type.get$isNum())) { 12909 if (value.type.get$isNum()) {
13327 return new Value(value.type, ('' + node.op + '' + value.code + ''), node .span, true); 12910 return new Value(value.type, ('' + node.op + '' + value.code + ''), node .span, true);
13328 } 12911 }
13329 else { 12912 else {
13330 var kind = (16/*TokenKind.INCR*/ == node.op.kind ? 42/*TokenKind.ADD*/ : 43/*TokenKind.SUB*/); 12913 var kind = (16/*TokenKind.INCR*/ == node.op.kind ? 42/*TokenKind.ADD*/ : 43/*TokenKind.SUB*/);
13331 var operand = new LiteralExpression(1, new TypeReference(node.span, worl d.numType), '1', node.span); 12914 var operand = new LiteralExpression(1, new TypeReference(node.span, worl d.numType), '1', node.span);
13332 return this._visitAssign($assert_num(kind), node.self, (operand && opera nd.is$lang_Expression()), node, to$call$1(null)); 12915 return this._visitAssign(kind, node.self, operand, node, to$call$1(null) );
13333 } 12916 }
13334 12917
13335 case 19/*TokenKind.NOT*/: 12918 case 19/*TokenKind.NOT*/:
13336 12919
13337 if ($notnull_bool(value.type.get$isBool()) && $notnull_bool(value.get$isCo nst())) { 12920 if (value.type.get$isBool() && value.get$isConst()) {
13338 var newVal = !$notnull_bool(value.get$actualValue()); 12921 var newVal = !value.get$actualValue();
13339 return EvaluatedValue.EvaluatedValue$factory((($0 = value.type) && $0.is $lang_Type()), newVal, ('' + newVal + ''), node.span); 12922 return EvaluatedValue.EvaluatedValue$factory(value.type, newVal, ('' + n ewVal + ''), node.span);
13340 } 12923 }
13341 else { 12924 else {
13342 var newVal = value.convertTo$3(this, world.nonNullBool, node); 12925 var newVal = value.convertTo$3(this, world.nonNullBool, node);
13343 return new Value(newVal.type, ('!' + newVal.code + ''), node.span, true) ; 12926 return new Value(newVal.type, ('!' + newVal.code + ''), node.span, true) ;
13344 } 12927 }
13345 12928
13346 case 42/*TokenKind.ADD*/: 12929 case 42/*TokenKind.ADD*/:
13347 12930
13348 return value.convertTo$3(this, world.numType, node); 12931 return value.convertTo$3(this, world.numType, node);
13349 12932
(...skipping 13 matching lines...) Expand all
13363 12946
13364 default: 12947 default:
13365 12948
13366 world.internalError(('unimplemented: ' + node.op + ''), node.span); 12949 world.internalError(('unimplemented: ' + node.op + ''), node.span);
13367 12950
13368 } 12951 }
13369 } 12952 }
13370 MethodGenerator.prototype.visitPostfixExpression = function(node, isVoid) { 12953 MethodGenerator.prototype.visitPostfixExpression = function(node, isVoid) {
13371 var $this = this; // closure support 12954 var $this = this; // closure support
13372 var value = this.visitValue(node.body); 12955 var value = this.visitValue(node.body);
13373 if ($notnull_bool(value.type.get$isNum())) { 12956 if (value.type.get$isNum()) {
13374 return new Value(value.type, ('' + value.code + '' + node.op + ''), node.spa n, true); 12957 return new Value(value.type, ('' + value.code + '' + node.op + ''), node.spa n, true);
13375 } 12958 }
13376 var kind = (16/*TokenKind.INCR*/ == node.op.kind) ? 42/*TokenKind.ADD*/ : 43/* TokenKind.SUB*/; 12959 var kind = (16/*TokenKind.INCR*/ == node.op.kind) ? 42/*TokenKind.ADD*/ : 43/* TokenKind.SUB*/;
13377 var operand = new LiteralExpression(1, new TypeReference(node.span, world.numT ype), '1', node.span); 12960 var operand = new LiteralExpression(1, new TypeReference(node.span, world.numT ype), '1', node.span);
13378 var tmpleft = null, left = null; 12961 var tmpleft = null, left = null;
13379 var ret = this._visitAssign($assert_num(kind), node.body, (operand && operand. is$lang_Expression()), node, (function (l) { 12962 var ret = this._visitAssign(kind, node.body, operand, node, (function (l) {
13380 if ($notnull_bool(isVoid)) { 12963 if (isVoid) {
13381 return l; 12964 return l;
13382 } 12965 }
13383 else { 12966 else {
13384 left = l; 12967 left = l;
13385 tmpleft = $this.forceTemp((l && l.is$Value())); 12968 tmpleft = $this.forceTemp(l);
13386 return $this.assignTemp((tmpleft && tmpleft.is$Value()), (left && left.is$ Value())); 12969 return $this.assignTemp(tmpleft, left);
13387 } 12970 }
13388 }) 12971 })
13389 ); 12972 );
13390 if ($notnull_bool($ne(tmpleft, null))) { 12973 if ($ne(tmpleft, null)) {
13391 ret = new Value(ret.type, ("(" + ret.code + ", " + tmpleft.code + ")"), node .span, true); 12974 ret = new Value(ret.type, ("(" + ret.code + ", " + tmpleft.code + ")"), node .span, true);
13392 } 12975 }
13393 if ($notnull_bool($ne(tmpleft, left))) { 12976 if ($ne(tmpleft, left)) {
13394 this.freeTemp((tmpleft && tmpleft.is$Value())); 12977 this.freeTemp(tmpleft);
13395 } 12978 }
13396 return ret; 12979 return ret;
13397 } 12980 }
13398 MethodGenerator.prototype.visitNewExpression = function(node) { 12981 MethodGenerator.prototype.visitNewExpression = function(node) {
13399 var $0;
13400 var typeRef = node.type; 12982 var typeRef = node.type;
13401 var constructorName = ''; 12983 var constructorName = '';
13402 if (node.name != null) { 12984 if (node.name != null) {
13403 constructorName = node.name.name; 12985 constructorName = node.name.name;
13404 } 12986 }
13405 if ($notnull_bool($eq(constructorName, '')) && !(typeRef instanceof GenericTyp eReference) && typeRef.names != null) { 12987 if ($eq(constructorName, '') && !(typeRef instanceof GenericTypeReference) && typeRef.names != null) {
13406 var names = ListFactory.ListFactory$from$factory(typeRef.names); 12988 var names = ListFactory.ListFactory$from$factory(typeRef.names);
13407 constructorName = names.removeLast$0().get$name(); 12989 constructorName = names.removeLast$0().get$name();
13408 if (names.length == 0) names = null; 12990 if (names.length == 0) names = null;
13409 typeRef = new NameTypeReference(typeRef.isFinal, typeRef.get$name(), names, typeRef.get$span()); 12991 typeRef = new NameTypeReference(typeRef.isFinal, typeRef.get$name(), names, typeRef.get$span());
13410 } 12992 }
13411 var type = this.method.resolveType((typeRef && typeRef.is$TypeReference()), tr ue); 12993 var type = this.method.resolveType(typeRef, true);
13412 if ($notnull_bool(type.get$isTop())) { 12994 if (type.get$isTop()) {
13413 type = type.get$library().findTypeByName($assert_String(constructorName)); 12995 type = type.get$library().findTypeByName(constructorName);
13414 constructorName = ''; 12996 constructorName = '';
13415 } 12997 }
13416 var m = type.getConstructor$1(constructorName); 12998 var m = type.getConstructor$1(constructorName);
13417 if ($notnull_bool(m == null)) { 12999 if (m == null) {
13418 var name = type.get$jsname(); 13000 var name = type.get$jsname();
13419 if ($notnull_bool(type.get$isVar())) { 13001 if (type.get$isVar()) {
13420 name = typeRef.get$name().get$name(); 13002 name = typeRef.get$name().get$name();
13421 } 13003 }
13422 world.error(('no matching constructor for ' + name + ''), node.span); 13004 world.error(('no matching constructor for ' + name + ''), node.span);
13423 return this._makeMissingValue($assert_String(name)); 13005 return this._makeMissingValue(name);
13424 } 13006 }
13425 if ($notnull_bool(node.isConst)) { 13007 if (node.isConst) {
13426 if (!$notnull_bool(m.get$isConst())) { 13008 if (!m.get$isConst()) {
13427 world.error('can\'t use const on a non-const constructor', node.span); 13009 world.error('can\'t use const on a non-const constructor', node.span);
13428 } 13010 }
13429 var $list = node.arguments; 13011 var $list = node.arguments;
13430 for (var $i = 0;$i < $list.length; $i++) { 13012 for (var $i = 0;$i < $list.length; $i++) {
13431 var arg = $list.$index($i); 13013 var arg = $list.$index($i);
13432 if (!$notnull_bool(this.visitValue((($0 = arg.get$value()) && $0.is$lang_E xpression())).get$isConst())) { 13014 if (!this.visitValue(arg.get$value()).get$isConst()) {
13433 world.error('const constructor expects const arguments', arg.get$span()) ; 13015 world.error('const constructor expects const arguments', arg.get$span()) ;
13434 } 13016 }
13435 } 13017 }
13436 } 13018 }
13437 return m.invoke$4(this, node, null, this._makeArgs(node.arguments)); 13019 return m.invoke$4(this, node, null, this._makeArgs(node.arguments));
13438 } 13020 }
13439 MethodGenerator.prototype.visitListExpression = function(node) { 13021 MethodGenerator.prototype.visitListExpression = function(node) {
13440 var argsCode = []; 13022 var argsCode = [];
13441 var argValues = []; 13023 var argValues = [];
13442 var $list = node.values; 13024 var $list = node.values;
13443 for (var $i = 0;$i < $list.length; $i++) { 13025 for (var $i = 0;$i < $list.length; $i++) {
13444 var item = $list.$index($i); 13026 var item = $list.$index($i);
13445 var arg = this.visitValue((item && item.is$lang_Expression())); 13027 var arg = this.visitValue(item);
13446 argValues.add$1(arg); 13028 argValues.add$1(arg);
13447 if ($notnull_bool(node.isConst)) { 13029 if (node.isConst) {
13448 if (!$notnull_bool(arg.get$isConst())) { 13030 if (!arg.get$isConst()) {
13449 world.error('const list can only contain const values', item.get$span()) ; 13031 world.error('const list can only contain const values', item.get$span()) ;
13450 argsCode.add$1(arg.code); 13032 argsCode.add$1(arg.code);
13451 } 13033 }
13452 else { 13034 else {
13453 argsCode.add$1(arg.get$canonicalCode()); 13035 argsCode.add$1(arg.get$canonicalCode());
13454 } 13036 }
13455 } 13037 }
13456 else { 13038 else {
13457 argsCode.add$1(arg.code); 13039 argsCode.add$1(arg.code);
13458 } 13040 }
13459 } 13041 }
13460 world.get$coreimpl().types.$index('ListFactory').markUsed$0(); 13042 world.get$coreimpl().types.$index('ListFactory').markUsed$0();
13461 var code = ('[' + Strings.join((argsCode && argsCode.is$List$String()), ", ") + ']'); 13043 var code = ('[' + Strings.join(argsCode, ", ") + ']');
13462 var value = new Value(world.listType, code, node.span, true); 13044 var value = new Value(world.listType, code, node.span, true);
13463 if ($notnull_bool(node.isConst)) { 13045 if (node.isConst) {
13464 var immutableList = world.get$coreimpl().types.$index('ImmutableList'); 13046 var immutableList = world.get$coreimpl().types.$index('ImmutableList');
13465 var immutableListCtor = immutableList.getConstructor$1('from'); 13047 var immutableListCtor = immutableList.getConstructor$1('from');
13466 var result = immutableListCtor.invoke$4(this, node, null, new Arguments(null , [value])); 13048 var result = immutableListCtor.invoke$4(this, node, null, new Arguments(null , [value]));
13467 value = world.gen.globalForConst(ConstListValue.ConstListValue$factory((immu tableList && immutableList.is$lang_Type()), (argValues && argValues.is$List$Eval uatedValue()), ('const ' + code + ''), $assert_String(result.code), node.span), (argValues && argValues.is$List$Value())); 13049 value = world.gen.globalForConst(ConstListValue.ConstListValue$factory(immut ableList, argValues, ('const ' + code + ''), result.code, node.span), argValues) ;
13468 } 13050 }
13469 return value; 13051 return value;
13470 } 13052 }
13471 MethodGenerator.prototype.visitMapExpression = function(node) { 13053 MethodGenerator.prototype.visitMapExpression = function(node) {
13472 var $0;
13473 var mapImplType = world.gen.useMapFactory(); 13054 var mapImplType = world.gen.useMapFactory();
13474 var argValues = []; 13055 var argValues = [];
13475 var argsCode = []; 13056 var argsCode = [];
13476 for (var i = 0; 13057 for (var i = 0;
13477 i < node.items.length; i += 2) { 13058 i < node.items.length; i += 2) {
13478 var key = this.visitTypedValue((($0 = node.items.$index(i)) && $0.is$lang_Ex pression()), world.stringType); 13059 var key = this.visitTypedValue(node.items.$index(i), world.stringType);
13479 var valueItem = node.items.$index(i + 1); 13060 var valueItem = node.items.$index(i + 1);
13480 var value = this.visitValue((valueItem && valueItem.is$lang_Expression())); 13061 var value = this.visitValue(valueItem);
13481 argValues.add$1(key); 13062 argValues.add$1(key);
13482 argValues.add$1(value); 13063 argValues.add$1(value);
13483 if ($notnull_bool(node.isConst)) { 13064 if (node.isConst) {
13484 if (!$notnull_bool(key.get$isConst()) || !$notnull_bool(value.get$isConst( ))) { 13065 if (!key.get$isConst() || !value.get$isConst()) {
13485 world.error('const map can only contain const values', valueItem.get$spa n()); 13066 world.error('const map can only contain const values', valueItem.get$spa n());
13486 argsCode.add$1(key.code); 13067 argsCode.add$1(key.code);
13487 argsCode.add$1(value.code); 13068 argsCode.add$1(value.code);
13488 } 13069 }
13489 else { 13070 else {
13490 argsCode.add$1(key.get$canonicalCode()); 13071 argsCode.add$1(key.get$canonicalCode());
13491 argsCode.add$1(value.get$canonicalCode()); 13072 argsCode.add$1(value.get$canonicalCode());
13492 } 13073 }
13493 } 13074 }
13494 else { 13075 else {
13495 argsCode.add$1(key.code); 13076 argsCode.add$1(key.code);
13496 argsCode.add$1(value.code); 13077 argsCode.add$1(value.code);
13497 } 13078 }
13498 } 13079 }
13499 var argList = ('[' + Strings.join((argsCode && argsCode.is$List$String()), ", ") + ']'); 13080 var argList = ('[' + Strings.join(argsCode, ", ") + ']');
13500 var code = ('\$map(' + argList + ')'); 13081 var code = ('\$map(' + argList + ')');
13501 if ($notnull_bool(node.isConst)) { 13082 if (node.isConst) {
13502 var immutableMap = world.get$coreimpl().types.$index('ImmutableMap'); 13083 var immutableMap = world.get$coreimpl().types.$index('ImmutableMap');
13503 var immutableMapCtor = immutableMap.getConstructor$1(''); 13084 var immutableMapCtor = immutableMap.getConstructor$1('');
13504 var argsValue = new Value(world.listType, argList, node.span, true); 13085 var argsValue = new Value(world.listType, argList, node.span, true);
13505 var result = immutableMapCtor.invoke$4(this, node, null, new Arguments(null, [argsValue])); 13086 var result = immutableMapCtor.invoke$4(this, node, null, new Arguments(null, [argsValue]));
13506 var value = ConstMapValue.ConstMapValue$factory((immutableMap && immutableMa p.is$lang_Type()), (argValues && argValues.is$List$EvaluatedValue()), code, $ass ert_String(result.code), node.span); 13087 var value = ConstMapValue.ConstMapValue$factory(immutableMap, argValues, cod e, result.code, node.span);
13507 return world.gen.globalForConst(value, (argValues && argValues.is$List$Value ())); 13088 return world.gen.globalForConst(value, argValues);
13508 } 13089 }
13509 return new Value(mapImplType, code, node.span, true); 13090 return new Value(mapImplType, code, node.span, true);
13510 } 13091 }
13511 MethodGenerator.prototype.visitConditionalExpression = function(node) { 13092 MethodGenerator.prototype.visitConditionalExpression = function(node) {
13512 var $0;
13513 var test = this.visitBool(node.test); 13093 var test = this.visitBool(node.test);
13514 var trueBranch = this.visitValue(node.trueBranch); 13094 var trueBranch = this.visitValue(node.trueBranch);
13515 var falseBranch = this.visitValue(node.falseBranch); 13095 var falseBranch = this.visitValue(node.falseBranch);
13516 var code = ('' + test.code + ' ? ' + trueBranch.code + ' : ' + falseBranch.cod e + ''); 13096 var code = ('' + test.code + ' ? ' + trueBranch.code + ' : ' + falseBranch.cod e + '');
13517 return new Value(lang_Type.union((($0 = trueBranch.type) && $0.is$lang_Type()) , (($0 = falseBranch.type) && $0.is$lang_Type())), code, node.span, true); 13097 return new Value(lang_Type.union(trueBranch.type, falseBranch.type), code, nod e.span, true);
13518 } 13098 }
13519 MethodGenerator.prototype.visitIsExpression = function(node) { 13099 MethodGenerator.prototype.visitIsExpression = function(node) {
13520 var value = this.visitValue(node.x); 13100 var value = this.visitValue(node.x);
13521 var type = this.method.resolveType(node.type, false); 13101 var type = this.method.resolveType(node.type, false);
13522 return value.instanceOf$4(this, type, node.span, node.isTrue); 13102 return value.instanceOf$4(this, type, node.span, node.isTrue);
13523 } 13103 }
13524 MethodGenerator.prototype.visitParenExpression = function(node) { 13104 MethodGenerator.prototype.visitParenExpression = function(node) {
13525 var $0;
13526 var body = this.visitValue(node.body); 13105 var body = this.visitValue(node.body);
13527 if ($notnull_bool(body.get$isConst())) { 13106 if (body.get$isConst()) {
13528 return EvaluatedValue.EvaluatedValue$factory((($0 = body.type) && $0.is$lang _Type()), body.get$actualValue(), ('(' + body.get$canonicalCode() + ')'), node.s pan); 13107 return EvaluatedValue.EvaluatedValue$factory(body.type, body.get$actualValue (), ('(' + body.get$canonicalCode() + ')'), node.span);
13529 } 13108 }
13530 return new Value(body.type, ('(' + body.code + ')'), node.span, true); 13109 return new Value(body.type, ('(' + body.code + ')'), node.span, true);
13531 } 13110 }
13532 MethodGenerator.prototype.visitDotExpression = function(node) { 13111 MethodGenerator.prototype.visitDotExpression = function(node) {
13533 var target = node.self.visit(this); 13112 var target = node.self.visit(this);
13534 return target.get_$3(this, node.name.name, node.name); 13113 return target.get_$3(this, node.name.name, node.name);
13535 } 13114 }
13536 MethodGenerator.prototype.visitVarExpression = function(node) { 13115 MethodGenerator.prototype.visitVarExpression = function(node) {
13537 var name = node.name.name; 13116 var name = node.name.name;
13538 var ret = this._scope.lookup(name); 13117 var ret = this._scope.lookup(name);
13539 if ($notnull_bool($ne(ret, null))) return ret; 13118 if ($ne(ret, null)) return ret;
13540 return this._makeThisOrType(node.span).get_$3(this, name, node); 13119 return this._makeThisOrType(node.span).get_$3(this, name, node);
13541 } 13120 }
13542 MethodGenerator.prototype._makeMissingValue = function(name) { 13121 MethodGenerator.prototype._makeMissingValue = function(name) {
13543 return new Value(world.varType, ('' + name + '()/*NotFound*/'), null, true); 13122 return new Value(world.varType, ('' + name + '()/*NotFound*/'), null, true);
13544 } 13123 }
13545 MethodGenerator.prototype._makeThisOrType = function(span) { 13124 MethodGenerator.prototype._makeThisOrType = function(span) {
13546 var $0; 13125 return new BareValue(this, this._getOutermostMethod(), span);
13547 return new BareValue(this, (($0 = this._getOutermostMethod()) && $0.is$MethodG enerator()), span);
13548 } 13126 }
13549 MethodGenerator.prototype.visitThisExpression = function(node) { 13127 MethodGenerator.prototype.visitThisExpression = function(node) {
13550 return this._makeThisValue(node); 13128 return this._makeThisValue(node);
13551 } 13129 }
13552 MethodGenerator.prototype.visitSuperExpression = function(node) { 13130 MethodGenerator.prototype.visitSuperExpression = function(node) {
13553 return this._makeSuperValue(node); 13131 return this._makeSuperValue(node);
13554 } 13132 }
13555 MethodGenerator.prototype.visitNullExpression = function(node) { 13133 MethodGenerator.prototype.visitNullExpression = function(node) {
13556 return EvaluatedValue.EvaluatedValue$factory(world.varType, null, 'null', null ); 13134 return EvaluatedValue.EvaluatedValue$factory(world.varType, null, 'null', null );
13557 } 13135 }
13558 MethodGenerator.prototype.visitLiteralExpression = function(node) { 13136 MethodGenerator.prototype.visitLiteralExpression = function(node) {
13559 var $0; 13137 var $0;
13560 var type = node.type.type; 13138 var type = node.type.type;
13561 $assert($ne(type, null), "type != null", "gen.dart", 2083, 12);
13562 if (!!(($0 = node.value) && $0.is$List)) { 13139 if (!!(($0 = node.value) && $0.is$List)) {
13563 var items = []; 13140 var items = [];
13564 var $list = node.value; 13141 var $list = node.value;
13565 for (var $i = node.value.iterator$0(); $i.hasNext$0(); ) { 13142 for (var $i = node.value.iterator$0(); $i.hasNext$0(); ) {
13566 var item = $i.next$0(); 13143 var item = $i.next$0();
13567 var val = this.visitValue((item && item.is$lang_Expression())); 13144 var val = this.visitValue(item);
13568 val.invoke$4(this, 'toString', item, Arguments.get$EMPTY()); 13145 val.invoke$4(this, 'toString', item, Arguments.get$EMPTY());
13569 var code = val.code; 13146 var code = val.code;
13570 if ((item instanceof BinaryExpression) || (item instanceof ConditionalExpr ession)) { 13147 if ((item instanceof BinaryExpression) || (item instanceof ConditionalExpr ession)) {
13571 code = ('(' + code + ')'); 13148 code = ('(' + code + ')');
13572 } 13149 }
13573 items.add$1(code); 13150 items.add$1(code);
13574 } 13151 }
13575 return new Value(type, ('(' + Strings.join((items && items.is$List$String()) , " + ") + ')'), node.span, true); 13152 return new Value(type, ('(' + Strings.join(items, " + ") + ')'), node.span, true);
13576 } 13153 }
13577 var text = node.text; 13154 var text = node.text;
13578 if ($notnull_bool(type.get$isString())) { 13155 if (type.get$isString()) {
13579 if ($notnull_bool(text.startsWith$1('@'))) { 13156 if (text.startsWith$1('@')) {
13580 text = MethodGenerator._escapeString(parseStringLiteral($assert_String(tex t))); 13157 text = MethodGenerator._escapeString(parseStringLiteral(text));
13581 text = ('"' + text + '"'); 13158 text = ('"' + text + '"');
13582 } 13159 }
13583 else if ($notnull_bool(isMultilineString($assert_String(text)))) { 13160 else if (isMultilineString(text)) {
13584 text = parseStringLiteral($assert_String(text)); 13161 text = parseStringLiteral(text);
13585 text = text.replaceAll$2('\n', '\\n'); 13162 text = text.replaceAll$2('\n', '\\n');
13586 text = text.replaceAll$2('"', '\\"'); 13163 text = text.replaceAll$2('"', '\\"');
13587 text = ('"' + text + '"'); 13164 text = ('"' + text + '"');
13588 } 13165 }
13589 if (text !== node.text) { 13166 if (text !== node.text) {
13590 node.value = text; 13167 node.value = text;
13591 node.text = $assert_String(text); 13168 node.text = text;
13592 } 13169 }
13593 } 13170 }
13594 return EvaluatedValue.EvaluatedValue$factory((type && type.is$lang_Type()), no de.value, node.text, null); 13171 return EvaluatedValue.EvaluatedValue$factory(type, node.value, node.text, null );
13595 } 13172 }
13596 MethodGenerator.prototype.visitPostfixExpression$1 = function($0) { 13173 MethodGenerator.prototype.visitPostfixExpression$1 = function($0) {
13597 return this.visitPostfixExpression(($0 && $0.is$PostfixExpression()), false); 13174 return this.visitPostfixExpression($0, false);
13598 }; 13175 };
13599 MethodGenerator.prototype.writeDefinition$2 = function($0, $1) { 13176 MethodGenerator.prototype.writeDefinition$2 = function($0, $1) {
13600 return this.writeDefinition(($0 && $0.is$CodeWriter()), ($1 && $1.is$LambdaExp ression())); 13177 return this.writeDefinition($0, $1);
13601 }; 13178 };
13602 // ********** Code for Arguments ************** 13179 // ********** Code for Arguments **************
13603 function Arguments(nodes, values) { 13180 function Arguments(nodes, values) {
13604 this.nodes = nodes; 13181 this.nodes = nodes;
13605 this.values = values; 13182 this.values = values;
13606 // Initializers done 13183 // Initializers done
13607 } 13184 }
13608 Arguments.prototype.is$Arguments = function(){return this;};
13609 Arguments.Arguments$bare$factory = function(arity) { 13185 Arguments.Arguments$bare$factory = function(arity) {
13610 var values = []; 13186 var values = [];
13611 for (var i = 0; 13187 for (var i = 0;
13612 i < arity; i++) { 13188 i < arity; i++) {
13613 values.add$1(new Value(world.varType, ('\$' + i + ''), null, false)); 13189 values.add$1(new Value(world.varType, ('\$' + i + ''), null, false));
13614 } 13190 }
13615 return new Arguments(null, values); 13191 return new Arguments(null, values);
13616 } 13192 }
13617 Arguments.get$EMPTY = function() { 13193 Arguments.get$EMPTY = function() {
13618 if (Arguments._empty == null) { 13194 if (Arguments._empty == null) {
(...skipping 19 matching lines...) Expand all
13638 Arguments.prototype.getIndexOfName = function(name) { 13214 Arguments.prototype.getIndexOfName = function(name) {
13639 for (var i = this.get$bareCount(); 13215 for (var i = this.get$bareCount();
13640 i < this.get$length(); i++) { 13216 i < this.get$length(); i++) {
13641 if (this.getName(i) == name) { 13217 if (this.getName(i) == name) {
13642 return i; 13218 return i;
13643 } 13219 }
13644 } 13220 }
13645 return -1; 13221 return -1;
13646 } 13222 }
13647 Arguments.prototype.getValue = function(name) { 13223 Arguments.prototype.getValue = function(name) {
13648 var $0;
13649 var i = this.getIndexOfName(name); 13224 var i = this.getIndexOfName(name);
13650 return (($0 = i >= 0 ? this.values.$index(i) : null) && $0.is$Value()); 13225 return i >= 0 ? this.values.$index(i) : null;
13651 } 13226 }
13652 Arguments.prototype.get$bareCount = function() { 13227 Arguments.prototype.get$bareCount = function() {
13653 if (this._bareCount == null) { 13228 if (this._bareCount == null) {
13654 this._bareCount = this.get$length(); 13229 this._bareCount = this.get$length();
13655 if (this.nodes != null) { 13230 if (this.nodes != null) {
13656 for (var i = 0; 13231 for (var i = 0;
13657 i < this.nodes.length; i++) { 13232 i < this.nodes.length; i++) {
13658 if (this.nodes.$index(i).label != null) { 13233 if (this.nodes.$index(i).label != null) {
13659 this._bareCount = i; 13234 this._bareCount = i;
13660 break; 13235 break;
13661 } 13236 }
13662 } 13237 }
13663 } 13238 }
13664 } 13239 }
13665 return this._bareCount; 13240 return this._bareCount;
13666 } 13241 }
13667 Arguments.prototype.getCode = function() { 13242 Arguments.prototype.getCode = function() {
13668 var argsCode = []; 13243 var argsCode = [];
13669 for (var i = 0; 13244 for (var i = 0;
13670 i < this.get$length(); i++) { 13245 i < this.get$length(); i++) {
13671 argsCode.add$1(this.values.$index(i).code); 13246 argsCode.add$1(this.values.$index(i).code);
13672 } 13247 }
13673 Arguments.removeTrailingNulls((argsCode && argsCode.is$List$Value())); 13248 Arguments.removeTrailingNulls(argsCode);
13674 return Strings.join((argsCode && argsCode.is$List$String()), ", "); 13249 return Strings.join(argsCode, ", ");
13675 } 13250 }
13676 Arguments.removeTrailingNulls = function(argsCode) { 13251 Arguments.removeTrailingNulls = function(argsCode) {
13677 while (argsCode.length > 0 && $notnull_bool($eq(argsCode.last(), 'null'))) { 13252 while (argsCode.length > 0 && $eq(argsCode.last(), 'null')) {
13678 argsCode.removeLast(); 13253 argsCode.removeLast();
13679 } 13254 }
13680 } 13255 }
13681 Arguments.prototype.getNames = function() { 13256 Arguments.prototype.getNames = function() {
13682 var names = []; 13257 var names = [];
13683 for (var i = this.get$bareCount(); 13258 for (var i = this.get$bareCount();
13684 i < this.get$length(); i++) { 13259 i < this.get$length(); i++) {
13685 names.add$1(this.getName(i)); 13260 names.add$1(this.getName(i));
13686 } 13261 }
13687 return (names && names.is$List$String()); 13262 return names;
13688 } 13263 }
13689 Arguments.prototype.toCallStubArgs = function() { 13264 Arguments.prototype.toCallStubArgs = function() {
13690 var result = []; 13265 var result = [];
13691 for (var i = 0; 13266 for (var i = 0;
13692 i < this.get$bareCount(); i++) { 13267 i < this.get$bareCount(); i++) {
13693 result.add$1(new Value(world.varType, ('\$' + i + ''), null, false)); 13268 result.add$1(new Value(world.varType, ('\$' + i + ''), null, false));
13694 } 13269 }
13695 for (var i = this.get$bareCount(); 13270 for (var i = this.get$bareCount();
13696 i < this.get$length(); i++) { 13271 i < this.get$length(); i++) {
13697 var name = this.getName(i); 13272 var name = this.getName(i);
13698 if ($notnull_bool(name == null)) name = ('\$' + i + ''); 13273 if (name == null) name = ('\$' + i + '');
13699 result.add$1(new Value(world.varType, name, null, false)); 13274 result.add$1(new Value(world.varType, name, null, false));
13700 } 13275 }
13701 return new Arguments(this.nodes, result); 13276 return new Arguments(this.nodes, result);
13702 } 13277 }
13703 // ********** Code for LibraryImport ************** 13278 // ********** Code for LibraryImport **************
13704 function LibraryImport(library, prefix) { 13279 function LibraryImport(library, prefix) {
13705 this.library = library; 13280 this.library = library;
13706 this.prefix = prefix; 13281 this.prefix = prefix;
13707 // Initializers done 13282 // Initializers done
13708 } 13283 }
13709 LibraryImport.prototype.get$library = function() { return this.library; }; 13284 LibraryImport.prototype.get$library = function() { return this.library; };
13710 LibraryImport.prototype.set$library = function(value) { return this.library = va lue; }; 13285 LibraryImport.prototype.set$library = function(value) { return this.library = va lue; };
13711 // ********** Code for Library ************** 13286 // ********** Code for Library **************
13712 function Library(baseSource) { 13287 function Library(baseSource) {
13713 this.isWritten = false 13288 this.isWritten = false
13714 this.baseSource = baseSource; 13289 this.baseSource = baseSource;
13715 // Initializers done 13290 // Initializers done
13716 this.sourceDir = dirname(this.baseSource.filename); 13291 this.sourceDir = dirname(this.baseSource.filename);
13717 this.topType = new DefinedType(null, this, null, true); 13292 this.topType = new DefinedType(null, this, null, true);
13718 this.types = $map(['', this.topType]); 13293 this.types = $map(['', this.topType]);
13719 this.imports = []; 13294 this.imports = [];
13720 this.natives = []; 13295 this.natives = [];
13721 this.sources = []; 13296 this.sources = [];
13722 this._privateMembers = $map([]); 13297 this._privateMembers = $map([]);
13723 } 13298 }
13724 Library.prototype.is$Library = function(){return this;};
13725 Library.prototype.get$name = function() { return this.name; }; 13299 Library.prototype.get$name = function() { return this.name; };
13726 Library.prototype.set$name = function(value) { return this.name = value; }; 13300 Library.prototype.set$name = function(value) { return this.name = value; };
13727 Library.prototype.get$isCore = function() { 13301 Library.prototype.get$isCore = function() {
13728 return $eq(this, world.corelib); 13302 return $eq(this, world.corelib);
13729 } 13303 }
13730 Library.prototype.get$isCoreImpl = function() { 13304 Library.prototype.get$isCoreImpl = function() {
13731 return $eq(this, world.get$coreimpl()); 13305 return $eq(this, world.get$coreimpl());
13732 } 13306 }
13733 Library.prototype.get$jsname = function() { 13307 Library.prototype.get$jsname = function() {
13734 if (this._jsname == null) { 13308 if (this._jsname == null) {
(...skipping 13 matching lines...) Expand all
13748 } 13322 }
13749 Library.prototype.addImport = function(fullname, prefix) { 13323 Library.prototype.addImport = function(fullname, prefix) {
13750 var newLib = world.getOrAddLibrary(fullname); 13324 var newLib = world.getOrAddLibrary(fullname);
13751 this.imports.add(new LibraryImport(newLib, prefix)); 13325 this.imports.add(new LibraryImport(newLib, prefix));
13752 return newLib; 13326 return newLib;
13753 } 13327 }
13754 Library.prototype.addNative = function(fullname) { 13328 Library.prototype.addNative = function(fullname) {
13755 this.natives.add(world.reader.readFile(fullname)); 13329 this.natives.add(world.reader.readFile(fullname));
13756 } 13330 }
13757 Library.prototype._findMembers = function(name) { 13331 Library.prototype._findMembers = function(name) {
13758 var $0;
13759 if (name.startsWith('_')) { 13332 if (name.startsWith('_')) {
13760 return (($0 = this._privateMembers.$index(name)) && $0.is$MemberSet()); 13333 return this._privateMembers.$index(name);
13761 } 13334 }
13762 else { 13335 else {
13763 return (($0 = world._members.$index(name)) && $0.is$MemberSet()); 13336 return world._members.$index(name);
13764 } 13337 }
13765 } 13338 }
13766 Library.prototype._addMember = function(member) { 13339 Library.prototype._addMember = function(member) {
13767 if ($notnull_bool(member.get$isPrivate())) { 13340 if (member.get$isPrivate()) {
13768 if ($notnull_bool(member.get$isStatic())) { 13341 if (member.get$isStatic()) {
13769 if ($notnull_bool(member.declaringType.get$isTop())) { 13342 if (member.declaringType.get$isTop()) {
13770 world._addTopName(member); 13343 world._addTopName(member);
13771 } 13344 }
13772 return; 13345 return;
13773 } 13346 }
13774 var mset = this._privateMembers.$index(member.name); 13347 var mset = this._privateMembers.$index(member.name);
13775 if ($notnull_bool(mset == null)) { 13348 if (mset == null) {
13776 var $list = world.libraries.getValues(); 13349 var $list = world.libraries.getValues();
13777 for (var $i = world.libraries.getValues().iterator$0(); $i.hasNext$0(); ) { 13350 for (var $i = world.libraries.getValues().iterator$0(); $i.hasNext$0(); ) {
13778 var lib = $i.next$0(); 13351 var lib = $i.next$0();
13779 if (lib._privateMembers.containsKey(member.name)) { 13352 if (lib._privateMembers.containsKey(member.name)) {
13780 member.set$jsname(('_' + this.get$jsname() + '' + member.name + '')); 13353 member.set$jsname(('_' + this.get$jsname() + '' + member.name + ''));
13781 break; 13354 break;
13782 } 13355 }
13783 } 13356 }
13784 mset = new MemberSet(member, false); 13357 mset = new MemberSet(member, false);
13785 this._privateMembers.$setindex(member.name, mset); 13358 this._privateMembers.$setindex(member.name, mset);
13786 } 13359 }
13787 else { 13360 else {
13788 mset.get$members().add$1(member); 13361 mset.get$members().add$1(member);
13789 } 13362 }
13790 } 13363 }
13791 else { 13364 else {
13792 world._addMember(member); 13365 world._addMember(member);
13793 } 13366 }
13794 } 13367 }
13795 Library.prototype.getOrAddFunctionType = function(name, func, inType) { 13368 Library.prototype.getOrAddFunctionType = function(name, func, inType) {
13796 var def = new FunctionTypeDefinition(func, null, func.span); 13369 var def = new FunctionTypeDefinition(func, null, func.span);
13797 var type = new DefinedType(name, this, def, false); 13370 var type = new DefinedType(name, this, def, false);
13798 type.addMethod('\$call', func); 13371 type.addMethod('\$call', func);
13799 type.members.$index('\$call').resolve$1(inType); 13372 type.members.$index('\$call').resolve$1(inType);
13800 type.interfaces = [world.functionType]; 13373 type.interfaces = [world.functionType];
13801 return type; 13374 return type;
13802 } 13375 }
13803 Library.prototype.addType = function(name, definition, isClass) { 13376 Library.prototype.addType = function(name, definition, isClass) {
13804 var $0;
13805 if (this.types.containsKey(name)) { 13377 if (this.types.containsKey(name)) {
13806 var existingType = this.types.$index(name); 13378 var existingType = this.types.$index(name);
13807 if ($notnull_bool(this.get$isCore()) && $notnull_bool(existingType.get$defin ition() == null)) { 13379 if (this.get$isCore() && existingType.get$definition() == null) {
13808 existingType.setDefinition$1(definition); 13380 existingType.setDefinition$1(definition);
13809 } 13381 }
13810 else { 13382 else {
13811 world.warning(('duplicate definition of ' + name + ''), definition.span); 13383 world.warning(('duplicate definition of ' + name + ''), definition.span);
13812 } 13384 }
13813 } 13385 }
13814 else { 13386 else {
13815 this.types.$setindex(name, new DefinedType(name, this, (definition && defini tion.is$Definition()), isClass)); 13387 this.types.$setindex(name, new DefinedType(name, this, definition, isClass)) ;
13816 } 13388 }
13817 return (($0 = this.types.$index(name)) && $0.is$DefinedType()); 13389 return this.types.$index(name);
13818 } 13390 }
13819 Library.prototype.findType = function(type) { 13391 Library.prototype.findType = function(type) {
13820 var result = this.findTypeByName(type.name.name); 13392 var result = this.findTypeByName(type.name.name);
13821 if (result == null) return null; 13393 if (result == null) return null;
13822 if (type.names != null) { 13394 if (type.names != null) {
13823 if (type.names.length > 1) { 13395 if (type.names.length > 1) {
13824 return null; 13396 return null;
13825 } 13397 }
13826 if (!$notnull_bool(result.get$isTop())) { 13398 if (!result.get$isTop()) {
13827 return null; 13399 return null;
13828 } 13400 }
13829 return result.get$library().findTypeByName($assert_String(type.names.$index( 0).get$name())); 13401 return result.get$library().findTypeByName(type.names.$index(0).get$name());
13830 } 13402 }
13831 return result; 13403 return result;
13832 } 13404 }
13833 Library.prototype.findTypeByName = function(name) { 13405 Library.prototype.findTypeByName = function(name) {
13834 var ret = this.types.$index(name); 13406 var ret = this.types.$index(name);
13835 var $list = this.imports; 13407 var $list = this.imports;
13836 for (var $i = 0;$i < $list.length; $i++) { 13408 for (var $i = 0;$i < $list.length; $i++) {
13837 var imported = $list.$index($i); 13409 var imported = $list.$index($i);
13838 var newRet = null; 13410 var newRet = null;
13839 if (imported.prefix == null) { 13411 if (imported.prefix == null) {
13840 newRet = imported.get$library().types.$index(name); 13412 newRet = imported.get$library().types.$index(name);
13841 } 13413 }
13842 else if (imported.prefix == name) { 13414 else if (imported.prefix == name) {
13843 newRet = imported.get$library().topType; 13415 newRet = imported.get$library().topType;
13844 } 13416 }
13845 if ($notnull_bool($ne(newRet, null))) { 13417 if ($ne(newRet, null)) {
13846 if ($notnull_bool($ne(ret, null)) && $notnull_bool($ne(ret, newRet))) { 13418 if ($ne(ret, null) && $ne(ret, newRet)) {
13847 world.error(('conflicting types for "' + name + '"'), ret.get$span(), ne wRet.get$span()); 13419 world.error(('conflicting types for "' + name + '"'), ret.get$span(), ne wRet.get$span());
13848 } 13420 }
13849 else { 13421 else {
13850 ret = newRet; 13422 ret = newRet;
13851 } 13423 }
13852 } 13424 }
13853 } 13425 }
13854 return (ret && ret.is$lang_Type()); 13426 return ret;
13855 } 13427 }
13856 Library.prototype.lookup = function(name, span) { 13428 Library.prototype.lookup = function(name, span) {
13857 var retType = this.findTypeByName(name); 13429 var retType = this.findTypeByName(name);
13858 var ret = null; 13430 var ret = null;
13859 if ($notnull_bool($ne(retType, null))) { 13431 if ($ne(retType, null)) {
13860 ret = retType.get$typeMember(); 13432 ret = retType.get$typeMember();
13861 } 13433 }
13862 var newRet = this.topType.getMember(name); 13434 var newRet = this.topType.getMember(name);
13863 if ($notnull_bool($ne(newRet, null))) { 13435 if ($ne(newRet, null)) {
13864 if ($notnull_bool($ne(ret, null)) && $notnull_bool($ne(ret, newRet))) { 13436 if ($ne(ret, null) && $ne(ret, newRet)) {
13865 world.error(('conflicting members for "' + name + '"'), span, ret.get$span (), newRet.get$span()); 13437 world.error(('conflicting members for "' + name + '"'), span, ret.get$span (), newRet.get$span());
13866 } 13438 }
13867 else { 13439 else {
13868 ret = newRet; 13440 ret = newRet;
13869 } 13441 }
13870 } 13442 }
13871 var $list = this.imports; 13443 var $list = this.imports;
13872 for (var $i = 0;$i < $list.length; $i++) { 13444 for (var $i = 0;$i < $list.length; $i++) {
13873 var imported = $list.$index($i); 13445 var imported = $list.$index($i);
13874 if (imported.prefix == null) { 13446 if (imported.prefix == null) {
13875 newRet = imported.get$library().topType.getMember(name); 13447 newRet = imported.get$library().topType.getMember(name);
13876 if ($notnull_bool($ne(newRet, null))) { 13448 if ($ne(newRet, null)) {
13877 if ($notnull_bool($ne(ret, null)) && $notnull_bool($ne(ret, newRet))) { 13449 if ($ne(ret, null) && $ne(ret, newRet)) {
13878 world.error(('conflicting members for "' + name + '"'), span, ret.get$ span(), newRet.get$span()); 13450 world.error(('conflicting members for "' + name + '"'), span, ret.get$ span(), newRet.get$span());
13879 } 13451 }
13880 else { 13452 else {
13881 ret = newRet; 13453 ret = newRet;
13882 } 13454 }
13883 } 13455 }
13884 } 13456 }
13885 } 13457 }
13886 return (ret && ret.is$Member()); 13458 return ret;
13887 } 13459 }
13888 Library.prototype.resolve = function() { 13460 Library.prototype.resolve = function() {
13889 if (this.name == null) { 13461 if (this.name == null) {
13890 this.name = this.baseSource.filename; 13462 this.name = this.baseSource.filename;
13891 var index = this.name.lastIndexOf('/', this.name.length); 13463 var index = this.name.lastIndexOf('/', this.name.length);
13892 if (index >= 0) { 13464 if (index >= 0) {
13893 this.name = this.name.substring($assert_num(index + 1)); 13465 this.name = this.name.substring(index + 1);
13894 } 13466 }
13895 index = this.name.indexOf('.', 0); 13467 index = this.name.indexOf('.', 0);
13896 if (index > 0) { 13468 if (index > 0) {
13897 this.name = this.name.substring(0, $assert_num(index)); 13469 this.name = this.name.substring(0, index);
13898 } 13470 }
13899 } 13471 }
13900 var $list = this.types.getValues(); 13472 var $list = this.types.getValues();
13901 for (var $i = this.types.getValues().iterator$0(); $i.hasNext$0(); ) { 13473 for (var $i = this.types.getValues().iterator$0(); $i.hasNext$0(); ) {
13902 var type = $i.next$0(); 13474 var type = $i.next$0();
13903 type.resolve$0(); 13475 type.resolve$0();
13904 } 13476 }
13905 } 13477 }
13906 Library.prototype.visitSources = function() { 13478 Library.prototype.visitSources = function() {
13907 var visitor = new _LibraryVisitor(this); 13479 var visitor = new _LibraryVisitor(this);
(...skipping 15 matching lines...) Expand all
13923 function _LibraryVisitor(library) { 13495 function _LibraryVisitor(library) {
13924 this.seenImport = false 13496 this.seenImport = false
13925 this.seenSource = false 13497 this.seenSource = false
13926 this.seenResource = false 13498 this.seenResource = false
13927 this.isTop = true 13499 this.isTop = true
13928 this.library = library; 13500 this.library = library;
13929 // Initializers done 13501 // Initializers done
13930 this.currentType = this.library.topType; 13502 this.currentType = this.library.topType;
13931 this.sources = []; 13503 this.sources = [];
13932 } 13504 }
13933 _LibraryVisitor.prototype.is$TreeVisitor = function(){return this;};
13934 _LibraryVisitor.prototype.get$library = function() { return this.library; }; 13505 _LibraryVisitor.prototype.get$library = function() { return this.library; };
13935 _LibraryVisitor.prototype.get$isTop = function() { return this.isTop; }; 13506 _LibraryVisitor.prototype.get$isTop = function() { return this.isTop; };
13936 _LibraryVisitor.prototype.set$isTop = function(value) { return this.isTop = valu e; }; 13507 _LibraryVisitor.prototype.set$isTop = function(value) { return this.isTop = valu e; };
13937 _LibraryVisitor.prototype.addSourceFromName = function(name, span) { 13508 _LibraryVisitor.prototype.addSourceFromName = function(name, span) {
13938 var filename = this.library.makeFullPath(name); 13509 var filename = this.library.makeFullPath(name);
13939 if ($notnull_bool($eq(filename, this.library.baseSource.filename))) { 13510 if ($eq(filename, this.library.baseSource.filename)) {
13940 world.error('library can not source itself', span); 13511 world.error('library can not source itself', span);
13941 return; 13512 return;
13942 } 13513 }
13943 else if (this.sources.some((function (s) { 13514 else if (this.sources.some((function (s) {
13944 return $eq(s.filename, filename); 13515 return s.filename == filename;
13945 }) 13516 })
13946 )) { 13517 )) {
13947 world.error(('file "' + filename + '" has already been sourced'), span); 13518 world.error(('file "' + filename + '" has already been sourced'), span);
13948 return; 13519 return;
13949 } 13520 }
13950 var source = world.readFile(this.library.makeFullPath(name)); 13521 var source = world.readFile(this.library.makeFullPath(name));
13951 this.sources.add(source); 13522 this.sources.add(source);
13952 } 13523 }
13953 _LibraryVisitor.prototype.addSource = function(source) { 13524 _LibraryVisitor.prototype.addSource = function(source) {
13954 var $this = this; // closure support 13525 var $this = this; // closure support
13955 if (this.library.sources.some((function (s) { 13526 if (this.library.sources.some((function (s) {
13956 return s.filename == source.filename; 13527 return s.filename == source.filename;
13957 }) 13528 })
13958 )) { 13529 )) {
13959 world.error(('duplicate source file "' + source.filename + '"')); 13530 world.error(('duplicate source file "' + source.filename + '"'));
13960 return; 13531 return;
13961 } 13532 }
13962 this.library.sources.add(source); 13533 this.library.sources.add(source);
13963 var parser = new lang_Parser(source, options.dietParse, false, false, 0); 13534 var parser = new lang_Parser(source, options.dietParse, false, false, 0);
13964 var unit = parser.compilationUnit(); 13535 var unit = parser.compilationUnit();
13965 unit.forEach((function (def) { 13536 unit.forEach((function (def) {
13966 return def.visit$1($this); 13537 return def.visit$1($this);
13967 }) 13538 })
13968 ); 13539 );
13969 $assert(this.sources.length == 0 || $notnull_bool(this.isTop), "sources.length == 0 || isTop", "library.dart", 293, 12);
13970 this.isTop = false; 13540 this.isTop = false;
13971 var newSources = this.sources; 13541 var newSources = this.sources;
13972 this.sources = []; 13542 this.sources = [];
13973 for (var $i = newSources.iterator$0(); $i.hasNext$0(); ) { 13543 for (var $i = newSources.iterator$0(); $i.hasNext$0(); ) {
13974 var source0 = $i.next$0(); 13544 var source0 = $i.next$0();
13975 this.addSource((source0 && source0.is$SourceFile())); 13545 this.addSource(source0);
13976 } 13546 }
13977 } 13547 }
13978 _LibraryVisitor.prototype.visitDirectiveDefinition = function(node) { 13548 _LibraryVisitor.prototype.visitDirectiveDefinition = function(node) {
13979 if (!$notnull_bool(this.isTop)) { 13549 if (!this.isTop) {
13980 world.error('directives not allowed in sourced file', node.span); 13550 world.error('directives not allowed in sourced file', node.span);
13981 return; 13551 return;
13982 } 13552 }
13983 var name; 13553 var name;
13984 switch (node.name.name) { 13554 switch (node.name.name) {
13985 case "library": 13555 case "library":
13986 13556
13987 name = this.getSingleStringArg(node); 13557 name = this.getSingleStringArg(node);
13988 if (this.library.name == null) { 13558 if (this.library.name == null) {
13989 this.library.name = $assert_String(name); 13559 this.library.name = name;
13990 if ($notnull_bool($eq(name, 'node')) || $notnull_bool($eq(name, 'dom'))) { 13560 if ($eq(name, 'node') || $eq(name, 'dom')) {
13991 this.library.topType.isNativeType = true; 13561 this.library.topType.isNativeType = true;
13992 } 13562 }
13993 if ($notnull_bool(this.seenImport) || $notnull_bool(this.seenSource) || $notnull_bool(this.seenResource)) { 13563 if (this.seenImport || this.seenSource || this.seenResource) {
13994 world.error('#library must be first directive in file', node.span); 13564 world.error('#library must be first directive in file', node.span);
13995 } 13565 }
13996 } 13566 }
13997 else { 13567 else {
13998 world.error('already specified library name', node.span); 13568 world.error('already specified library name', node.span);
13999 } 13569 }
14000 break; 13570 break;
14001 13571
14002 case "import": 13572 case "import":
14003 13573
14004 this.seenImport = true; 13574 this.seenImport = true;
14005 name = this.getFirstStringArg(node); 13575 name = this.getFirstStringArg(node);
14006 var prefix = this.tryGetNamedStringArg(node, 'prefix'); 13576 var prefix = this.tryGetNamedStringArg(node, 'prefix');
14007 if (node.arguments.length > 2 || node.arguments.length == 2 && $notnull_bo ol(prefix == null)) { 13577 if (node.arguments.length > 2 || node.arguments.length == 2 && prefix == n ull) {
14008 world.error('expected at most one "name" argument and one optional "pref ix"' + (' but found ' + node.arguments.length + ''), node.span); 13578 world.error('expected at most one "name" argument and one optional "pref ix"' + (' but found ' + node.arguments.length + ''), node.span);
14009 } 13579 }
14010 else if ($notnull_bool($ne(prefix, null)) && prefix.indexOf$2('.', 0) >= 0 ) { 13580 else if ($ne(prefix, null) && prefix.indexOf$2('.', 0) >= 0) {
14011 world.error('library prefix canot contain "."', node.span); 13581 world.error('library prefix canot contain "."', node.span);
14012 } 13582 }
14013 else if ($notnull_bool(this.seenSource) || $notnull_bool(this.seenResource )) { 13583 else if (this.seenSource || this.seenResource) {
14014 world.error('#imports must come before any #source or #resource', node.s pan); 13584 world.error('#imports must come before any #source or #resource', node.s pan);
14015 } 13585 }
14016 if ($notnull_bool($eq(prefix, ''))) prefix = null; 13586 if ($eq(prefix, '')) prefix = null;
14017 var filename = this.library.makeFullPath($assert_String(name)); 13587 var filename = this.library.makeFullPath(name);
14018 if (this.library.imports.some((function (li) { 13588 if (this.library.imports.some((function (li) {
14019 return $eq(li.get$library().baseSource, filename); 13589 return $eq(li.get$library().baseSource, filename);
14020 }) 13590 })
14021 )) { 13591 )) {
14022 world.error(('duplicate import of "' + name + '"'), node.span); 13592 world.error(('duplicate import of "' + name + '"'), node.span);
14023 return; 13593 return;
14024 } 13594 }
14025 var newLib = this.library.addImport($assert_String(filename), $assert_Stri ng(prefix)); 13595 var newLib = this.library.addImport(filename, prefix);
14026 break; 13596 break;
14027 13597
14028 case "source": 13598 case "source":
14029 13599
14030 this.seenSource = true; 13600 this.seenSource = true;
14031 name = this.getSingleStringArg(node); 13601 name = this.getSingleStringArg(node);
14032 this.addSourceFromName($assert_String(name), node.span); 13602 this.addSourceFromName(name, node.span);
14033 if ($notnull_bool(this.seenResource)) { 13603 if (this.seenResource) {
14034 world.error('#sources must come before any #resource', node.span); 13604 world.error('#sources must come before any #resource', node.span);
14035 } 13605 }
14036 break; 13606 break;
14037 13607
14038 case "native": 13608 case "native":
14039 13609
14040 name = this.getSingleStringArg(node); 13610 name = this.getSingleStringArg(node);
14041 this.library.addNative(this.library.makeFullPath($assert_String(name))); 13611 this.library.addNative(this.library.makeFullPath(name));
14042 break; 13612 break;
14043 13613
14044 case "resource": 13614 case "resource":
14045 13615
14046 this.seenResource = true; 13616 this.seenResource = true;
14047 this.getFirstStringArg(node); 13617 this.getFirstStringArg(node);
14048 break; 13618 break;
14049 13619
14050 default: 13620 default:
14051 13621
14052 world.error(('unknown directive: ' + node.name.name + ''), node.span); 13622 world.error(('unknown directive: ' + node.name.name + ''), node.span);
14053 13623
14054 } 13624 }
14055 } 13625 }
14056 _LibraryVisitor.prototype.getSingleStringArg = function(node) { 13626 _LibraryVisitor.prototype.getSingleStringArg = function(node) {
14057 if (node.arguments.length != 1) { 13627 if (node.arguments.length != 1) {
14058 world.error(('expected exactly one argument but found ' + node.arguments.len gth + ''), node.span); 13628 world.error(('expected exactly one argument but found ' + node.arguments.len gth + ''), node.span);
14059 } 13629 }
14060 return this.getFirstStringArg(node); 13630 return this.getFirstStringArg(node);
14061 } 13631 }
14062 _LibraryVisitor.prototype.getFirstStringArg = function(node) { 13632 _LibraryVisitor.prototype.getFirstStringArg = function(node) {
14063 if (node.arguments.length < 1) { 13633 if (node.arguments.length < 1) {
14064 world.error(('expected at least one argument but found ' + node.arguments.le ngth + ''), node.span); 13634 world.error(('expected at least one argument but found ' + node.arguments.le ngth + ''), node.span);
14065 } 13635 }
14066 var arg = node.arguments.$index(0); 13636 var arg = node.arguments.$index(0);
14067 if (arg.label != null) { 13637 if (arg.label != null) {
14068 world.error('label not allowed for directive', node.span); 13638 world.error('label not allowed for directive', node.span);
14069 } 13639 }
14070 return this._parseStringArgument((arg && arg.is$ArgumentNode())); 13640 return this._parseStringArgument(arg);
14071 } 13641 }
14072 _LibraryVisitor.prototype.tryGetNamedStringArg = function(node, argName) { 13642 _LibraryVisitor.prototype.tryGetNamedStringArg = function(node, argName) {
14073 var args = node.arguments.filter((function (a) { 13643 var args = node.arguments.filter((function (a) {
14074 return a.label != null && a.label.name == argName; 13644 return a.label != null && a.label.name == argName;
14075 }) 13645 })
14076 ); 13646 );
14077 if (args.length == 0) { 13647 if (args.length == 0) {
14078 return null; 13648 return null;
14079 } 13649 }
14080 if (args.length > 1) { 13650 if (args.length > 1) {
14081 world.error(('expected at most one "' + argName + '" argument but found ') + node.arguments.length, node.span); 13651 world.error(('expected at most one "' + argName + '" argument but found ') + node.arguments.length, node.span);
14082 } 13652 }
14083 for (var $i = args.iterator$0(); $i.hasNext$0(); ) { 13653 for (var $i = args.iterator$0(); $i.hasNext$0(); ) {
14084 var arg = $i.next$0(); 13654 var arg = $i.next$0();
14085 return this._parseStringArgument((arg && arg.is$ArgumentNode())); 13655 return this._parseStringArgument(arg);
14086 } 13656 }
14087 } 13657 }
14088 _LibraryVisitor.prototype._parseStringArgument = function(arg) { 13658 _LibraryVisitor.prototype._parseStringArgument = function(arg) {
14089 var expr = arg.value; 13659 var expr = arg.value;
14090 if (!(expr instanceof LiteralExpression) || !$notnull_bool(expr.type.type.get$ isString())) { 13660 if (!(expr instanceof LiteralExpression) || !expr.type.type.get$isString()) {
14091 world.error('expected string', expr.get$span()); 13661 world.error('expected string', expr.get$span());
14092 } 13662 }
14093 return parseStringLiteral($assert_String(expr.get$value())); 13663 return parseStringLiteral(expr.get$value());
14094 } 13664 }
14095 _LibraryVisitor.prototype.visitTypeDefinition = function(node) { 13665 _LibraryVisitor.prototype.visitTypeDefinition = function(node) {
14096 var oldType = this.currentType; 13666 var oldType = this.currentType;
14097 this.currentType = this.library.addType(node.name.name, node, node.isClass); 13667 this.currentType = this.library.addType(node.name.name, node, node.isClass);
14098 var $list = node.body; 13668 var $list = node.body;
14099 for (var $i = 0;$i < $list.length; $i++) { 13669 for (var $i = 0;$i < $list.length; $i++) {
14100 var member = $list.$index($i); 13670 var member = $list.$index($i);
14101 member.visit$1(this); 13671 member.visit$1(this);
14102 } 13672 }
14103 this.currentType = (oldType && oldType.is$DefinedType()); 13673 this.currentType = oldType;
14104 } 13674 }
14105 _LibraryVisitor.prototype.visitVariableDefinition = function(node) { 13675 _LibraryVisitor.prototype.visitVariableDefinition = function(node) {
14106 this.currentType.addField(node); 13676 this.currentType.addField(node);
14107 } 13677 }
14108 _LibraryVisitor.prototype.visitFunctionDefinition = function(node) { 13678 _LibraryVisitor.prototype.visitFunctionDefinition = function(node) {
14109 this.currentType.addMethod(node.name.name, node); 13679 this.currentType.addMethod(node.name.name, node);
14110 } 13680 }
14111 _LibraryVisitor.prototype.visitFunctionTypeDefinition = function(node) { 13681 _LibraryVisitor.prototype.visitFunctionTypeDefinition = function(node) {
14112 var type = this.library.addType(node.func.name.name, node, false); 13682 var type = this.library.addType(node.func.name.name, node, false);
14113 type.addMethod$2('\$call', node.func); 13683 type.addMethod$2('\$call', node.func);
14114 } 13684 }
14115 _LibraryVisitor.prototype.addSource$1 = function($0) { 13685 _LibraryVisitor.prototype.addSource$1 = function($0) {
14116 return this.addSource(($0 && $0.is$SourceFile())); 13686 return this.addSource($0);
14117 }; 13687 };
14118 // ********** Code for Parameter ************** 13688 // ********** Code for Parameter **************
14119 function Parameter(definition) { 13689 function Parameter(definition) {
14120 this.isInitializer = false 13690 this.isInitializer = false
14121 this.definition = definition; 13691 this.definition = definition;
14122 // Initializers done 13692 // Initializers done
14123 } 13693 }
14124 Parameter.prototype.is$Parameter = function(){return this;};
14125 Parameter.prototype.get$definition = function() { return this.definition; }; 13694 Parameter.prototype.get$definition = function() { return this.definition; };
14126 Parameter.prototype.set$definition = function(value) { return this.definition = value; }; 13695 Parameter.prototype.set$definition = function(value) { return this.definition = value; };
14127 Parameter.prototype.get$name = function() { return this.name; }; 13696 Parameter.prototype.get$name = function() { return this.name; };
14128 Parameter.prototype.set$name = function(value) { return this.name = value; }; 13697 Parameter.prototype.set$name = function(value) { return this.name = value; };
14129 Parameter.prototype.get$type = function() { return this.type; };
14130 Parameter.prototype.set$type = function(value) { return this.type = value; };
14131 Parameter.prototype.get$value = function() { return this.value; }; 13698 Parameter.prototype.get$value = function() { return this.value; };
14132 Parameter.prototype.set$value = function(value) { return this.value = value; }; 13699 Parameter.prototype.set$value = function(value) { return this.value = value; };
14133 Parameter.prototype.resolve = function(method, inType) { 13700 Parameter.prototype.resolve = function(method, inType) {
14134 this.name = this.definition.name.name; 13701 this.name = this.definition.name.name;
14135 if (this.name.startsWith('this.')) { 13702 if (this.name.startsWith('this.')) {
14136 this.name = this.name.substring(5); 13703 this.name = this.name.substring(5);
14137 this.isInitializer = true; 13704 this.isInitializer = true;
14138 } 13705 }
14139 this.type = inType.resolveType(this.definition.type, false); 13706 this.type = inType.resolveType(this.definition.type, false);
14140 if ($notnull_bool(method.get$isStatic()) && $notnull_bool(this.type.get$hasTyp eParams())) { 13707 if (method.get$isStatic() && this.type.get$hasTypeParams()) {
14141 world.error('using type parameter in static context', this.definition.span); 13708 world.error('using type parameter in static context', this.definition.span);
14142 } 13709 }
14143 if (this.definition.value != null) { 13710 if (this.definition.value != null) {
14144 if ((this.definition.value instanceof NullExpression) && this.definition.val ue.span.start == this.definition.span.start) { 13711 if ((this.definition.value instanceof NullExpression) && this.definition.val ue.span.start == this.definition.span.start) {
14145 return; 13712 return;
14146 } 13713 }
14147 if ($notnull_bool(method.get$isAbstract())) { 13714 if (method.get$isAbstract()) {
14148 world.error('default value not allowed on abstract methods', this.definiti on.span); 13715 world.error('default value not allowed on abstract methods', this.definiti on.span);
14149 } 13716 }
14150 else if (method.name == '\$call' && $notnull_bool(method.get$definition().bo dy == null)) { 13717 else if (method.name == '\$call' && method.get$definition().body == null) {
14151 world.error('default value not allowed on function type', this.definition. span); 13718 world.error('default value not allowed on function type', this.definition. span);
14152 } 13719 }
14153 } 13720 }
14154 else if ($notnull_bool(this.isInitializer) && !$notnull_bool(method.get$isCons tructor())) { 13721 else if (this.isInitializer && !method.get$isConstructor()) {
14155 world.error('initializer parameters only allowed on constructors', this.defi nition.span); 13722 world.error('initializer parameters only allowed on constructors', this.defi nition.span);
14156 } 13723 }
14157 } 13724 }
14158 Parameter.prototype.genValue = function(method, context) { 13725 Parameter.prototype.genValue = function(method, context) {
14159 var $0;
14160 if (this.definition.value == null || this.value != null) return; 13726 if (this.definition.value == null || this.value != null) return;
14161 if (context == null) { 13727 if (context == null) {
14162 context = new MethodGenerator(method, null); 13728 context = new MethodGenerator(method, null);
14163 } 13729 }
14164 this.value = (($0 = this.definition.value.visit(context)) && $0.is$Value()); 13730 this.value = this.definition.value.visit(context);
14165 this.value = this.value.convertTo(context, this.type, this.definition.value, f alse); 13731 this.value = this.value.convertTo(context, this.type, this.definition.value, f alse);
14166 } 13732 }
14167 Parameter.prototype.copyWithNewType = function(newType) { 13733 Parameter.prototype.copyWithNewType = function(newType) {
14168 var $0;
14169 var ret = new Parameter(this.definition); 13734 var ret = new Parameter(this.definition);
14170 ret.set$type(newType); 13735 ret.type = newType;
14171 ret.set$name(this.name); 13736 ret.name = this.name;
14172 ret.isInitializer = this.isInitializer; 13737 ret.isInitializer = this.isInitializer;
14173 return (ret && ret.is$Parameter()); 13738 return ret;
14174 } 13739 }
14175 Parameter.prototype.get$isOptional = function() { 13740 Parameter.prototype.get$isOptional = function() {
14176 return this.definition != null && this.definition.value != null; 13741 return this.definition != null && this.definition.value != null;
14177 } 13742 }
14178 Parameter.prototype.copyWithNewType$1 = function($0) { 13743 Parameter.prototype.copyWithNewType$1 = function($0) {
14179 return this.copyWithNewType(($0 && $0.is$lang_Type())); 13744 return this.copyWithNewType($0);
14180 }; 13745 };
14181 Parameter.prototype.genValue$2 = function($0, $1) { 13746 Parameter.prototype.genValue$2 = function($0, $1) {
14182 return this.genValue(($0 && $0.is$MethodMember()), ($1 && $1.is$MethodGenerato r())); 13747 return this.genValue($0, $1);
14183 }; 13748 };
14184 Parameter.prototype.resolve$2 = function($0, $1) { 13749 Parameter.prototype.resolve$2 = function($0, $1) {
14185 return this.resolve(($0 && $0.is$Member()), ($1 && $1.is$lang_Type())); 13750 return this.resolve($0, $1);
14186 }; 13751 };
14187 // ********** Code for Member ************** 13752 // ********** Code for Member **************
14188 function Member(name, declaringType) { 13753 function Member(name, declaringType) {
14189 this.name = name; 13754 this.name = name;
14190 this.declaringType = declaringType; 13755 this.declaringType = declaringType;
14191 this.isGenerated = false; 13756 this.isGenerated = false;
14192 // Initializers done 13757 // Initializers done
14193 } 13758 }
14194 Member.prototype.is$Member = function(){return this;};
14195 Member.prototype.is$Named = function(){return this;};
14196 Member.prototype.get$name = function() { return this.name; }; 13759 Member.prototype.get$name = function() { return this.name; };
14197 Member.prototype.get$jsname = function() { 13760 Member.prototype.get$jsname = function() {
14198 return this._jsname == null ? this.name : this._jsname; 13761 return this._jsname == null ? this.name : this._jsname;
14199 } 13762 }
14200 Member.prototype.set$jsname = function(name) { 13763 Member.prototype.set$jsname = function(name) {
14201 return this._jsname = name; 13764 return this._jsname = name;
14202 } 13765 }
14203 Member.prototype.get$library = function() { 13766 Member.prototype.get$library = function() {
14204 return this.declaringType.get$library(); 13767 return this.declaringType.get$library();
14205 } 13768 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
14252 return world.internalError('can not be property', this.get$span()); 13815 return world.internalError('can not be property', this.get$span());
14253 } 13816 }
14254 Member.prototype.get$initDelegate = function() { 13817 Member.prototype.get$initDelegate = function() {
14255 world.internalError('cannot have initializers', this.get$span()); 13818 world.internalError('cannot have initializers', this.get$span());
14256 } 13819 }
14257 Member.prototype.set$initDelegate = function(ctor) { 13820 Member.prototype.set$initDelegate = function(ctor) {
14258 world.internalError('cannot have initializers', this.get$span()); 13821 world.internalError('cannot have initializers', this.get$span());
14259 } 13822 }
14260 Member.prototype.get$inferredResult = function() { 13823 Member.prototype.get$inferredResult = function() {
14261 var t = this.get$returnType(); 13824 var t = this.get$returnType();
14262 if ($notnull_bool(t.get$isBool()) && ($notnull_bool(this.get$library().get$isC ore()) || $notnull_bool(this.get$library().get$isCoreImpl()))) { 13825 if (t.get$isBool() && (this.get$library().get$isCore() || this.get$library().g et$isCoreImpl())) {
14263 return world.nonNullBool; 13826 return world.nonNullBool;
14264 } 13827 }
14265 return (t && t.is$lang_Type()); 13828 return t;
14266 } 13829 }
14267 Member.prototype.get$definition = function() { 13830 Member.prototype.get$definition = function() {
14268 return null; 13831 return null;
14269 } 13832 }
14270 Member.prototype.get$parameters = function() { 13833 Member.prototype.get$parameters = function() {
14271 return []; 13834 return [];
14272 } 13835 }
14273 Member.prototype.canInvoke = function(context, args) { 13836 Member.prototype.canInvoke = function(context, args) {
14274 return $notnull_bool(this.get$canGet()) && $notnull_bool(new Value(this.get$re turnType(), null, null, true).canInvoke(context, '\$call', args)); 13837 return this.get$canGet() && new Value(this.get$returnType(), null, null, true) .canInvoke(context, '\$call', args);
14275 } 13838 }
14276 Member.prototype.invoke = function(context, node, target, args, isDynamic) { 13839 Member.prototype.invoke = function(context, node, target, args, isDynamic) {
14277 var $0;
14278 var newTarget = this._get(context, node, target, isDynamic); 13840 var newTarget = this._get(context, node, target, isDynamic);
14279 return (($0 = newTarget.invoke$5(context, '\$call', node, args, isDynamic)) && $0.is$Value()); 13841 return newTarget.invoke$5(context, '\$call', node, args, isDynamic);
14280 } 13842 }
14281 Member.prototype.override = function(other) { 13843 Member.prototype.override = function(other) {
14282 if ($notnull_bool(this.get$isStatic())) { 13844 if (this.get$isStatic()) {
14283 world.error('static members can not hide parent members', this.get$span(), o ther.get$span()); 13845 world.error('static members can not hide parent members', this.get$span(), o ther.get$span());
14284 return false; 13846 return false;
14285 } 13847 }
14286 else if ($notnull_bool(other.get$isStatic())) { 13848 else if (other.get$isStatic()) {
14287 world.error('can not override static member', this.get$span(), other.get$spa n()); 13849 world.error('can not override static member', this.get$span(), other.get$spa n());
14288 return false; 13850 return false;
14289 } 13851 }
14290 return true; 13852 return true;
14291 } 13853 }
14292 Member.prototype.get$generatedFactoryName = function() { 13854 Member.prototype.get$generatedFactoryName = function() {
14293 $assert(this.get$isFactory(), "this.isFactory", "member.dart", 195, 12);
14294 var prefix = ('' + this.declaringType.get$jsname() + '.' + this.get$constructo rName() + '\$'); 13855 var prefix = ('' + this.declaringType.get$jsname() + '.' + this.get$constructo rName() + '\$');
14295 if (this.name == '') { 13856 if (this.name == '') {
14296 return ('' + prefix + 'factory'); 13857 return ('' + prefix + 'factory');
14297 } 13858 }
14298 else { 13859 else {
14299 return ('' + prefix + '' + this.name + '\$factory'); 13860 return ('' + prefix + '' + this.name + '\$factory');
14300 } 13861 }
14301 } 13862 }
14302 Member.prototype.resolveType = function(node, isRequired) { 13863 Member.prototype.resolveType = function(node, isRequired) {
14303 var type = this.declaringType.resolveType(node, isRequired); 13864 var type = this.declaringType.resolveType(node, isRequired);
14304 if ($notnull_bool(this.get$isStatic()) && $notnull_bool(type.get$hasTypeParams ())) { 13865 if (this.get$isStatic() && type.get$hasTypeParams()) {
14305 world.error('using type parameter in static context', node.span); 13866 world.error('using type parameter in static context', node.span);
14306 } 13867 }
14307 return (type && type.is$lang_Type()); 13868 return type;
14308 } 13869 }
14309 Member.prototype._get$3 = function($0, $1, $2) { 13870 Member.prototype._get$3 = function($0, $1, $2) {
14310 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value())); 13871 return this._get($0, $1, $2);
14311 }; 13872 };
14312 Member.prototype._set$4 = function($0, $1, $2, $3) { 13873 Member.prototype._set$4 = function($0, $1, $2, $3) {
14313 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value())); 13874 return this._set($0, $1, $2, $3);
14314 }; 13875 };
14315 Member.prototype.canInvoke$2 = function($0, $1) { 13876 Member.prototype.canInvoke$2 = function($0, $1) {
14316 return this.canInvoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$Arguments( ))); 13877 return this.canInvoke($0, $1);
14317 }; 13878 };
14318 Member.prototype.invoke$4 = function($0, $1, $2, $3) { 13879 Member.prototype.invoke$4 = function($0, $1, $2, $3) {
14319 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), false); 13880 return this.invoke($0, $1, $2, $3, false);
14320 }; 13881 };
14321 Member.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 13882 Member.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
14322 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 13883 return this.invoke($0, $1, $2, $3, isDynamic);
14323 }; 13884 };
14324 Member.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 13885 Member.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
14325 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool($4)); 13886 return this.invoke($0, $1, $2, $3, $4);
14326 }; 13887 };
14327 Member.prototype.provideFieldSyntax$0 = function() { 13888 Member.prototype.provideFieldSyntax$0 = function() {
14328 return this.provideFieldSyntax(); 13889 return this.provideFieldSyntax();
14329 }; 13890 };
14330 Member.prototype.providePropertySyntax$0 = function() { 13891 Member.prototype.providePropertySyntax$0 = function() {
14331 return this.providePropertySyntax(); 13892 return this.providePropertySyntax();
14332 }; 13893 };
14333 Member.prototype.resolve$1 = function($0) { 13894 Member.prototype.resolve$1 = function($0) {
14334 return this.resolve(($0 && $0.is$lang_Type())); 13895 return this.resolve($0);
14335 }; 13896 };
14336 // ********** Code for TypeMember ************** 13897 // ********** Code for TypeMember **************
14337 function TypeMember(type) { 13898 function TypeMember(type) {
14338 this.type = type; 13899 this.type = type;
14339 Member.call(this, type.name, type.library.topType); 13900 Member.call(this, type.name, type.library.topType);
14340 // Initializers done 13901 // Initializers done
14341 } 13902 }
14342 $inherits(TypeMember, Member); 13903 $inherits(TypeMember, Member);
14343 TypeMember.prototype.is$TypeMember = function(){return this;};
14344 TypeMember.prototype.get$type = function() { return this.type; };
14345 TypeMember.prototype.get$span = function() { 13904 TypeMember.prototype.get$span = function() {
14346 return this.type.definition.span; 13905 return this.type.definition.span;
14347 } 13906 }
14348 TypeMember.prototype.get$isStatic = function() { 13907 TypeMember.prototype.get$isStatic = function() {
14349 return true; 13908 return true;
14350 } 13909 }
14351 TypeMember.prototype.get$returnType = function() { 13910 TypeMember.prototype.get$returnType = function() {
14352 return world.varType; 13911 return world.varType;
14353 } 13912 }
14354 TypeMember.prototype.canInvoke = function(context, args) { 13913 TypeMember.prototype.canInvoke = function(context, args) {
14355 return false; 13914 return false;
14356 } 13915 }
14357 TypeMember.prototype.get$canGet = function() { 13916 TypeMember.prototype.get$canGet = function() {
14358 return true; 13917 return true;
14359 } 13918 }
14360 TypeMember.prototype.get$canSet = function() { 13919 TypeMember.prototype.get$canSet = function() {
14361 return false; 13920 return false;
14362 } 13921 }
14363 TypeMember.prototype.resolve = function(inType) { 13922 TypeMember.prototype.resolve = function(inType) {
14364 13923
14365 } 13924 }
14366 TypeMember.prototype._get = function(context, node, target, isDynamic) { 13925 TypeMember.prototype._get = function(context, node, target, isDynamic) {
14367 var ret = new Value(this.type, this.type.get$jsname(), node.span, false); 13926 var ret = new Value(this.type, this.type.get$jsname(), node.span, false);
14368 ret.isType = true; 13927 ret.isType = true;
14369 return (ret && ret.is$Value()); 13928 return ret;
14370 } 13929 }
14371 TypeMember.prototype._set = function(context, node, target, value, isDynamic) { 13930 TypeMember.prototype._set = function(context, node, target, value, isDynamic) {
14372 world.error('can not set type', this.type.definition.span); 13931 world.error('can not set type', this.type.definition.span);
14373 } 13932 }
14374 TypeMember.prototype.invoke = function(context, node, target, args, isDynamic) { 13933 TypeMember.prototype.invoke = function(context, node, target, args, isDynamic) {
14375 world.error('can not invoke type', this.type.definition.span); 13934 world.error('can not invoke type', this.type.definition.span);
14376 } 13935 }
14377 TypeMember.prototype._get$3 = function($0, $1, $2) { 13936 TypeMember.prototype._get$3 = function($0, $1, $2) {
14378 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 13937 return this._get($0, $1, $2, false);
14379 }; 13938 };
14380 TypeMember.prototype._set$4 = function($0, $1, $2, $3) { 13939 TypeMember.prototype._set$4 = function($0, $1, $2, $3) {
14381 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value()), false); 13940 return this._set($0, $1, $2, $3, false);
14382 }; 13941 };
14383 TypeMember.prototype.canInvoke$2 = function($0, $1) { 13942 TypeMember.prototype.canInvoke$2 = function($0, $1) {
14384 return this.canInvoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$Arguments( ))); 13943 return this.canInvoke($0, $1);
14385 }; 13944 };
14386 TypeMember.prototype.invoke$4 = function($0, $1, $2, $3) { 13945 TypeMember.prototype.invoke$4 = function($0, $1, $2, $3) {
14387 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), false); 13946 return this.invoke($0, $1, $2, $3, false);
14388 }; 13947 };
14389 TypeMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 13948 TypeMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
14390 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 13949 return this.invoke($0, $1, $2, $3, isDynamic);
14391 }; 13950 };
14392 TypeMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 13951 TypeMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
14393 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool($4)); 13952 return this.invoke($0, $1, $2, $3, $4);
14394 }; 13953 };
14395 TypeMember.prototype.resolve$1 = function($0) { 13954 TypeMember.prototype.resolve$1 = function($0) {
14396 return this.resolve(($0 && $0.is$lang_Type())); 13955 return this.resolve($0);
14397 }; 13956 };
14398 // ********** Code for FieldMember ************** 13957 // ********** Code for FieldMember **************
14399 function FieldMember(name, declaringType, definition, value) { 13958 function FieldMember(name, declaringType, definition, value) {
14400 this._providePropertySyntax = false 13959 this._providePropertySyntax = false
14401 this._computing = false 13960 this._computing = false
14402 this.definition = definition; 13961 this.definition = definition;
14403 this.value = value; 13962 this.value = value;
14404 this.isNative = false; 13963 this.isNative = false;
14405 Member.call(this, name, declaringType); 13964 Member.call(this, name, declaringType);
14406 // Initializers done 13965 // Initializers done
14407 } 13966 }
14408 $inherits(FieldMember, Member); 13967 $inherits(FieldMember, Member);
14409 FieldMember.prototype.is$FieldMember = function(){return this;};
14410 FieldMember.prototype.get$definition = function() { return this.definition; }; 13968 FieldMember.prototype.get$definition = function() { return this.definition; };
14411 FieldMember.prototype.get$value = function() { return this.value; }; 13969 FieldMember.prototype.get$value = function() { return this.value; };
14412 FieldMember.prototype.get$type = function() { return this.type; };
14413 FieldMember.prototype.set$type = function(value) { return this.type = value; };
14414 FieldMember.prototype.get$isStatic = function() { return this.isStatic; }; 13970 FieldMember.prototype.get$isStatic = function() { return this.isStatic; };
14415 FieldMember.prototype.set$isStatic = function(value) { return this.isStatic = va lue; }; 13971 FieldMember.prototype.set$isStatic = function(value) { return this.isStatic = va lue; };
14416 FieldMember.prototype.get$isNative = function() { return this.isNative; }; 13972 FieldMember.prototype.get$isNative = function() { return this.isNative; };
14417 FieldMember.prototype.set$isNative = function(value) { return this.isNative = va lue; }; 13973 FieldMember.prototype.set$isNative = function(value) { return this.isNative = va lue; };
14418 FieldMember.prototype.override = function(other) { 13974 FieldMember.prototype.override = function(other) {
14419 if (!$notnull_bool(Member.prototype.override.call(this, other))) return false; 13975 if (!Member.prototype.override.call(this, other)) return false;
14420 if ($notnull_bool(other.get$isProperty())) { 13976 if (other.get$isProperty()) {
14421 return true; 13977 return true;
14422 } 13978 }
14423 else { 13979 else {
14424 world.error('field can not override anything but property', this.get$span(), other.get$span()); 13980 world.error('field can not override anything but property', this.get$span(), other.get$span());
14425 return false; 13981 return false;
14426 } 13982 }
14427 } 13983 }
14428 FieldMember.prototype.get$prefersPropertySyntax = function() { 13984 FieldMember.prototype.get$prefersPropertySyntax = function() {
14429 return false; 13985 return false;
14430 } 13986 }
14431 FieldMember.prototype.get$requiresFieldSyntax = function() { 13987 FieldMember.prototype.get$requiresFieldSyntax = function() {
14432 return this.isNative; 13988 return this.isNative;
14433 } 13989 }
14434 FieldMember.prototype.provideFieldSyntax = function() { 13990 FieldMember.prototype.provideFieldSyntax = function() {
14435 13991
14436 } 13992 }
14437 FieldMember.prototype.providePropertySyntax = function() { 13993 FieldMember.prototype.providePropertySyntax = function() {
14438 this._providePropertySyntax = true; 13994 this._providePropertySyntax = true;
14439 } 13995 }
14440 FieldMember.prototype.get$span = function() { 13996 FieldMember.prototype.get$span = function() {
14441 var $0; 13997 return this.definition == null ? null : this.definition.span;
14442 return (($0 = this.definition == null ? null : this.definition.span) && $0.is$ SourceSpan());
14443 } 13998 }
14444 FieldMember.prototype.get$returnType = function() { 13999 FieldMember.prototype.get$returnType = function() {
14445 return this.type; 14000 return this.type;
14446 } 14001 }
14447 FieldMember.prototype.get$canGet = function() { 14002 FieldMember.prototype.get$canGet = function() {
14448 return true; 14003 return true;
14449 } 14004 }
14450 FieldMember.prototype.get$canSet = function() { 14005 FieldMember.prototype.get$canSet = function() {
14451 return !$notnull_bool(this.isFinal); 14006 return !this.isFinal;
14452 } 14007 }
14453 FieldMember.prototype.get$isField = function() { 14008 FieldMember.prototype.get$isField = function() {
14454 return true; 14009 return true;
14455 } 14010 }
14456 FieldMember.prototype.resolve = function(inType) { 14011 FieldMember.prototype.resolve = function(inType) {
14457 this.isStatic = this.declaringType.get$isTop(); 14012 this.isStatic = this.declaringType.get$isTop();
14458 this.isFinal = false; 14013 this.isFinal = false;
14459 if (this.definition.modifiers != null) { 14014 if (this.definition.modifiers != null) {
14460 var $list = this.definition.modifiers; 14015 var $list = this.definition.modifiers;
14461 for (var $i = 0;$i < $list.length; $i++) { 14016 for (var $i = 0;$i < $list.length; $i++) {
14462 var mod = $list.$index($i); 14017 var mod = $list.$index($i);
14463 if ($notnull_bool($eq(mod.kind, 86/*TokenKind.STATIC*/))) { 14018 if ($eq(mod.kind, 86/*TokenKind.STATIC*/)) {
14464 if ($notnull_bool(this.isStatic)) { 14019 if (this.isStatic) {
14465 world.error('duplicate static modifier', mod.get$span()); 14020 world.error('duplicate static modifier', mod.get$span());
14466 } 14021 }
14467 this.isStatic = true; 14022 this.isStatic = true;
14468 } 14023 }
14469 else if ($notnull_bool($eq(mod.kind, 97/*TokenKind.FINAL*/))) { 14024 else if ($eq(mod.kind, 97/*TokenKind.FINAL*/)) {
14470 if ($notnull_bool(this.isFinal)) { 14025 if (this.isFinal) {
14471 world.error('duplicate final modifier', mod.get$span()); 14026 world.error('duplicate final modifier', mod.get$span());
14472 } 14027 }
14473 this.isFinal = true; 14028 this.isFinal = true;
14474 } 14029 }
14475 else { 14030 else {
14476 world.error(('' + mod + ' modifier not allowed on field'), mod.get$span( )); 14031 world.error(('' + mod + ' modifier not allowed on field'), mod.get$span( ));
14477 } 14032 }
14478 } 14033 }
14479 } 14034 }
14480 this.type = inType.resolveType(this.definition.type, false); 14035 this.type = inType.resolveType(this.definition.type, false);
14481 if ($notnull_bool(this.isStatic) && $notnull_bool(this.type.get$hasTypeParams( ))) { 14036 if (this.isStatic && this.type.get$hasTypeParams()) {
14482 world.error('using type parameter in static context', this.definition.type.s pan); 14037 world.error('using type parameter in static context', this.definition.type.s pan);
14483 } 14038 }
14484 if ($notnull_bool(this.isStatic) && $notnull_bool(this.isFinal) && this.value == null) { 14039 if (this.isStatic && this.isFinal && this.value == null) {
14485 world.error('static final field is missing initializer', this.get$span()); 14040 world.error('static final field is missing initializer', this.get$span());
14486 } 14041 }
14487 this.get$library()._addMember(this); 14042 this.get$library()._addMember(this);
14488 } 14043 }
14489 FieldMember.prototype.computeValue = function() { 14044 FieldMember.prototype.computeValue = function() {
14490 var $0;
14491 if (this.value == null) return null; 14045 if (this.value == null) return null;
14492 if (this._computedValue == null) { 14046 if (this._computedValue == null) {
14493 if ($notnull_bool(this._computing)) { 14047 if (this._computing) {
14494 world.error('circular reference', this.value.span); 14048 world.error('circular reference', this.value.span);
14495 return null; 14049 return null;
14496 } 14050 }
14497 this._computing = true; 14051 this._computing = true;
14498 var finalMethod = new MethodMember('final_context', this.declaringType, null ); 14052 var finalMethod = new MethodMember('final_context', this.declaringType, null );
14499 finalMethod.isStatic = true; 14053 finalMethod.isStatic = true;
14500 var finalGen = new MethodGenerator(finalMethod, null); 14054 var finalGen = new MethodGenerator(finalMethod, null);
14501 this._computedValue = (($0 = this.value.visit((finalGen && finalGen.is$TreeV isitor()))) && $0.is$Value()); 14055 this._computedValue = this.value.visit(finalGen);
14502 if (!$notnull_bool(this._computedValue.get$isConst())) { 14056 if (!this._computedValue.get$isConst()) {
14503 if ($notnull_bool(this.isStatic)) { 14057 if (this.isStatic) {
14504 world.error('non constant static field must be initialized in functions' , this.value.span); 14058 world.error('non constant static field must be initialized in functions' , this.value.span);
14505 } 14059 }
14506 else { 14060 else {
14507 world.error('non constant field must be initialized in constructor', thi s.value.span); 14061 world.error('non constant field must be initialized in constructor', thi s.value.span);
14508 } 14062 }
14509 } 14063 }
14510 if ($notnull_bool(this.isStatic)) { 14064 if (this.isStatic) {
14511 this._computedValue = world.gen.globalForStaticField(this, this._computedV alue, [this._computedValue]); 14065 this._computedValue = world.gen.globalForStaticField(this, this._computedV alue, [this._computedValue]);
14512 } 14066 }
14513 this._computing = false; 14067 this._computing = false;
14514 } 14068 }
14515 return this._computedValue; 14069 return this._computedValue;
14516 } 14070 }
14517 FieldMember.prototype._get = function(context, node, target, isDynamic) { 14071 FieldMember.prototype._get = function(context, node, target, isDynamic) {
14518 var $0; 14072 if (!isDynamic) {
14519 if (!$notnull_bool(isDynamic)) {
14520 this.declaringType.markUsed(); 14073 this.declaringType.markUsed();
14521 } 14074 }
14522 if ($notnull_bool(this.isStatic)) { 14075 if (this.isStatic) {
14523 var cv = this.computeValue(); 14076 var cv = this.computeValue();
14524 if ($notnull_bool(this.isFinal)) { 14077 if (this.isFinal) {
14525 return (cv && cv.is$Value()); 14078 return cv;
14526 } 14079 }
14527 if ($notnull_bool(this.declaringType.get$isTop())) { 14080 if (this.declaringType.get$isTop()) {
14528 return new Value(this.type, ('' + this.get$jsname() + ''), node.span, true ); 14081 return new Value(this.type, ('' + this.get$jsname() + ''), node.span, true );
14529 } 14082 }
14530 else { 14083 else {
14531 return new Value(this.type, ('' + this.declaringType.get$jsname() + '.' + this.get$jsname() + ''), node.span, true); 14084 return new Value(this.type, ('' + this.declaringType.get$jsname() + '.' + this.get$jsname() + ''), node.span, true);
14532 } 14085 }
14533 } 14086 }
14534 else if ($notnull_bool(target.get$isConst()) && $notnull_bool(this.isFinal)) { 14087 else if (target.get$isConst() && this.isFinal) {
14535 var constTarget = (target instanceof GlobalValue) ? target.get$dynamic().exp : target; 14088 var constTarget = (target instanceof GlobalValue) ? target.get$dynamic().exp : target;
14536 if ((constTarget instanceof ConstObjectValue)) { 14089 if ((constTarget instanceof ConstObjectValue)) {
14537 return (($0 = constTarget.fields.$index(this.name)) && $0.is$Value()); 14090 return constTarget.fields.$index(this.name);
14538 } 14091 }
14539 else if ($notnull_bool($eq(constTarget.type, world.stringType)) && this.name == 'length') { 14092 else if ($eq(constTarget.type, world.stringType) && this.name == 'length') {
14540 return new Value(this.type, ('' + constTarget.get$actualValue().length + ' '), node.span, true); 14093 return new Value(this.type, ('' + constTarget.get$actualValue().length + ' '), node.span, true);
14541 } 14094 }
14542 } 14095 }
14543 return new Value(this.type, ('' + target.code + '.' + this.get$jsname() + ''), node.span, true); 14096 return new Value(this.type, ('' + target.code + '.' + this.get$jsname() + ''), node.span, true);
14544 } 14097 }
14545 FieldMember.prototype._set = function(context, node, target, value, isDynamic) { 14098 FieldMember.prototype._set = function(context, node, target, value, isDynamic) {
14546 var lhs = this._get(context, node, target, isDynamic); 14099 var lhs = this._get(context, node, target, isDynamic);
14547 value = value.convertTo(context, this.type, node, isDynamic); 14100 value = value.convertTo(context, this.type, node, isDynamic);
14548 return new Value(this.type, ('' + lhs.code + ' = ' + value.code + ''), node.sp an, true); 14101 return new Value(this.type, ('' + lhs.code + ' = ' + value.code + ''), node.sp an, true);
14549 } 14102 }
14550 FieldMember.prototype._get$3 = function($0, $1, $2) { 14103 FieldMember.prototype._get$3 = function($0, $1, $2) {
14551 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 14104 return this._get($0, $1, $2, false);
14552 }; 14105 };
14553 FieldMember.prototype._set$4 = function($0, $1, $2, $3) { 14106 FieldMember.prototype._set$4 = function($0, $1, $2, $3) {
14554 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value()), false); 14107 return this._set($0, $1, $2, $3, false);
14555 }; 14108 };
14556 FieldMember.prototype.computeValue$0 = function() { 14109 FieldMember.prototype.computeValue$0 = function() {
14557 return this.computeValue(); 14110 return this.computeValue();
14558 }; 14111 };
14559 FieldMember.prototype.provideFieldSyntax$0 = function() { 14112 FieldMember.prototype.provideFieldSyntax$0 = function() {
14560 return this.provideFieldSyntax(); 14113 return this.provideFieldSyntax();
14561 }; 14114 };
14562 FieldMember.prototype.providePropertySyntax$0 = function() { 14115 FieldMember.prototype.providePropertySyntax$0 = function() {
14563 return this.providePropertySyntax(); 14116 return this.providePropertySyntax();
14564 }; 14117 };
14565 FieldMember.prototype.resolve$1 = function($0) { 14118 FieldMember.prototype.resolve$1 = function($0) {
14566 return this.resolve(($0 && $0.is$lang_Type())); 14119 return this.resolve($0);
14567 }; 14120 };
14568 // ********** Code for PropertyMember ************** 14121 // ********** Code for PropertyMember **************
14569 function PropertyMember(name, declaringType) { 14122 function PropertyMember(name, declaringType) {
14570 this._provideFieldSyntax = false 14123 this._provideFieldSyntax = false
14571 Member.call(this, name, declaringType); 14124 Member.call(this, name, declaringType);
14572 // Initializers done 14125 // Initializers done
14573 } 14126 }
14574 $inherits(PropertyMember, Member); 14127 $inherits(PropertyMember, Member);
14575 PropertyMember.prototype.is$PropertyMember = function(){return this;};
14576 PropertyMember.prototype.get$span = function() { 14128 PropertyMember.prototype.get$span = function() {
14577 var $0; 14129 return this.getter != null ? this.getter.get$span() : null;
14578 return (($0 = this.getter != null ? this.getter.get$span() : null) && $0.is$So urceSpan());
14579 } 14130 }
14580 PropertyMember.prototype.get$canGet = function() { 14131 PropertyMember.prototype.get$canGet = function() {
14581 return this.getter != null; 14132 return this.getter != null;
14582 } 14133 }
14583 PropertyMember.prototype.get$canSet = function() { 14134 PropertyMember.prototype.get$canSet = function() {
14584 return this.setter != null; 14135 return this.setter != null;
14585 } 14136 }
14586 PropertyMember.prototype.get$prefersPropertySyntax = function() { 14137 PropertyMember.prototype.get$prefersPropertySyntax = function() {
14587 return true; 14138 return true;
14588 } 14139 }
14589 PropertyMember.prototype.get$requiresFieldSyntax = function() { 14140 PropertyMember.prototype.get$requiresFieldSyntax = function() {
14590 return false; 14141 return false;
14591 } 14142 }
14592 PropertyMember.prototype.provideFieldSyntax = function() { 14143 PropertyMember.prototype.provideFieldSyntax = function() {
14593 this._provideFieldSyntax = true; 14144 this._provideFieldSyntax = true;
14594 } 14145 }
14595 PropertyMember.prototype.providePropertySyntax = function() { 14146 PropertyMember.prototype.providePropertySyntax = function() {
14596 14147
14597 } 14148 }
14598 PropertyMember.prototype.get$isStatic = function() { 14149 PropertyMember.prototype.get$isStatic = function() {
14599 return this.getter == null ? this.setter.isStatic : this.getter.isStatic; 14150 return this.getter == null ? this.setter.isStatic : this.getter.isStatic;
14600 } 14151 }
14601 PropertyMember.prototype.get$isProperty = function() { 14152 PropertyMember.prototype.get$isProperty = function() {
14602 return true; 14153 return true;
14603 } 14154 }
14604 PropertyMember.prototype.get$returnType = function() { 14155 PropertyMember.prototype.get$returnType = function() {
14605 return this.getter == null ? this.setter.returnType : this.getter.returnType; 14156 return this.getter == null ? this.setter.returnType : this.getter.returnType;
14606 } 14157 }
14607 PropertyMember.prototype.override = function(other) { 14158 PropertyMember.prototype.override = function(other) {
14608 if (!$notnull_bool(Member.prototype.override.call(this, other))) return false; 14159 if (!Member.prototype.override.call(this, other)) return false;
14609 if ($notnull_bool(other.get$isProperty()) || $notnull_bool(other.get$isField() )) { 14160 if (other.get$isProperty() || other.get$isField()) {
14610 if ($notnull_bool(other.get$isProperty())) this.addFromParent(other); 14161 if (other.get$isProperty()) this.addFromParent(other);
14611 else this._overriddenField = other; 14162 else this._overriddenField = other;
14612 return true; 14163 return true;
14613 } 14164 }
14614 else { 14165 else {
14615 world.error('property can only override field or property', this.get$span(), other.get$span()); 14166 world.error('property can only override field or property', this.get$span(), other.get$span());
14616 return false; 14167 return false;
14617 } 14168 }
14618 } 14169 }
14619 PropertyMember.prototype._get = function(context, node, target, isDynamic) { 14170 PropertyMember.prototype._get = function(context, node, target, isDynamic) {
14620 if (this.getter == null) { 14171 if (this.getter == null) {
14621 if (this._overriddenField != null) { 14172 if (this._overriddenField != null) {
14622 return this._overriddenField._get(context, node, target, isDynamic); 14173 return this._overriddenField._get(context, node, target, isDynamic);
14623 } 14174 }
14624 return target.invokeNoSuchMethod(context, ('get:' + this.name + ''), node); 14175 return target.invokeNoSuchMethod(context, ('get:' + this.name + ''), node);
14625 } 14176 }
14626 return this.getter.invoke(context, node, target, Arguments.get$EMPTY(), false) ; 14177 return this.getter.invoke(context, node, target, Arguments.get$EMPTY(), false) ;
14627 } 14178 }
14628 PropertyMember.prototype._set = function(context, node, target, value, isDynamic ) { 14179 PropertyMember.prototype._set = function(context, node, target, value, isDynamic ) {
14629 if (this.setter == null) { 14180 if (this.setter == null) {
14630 if (this._overriddenField != null) { 14181 if (this._overriddenField != null) {
14631 return this._overriddenField._set(context, node, target, value, isDynamic) ; 14182 return this._overriddenField._set(context, node, target, value, isDynamic) ;
14632 } 14183 }
14633 return target.invokeNoSuchMethod(context, ('set:' + this.name + ''), node, n ew Arguments(null, [value])); 14184 return target.invokeNoSuchMethod(context, ('set:' + this.name + ''), node, n ew Arguments(null, [value]));
14634 } 14185 }
14635 return this.setter.invoke(context, node, target, new Arguments(null, [value]), isDynamic); 14186 return this.setter.invoke(context, node, target, new Arguments(null, [value]), isDynamic);
14636 } 14187 }
14637 PropertyMember.prototype.addFromParent = function(parentMember) { 14188 PropertyMember.prototype.addFromParent = function(parentMember) {
14638 var $0;
14639 var parent; 14189 var parent;
14640 if ((parentMember instanceof ConcreteMember)) { 14190 if ((parentMember instanceof ConcreteMember)) {
14641 var c = (parentMember && parentMember.is$ConcreteMember()); 14191 var c = parentMember;
14642 parent = (($0 = c.baseMember) && $0.is$PropertyMember()); 14192 parent = c.baseMember;
14643 } 14193 }
14644 else { 14194 else {
14645 parent = (parentMember && parentMember.is$PropertyMember()); 14195 parent = parentMember;
14646 } 14196 }
14647 if (this.getter == null) this.getter = parent.getter; 14197 if (this.getter == null) this.getter = parent.getter;
14648 if (this.setter == null) this.setter = parent.setter; 14198 if (this.setter == null) this.setter = parent.setter;
14649 } 14199 }
14650 PropertyMember.prototype.resolve = function(inType) { 14200 PropertyMember.prototype.resolve = function(inType) {
14651 if (this.getter != null) this.getter.resolve(inType); 14201 if (this.getter != null) this.getter.resolve(inType);
14652 if (this.setter != null) this.setter.resolve(inType); 14202 if (this.setter != null) this.setter.resolve(inType);
14653 this.get$library()._addMember(this); 14203 this.get$library()._addMember(this);
14654 } 14204 }
14655 PropertyMember.prototype._get$3 = function($0, $1, $2) { 14205 PropertyMember.prototype._get$3 = function($0, $1, $2) {
14656 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 14206 return this._get($0, $1, $2, false);
14657 }; 14207 };
14658 PropertyMember.prototype._set$4 = function($0, $1, $2, $3) { 14208 PropertyMember.prototype._set$4 = function($0, $1, $2, $3) {
14659 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value()), false); 14209 return this._set($0, $1, $2, $3, false);
14660 }; 14210 };
14661 PropertyMember.prototype.provideFieldSyntax$0 = function() { 14211 PropertyMember.prototype.provideFieldSyntax$0 = function() {
14662 return this.provideFieldSyntax(); 14212 return this.provideFieldSyntax();
14663 }; 14213 };
14664 PropertyMember.prototype.providePropertySyntax$0 = function() { 14214 PropertyMember.prototype.providePropertySyntax$0 = function() {
14665 return this.providePropertySyntax(); 14215 return this.providePropertySyntax();
14666 }; 14216 };
14667 PropertyMember.prototype.resolve$1 = function($0) { 14217 PropertyMember.prototype.resolve$1 = function($0) {
14668 return this.resolve(($0 && $0.is$lang_Type())); 14218 return this.resolve($0);
14669 }; 14219 };
14670 // ********** Code for ConcreteMember ************** 14220 // ********** Code for ConcreteMember **************
14671 function ConcreteMember(name, declaringType, baseMember) { 14221 function ConcreteMember(name, declaringType, baseMember) {
14672 this.baseMember = baseMember; 14222 this.baseMember = baseMember;
14673 Member.call(this, name, declaringType); 14223 Member.call(this, name, declaringType);
14674 // Initializers done 14224 // Initializers done
14675 this.parameters = []; 14225 this.parameters = [];
14676 this.returnType = this.baseMember.get$returnType().resolveTypeParams(declaring Type); 14226 this.returnType = this.baseMember.get$returnType().resolveTypeParams(declaring Type);
14677 var $list = this.baseMember.get$parameters(); 14227 var $list = this.baseMember.get$parameters();
14678 for (var $i = 0;$i < $list.length; $i++) { 14228 for (var $i = 0;$i < $list.length; $i++) {
14679 var p = $list.$index($i); 14229 var p = $list.$index($i);
14680 var newType = p.type.resolveTypeParams$1(declaringType); 14230 var newType = p.type.resolveTypeParams$1(declaringType);
14681 if ($notnull_bool($ne(newType, p.type))) { 14231 if ($ne(newType, p.type)) {
14682 this.parameters.add(p.copyWithNewType$1(newType)); 14232 this.parameters.add(p.copyWithNewType$1(newType));
14683 } 14233 }
14684 else { 14234 else {
14685 this.parameters.add(p); 14235 this.parameters.add(p);
14686 } 14236 }
14687 } 14237 }
14688 } 14238 }
14689 $inherits(ConcreteMember, Member); 14239 $inherits(ConcreteMember, Member);
14690 ConcreteMember.prototype.is$ConcreteMember = function(){return this;};
14691 ConcreteMember.prototype.get$returnType = function() { return this.returnType; } ; 14240 ConcreteMember.prototype.get$returnType = function() { return this.returnType; } ;
14692 ConcreteMember.prototype.set$returnType = function(value) { return this.returnTy pe = value; }; 14241 ConcreteMember.prototype.set$returnType = function(value) { return this.returnTy pe = value; };
14693 ConcreteMember.prototype.get$parameters = function() { return this.parameters; } ; 14242 ConcreteMember.prototype.get$parameters = function() { return this.parameters; } ;
14694 ConcreteMember.prototype.set$parameters = function(value) { return this.paramete rs = value; }; 14243 ConcreteMember.prototype.set$parameters = function(value) { return this.paramete rs = value; };
14695 ConcreteMember.prototype.get$span = function() { 14244 ConcreteMember.prototype.get$span = function() {
14696 return this.baseMember.get$span(); 14245 return this.baseMember.get$span();
14697 } 14246 }
14698 ConcreteMember.prototype.get$isStatic = function() { 14247 ConcreteMember.prototype.get$isStatic = function() {
14699 return this.baseMember.get$isStatic(); 14248 return this.baseMember.get$isStatic();
14700 } 14249 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
14743 ConcreteMember.prototype.providePropertySyntax = function() { 14292 ConcreteMember.prototype.providePropertySyntax = function() {
14744 return this.baseMember.providePropertySyntax(); 14293 return this.baseMember.providePropertySyntax();
14745 } 14294 }
14746 ConcreteMember.prototype.get$isConstructor = function() { 14295 ConcreteMember.prototype.get$isConstructor = function() {
14747 return this.name == this.declaringType.name; 14296 return this.name == this.declaringType.name;
14748 } 14297 }
14749 ConcreteMember.prototype.get$constructorName = function() { 14298 ConcreteMember.prototype.get$constructorName = function() {
14750 return this.baseMember.get$constructorName(); 14299 return this.baseMember.get$constructorName();
14751 } 14300 }
14752 ConcreteMember.prototype.get$definition = function() { 14301 ConcreteMember.prototype.get$definition = function() {
14753 var $0; 14302 return this.baseMember.get$definition();
14754 return (($0 = this.baseMember.get$definition()) && $0.is$Definition());
14755 } 14303 }
14756 ConcreteMember.prototype.get$initDelegate = function() { 14304 ConcreteMember.prototype.get$initDelegate = function() {
14757 var $0; 14305 return this.baseMember.get$initDelegate();
14758 return (($0 = this.baseMember.get$initDelegate()) && $0.is$Definition());
14759 } 14306 }
14760 ConcreteMember.prototype.set$initDelegate = function(ctor) { 14307 ConcreteMember.prototype.set$initDelegate = function(ctor) {
14761 this.baseMember.set$initDelegate(ctor); 14308 this.baseMember.set$initDelegate(ctor);
14762 } 14309 }
14763 ConcreteMember.prototype.resolveType = function(node, isRequired) { 14310 ConcreteMember.prototype.resolveType = function(node, isRequired) {
14764 var $0;
14765 var type = this.baseMember.resolveType(node, isRequired); 14311 var type = this.baseMember.resolveType(node, isRequired);
14766 return (($0 = type.resolveTypeParams$1(this.declaringType)) && $0.is$lang_Type ()); 14312 return type.resolveTypeParams$1(this.declaringType);
14767 } 14313 }
14768 ConcreteMember.prototype.override = function(other) { 14314 ConcreteMember.prototype.override = function(other) {
14769 return this.baseMember.override(other); 14315 return this.baseMember.override(other);
14770 } 14316 }
14771 ConcreteMember.prototype._get = function(context, node, target, isDynamic) { 14317 ConcreteMember.prototype._get = function(context, node, target, isDynamic) {
14772 var ret = this.baseMember._get(context, node, target, isDynamic); 14318 var ret = this.baseMember._get(context, node, target, isDynamic);
14773 return new Value(this.get$inferredResult(), ret.code, node.span, true); 14319 return new Value(this.get$inferredResult(), ret.code, node.span, true);
14774 } 14320 }
14775 ConcreteMember.prototype._set = function(context, node, target, value, isDynamic ) { 14321 ConcreteMember.prototype._set = function(context, node, target, value, isDynamic ) {
14776 var ret = this.baseMember._set(context, node, target, value, isDynamic); 14322 var ret = this.baseMember._set(context, node, target, value, isDynamic);
14777 return new Value(this.returnType, ret.code, node.span, true); 14323 return new Value(this.returnType, ret.code, node.span, true);
14778 } 14324 }
14779 ConcreteMember.prototype.invoke = function(context, node, target, args, isDynami c) { 14325 ConcreteMember.prototype.invoke = function(context, node, target, args, isDynami c) {
14780 var ret = this.baseMember.invoke(context, node, target, args, isDynamic); 14326 var ret = this.baseMember.invoke(context, node, target, args, isDynamic);
14781 var code = ret.code; 14327 var code = ret.code;
14782 if ($notnull_bool(this.get$isConstructor())) { 14328 if (this.get$isConstructor()) {
14783 code = code.replaceFirst$2(this.declaringType.get$genericType().get$jsname() , this.declaringType.get$jsname()); 14329 code = code.replaceFirst$2(this.declaringType.get$genericType().get$jsname() , this.declaringType.get$jsname());
14784 } 14330 }
14785 this.declaringType.genMethod(this); 14331 this.declaringType.genMethod(this);
14786 return new Value(this.get$inferredResult(), code, node.span, true); 14332 return new Value(this.get$inferredResult(), code, node.span, true);
14787 } 14333 }
14788 ConcreteMember.prototype._get$3 = function($0, $1, $2) { 14334 ConcreteMember.prototype._get$3 = function($0, $1, $2) {
14789 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 14335 return this._get($0, $1, $2, false);
14790 }; 14336 };
14791 ConcreteMember.prototype._set$4 = function($0, $1, $2, $3) { 14337 ConcreteMember.prototype._set$4 = function($0, $1, $2, $3) {
14792 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value()), false); 14338 return this._set($0, $1, $2, $3, false);
14793 }; 14339 };
14794 ConcreteMember.prototype.canInvoke$2 = function($0, $1) { 14340 ConcreteMember.prototype.canInvoke$2 = function($0, $1) {
14795 return this.canInvoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$Arguments( ))); 14341 return this.canInvoke($0, $1);
14796 }; 14342 };
14797 ConcreteMember.prototype.invoke$4 = function($0, $1, $2, $3) { 14343 ConcreteMember.prototype.invoke$4 = function($0, $1, $2, $3) {
14798 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), false); 14344 return this.invoke($0, $1, $2, $3, false);
14799 }; 14345 };
14800 ConcreteMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic ) { 14346 ConcreteMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic ) {
14801 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 14347 return this.invoke($0, $1, $2, $3, isDynamic);
14802 }; 14348 };
14803 ConcreteMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 14349 ConcreteMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
14804 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool($4)); 14350 return this.invoke($0, $1, $2, $3, $4);
14805 }; 14351 };
14806 ConcreteMember.prototype.provideFieldSyntax$0 = function() { 14352 ConcreteMember.prototype.provideFieldSyntax$0 = function() {
14807 return this.provideFieldSyntax(); 14353 return this.provideFieldSyntax();
14808 }; 14354 };
14809 ConcreteMember.prototype.providePropertySyntax$0 = function() { 14355 ConcreteMember.prototype.providePropertySyntax$0 = function() {
14810 return this.providePropertySyntax(); 14356 return this.providePropertySyntax();
14811 }; 14357 };
14812 // ********** Code for MethodMember ************** 14358 // ********** Code for MethodMember **************
14813 function MethodMember(name, declaringType, definition) { 14359 function MethodMember(name, declaringType, definition) {
14814 this.isStatic = false 14360 this.isStatic = false
14815 this.isAbstract = false 14361 this.isAbstract = false
14816 this.isConst = false 14362 this.isConst = false
14817 this.isFactory = false 14363 this.isFactory = false
14818 this.isLambda = false 14364 this.isLambda = false
14819 this._providePropertySyntax = false 14365 this._providePropertySyntax = false
14820 this._provideFieldSyntax = false 14366 this._provideFieldSyntax = false
14821 this._provideOptionalParamInfo = false 14367 this._provideOptionalParamInfo = false
14822 this.definition = definition; 14368 this.definition = definition;
14823 Member.call(this, name, declaringType); 14369 Member.call(this, name, declaringType);
14824 // Initializers done 14370 // Initializers done
14825 } 14371 }
14826 $inherits(MethodMember, Member); 14372 $inherits(MethodMember, Member);
14827 MethodMember.prototype.is$MethodMember = function(){return this;};
14828 MethodMember.prototype.get$definition = function() { return this.definition; }; 14373 MethodMember.prototype.get$definition = function() { return this.definition; };
14829 MethodMember.prototype.set$definition = function(value) { return this.definition = value; }; 14374 MethodMember.prototype.set$definition = function(value) { return this.definition = value; };
14830 MethodMember.prototype.get$returnType = function() { return this.returnType; }; 14375 MethodMember.prototype.get$returnType = function() { return this.returnType; };
14831 MethodMember.prototype.set$returnType = function(value) { return this.returnType = value; }; 14376 MethodMember.prototype.set$returnType = function(value) { return this.returnType = value; };
14832 MethodMember.prototype.get$parameters = function() { return this.parameters; }; 14377 MethodMember.prototype.get$parameters = function() { return this.parameters; };
14833 MethodMember.prototype.set$parameters = function(value) { return this.parameters = value; }; 14378 MethodMember.prototype.set$parameters = function(value) { return this.parameters = value; };
14834 MethodMember.prototype.get$isStatic = function() { return this.isStatic; }; 14379 MethodMember.prototype.get$isStatic = function() { return this.isStatic; };
14835 MethodMember.prototype.set$isStatic = function(value) { return this.isStatic = v alue; }; 14380 MethodMember.prototype.set$isStatic = function(value) { return this.isStatic = v alue; };
14836 MethodMember.prototype.get$isAbstract = function() { return this.isAbstract; }; 14381 MethodMember.prototype.get$isAbstract = function() { return this.isAbstract; };
14837 MethodMember.prototype.set$isAbstract = function(value) { return this.isAbstract = value; }; 14382 MethodMember.prototype.set$isAbstract = function(value) { return this.isAbstract = value; };
14838 MethodMember.prototype.get$isConst = function() { return this.isConst; }; 14383 MethodMember.prototype.get$isConst = function() { return this.isConst; };
14839 MethodMember.prototype.set$isConst = function(value) { return this.isConst = val ue; }; 14384 MethodMember.prototype.set$isConst = function(value) { return this.isConst = val ue; };
14840 MethodMember.prototype.get$isFactory = function() { return this.isFactory; }; 14385 MethodMember.prototype.get$isFactory = function() { return this.isFactory; };
14841 MethodMember.prototype.set$isFactory = function(value) { return this.isFactory = value; }; 14386 MethodMember.prototype.set$isFactory = function(value) { return this.isFactory = value; };
14842 MethodMember.prototype.get$initDelegate = function() { return this.initDelegate; }; 14387 MethodMember.prototype.get$initDelegate = function() { return this.initDelegate; };
14843 MethodMember.prototype.set$initDelegate = function(value) { return this.initDele gate = value; }; 14388 MethodMember.prototype.set$initDelegate = function(value) { return this.initDele gate = value; };
14844 MethodMember.prototype.get$isConstructor = function() { 14389 MethodMember.prototype.get$isConstructor = function() {
14845 return this.name == this.declaringType.name; 14390 return this.name == this.declaringType.name;
14846 } 14391 }
14847 MethodMember.prototype.get$isMethod = function() { 14392 MethodMember.prototype.get$isMethod = function() {
14848 return !$notnull_bool(this.get$isConstructor()); 14393 return !this.get$isConstructor();
14849 } 14394 }
14850 MethodMember.prototype.get$isNative = function() { 14395 MethodMember.prototype.get$isNative = function() {
14851 return (this.definition.body instanceof NativeStatement); 14396 return (this.definition.body instanceof NativeStatement);
14852 } 14397 }
14853 MethodMember.prototype.get$canGet = function() { 14398 MethodMember.prototype.get$canGet = function() {
14854 return false; 14399 return false;
14855 } 14400 }
14856 MethodMember.prototype.get$canSet = function() { 14401 MethodMember.prototype.get$canSet = function() {
14857 return false; 14402 return false;
14858 } 14403 }
14859 MethodMember.prototype.get$span = function() { 14404 MethodMember.prototype.get$span = function() {
14860 var $0; 14405 return this.definition == null ? null : this.definition.span;
14861 return (($0 = this.definition == null ? null : this.definition.span) && $0.is$ SourceSpan());
14862 } 14406 }
14863 MethodMember.prototype.get$constructorName = function() { 14407 MethodMember.prototype.get$constructorName = function() {
14864 var $0; 14408 var returnType = this.definition.returnType;
14865 var returnType = (($0 = this.definition.returnType) && $0.is$NameTypeReference ());
14866 if (returnType == null) return ''; 14409 if (returnType == null) return '';
14867 if (returnType.names != null) { 14410 if (returnType.names != null) {
14868 return $assert_String(returnType.names.$index(0).get$name()); 14411 return returnType.names.$index(0).get$name();
14869 } 14412 }
14870 else if (returnType.name != null) { 14413 else if (returnType.name != null) {
14871 return returnType.name.name; 14414 return returnType.name.name;
14872 } 14415 }
14873 world.internalError('no valid constructor name', this.definition.span); 14416 world.internalError('no valid constructor name', this.definition.span);
14874 } 14417 }
14875 MethodMember.prototype.get$functionType = function() { 14418 MethodMember.prototype.get$functionType = function() {
14876 if (this._functionType == null) { 14419 if (this._functionType == null) {
14877 this._functionType = this.get$library().getOrAddFunctionType(this.name, this .definition, this.declaringType); 14420 this._functionType = this.get$library().getOrAddFunctionType(this.name, this .definition, this.declaringType);
14878 if (this.parameters == null) { 14421 if (this.parameters == null) {
14879 this.resolve(this.declaringType); 14422 this.resolve(this.declaringType);
14880 } 14423 }
14881 } 14424 }
14882 return this._functionType; 14425 return this._functionType;
14883 } 14426 }
14884 MethodMember.prototype.override = function(other) { 14427 MethodMember.prototype.override = function(other) {
14885 if (!$notnull_bool(Member.prototype.override.call(this, other))) return false; 14428 if (!Member.prototype.override.call(this, other)) return false;
14886 if ($notnull_bool(other.get$isMethod())) { 14429 if (other.get$isMethod()) {
14887 return true; 14430 return true;
14888 } 14431 }
14889 else { 14432 else {
14890 world.error('method can only override methods', this.get$span(), other.get$s pan()); 14433 world.error('method can only override methods', this.get$span(), other.get$s pan());
14891 return false; 14434 return false;
14892 } 14435 }
14893 } 14436 }
14894 MethodMember.prototype.canInvoke = function(context, args) { 14437 MethodMember.prototype.canInvoke = function(context, args) {
14895 var bareCount = args.get$bareCount(); 14438 var bareCount = args.get$bareCount();
14896 if (bareCount > this.parameters.length) return false; 14439 if (bareCount > this.parameters.length) return false;
14897 if (bareCount == this.parameters.length) { 14440 if (bareCount == this.parameters.length) {
14898 if (bareCount != args.get$length()) return false; 14441 if (bareCount != args.get$length()) return false;
14899 } 14442 }
14900 else { 14443 else {
14901 if (!$notnull_bool(this.parameters.$index(bareCount).get$isOptional())) retu rn false; 14444 if (!this.parameters.$index(bareCount).get$isOptional()) return false;
14902 for (var i = bareCount; 14445 for (var i = bareCount;
14903 i < args.get$length(); i++) { 14446 i < args.get$length(); i++) {
14904 if (this.indexOfParameter(args.getName(i)) < 0) { 14447 if (this.indexOfParameter(args.getName(i)) < 0) {
14905 return false; 14448 return false;
14906 } 14449 }
14907 } 14450 }
14908 } 14451 }
14909 return true; 14452 return true;
14910 } 14453 }
14911 MethodMember.prototype.indexOfParameter = function(name) { 14454 MethodMember.prototype.indexOfParameter = function(name) {
14912 for (var i = 0; 14455 for (var i = 0;
14913 i < this.parameters.length; i++) { 14456 i < this.parameters.length; i++) {
14914 var p = this.parameters.$index(i); 14457 var p = this.parameters.$index(i);
14915 if ($notnull_bool(p.get$isOptional()) && $notnull_bool($eq(p.get$name(), nam e))) { 14458 if (p.get$isOptional() && $eq(p.get$name(), name)) {
14916 return i; 14459 return i;
14917 } 14460 }
14918 } 14461 }
14919 return -1; 14462 return -1;
14920 } 14463 }
14921 MethodMember.prototype.get$prefersPropertySyntax = function() { 14464 MethodMember.prototype.get$prefersPropertySyntax = function() {
14922 return true; 14465 return true;
14923 } 14466 }
14924 MethodMember.prototype.get$requiresFieldSyntax = function() { 14467 MethodMember.prototype.get$requiresFieldSyntax = function() {
14925 return false; 14468 return false;
14926 } 14469 }
14927 MethodMember.prototype.provideFieldSyntax = function() { 14470 MethodMember.prototype.provideFieldSyntax = function() {
14928 this._provideFieldSyntax = true; 14471 this._provideFieldSyntax = true;
14929 } 14472 }
14930 MethodMember.prototype.providePropertySyntax = function() { 14473 MethodMember.prototype.providePropertySyntax = function() {
14931 this._providePropertySyntax = true; 14474 this._providePropertySyntax = true;
14932 } 14475 }
14933 MethodMember.prototype._set = function(context, Node, target, value, isDynamic) { 14476 MethodMember.prototype._set = function(context, Node, target, value, isDynamic) {
14934 world.error('can not set method', this.definition.span); 14477 world.error('can not set method', this.definition.span);
14935 } 14478 }
14936 MethodMember.prototype._get = function(context, node, target, isDynamic) { 14479 MethodMember.prototype._get = function(context, node, target, isDynamic) {
14937 this.declaringType.genMethod(this); 14480 this.declaringType.genMethod(this);
14938 this._provideOptionalParamInfo = true; 14481 this._provideOptionalParamInfo = true;
14939 if ($notnull_bool(this.isStatic)) { 14482 if (this.isStatic) {
14940 var type = $notnull_bool(this.declaringType.get$isTop()) ? '' : ('' + this.d eclaringType.get$jsname() + '.'); 14483 var type = this.declaringType.get$isTop() ? '' : ('' + this.declaringType.ge t$jsname() + '.');
14941 return new Value(this.get$functionType(), ('' + type + '' + this.get$jsname( ) + ''), node.span, true); 14484 return new Value(this.get$functionType(), ('' + type + '' + this.get$jsname( ) + ''), node.span, true);
14942 } 14485 }
14943 this._providePropertySyntax = true; 14486 this._providePropertySyntax = true;
14944 return new Value(this.get$functionType(), ('' + target.code + '.get\$' + this. get$jsname() + '()'), node.span, true); 14487 return new Value(this.get$functionType(), ('' + target.code + '.get\$' + this. get$jsname() + '()'), node.span, true);
14945 } 14488 }
14946 MethodMember.prototype.namesInOrder = function(args) { 14489 MethodMember.prototype.namesInOrder = function(args) {
14947 if (!$notnull_bool(args.get$hasNames())) return true; 14490 if (!args.get$hasNames()) return true;
14948 var lastParameter = null; 14491 var lastParameter = null;
14949 for (var i = args.get$bareCount(); 14492 for (var i = args.get$bareCount();
14950 i < this.parameters.length; i++) { 14493 i < this.parameters.length; i++) {
14951 var p = args.getIndexOfName($assert_String(this.parameters.$index(i).get$nam e())); 14494 var p = args.getIndexOfName(this.parameters.$index(i).get$name());
14952 if (p >= 0 && $notnull_bool(args.values.$index(p).needsTemp)) { 14495 if (p >= 0 && args.values.$index(p).needsTemp) {
14953 if (lastParameter != null && lastParameter > $assert_num(p)) { 14496 if (lastParameter != null && lastParameter > p) {
14954 return false; 14497 return false;
14955 } 14498 }
14956 lastParameter = $assert_num(p); 14499 lastParameter = p;
14957 } 14500 }
14958 } 14501 }
14959 return true; 14502 return true;
14960 } 14503 }
14961 MethodMember.prototype.needsArgumentConversion = function(args) { 14504 MethodMember.prototype.needsArgumentConversion = function(args) {
14962 var bareCount = args.get$bareCount(); 14505 var bareCount = args.get$bareCount();
14963 for (var i = 0; 14506 for (var i = 0;
14964 i < bareCount; i++) { 14507 i < bareCount; i++) {
14965 var arg = args.values.$index(i); 14508 var arg = args.values.$index(i);
14966 if ($notnull_bool(arg.needsConversion$1(this.parameters.$index(i).type))) { 14509 if (arg.needsConversion$1(this.parameters.$index(i).type)) {
14967 return false; 14510 return false;
14968 } 14511 }
14969 } 14512 }
14970 if (bareCount < this.parameters.length) { 14513 if (bareCount < this.parameters.length) {
14971 this.genParameterValues(); 14514 this.genParameterValues();
14972 for (var i = bareCount; 14515 for (var i = bareCount;
14973 i < this.parameters.length; i++) { 14516 i < this.parameters.length; i++) {
14974 var arg = args.getValue($assert_String(this.parameters.$index(i).get$name( ))); 14517 var arg = args.getValue(this.parameters.$index(i).get$name());
14975 if ($notnull_bool($ne(arg, null)) && $notnull_bool(arg.needsConversion$1(t his.parameters.$index(i).type))) { 14518 if ($ne(arg, null) && arg.needsConversion$1(this.parameters.$index(i).type )) {
14976 return false; 14519 return false;
14977 } 14520 }
14978 } 14521 }
14979 } 14522 }
14980 return true; 14523 return true;
14981 } 14524 }
14982 MethodMember._argCountMsg = function(actual, expected, atLeast) { 14525 MethodMember._argCountMsg = function(actual, expected, atLeast) {
14983 return 'wrong number of arguments, expected ' + ('' + ($notnull_bool(atLeast) ? "at least " : "") + '' + expected + ' but found ' + actual + ''); 14526 return 'wrong number of arguments, expected ' + ('' + (atLeast ? "at least " : "") + '' + expected + ' but found ' + actual + '');
14984 } 14527 }
14985 MethodMember.prototype._argError = function(context, node, target, args, msg) { 14528 MethodMember.prototype._argError = function(context, node, target, args, msg) {
14986 if ($notnull_bool(this.isStatic) || $notnull_bool(this.get$isConstructor())) { 14529 if (this.isStatic || this.get$isConstructor()) {
14987 world.error(msg, node.span); 14530 world.error(msg, node.span);
14988 } 14531 }
14989 else { 14532 else {
14990 world.warning(msg, node.span); 14533 world.warning(msg, node.span);
14991 } 14534 }
14992 return target.invokeNoSuchMethod(context, this.name, node, args); 14535 return target.invokeNoSuchMethod(context, this.name, node, args);
14993 } 14536 }
14994 MethodMember.prototype.genParameterValues = function() { 14537 MethodMember.prototype.genParameterValues = function() {
14995 var $list = this.parameters; 14538 var $list = this.parameters;
14996 for (var $i = 0;$i < $list.length; $i++) { 14539 for (var $i = 0;$i < $list.length; $i++) {
14997 var p = $list.$index($i); 14540 var p = $list.$index($i);
14998 p.genValue$2(this, this.generator); 14541 p.genValue$2(this, this.generator);
14999 } 14542 }
15000 } 14543 }
15001 MethodMember.prototype.invoke = function(context, node, target, args, isDynamic) { 14544 MethodMember.prototype.invoke = function(context, node, target, args, isDynamic) {
15002 if (this.parameters == null) { 14545 if (this.parameters == null) {
15003 world.info(('surprised to need to resolve: ' + this.declaringType.name + '.' + this.name + '')); 14546 world.info(('surprised to need to resolve: ' + this.declaringType.name + '.' + this.name + ''));
15004 this.resolve(this.declaringType); 14547 this.resolve(this.declaringType);
15005 } 14548 }
15006 this.declaringType.genMethod(this); 14549 this.declaringType.genMethod(this);
15007 if ($notnull_bool(this.isStatic) || $notnull_bool(this.isFactory)) { 14550 if (this.isStatic || this.isFactory) {
15008 this.declaringType.markUsed(); 14551 this.declaringType.markUsed();
15009 } 14552 }
15010 if ($notnull_bool(this.get$isNative()) && this.returnType != null) this.return Type.markUsed(); 14553 if (this.get$isNative() && this.returnType != null) this.returnType.markUsed() ;
15011 if (!$notnull_bool(this.namesInOrder(args))) { 14554 if (!this.namesInOrder(args)) {
15012 return context.findMembers(this.name).invokeOnVar(context, node, target, arg s); 14555 return context.findMembers(this.name).invokeOnVar(context, node, target, arg s);
15013 } 14556 }
15014 var argsCode = []; 14557 var argsCode = [];
15015 if (target != null && ($notnull_bool(this.get$isConstructor()) || $notnull_boo l(target.isSuper))) { 14558 if (target != null && (this.get$isConstructor() || target.isSuper)) {
15016 argsCode.add$1('this'); 14559 argsCode.add$1('this');
15017 } 14560 }
15018 var bareCount = args.get$bareCount(); 14561 var bareCount = args.get$bareCount();
15019 for (var i = 0; 14562 for (var i = 0;
15020 i < bareCount; i++) { 14563 i < bareCount; i++) {
15021 var arg = args.values.$index(i); 14564 var arg = args.values.$index(i);
15022 if (i >= this.parameters.length) { 14565 if (i >= this.parameters.length) {
15023 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.len gth, false); 14566 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.len gth, false);
15024 return this._argError(context, node, target, args, $assert_String(msg)); 14567 return this._argError(context, node, target, args, msg);
15025 } 14568 }
15026 arg = arg.convertTo$4(context, this.parameters.$index(i).type, node, isDynam ic); 14569 arg = arg.convertTo$4(context, this.parameters.$index(i).type, node, isDynam ic);
15027 if ($notnull_bool(this.isConst) && $notnull_bool(arg.get$isConst())) { 14570 if (this.isConst && arg.get$isConst()) {
15028 argsCode.add$1(arg.get$canonicalCode()); 14571 argsCode.add$1(arg.get$canonicalCode());
15029 } 14572 }
15030 else { 14573 else {
15031 argsCode.add$1(arg.code); 14574 argsCode.add$1(arg.code);
15032 } 14575 }
15033 } 14576 }
15034 if (bareCount < this.parameters.length) { 14577 if (bareCount < this.parameters.length) {
15035 this.genParameterValues(); 14578 this.genParameterValues();
15036 var namedArgsUsed = 0; 14579 var namedArgsUsed = 0;
15037 for (var i = bareCount; 14580 for (var i = bareCount;
15038 i < this.parameters.length; i++) { 14581 i < this.parameters.length; i++) {
15039 var arg = args.getValue($assert_String(this.parameters.$index(i).get$name( ))); 14582 var arg = args.getValue(this.parameters.$index(i).get$name());
15040 if ($notnull_bool(arg == null)) { 14583 if (arg == null) {
15041 arg = this.parameters.$index(i).get$value(); 14584 arg = this.parameters.$index(i).get$value();
15042 } 14585 }
15043 else { 14586 else {
15044 arg = arg.convertTo$4(context, this.parameters.$index(i).type, node, isD ynamic); 14587 arg = arg.convertTo$4(context, this.parameters.$index(i).type, node, isD ynamic);
15045 namedArgsUsed++; 14588 namedArgsUsed++;
15046 } 14589 }
15047 if ($notnull_bool(arg == null) || !$notnull_bool(this.parameters.$index(i) .get$isOptional())) { 14590 if (arg == null || !this.parameters.$index(i).get$isOptional()) {
15048 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true); 14591 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true);
15049 return this._argError(context, node, target, args, $assert_String(msg)); 14592 return this._argError(context, node, target, args, msg);
15050 } 14593 }
15051 else { 14594 else {
15052 argsCode.add$1($notnull_bool(this.isConst) && $notnull_bool(arg.get$isCo nst()) ? arg.get$canonicalCode() : arg.code); 14595 argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode () : arg.code);
15053 } 14596 }
15054 } 14597 }
15055 if (namedArgsUsed < args.get$nameCount()) { 14598 if (namedArgsUsed < args.get$nameCount()) {
15056 var seen = new HashSetImplementation(); 14599 var seen = new HashSetImplementation();
15057 for (var i = bareCount; 14600 for (var i = bareCount;
15058 i < args.get$length(); i++) { 14601 i < args.get$length(); i++) {
15059 var name = args.getName(i); 14602 var name = args.getName(i);
15060 if ($notnull_bool(seen.contains$1(name))) { 14603 if (seen.contains$1(name)) {
15061 return this._argError(context, node, target, args, ('duplicate argumen t "' + name + '"')); 14604 return this._argError(context, node, target, args, ('duplicate argumen t "' + name + '"'));
15062 } 14605 }
15063 seen.add$1(name); 14606 seen.add$1(name);
15064 var p = this.indexOfParameter($assert_String(name)); 14607 var p = this.indexOfParameter(name);
15065 if (p < 0) { 14608 if (p < 0) {
15066 return this._argError(context, node, target, args, ('method does not h ave optional parameter "' + name + '"')); 14609 return this._argError(context, node, target, args, ('method does not h ave optional parameter "' + name + '"'));
15067 } 14610 }
15068 else if (p < bareCount) { 14611 else if (p < bareCount) {
15069 return this._argError(context, node, target, args, ('argument "' + nam e + '" passed as positional and named')); 14612 return this._argError(context, node, target, args, ('argument "' + nam e + '" passed as positional and named'));
15070 } 14613 }
15071 } 14614 }
15072 world.internalError(('wrong named arguments calling ' + this.name + ''), n ode.span); 14615 world.internalError(('wrong named arguments calling ' + this.name + ''), n ode.span);
15073 } 14616 }
15074 Arguments.removeTrailingNulls((argsCode && argsCode.is$List$Value())); 14617 Arguments.removeTrailingNulls(argsCode);
15075 } 14618 }
15076 var argsString = Strings.join((argsCode && argsCode.is$List$String()), ', '); 14619 var argsString = Strings.join(argsCode, ', ');
15077 if ($notnull_bool(this.get$isConstructor())) { 14620 if (this.get$isConstructor()) {
15078 return this._invokeConstructor(context, node, target, args, argsString); 14621 return this._invokeConstructor(context, node, target, args, argsString);
15079 } 14622 }
15080 if (target != null && $notnull_bool(target.isSuper)) { 14623 if (target != null && target.isSuper) {
15081 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.prototype.' + this.get$jsname() + '.call(' + argsString + ')'), node.s pan, true); 14624 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.prototype.' + this.get$jsname() + '.call(' + argsString + ')'), node.s pan, true);
15082 } 14625 }
15083 if ($notnull_bool(this.get$isOperator())) { 14626 if (this.get$isOperator()) {
15084 return this._invokeBuiltin(context, node, target, args, argsCode, isDynamic) ; 14627 return this._invokeBuiltin(context, node, target, args, argsCode, isDynamic) ;
15085 } 14628 }
15086 if ($notnull_bool(this.isFactory)) { 14629 if (this.isFactory) {
15087 return new Value(this.get$inferredResult(), ('' + this.get$generatedFactoryN ame() + '(' + argsString + ')'), node.span, true); 14630 return new Value(this.get$inferredResult(), ('' + this.get$generatedFactoryN ame() + '(' + argsString + ')'), node.span, true);
15088 } 14631 }
15089 if ($notnull_bool(this.isStatic)) { 14632 if (this.isStatic) {
15090 if ($notnull_bool(this.declaringType.get$isTop())) { 14633 if (this.declaringType.get$isTop()) {
15091 return new Value(this.get$inferredResult(), ('' + this.get$jsname() + '(' + argsString + ')'), node != null ? node.span : node, true); 14634 return new Value(this.get$inferredResult(), ('' + this.get$jsname() + '(' + argsString + ')'), node != null ? node.span : node, true);
15092 } 14635 }
15093 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.' + this.get$jsname() + '(' + argsString + ')'), node.span, true); 14636 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.' + this.get$jsname() + '(' + argsString + ')'), node.span, true);
15094 } 14637 }
15095 var code = ('' + target.code + '.' + this.get$jsname() + '(' + argsString + ') '); 14638 var code = ('' + target.code + '.' + this.get$jsname() + '(' + argsString + ') ');
15096 if ($notnull_bool(target.get$isConst())) { 14639 if (target.get$isConst()) {
15097 if ((target instanceof GlobalValue)) { 14640 if ((target instanceof GlobalValue)) {
15098 target = target.get$dynamic().exp; 14641 target = target.get$dynamic().exp;
15099 } 14642 }
15100 if (this.name == 'get\$length') { 14643 if (this.name == 'get\$length') {
15101 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) { 14644 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) {
15102 code = ('' + target.get$dynamic().values.length + ''); 14645 code = ('' + target.get$dynamic().values.length + '');
15103 } 14646 }
15104 } 14647 }
15105 else if (this.name == 'isEmpty') { 14648 else if (this.name == 'isEmpty') {
15106 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) { 14649 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) {
15107 code = ('' + target.get$dynamic().values.isEmpty$0() + ''); 14650 code = ('' + target.get$dynamic().values.isEmpty$0() + '');
15108 } 14651 }
15109 } 14652 }
15110 } 14653 }
15111 if (this.name == 'get\$typeName' && $eq(this.declaringType.get$library(), worl d.get$dom())) { 14654 if (this.name == 'get\$typeName' && $eq(this.declaringType.get$library(), worl d.get$dom())) {
15112 world.gen.corejs.useTypeNameOf = true; 14655 world.gen.corejs.useTypeNameOf = true;
15113 } 14656 }
15114 return new Value(this.get$inferredResult(), code, node.span, true); 14657 return new Value(this.get$inferredResult(), code, node.span, true);
15115 } 14658 }
15116 MethodMember.prototype._invokeConstructor = function(context, node, target, args , argsString) { 14659 MethodMember.prototype._invokeConstructor = function(context, node, target, args , argsString) {
15117 this.declaringType.markUsed(); 14660 this.declaringType.markUsed();
15118 if (target != null) { 14661 if (target != null) {
15119 var code = (this.get$constructorName() != '') ? ('' + this.declaringType.get $jsname() + '.' + this.get$constructorName() + '\$ctor.call(' + argsString + ')' ) : ('' + this.declaringType.get$jsname() + '.call(' + argsString + ')'); 14662 var code = (this.get$constructorName() != '') ? ('' + this.declaringType.get $jsname() + '.' + this.get$constructorName() + '\$ctor.call(' + argsString + ')' ) : ('' + this.declaringType.get$jsname() + '.call(' + argsString + ')');
15120 return new Value(this.declaringType, code, node.span, true); 14663 return new Value(this.declaringType, code, node.span, true);
15121 } 14664 }
15122 else { 14665 else {
15123 var code = (this.get$constructorName() != '') ? ('new ' + this.declaringType .get$jsname() + '.' + this.get$constructorName() + '\$ctor(' + argsString + ')') : ('new ' + this.declaringType.get$jsname() + '(' + argsString + ')'); 14666 var code = (this.get$constructorName() != '') ? ('new ' + this.declaringType .get$jsname() + '.' + this.get$constructorName() + '\$ctor(' + argsString + ')') : ('new ' + this.declaringType.get$jsname() + '(' + argsString + ')');
15124 if ($notnull_bool(this.isConst) && (node instanceof lang_NewExpression) && $ notnull_bool(node.get$dynamic().get$isConst())) { 14667 if (this.isConst && (node instanceof lang_NewExpression) && node.get$dynamic ().get$isConst()) {
15125 return this._invokeConstConstructor(node, $assert_String(code), target, ar gs); 14668 return this._invokeConstConstructor(node, code, target, args);
15126 } 14669 }
15127 else { 14670 else {
15128 return new Value(this.declaringType, code, node.span, true); 14671 return new Value(this.declaringType, code, node.span, true);
15129 } 14672 }
15130 } 14673 }
15131 } 14674 }
15132 MethodMember.prototype._invokeConstConstructor = function(node, code, target, ar gs) { 14675 MethodMember.prototype._invokeConstConstructor = function(node, code, target, ar gs) {
15133 var $0;
15134 var fields = new HashMapImplementation(); 14676 var fields = new HashMapImplementation();
15135 for (var i = 0; 14677 for (var i = 0;
15136 i < this.parameters.length; i++) { 14678 i < this.parameters.length; i++) {
15137 var param = this.parameters.$index(i); 14679 var param = this.parameters.$index(i);
15138 if ($notnull_bool(param.isInitializer)) { 14680 if (param.isInitializer) {
15139 var value = null; 14681 var value = null;
15140 if (i < args.get$length()) { 14682 if (i < args.get$length()) {
15141 value = args.values.$index(i); 14683 value = args.values.$index(i);
15142 } 14684 }
15143 else { 14685 else {
15144 value = args.getValue($assert_String(param.get$name())); 14686 value = args.getValue(param.get$name());
15145 if ($notnull_bool(value == null)) { 14687 if (value == null) {
15146 value = param.get$value(); 14688 value = param.get$value();
15147 } 14689 }
15148 } 14690 }
15149 fields.$setindex(param.get$name(), value); 14691 fields.$setindex(param.get$name(), value);
15150 } 14692 }
15151 } 14693 }
15152 if (this.definition.initializers != null) { 14694 if (this.definition.initializers != null) {
15153 this.generator._pushBlock(false); 14695 this.generator._pushBlock(false);
15154 for (var j = 0; 14696 for (var j = 0;
15155 j < this.definition.formals.length; j++) { 14697 j < this.definition.formals.length; j++) {
15156 var name = this.definition.formals.$index(j).get$name().get$name(); 14698 var name = this.definition.formals.$index(j).get$name().get$name();
15157 var value = null; 14699 var value = null;
15158 if (j < args.get$length()) { 14700 if (j < args.get$length()) {
15159 value = args.values.$index(j); 14701 value = args.values.$index(j);
15160 } 14702 }
15161 else { 14703 else {
15162 value = args.getValue($assert_String(this.parameters.$index(j).get$name( ))); 14704 value = args.getValue(this.parameters.$index(j).get$name());
15163 if ($notnull_bool(value == null)) { 14705 if (value == null) {
15164 value = this.parameters.$index(j).get$value(); 14706 value = this.parameters.$index(j).get$value();
15165 } 14707 }
15166 } 14708 }
15167 this.generator._scope._vars.$setindex(name, value); 14709 this.generator._scope._vars.$setindex(name, value);
15168 } 14710 }
15169 var $list = this.definition.initializers; 14711 var $list = this.definition.initializers;
15170 for (var $i = 0;$i < $list.length; $i++) { 14712 for (var $i = 0;$i < $list.length; $i++) {
15171 var init = $list.$index($i); 14713 var init = $list.$index($i);
15172 if ((init instanceof CallExpression)) { 14714 if ((init instanceof CallExpression)) {
15173 var delegateArgs = this.generator._makeArgs((($0 = init.get$arguments()) && $0.is$List$ArgumentNode())); 14715 var delegateArgs = this.generator._makeArgs(init.get$arguments());
15174 var value = this.initDelegate.invoke(this.generator, node, target, (dele gateArgs && delegateArgs.is$Arguments()), false); 14716 var value = this.initDelegate.invoke(this.generator, node, target, deleg ateArgs, false);
15175 if ((init.target instanceof ThisExpression)) { 14717 if ((init.target instanceof ThisExpression)) {
15176 return (value && value.is$Value()); 14718 return value;
15177 } 14719 }
15178 else { 14720 else {
15179 if ((value instanceof GlobalValue)) { 14721 if ((value instanceof GlobalValue)) {
15180 value = value.exp; 14722 value = value.exp;
15181 } 14723 }
15182 var $list0 = value.fields.getKeys(); 14724 var $list0 = value.fields.getKeys();
15183 for (var $i0 = value.fields.getKeys().iterator$0(); $i0.hasNext$0(); ) { 14725 for (var $i0 = value.fields.getKeys().iterator$0(); $i0.hasNext$0(); ) {
15184 var fname = $i0.next$0(); 14726 var fname = $i0.next$0();
15185 fields.$setindex(fname, value.fields.$index(fname)); 14727 fields.$setindex(fname, value.fields.$index(fname));
15186 } 14728 }
15187 } 14729 }
15188 } 14730 }
15189 else { 14731 else {
15190 var assign = (init && init.is$BinaryExpression()); 14732 var assign = init;
15191 var x = (($0 = assign.x) && $0.is$VarExpression()); 14733 var x = assign.x;
15192 var fname = x.name.name; 14734 var fname = x.name.name;
15193 var val = this.generator.visitValue(assign.y); 14735 var val = this.generator.visitValue(assign.y);
15194 fields.$setindex(fname, val); 14736 fields.$setindex(fname, val);
15195 } 14737 }
15196 } 14738 }
15197 this.generator._popBlock(); 14739 this.generator._popBlock();
15198 } 14740 }
15199 var $list = this.declaringType.get$members().getValues(); 14741 var $list = this.declaringType.get$members().getValues();
15200 for (var $i = this.declaringType.get$members().getValues().iterator$0(); $i.ha sNext$0(); ) { 14742 for (var $i = this.declaringType.get$members().getValues().iterator$0(); $i.ha sNext$0(); ) {
15201 var f = $i.next$0(); 14743 var f = $i.next$0();
15202 if ((f instanceof FieldMember) && !$notnull_bool(f.get$isStatic()) && $notnu ll_bool($ne(f.get$value(), null)) && !fields.containsKey(f.get$name())) { 14744 if ((f instanceof FieldMember) && !f.get$isStatic() && $ne(f.get$value(), nu ll) && !fields.containsKey(f.get$name())) {
15203 fields.$setindex(f.get$name(), f.computeValue$0()); 14745 fields.$setindex(f.get$name(), f.computeValue$0());
15204 } 14746 }
15205 } 14747 }
15206 return world.gen.globalForConst(ConstObjectValue.ConstObjectValue$factory(this .declaringType, fields, code, node.span), args.values); 14748 return world.gen.globalForConst(ConstObjectValue.ConstObjectValue$factory(this .declaringType, fields, code, node.span), args.values);
15207 } 14749 }
15208 MethodMember.prototype._invokeBuiltin = function(context, node, target, args, ar gsCode, isDynamic) { 14750 MethodMember.prototype._invokeBuiltin = function(context, node, target, args, ar gsCode, isDynamic) {
15209 var allConst = $notnull_bool(target.get$isConst()) && args.values.every((funct ion (arg) { 14751 var allConst = target.get$isConst() && args.values.every((function (arg) {
15210 return arg.get$isConst(); 14752 return arg.get$isConst();
15211 }) 14753 })
15212 ); 14754 );
15213 if ($notnull_bool(this.declaringType.get$isNum())) { 14755 if (this.declaringType.get$isNum()) {
15214 if (!$notnull_bool(allConst)) { 14756 if (!allConst) {
15215 var code; 14757 var code;
15216 if (this.name == '\$negate') { 14758 if (this.name == '\$negate') {
15217 code = ('-' + target.code + ''); 14759 code = ('-' + target.code + '');
15218 } 14760 }
15219 else if (this.name == '\$bit_not') { 14761 else if (this.name == '\$bit_not') {
15220 code = ('~' + target.code + ''); 14762 code = ('~' + target.code + '');
15221 } 14763 }
15222 else if (this.name == '\$truncdiv' || this.name == '\$mod') { 14764 else if (this.name == '\$truncdiv' || this.name == '\$mod') {
15223 world.gen.corejs.useOperator(this.name); 14765 world.gen.corejs.useOperator(this.name);
15224 code = ('' + this.name + '(' + target.code + ', ' + argsCode.$index(0) + ')'); 14766 code = ('' + this.name + '(' + target.code + ', ' + argsCode.$index(0) + ')');
15225 } 14767 }
15226 else { 14768 else {
15227 var op = TokenKind.rawOperatorFromMethod(this.name); 14769 var op = TokenKind.rawOperatorFromMethod(this.name);
15228 code = ('' + target.code + ' ' + op + ' ' + argsCode.$index(0) + ''); 14770 code = ('' + target.code + ' ' + op + ' ' + argsCode.$index(0) + '');
15229 } 14771 }
15230 return new Value(this.get$inferredResult(), code, node.span, true); 14772 return new Value(this.get$inferredResult(), code, node.span, true);
15231 } 14773 }
15232 else { 14774 else {
15233 var value; 14775 var value;
15234 var val0, val1, ival0, ival1; 14776 var val0, val1, ival0, ival1;
15235 val0 = $assert_num(target.get$dynamic().get$actualValue()); 14777 val0 = target.get$dynamic().get$actualValue();
15236 ival0 = val0.toInt(); 14778 ival0 = val0.toInt();
15237 if (args.values.length > 0) { 14779 if (args.values.length > 0) {
15238 val1 = $assert_num(args.values.$index(0).get$dynamic().get$actualValue() ); 14780 val1 = args.values.$index(0).get$dynamic().get$actualValue();
15239 ival1 = val1.toInt(); 14781 ival1 = val1.toInt();
15240 } 14782 }
15241 switch (this.name) { 14783 switch (this.name) {
15242 case '\$negate': 14784 case '\$negate':
15243 14785
15244 value = -val0; 14786 value = -val0;
15245 break; 14787 break;
15246 14788
15247 case '\$add': 14789 case '\$add':
15248 14790
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
15336 14878
15337 case '\$shr': 14879 case '\$shr':
15338 14880
15339 value = (ival0 >>> ival1).toDouble(); 14881 value = (ival0 >>> ival1).toDouble();
15340 break; 14882 break;
15341 14883
15342 } 14884 }
15343 return EvaluatedValue.EvaluatedValue$factory(this.get$inferredResult(), va lue, ("" + value + ""), node.span); 14885 return EvaluatedValue.EvaluatedValue$factory(this.get$inferredResult(), va lue, ("" + value + ""), node.span);
15344 } 14886 }
15345 } 14887 }
15346 else if ($notnull_bool(this.declaringType.get$isString())) { 14888 else if (this.declaringType.get$isString()) {
15347 if (this.name == '\$index') { 14889 if (this.name == '\$index') {
15348 return new Value(this.declaringType, ('' + target.code + '[' + argsCode.$i ndex(0) + ']'), node.span, true); 14890 return new Value(this.declaringType, ('' + target.code + '[' + argsCode.$i ndex(0) + ']'), node.span, true);
15349 } 14891 }
15350 else if (this.name == '\$add') { 14892 else if (this.name == '\$add') {
15351 if ($notnull_bool(allConst)) { 14893 if (allConst) {
15352 var val0 = target.get$dynamic().get$actualValue(); 14894 var val0 = target.get$dynamic().get$actualValue();
15353 val0 = val0.substring$2(1, val0.length - 1); 14895 val0 = val0.substring$2(1, val0.length - 1);
15354 var val1 = args.values.$index(0).get$dynamic().get$actualValue(); 14896 var val1 = args.values.$index(0).get$dynamic().get$actualValue();
15355 if ($notnull_bool(args.values.$index(0).type.get$isString())) { 14897 if (args.values.$index(0).type.get$isString()) {
15356 val1 = val1.substring$2(1, val1.length - 1); 14898 val1 = val1.substring$2(1, val1.length - 1);
15357 } 14899 }
15358 var value = ('' + val0 + '' + val1 + ''); 14900 var value = ('' + val0 + '' + val1 + '');
15359 value = '"' + value.replaceAll$2('"', '\\"') + '"'; 14901 value = '"' + value.replaceAll$2('"', '\\"') + '"';
15360 return EvaluatedValue.EvaluatedValue$factory(world.stringType, value, $a ssert_String(value), node.span); 14902 return EvaluatedValue.EvaluatedValue$factory(world.stringType, value, va lue, node.span);
15361 } 14903 }
15362 args.values.$index(0).invoke$4(context, 'toString', node, Arguments.get$EM PTY()); 14904 args.values.$index(0).invoke$4(context, 'toString', node, Arguments.get$EM PTY());
15363 return new Value(this.declaringType, ('' + target.code + ' + ' + argsCode. $index(0) + ''), node.span, true); 14905 return new Value(this.declaringType, ('' + target.code + ' + ' + argsCode. $index(0) + ''), node.span, true);
15364 } 14906 }
15365 } 14907 }
15366 else if ($notnull_bool(this.declaringType.get$isNativeType())) { 14908 else if (this.declaringType.get$isNativeType()) {
15367 if (this.name == '\$index') { 14909 if (this.name == '\$index') {
15368 return new Value(this.returnType, ('' + target.code + '[' + argsCode.$inde x(0) + ']'), node.span, true); 14910 return new Value(this.returnType, ('' + target.code + '[' + argsCode.$inde x(0) + ']'), node.span, true);
15369 } 14911 }
15370 else if (this.name == '\$setindex') { 14912 else if (this.name == '\$setindex') {
15371 return new Value(this.returnType, ('' + target.code + '[' + argsCode.$inde x(0) + '] = ' + argsCode.$index(1) + ''), node.span, true); 14913 return new Value(this.returnType, ('' + target.code + '[' + argsCode.$inde x(0) + '] = ' + argsCode.$index(1) + ''), node.span, true);
15372 } 14914 }
15373 } 14915 }
15374 if (this.name == '\$eq' || this.name == '\$ne') { 14916 if (this.name == '\$eq' || this.name == '\$ne') {
15375 var op = this.name == '\$eq' ? '==' : '!='; 14917 var op = this.name == '\$eq' ? '==' : '!=';
15376 if (this.name == '\$ne') { 14918 if (this.name == '\$ne') {
15377 target.invoke(context, '\$eq', node, args, isDynamic); 14919 target.invoke(context, '\$eq', node, args, isDynamic);
15378 } 14920 }
15379 if ($notnull_bool(allConst)) { 14921 if (allConst) {
15380 var val0 = target.get$dynamic().get$actualValue(); 14922 var val0 = target.get$dynamic().get$actualValue();
15381 var val1 = args.values.$index(0).get$dynamic().get$actualValue(); 14923 var val1 = args.values.$index(0).get$dynamic().get$actualValue();
15382 var newVal = this.name == '\$eq' ? $eq(val0, val1) : $ne(val0, val1); 14924 var newVal = this.name == '\$eq' ? $eq(val0, val1) : $ne(val0, val1);
15383 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, newVal, (" " + newVal + ""), node.span); 14925 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, newVal, (" " + newVal + ""), node.span);
15384 } 14926 }
15385 if ($notnull_bool($eq(argsCode.$index(0), 'null'))) { 14927 if ($eq(argsCode.$index(0), 'null')) {
15386 return new Value(this.get$inferredResult(), ('' + target.code + ' ' + op + ' null'), node.span, true); 14928 return new Value(this.get$inferredResult(), ('' + target.code + ' ' + op + ' null'), node.span, true);
15387 } 14929 }
15388 else if ($notnull_bool(target.type.get$isNum()) || $notnull_bool(target.type .get$isString())) { 14930 else if (target.type.get$isNum() || target.type.get$isString()) {
15389 return new Value(this.get$inferredResult(), ('' + target.code + ' ' + op + ' ' + argsCode.$index(0) + ''), node.span, true); 14931 return new Value(this.get$inferredResult(), ('' + target.code + ' ' + op + ' ' + argsCode.$index(0) + ''), node.span, true);
15390 } 14932 }
15391 world.gen.corejs.useOperator(this.name); 14933 world.gen.corejs.useOperator(this.name);
15392 return new Value(this.get$inferredResult(), ('' + this.name + '(' + target.c ode + ', ' + argsCode.$index(0) + ')'), node.span, true); 14934 return new Value(this.get$inferredResult(), ('' + this.name + '(' + target.c ode + ', ' + argsCode.$index(0) + ')'), node.span, true);
15393 } 14935 }
15394 if ($notnull_bool(this.get$isCallMethod())) { 14936 if (this.get$isCallMethod()) {
15395 this.declaringType.markUsed(); 14937 this.declaringType.markUsed();
15396 return new Value(this.get$inferredResult(), ('' + target.code + '(' + String s.join((argsCode && argsCode.is$List$String()), ", ") + ')'), node.span, true); 14938 return new Value(this.get$inferredResult(), ('' + target.code + '(' + String s.join(argsCode, ", ") + ')'), node.span, true);
15397 } 14939 }
15398 if (this.name == '\$index') { 14940 if (this.name == '\$index') {
15399 world.gen.corejs.useIndex = true; 14941 world.gen.corejs.useIndex = true;
15400 } 14942 }
15401 else if (this.name == '\$setindex') { 14943 else if (this.name == '\$setindex') {
15402 world.gen.corejs.useSetIndex = true; 14944 world.gen.corejs.useSetIndex = true;
15403 } 14945 }
15404 var argsString = Strings.join((argsCode && argsCode.is$List$String()), ', '); 14946 var argsString = Strings.join(argsCode, ', ');
15405 return new Value(this.get$inferredResult(), ('' + target.code + '.' + this.get $jsname() + '(' + argsString + ')'), node.span, true); 14947 return new Value(this.get$inferredResult(), ('' + target.code + '.' + this.get $jsname() + '(' + argsString + ')'), node.span, true);
15406 } 14948 }
15407 MethodMember.prototype.resolve = function(inType) { 14949 MethodMember.prototype.resolve = function(inType) {
15408 this.isStatic = inType.get$isTop(); 14950 this.isStatic = inType.get$isTop();
15409 this.isConst = false; 14951 this.isConst = false;
15410 this.isFactory = false; 14952 this.isFactory = false;
15411 this.isAbstract = !$notnull_bool(this.declaringType.get$isClass()); 14953 this.isAbstract = !this.declaringType.get$isClass();
15412 if (this.definition.modifiers != null) { 14954 if (this.definition.modifiers != null) {
15413 var $list = this.definition.modifiers; 14955 var $list = this.definition.modifiers;
15414 for (var $i = 0;$i < $list.length; $i++) { 14956 for (var $i = 0;$i < $list.length; $i++) {
15415 var mod = $list.$index($i); 14957 var mod = $list.$index($i);
15416 if ($notnull_bool($eq(mod.kind, 86/*TokenKind.STATIC*/))) { 14958 if ($eq(mod.kind, 86/*TokenKind.STATIC*/)) {
15417 if ($notnull_bool(this.isStatic)) { 14959 if (this.isStatic) {
15418 world.error('duplicate static modifier', mod.get$span()); 14960 world.error('duplicate static modifier', mod.get$span());
15419 } 14961 }
15420 this.isStatic = true; 14962 this.isStatic = true;
15421 } 14963 }
15422 else if ($notnull_bool(this.get$isConstructor()) && $notnull_bool($eq(mod. kind, 91/*TokenKind.CONST*/))) { 14964 else if (this.get$isConstructor() && $eq(mod.kind, 91/*TokenKind.CONST*/)) {
15423 if ($notnull_bool(this.isConst)) { 14965 if (this.isConst) {
15424 world.error('duplicate const modifier', mod.get$span()); 14966 world.error('duplicate const modifier', mod.get$span());
15425 } 14967 }
15426 this.isConst = true; 14968 this.isConst = true;
15427 } 14969 }
15428 else if ($notnull_bool($eq(mod.kind, 75/*TokenKind.FACTORY*/))) { 14970 else if ($eq(mod.kind, 75/*TokenKind.FACTORY*/)) {
15429 if ($notnull_bool(this.isFactory)) { 14971 if (this.isFactory) {
15430 world.error('duplicate factory modifier', mod.get$span()); 14972 world.error('duplicate factory modifier', mod.get$span());
15431 } 14973 }
15432 this.isFactory = true; 14974 this.isFactory = true;
15433 } 14975 }
15434 else if ($notnull_bool($eq(mod.kind, 71/*TokenKind.ABSTRACT*/))) { 14976 else if ($eq(mod.kind, 71/*TokenKind.ABSTRACT*/)) {
15435 if ($notnull_bool(this.isAbstract)) { 14977 if (this.isAbstract) {
15436 if ($notnull_bool(this.declaringType.get$isClass())) { 14978 if (this.declaringType.get$isClass()) {
15437 world.error('duplicate abstract modifier', mod.get$span()); 14979 world.error('duplicate abstract modifier', mod.get$span());
15438 } 14980 }
15439 else { 14981 else {
15440 world.error('abstract modifier not allowed on interface members', mo d.get$span()); 14982 world.error('abstract modifier not allowed on interface members', mo d.get$span());
15441 } 14983 }
15442 } 14984 }
15443 this.isAbstract = true; 14985 this.isAbstract = true;
15444 } 14986 }
15445 else { 14987 else {
15446 world.error(('' + mod + ' modifier not allowed on method'), mod.get$span ()); 14988 world.error(('' + mod + ' modifier not allowed on method'), mod.get$span ());
15447 } 14989 }
15448 } 14990 }
15449 } 14991 }
15450 if ($notnull_bool(this.isFactory)) { 14992 if (this.isFactory) {
15451 this.isStatic = true; 14993 this.isStatic = true;
15452 } 14994 }
15453 if ($notnull_bool(this.get$isOperator()) && $notnull_bool(this.isStatic) && !$ notnull_bool(this.get$isCallMethod())) { 14995 if (this.get$isOperator() && this.isStatic && !this.get$isCallMethod()) {
15454 world.error(('operator method may not be static "' + this.name + '"'), this. get$span()); 14996 world.error(('operator method may not be static "' + this.name + '"'), this. get$span());
15455 } 14997 }
15456 if ($notnull_bool(this.isAbstract)) { 14998 if (this.isAbstract) {
15457 if (this.definition.body != null && !(this.declaringType.get$definition() in stanceof FunctionTypeDefinition)) { 14999 if (this.definition.body != null && !(this.declaringType.get$definition() in stanceof FunctionTypeDefinition)) {
15458 world.error('abstract method can not have a body', this.get$span()); 15000 world.error('abstract method can not have a body', this.get$span());
15459 } 15001 }
15460 if ($notnull_bool(this.isStatic) && !(this.declaringType.get$definition() in stanceof FunctionTypeDefinition)) { 15002 if (this.isStatic && !(this.declaringType.get$definition() instanceof Functi onTypeDefinition)) {
15461 world.error('static method can not be abstract', this.get$span()); 15003 world.error('static method can not be abstract', this.get$span());
15462 } 15004 }
15463 } 15005 }
15464 else { 15006 else {
15465 if (this.definition.body == null && !$notnull_bool(this.get$isConstructor()) ) { 15007 if (this.definition.body == null && !this.get$isConstructor()) {
15466 world.error('method needs a body', this.get$span()); 15008 world.error('method needs a body', this.get$span());
15467 } 15009 }
15468 } 15010 }
15469 if ($notnull_bool(this.get$isConstructor())) { 15011 if (this.get$isConstructor()) {
15470 this.returnType = this.declaringType; 15012 this.returnType = this.declaringType;
15471 } 15013 }
15472 else { 15014 else {
15473 this.returnType = inType.resolveType(this.definition.returnType, false); 15015 this.returnType = inType.resolveType(this.definition.returnType, false);
15474 if ($notnull_bool(this.isStatic) && $notnull_bool(this.returnType.get$hasTyp eParams())) { 15016 if (this.isStatic && this.returnType.get$hasTypeParams()) {
15475 world.error('using type parameter in static context', this.definition.retu rnType.span); 15017 world.error('using type parameter in static context', this.definition.retu rnType.span);
15476 } 15018 }
15477 } 15019 }
15478 this.parameters = []; 15020 this.parameters = [];
15479 var $list = this.definition.formals; 15021 var $list = this.definition.formals;
15480 for (var $i = 0;$i < $list.length; $i++) { 15022 for (var $i = 0;$i < $list.length; $i++) {
15481 var formal = $list.$index($i); 15023 var formal = $list.$index($i);
15482 var param = new Parameter(formal); 15024 var param = new Parameter(formal);
15483 param.resolve$2(this, inType); 15025 param.resolve$2(this, inType);
15484 this.parameters.add(param); 15026 this.parameters.add(param);
15485 } 15027 }
15486 if (!$notnull_bool(this.isLambda)) { 15028 if (!this.isLambda) {
15487 this.get$library()._addMember(this); 15029 this.get$library()._addMember(this);
15488 } 15030 }
15489 } 15031 }
15490 MethodMember.prototype._get$3 = function($0, $1, $2) { 15032 MethodMember.prototype._get$3 = function($0, $1, $2) {
15491 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 15033 return this._get($0, $1, $2, false);
15492 }; 15034 };
15493 MethodMember.prototype._set$4 = function($0, $1, $2, $3) { 15035 MethodMember.prototype._set$4 = function($0, $1, $2, $3) {
15494 return this._set(($0 && $0.is$MethodGenerator()), $1, ($2 && $2.is$Value()), ( $3 && $3.is$Value()), false); 15036 return this._set($0, $1, $2, $3, false);
15495 }; 15037 };
15496 MethodMember.prototype.canInvoke$2 = function($0, $1) { 15038 MethodMember.prototype.canInvoke$2 = function($0, $1) {
15497 return this.canInvoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$Arguments( ))); 15039 return this.canInvoke($0, $1);
15498 }; 15040 };
15499 MethodMember.prototype.invoke$4 = function($0, $1, $2, $3) { 15041 MethodMember.prototype.invoke$4 = function($0, $1, $2, $3) {
15500 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), false); 15042 return this.invoke($0, $1, $2, $3, false);
15501 }; 15043 };
15502 MethodMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 15044 MethodMember.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
15503 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 15045 return this.invoke($0, $1, $2, $3, isDynamic);
15504 }; 15046 };
15505 MethodMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 15047 MethodMember.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
15506 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool($4)); 15048 return this.invoke($0, $1, $2, $3, $4);
15507 }; 15049 };
15508 MethodMember.prototype.namesInOrder$1 = function($0) { 15050 MethodMember.prototype.namesInOrder$1 = function($0) {
15509 return this.namesInOrder(($0 && $0.is$Arguments())); 15051 return this.namesInOrder($0);
15510 }; 15052 };
15511 MethodMember.prototype.provideFieldSyntax$0 = function() { 15053 MethodMember.prototype.provideFieldSyntax$0 = function() {
15512 return this.provideFieldSyntax(); 15054 return this.provideFieldSyntax();
15513 }; 15055 };
15514 MethodMember.prototype.providePropertySyntax$0 = function() { 15056 MethodMember.prototype.providePropertySyntax$0 = function() {
15515 return this.providePropertySyntax(); 15057 return this.providePropertySyntax();
15516 }; 15058 };
15517 MethodMember.prototype.resolve$1 = function($0) { 15059 MethodMember.prototype.resolve$1 = function($0) {
15518 return this.resolve(($0 && $0.is$lang_Type())); 15060 return this.resolve($0);
15519 }; 15061 };
15520 // ********** Code for MemberSet ************** 15062 // ********** Code for MemberSet **************
15521 function MemberSet(member, isVar) { 15063 function MemberSet(member, isVar) {
15522 this.name = member.name; 15064 this.name = member.name;
15523 this.members = [member]; 15065 this.members = [member];
15524 this.jsname = member.get$jsname(); 15066 this.jsname = member.get$jsname();
15525 this.isVar = isVar; 15067 this.isVar = isVar;
15526 // Initializers done 15068 // Initializers done
15527 } 15069 }
15528 MemberSet.prototype.is$MemberSet = function(){return this;};
15529 MemberSet.prototype.get$name = function() { return this.name; }; 15070 MemberSet.prototype.get$name = function() { return this.name; };
15530 MemberSet.prototype.get$members = function() { return this.members; }; 15071 MemberSet.prototype.get$members = function() { return this.members; };
15531 MemberSet.prototype.get$jsname = function() { return this.jsname; }; 15072 MemberSet.prototype.get$jsname = function() { return this.jsname; };
15532 MemberSet.prototype.get$isVar = function() { return this.isVar; }; 15073 MemberSet.prototype.get$isVar = function() { return this.isVar; };
15533 MemberSet.prototype.toString = function() { 15074 MemberSet.prototype.toString = function() {
15534 return ('' + this.name + ':' + this.members.length + ''); 15075 return ('' + this.name + ':' + this.members.length + '');
15535 } 15076 }
15536 MemberSet.prototype.get$containsMethods = function() { 15077 MemberSet.prototype.get$containsMethods = function() {
15537 return this.members.some((function (m) { 15078 return this.members.some((function (m) {
15538 return (m instanceof MethodMember); 15079 return (m instanceof MethodMember);
15539 }) 15080 })
15540 ); 15081 );
15541 } 15082 }
15542 MemberSet.prototype.add = function(member) { 15083 MemberSet.prototype.add = function(member) {
15543 return this.members.add(member); 15084 return this.members.add(member);
15544 } 15085 }
15545 MemberSet.prototype.get$isStatic = function() { 15086 MemberSet.prototype.get$isStatic = function() {
15546 return this.members.length == 1 && $notnull_bool(this.members.$index(0).get$is Static()); 15087 return this.members.length == 1 && this.members.$index(0).get$isStatic();
15547 } 15088 }
15548 MemberSet.prototype.get$isOperator = function() { 15089 MemberSet.prototype.get$isOperator = function() {
15549 return this.members.$index(0).get$isOperator(); 15090 return this.members.$index(0).get$isOperator();
15550 } 15091 }
15551 MemberSet.prototype.canInvoke = function(context, args) { 15092 MemberSet.prototype.canInvoke = function(context, args) {
15552 return this.members.some((function (m) { 15093 return this.members.some((function (m) {
15553 return m.canInvoke$2(context, args); 15094 return m.canInvoke$2(context, args);
15554 }) 15095 })
15555 ); 15096 );
15556 } 15097 }
15557 MemberSet.prototype._makeError = function(node, target, action) { 15098 MemberSet.prototype._makeError = function(node, target, action) {
15558 if (!$notnull_bool(target.type.get$isVar())) { 15099 if (!target.type.get$isVar()) {
15559 world.warning(('could not find applicable ' + action + ' for "' + this.name + '"'), node.span); 15100 world.warning(('could not find applicable ' + action + ' for "' + this.name + '"'), node.span);
15560 } 15101 }
15561 return new Value(world.varType, ('' + target.code + '.' + this.jsname + '() /* no applicable ' + action + '*/'), node.span, true); 15102 return new Value(world.varType, ('' + target.code + '.' + this.jsname + '() /* no applicable ' + action + '*/'), node.span, true);
15562 } 15103 }
15563 MemberSet.prototype.get$treatAsField = function() { 15104 MemberSet.prototype.get$treatAsField = function() {
15564 if (this._treatAsField == null) { 15105 if (this._treatAsField == null) {
15565 this._treatAsField = true; 15106 this._treatAsField = true;
15566 var $list = this.members; 15107 var $list = this.members;
15567 for (var $i = 0;$i < $list.length; $i++) { 15108 for (var $i = 0;$i < $list.length; $i++) {
15568 var member = $list.$index($i); 15109 var member = $list.$index($i);
15569 if ($notnull_bool(member.get$requiresFieldSyntax())) { 15110 if (member.get$requiresFieldSyntax()) {
15570 this._treatAsField = true; 15111 this._treatAsField = true;
15571 break; 15112 break;
15572 } 15113 }
15573 if ($notnull_bool(member.get$prefersPropertySyntax())) { 15114 if (member.get$prefersPropertySyntax()) {
15574 this._treatAsField = false; 15115 this._treatAsField = false;
15575 } 15116 }
15576 } 15117 }
15577 var $list = this.members; 15118 var $list = this.members;
15578 for (var $i = 0;$i < $list.length; $i++) { 15119 for (var $i = 0;$i < $list.length; $i++) {
15579 var member = $list.$index($i); 15120 var member = $list.$index($i);
15580 if ($notnull_bool(this._treatAsField)) { 15121 if (this._treatAsField) {
15581 member.provideFieldSyntax$0(); 15122 member.provideFieldSyntax$0();
15582 } 15123 }
15583 else { 15124 else {
15584 member.providePropertySyntax$0(); 15125 member.providePropertySyntax$0();
15585 } 15126 }
15586 } 15127 }
15587 } 15128 }
15588 return this._treatAsField; 15129 return this._treatAsField;
15589 } 15130 }
15590 MemberSet.prototype._get = function(context, node, target, isDynamic) { 15131 MemberSet.prototype._get = function(context, node, target, isDynamic) {
(...skipping 10 matching lines...) Expand all
15601 var returnValue = null; 15142 var returnValue = null;
15602 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) { 15143 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) {
15603 var member = $i.next$0(); 15144 var member = $i.next$0();
15604 var value = member._get(context, node, target, true); 15145 var value = member._get(context, node, target, true);
15605 returnValue = this._tryUnion(returnValue, value, node); 15146 returnValue = this._tryUnion(returnValue, value, node);
15606 } 15147 }
15607 if (returnValue == null) { 15148 if (returnValue == null) {
15608 return this._makeError(node, target, 'getter'); 15149 return this._makeError(node, target, 'getter');
15609 } 15150 }
15610 if (returnValue.code == null) { 15151 if (returnValue.code == null) {
15611 if ($notnull_bool(this.get$treatAsField())) { 15152 if (this.get$treatAsField()) {
15612 return new Value(returnValue.type, ('' + target.code + '.' + this.jsname + ''), node.span, true); 15153 return new Value(returnValue.type, ('' + target.code + '.' + this.jsname + ''), node.span, true);
15613 } 15154 }
15614 else { 15155 else {
15615 return new Value(returnValue.type, ('' + target.code + '.get\$' + this.jsn ame + '()'), node.span, true); 15156 return new Value(returnValue.type, ('' + target.code + '.get\$' + this.jsn ame + '()'), node.span, true);
15616 } 15157 }
15617 } 15158 }
15618 return returnValue; 15159 return returnValue;
15619 } 15160 }
15620 MemberSet.prototype._set = function(context, node, target, value, isDynamic) { 15161 MemberSet.prototype._set = function(context, node, target, value, isDynamic) {
15621 if (this.members.length == 1) { 15162 if (this.members.length == 1) {
15622 return this.members.$index(0)._set(context, node, target, value, isDynamic); 15163 return this.members.$index(0)._set(context, node, target, value, isDynamic);
15623 } 15164 }
15624 var targets = this.members.filter((function (m) { 15165 var targets = this.members.filter((function (m) {
15625 return m.get$canSet(); 15166 return m.get$canSet();
15626 }) 15167 })
15627 ); 15168 );
15628 if (targets.length == 1) { 15169 if (targets.length == 1) {
15629 return targets.$index(0)._set(context, node, target, value, isDynamic); 15170 return targets.$index(0)._set(context, node, target, value, isDynamic);
15630 } 15171 }
15631 var returnValue = null; 15172 var returnValue = null;
15632 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) { 15173 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) {
15633 var member = $i.next$0(); 15174 var member = $i.next$0();
15634 var res = member._set(context, node, target, value, true); 15175 var res = member._set(context, node, target, value, true);
15635 returnValue = this._tryUnion(returnValue, res, node); 15176 returnValue = this._tryUnion(returnValue, res, node);
15636 } 15177 }
15637 if (returnValue == null) { 15178 if (returnValue == null) {
15638 return this._makeError(node, target, 'setter'); 15179 return this._makeError(node, target, 'setter');
15639 } 15180 }
15640 if (returnValue.code == null) { 15181 if (returnValue.code == null) {
15641 if ($notnull_bool(this.get$treatAsField())) { 15182 if (this.get$treatAsField()) {
15642 return new Value(returnValue.type, ('' + target.code + '.' + this.jsname + ' = ' + value.code + ''), node.span, true); 15183 return new Value(returnValue.type, ('' + target.code + '.' + this.jsname + ' = ' + value.code + ''), node.span, true);
15643 } 15184 }
15644 else { 15185 else {
15645 return new Value(returnValue.type, ('' + target.code + '.set\$' + this.jsn ame + '(' + value.code + ')'), node.span, true); 15186 return new Value(returnValue.type, ('' + target.code + '.set\$' + this.jsn ame + '(' + value.code + ')'), node.span, true);
15646 } 15187 }
15647 } 15188 }
15648 return returnValue; 15189 return returnValue;
15649 } 15190 }
15650 MemberSet.prototype.invoke = function(context, node, target, args, isDynamic) { 15191 MemberSet.prototype.invoke = function(context, node, target, args, isDynamic) {
15651 var $0; 15192 if (this.isVar && !this.get$isOperator()) {
15652 if ($notnull_bool(this.isVar) && !$notnull_bool(this.get$isOperator())) {
15653 return this.invokeOnVar(context, node, target, args); 15193 return this.invokeOnVar(context, node, target, args);
15654 } 15194 }
15655 if (this.members.length == 1) { 15195 if (this.members.length == 1) {
15656 return (($0 = this.members.$index(0).invoke$5(context, node, target, args, i sDynamic)) && $0.is$Value()); 15196 return this.members.$index(0).invoke$5(context, node, target, args, isDynami c);
15657 } 15197 }
15658 var targets = this.members.filter((function (m) { 15198 var targets = this.members.filter((function (m) {
15659 return m.canInvoke$2(context, args); 15199 return m.canInvoke$2(context, args);
15660 }) 15200 })
15661 ); 15201 );
15662 if (targets.length == 1) { 15202 if (targets.length == 1) {
15663 return (($0 = targets.$index(0).invoke$5(context, node, target, args, isDyna mic)) && $0.is$Value()); 15203 return targets.$index(0).invoke$5(context, node, target, args, isDynamic);
15664 } 15204 }
15665 var returnValue = null; 15205 var returnValue = null;
15666 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) { 15206 for (var $i = targets.iterator$0(); $i.hasNext$0(); ) {
15667 var member = $i.next$0(); 15207 var member = $i.next$0();
15668 var res = member.invoke$4$isDynamic(context, node, target, args, true); 15208 var res = member.invoke$4$isDynamic(context, node, target, args, true);
15669 returnValue = this._tryUnion(returnValue, (res && res.is$Value()), node); 15209 returnValue = this._tryUnion(returnValue, res, node);
15670 } 15210 }
15671 if (returnValue == null) { 15211 if (returnValue == null) {
15672 return this._makeError(node, target, 'method'); 15212 return this._makeError(node, target, 'method');
15673 } 15213 }
15674 if (returnValue.code == null) { 15214 if (returnValue.code == null) {
15675 if (this.name == '\$call') { 15215 if (this.name == '\$call') {
15676 return target._varCall(context, args); 15216 return target._varCall(context, args);
15677 } 15217 }
15678 else if ($notnull_bool(this.get$isOperator())) { 15218 else if (this.get$isOperator()) {
15679 return target.invokeSpecial(this.name, args, returnValue.type); 15219 return target.invokeSpecial(this.name, args, returnValue.type);
15680 } 15220 }
15681 else { 15221 else {
15682 return this.invokeOnVar(context, node, target, args); 15222 return this.invokeOnVar(context, node, target, args);
15683 } 15223 }
15684 } 15224 }
15685 return returnValue; 15225 return returnValue;
15686 } 15226 }
15687 MemberSet.prototype.invokeOnVar = function(context, node, target, args) { 15227 MemberSet.prototype.invokeOnVar = function(context, node, target, args) {
15688 var member = this.getVarMember(context, node, args); 15228 var member = this.getVarMember(context, node, args);
15689 return member.invoke$4(context, node, target, args); 15229 return member.invoke$4(context, node, target, args);
15690 } 15230 }
15691 MemberSet.prototype._tryUnion = function(x, y, node) { 15231 MemberSet.prototype._tryUnion = function(x, y, node) {
15692 if (x == null) return y; 15232 if (x == null) return y;
15693 var type = lang_Type.union(x.type, y.type); 15233 var type = lang_Type.union(x.type, y.type);
15694 if (x.code == y.code) { 15234 if (x.code == y.code) {
15695 if ($notnull_bool($eq(type, x.type))) { 15235 if ($eq(type, x.type)) {
15696 return x; 15236 return x;
15697 } 15237 }
15698 else if ($notnull_bool(x.get$isConst()) || $notnull_bool(y.get$isConst())) { 15238 else if (x.get$isConst() || y.get$isConst()) {
15699 world.internalError("unexpected: union of const values "); 15239 world.internalError("unexpected: union of const values ");
15700 } 15240 }
15701 else { 15241 else {
15702 var ret = new Value(type, x.code, node.span, true); 15242 var ret = new Value(type, x.code, node.span, true);
15703 ret.isSuper = $notnull_bool(x.isSuper) && $notnull_bool(y.isSuper); 15243 ret.isSuper = x.isSuper && y.isSuper;
15704 ret.needsTemp = $notnull_bool(x.needsTemp) || $notnull_bool(y.needsTemp); 15244 ret.needsTemp = x.needsTemp || y.needsTemp;
15705 ret.isType = $notnull_bool(x.isType) && $notnull_bool(y.isType); 15245 ret.isType = x.isType && y.isType;
15706 return (ret && ret.is$Value()); 15246 return ret;
15707 } 15247 }
15708 } 15248 }
15709 else { 15249 else {
15710 return new Value(type, null, node.span, true); 15250 return new Value(type, null, node.span, true);
15711 } 15251 }
15712 } 15252 }
15713 MemberSet.prototype.getVarMember = function(context, node, args) { 15253 MemberSet.prototype.getVarMember = function(context, node, args) {
15714 if (world.objectType.varStubs == null) { 15254 if (world.objectType.varStubs == null) {
15715 world.objectType.varStubs = $map([]); 15255 world.objectType.varStubs = $map([]);
15716 } 15256 }
15717 var stubName = _getCallStubName(this.name, args); 15257 var stubName = _getCallStubName(this.name, args);
15718 var stub = world.objectType.varStubs.$index(stubName); 15258 var stub = world.objectType.varStubs.$index(stubName);
15719 if ($notnull_bool(stub == null)) { 15259 if (stub == null) {
15720 var mset = context.findMembers(this.name).members; 15260 var mset = context.findMembers(this.name).members;
15721 var targets = mset.filter((function (m) { 15261 var targets = mset.filter((function (m) {
15722 return m.canInvoke$2(context, args); 15262 return m.canInvoke$2(context, args);
15723 }) 15263 })
15724 ); 15264 );
15725 var returnType = reduce(map((targets && targets.is$Iterable()), (function (t ) { 15265 var returnType = reduce(map(targets, (function (t) {
15726 return t.get$returnType(); 15266 return t.get$returnType();
15727 }) 15267 })
15728 ), lang_Type.union); 15268 ), lang_Type.union);
15729 stub = new VarMethodSet($assert_String(stubName), targets, args, returnType) ; 15269 stub = new VarMethodSet(stubName, targets, args, returnType);
15730 world.objectType.varStubs.$setindex(stubName, stub); 15270 world.objectType.varStubs.$setindex(stubName, stub);
15731 } 15271 }
15732 return (stub && stub.is$VarMember()); 15272 return stub;
15733 } 15273 }
15734 MemberSet.prototype._get$3 = function($0, $1, $2) { 15274 MemberSet.prototype._get$3 = function($0, $1, $2) {
15735 return this._get(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), false); 15275 return this._get($0, $1, $2, false);
15736 }; 15276 };
15737 MemberSet.prototype._set$4 = function($0, $1, $2, $3) { 15277 MemberSet.prototype._set$4 = function($0, $1, $2, $3) {
15738 return this._set(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ( $2 && $2.is$Value()), ($3 && $3.is$Value()), false); 15278 return this._set($0, $1, $2, $3, false);
15739 }; 15279 };
15740 MemberSet.prototype.add$1 = function($0) { 15280 MemberSet.prototype.add$1 = function($0) {
15741 return this.add(($0 && $0.is$Member())); 15281 return this.add($0);
15742 }; 15282 };
15743 MemberSet.prototype.canInvoke$2 = function($0, $1) { 15283 MemberSet.prototype.canInvoke$2 = function($0, $1) {
15744 return this.canInvoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$Arguments( ))); 15284 return this.canInvoke($0, $1);
15745 }; 15285 };
15746 MemberSet.prototype.invoke$4 = function($0, $1, $2, $3) { 15286 MemberSet.prototype.invoke$4 = function($0, $1, $2, $3) {
15747 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), false); 15287 return this.invoke($0, $1, $2, $3, false);
15748 }; 15288 };
15749 MemberSet.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 15289 MemberSet.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
15750 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 15290 return this.invoke($0, $1, $2, $3, isDynamic);
15751 }; 15291 };
15752 MemberSet.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 15292 MemberSet.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
15753 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments()), $assert_bool($4)); 15293 return this.invoke($0, $1, $2, $3, $4);
15754 }; 15294 };
15755 MemberSet.prototype.toString$0 = function() { 15295 MemberSet.prototype.toString$0 = function() {
15756 return this.toString(); 15296 return this.toString();
15757 }; 15297 };
15758 // ********** Code for FactoryMap ************** 15298 // ********** Code for FactoryMap **************
15759 function FactoryMap() { 15299 function FactoryMap() {
15760 this.factories = $map([]); 15300 this.factories = $map([]);
15761 // Initializers done 15301 // Initializers done
15762 } 15302 }
15763 FactoryMap.prototype.getFactoriesFor = function(typeName) { 15303 FactoryMap.prototype.getFactoriesFor = function(typeName) {
15764 var ret = this.factories.$index(typeName); 15304 var ret = this.factories.$index(typeName);
15765 if ($notnull_bool(ret == null)) { 15305 if (ret == null) {
15766 ret = $map([]); 15306 ret = $map([]);
15767 this.factories.$setindex(typeName, ret); 15307 this.factories.$setindex(typeName, ret);
15768 } 15308 }
15769 return (ret && ret.is$Map$String$Member()); 15309 return ret;
15770 } 15310 }
15771 FactoryMap.prototype.addFactory = function(typeName, name, member) { 15311 FactoryMap.prototype.addFactory = function(typeName, name, member) {
15772 this.getFactoriesFor(typeName).$setindex(name, member); 15312 this.getFactoriesFor(typeName).$setindex(name, member);
15773 } 15313 }
15774 FactoryMap.prototype.getFactory = function(typeName, name) { 15314 FactoryMap.prototype.getFactory = function(typeName, name) {
15775 var $0; 15315 return this.getFactoriesFor(typeName).$index(name);
15776 return (($0 = this.getFactoriesFor(typeName).$index(name)) && $0.is$Member());
15777 } 15316 }
15778 FactoryMap.prototype.forEach = function(f) { 15317 FactoryMap.prototype.forEach = function(f) {
15779 this.factories.forEach((function (_, constructors) { 15318 this.factories.forEach((function (_, constructors) {
15780 constructors.forEach((function (_, member) { 15319 constructors.forEach((function (_, member) {
15781 f(member); 15320 f(member);
15782 }) 15321 })
15783 ); 15322 );
15784 }) 15323 })
15785 ); 15324 );
15786 } 15325 }
15787 FactoryMap.prototype.getFactory$2 = function($0, $1) { 15326 FactoryMap.prototype.getFactory$2 = function($0, $1) {
15788 return this.getFactory($assert_String($0), $assert_String($1)); 15327 return this.getFactory($0, $1);
15789 }; 15328 };
15790 // ********** Code for lang_Token ************** 15329 // ********** Code for lang_Token **************
15791 function lang_Token(kind, source, start, end) { 15330 function lang_Token(kind, source, start, end) {
15792 this.kind = kind; 15331 this.kind = kind;
15793 this.source = source; 15332 this.source = source;
15794 this.start = start; 15333 this.start = start;
15795 this.end = end; 15334 this.end = end;
15796 // Initializers done 15335 // Initializers done
15797 } 15336 }
15798 lang_Token.prototype.get$text = function() { 15337 lang_Token.prototype.get$text = function() {
15799 return this.source.get$text().substring(this.start, this.end); 15338 return this.source.get$text().substring(this.start, this.end);
15800 } 15339 }
15801 lang_Token.prototype.toString = function() { 15340 lang_Token.prototype.toString = function() {
15802 var kindText = TokenKind.kindToString(this.kind); 15341 var kindText = TokenKind.kindToString(this.kind);
15803 var actualText = this.get$text(); 15342 var actualText = this.get$text();
15804 if ($notnull_bool($ne(kindText, actualText))) { 15343 if ($ne(kindText, actualText)) {
15805 if (actualText.length > 10) { 15344 if (actualText.length > 10) {
15806 actualText = actualText.substring$2(0, 8) + '...'; 15345 actualText = actualText.substring$2(0, 8) + '...';
15807 } 15346 }
15808 return ('' + kindText + '(' + actualText + ')'); 15347 return ('' + kindText + '(' + actualText + ')');
15809 } 15348 }
15810 else { 15349 else {
15811 return $assert_String(kindText); 15350 return kindText;
15812 } 15351 }
15813 } 15352 }
15814 lang_Token.prototype.get$span = function() { 15353 lang_Token.prototype.get$span = function() {
15815 return new SourceSpan(this.source, this.start, this.end); 15354 return new SourceSpan(this.source, this.start, this.end);
15816 } 15355 }
15817 lang_Token.prototype.toString$0 = function() { 15356 lang_Token.prototype.toString$0 = function() {
15818 return this.toString(); 15357 return this.toString();
15819 }; 15358 };
15820 // ********** Code for SourceFile ************** 15359 // ********** Code for SourceFile **************
15821 function SourceFile(filename, _text) { 15360 function SourceFile(filename, _text) {
15822 this.filename = filename; 15361 this.filename = filename;
15823 this._text = _text; 15362 this._text = _text;
15824 // Initializers done 15363 // Initializers done
15825 } 15364 }
15826 SourceFile.prototype.is$SourceFile = function(){return this;};
15827 SourceFile.prototype.is$Comparable = function(){return this;};
15828 SourceFile.prototype.get$text = function() { 15365 SourceFile.prototype.get$text = function() {
15829 return this._text; 15366 return this._text;
15830 } 15367 }
15831 SourceFile.prototype.get$lineStarts = function() { 15368 SourceFile.prototype.get$lineStarts = function() {
15832 if (this._lineStarts == null) { 15369 if (this._lineStarts == null) {
15833 var starts = [0]; 15370 var starts = [0];
15834 var index = 0; 15371 var index = 0;
15835 while (index < this.get$text().length) { 15372 while (index < this.get$text().length) {
15836 index = this.get$text().indexOf('\n', $assert_num(index)) + 1; 15373 index = this.get$text().indexOf('\n', index) + 1;
15837 if (index <= 0) break; 15374 if (index <= 0) break;
15838 starts.add$1(index); 15375 starts.add$1(index);
15839 } 15376 }
15840 starts.add$1(this.get$text().length + 1); 15377 starts.add$1(this.get$text().length + 1);
15841 this._lineStarts = (starts && starts.is$List$int()); 15378 this._lineStarts = starts;
15842 } 15379 }
15843 return this._lineStarts; 15380 return this._lineStarts;
15844 } 15381 }
15845 SourceFile.prototype.getLine = function(position) { 15382 SourceFile.prototype.getLine = function(position) {
15846 var starts = this.get$lineStarts(); 15383 var starts = this.get$lineStarts();
15847 for (var i = 0; 15384 for (var i = 0;
15848 i < starts.length; i++) { 15385 i < starts.length; i++) {
15849 if (starts.$index(i) > position) return i - 1; 15386 if (starts.$index(i) > position) return i - 1;
15850 } 15387 }
15851 world.internalError('bad position'); 15388 world.internalError('bad position');
15852 } 15389 }
15853 SourceFile.prototype.getColumn = function(line, position) { 15390 SourceFile.prototype.getColumn = function(line, position) {
15854 return position - $assert_num(this.get$lineStarts().$index(line)); 15391 return position - this.get$lineStarts().$index(line);
15855 } 15392 }
15856 SourceFile.prototype.getLocationMessage = function(message, start, end, includeT ext) { 15393 SourceFile.prototype.getLocationMessage = function(message, start, end, includeT ext) {
15857 var line = this.getLine(start); 15394 var line = this.getLine(start);
15858 var column = this.getColumn($assert_num(line), start); 15395 var column = this.getColumn(line, start);
15859 var buf = new StringBufferImpl(('' + this.filename + ':' + (line + 1) + ':' + (column + 1) + ': ' + message + '')); 15396 var buf = new StringBufferImpl(('' + this.filename + ':' + (line + 1) + ':' + (column + 1) + ': ' + message + ''));
15860 if ($notnull_bool(includeText)) { 15397 if (includeText) {
15861 buf.add$1('\n'); 15398 buf.add$1('\n');
15862 var textLine; 15399 var textLine;
15863 if ((line + 2) < this._lineStarts.length) { 15400 if ((line + 2) < this._lineStarts.length) {
15864 textLine = this.get$text().substring($assert_num(this._lineStarts.$index(l ine)), $assert_num(this._lineStarts.$index(line + 1))); 15401 textLine = this.get$text().substring(this._lineStarts.$index(line), this._ lineStarts.$index(line + 1));
15865 } 15402 }
15866 else { 15403 else {
15867 textLine = this.get$text().substring($assert_num(this._lineStarts.$index(l ine))) + '\n'; 15404 textLine = this.get$text().substring(this._lineStarts.$index(line)) + '\n' ;
15868 } 15405 }
15869 buf.add$1(textLine); 15406 buf.add$1(textLine);
15870 var i = 0; 15407 var i = 0;
15871 for (; i < $assert_num(column); i++) { 15408 for (; i < column; i++) {
15872 buf.add$1(' '); 15409 buf.add$1(' ');
15873 } 15410 }
15874 var toColumn = Math.min($assert_num(column + (end - start)), textLine.length ); 15411 var toColumn = Math.min(column + (end - start), textLine.length);
15875 for (; i < toColumn; i++) { 15412 for (; i < toColumn; i++) {
15876 buf.add$1('^'); 15413 buf.add$1('^');
15877 } 15414 }
15878 } 15415 }
15879 return buf.toString$0(); 15416 return buf.toString$0();
15880 } 15417 }
15881 SourceFile.prototype.compareTo = function(other) { 15418 SourceFile.prototype.compareTo = function(other) {
15882 if (this.orderInLibrary != null && other.orderInLibrary != null) { 15419 if (this.orderInLibrary != null && other.orderInLibrary != null) {
15883 return this.orderInLibrary - other.orderInLibrary; 15420 return this.orderInLibrary - other.orderInLibrary;
15884 } 15421 }
15885 else { 15422 else {
15886 return this.filename.compareTo(other.filename); 15423 return this.filename.compareTo(other.filename);
15887 } 15424 }
15888 } 15425 }
15889 SourceFile.prototype.compareTo$1 = function($0) { 15426 SourceFile.prototype.compareTo$1 = function($0) {
15890 return this.compareTo(($0 && $0.is$SourceFile())); 15427 return this.compareTo($0);
15891 }; 15428 };
15892 // ********** Code for SourceSpan ************** 15429 // ********** Code for SourceSpan **************
15893 function SourceSpan(file, start, end) { 15430 function SourceSpan(file, start, end) {
15894 this.file = file; 15431 this.file = file;
15895 this.start = start; 15432 this.start = start;
15896 this.end = end; 15433 this.end = end;
15897 // Initializers done 15434 // Initializers done
15898 } 15435 }
15899 SourceSpan.prototype.is$SourceSpan = function(){return this;};
15900 SourceSpan.prototype.is$Comparable = function(){return this;};
15901 SourceSpan.prototype.get$text = function() { 15436 SourceSpan.prototype.get$text = function() {
15902 return this.file.get$text().substring(this.start, this.end); 15437 return this.file.get$text().substring(this.start, this.end);
15903 } 15438 }
15904 SourceSpan.prototype.toMessageString = function(message) { 15439 SourceSpan.prototype.toMessageString = function(message) {
15905 return this.file.getLocationMessage(message, this.start, this.end, true); 15440 return this.file.getLocationMessage(message, this.start, this.end, true);
15906 } 15441 }
15907 SourceSpan.prototype.get$locationText = function() { 15442 SourceSpan.prototype.get$locationText = function() {
15908 var line = this.file.getLine(this.start); 15443 var line = this.file.getLine(this.start);
15909 var column = this.file.getColumn($assert_num(line), this.start); 15444 var column = this.file.getColumn(line, this.start);
15910 return ('' + this.file.filename + ':' + (line + 1) + ':' + (column + 1) + ''); 15445 return ('' + this.file.filename + ':' + (line + 1) + ':' + (column + 1) + '');
15911 } 15446 }
15912 SourceSpan.prototype.compareTo = function(other) { 15447 SourceSpan.prototype.compareTo = function(other) {
15913 if ($eq(this.file, other.file)) { 15448 if ($eq(this.file, other.file)) {
15914 var d = this.start - other.start; 15449 var d = this.start - other.start;
15915 return d == 0 ? (this.end - other.end) : d; 15450 return d == 0 ? (this.end - other.end) : d;
15916 } 15451 }
15917 return this.file.compareTo(other.file); 15452 return this.file.compareTo(other.file);
15918 } 15453 }
15919 SourceSpan.prototype.compareTo$1 = function($0) { 15454 SourceSpan.prototype.compareTo$1 = function($0) {
15920 return this.compareTo(($0 && $0.is$SourceSpan())); 15455 return this.compareTo($0);
15921 }; 15456 };
15922 // ********** Code for InterpStack ************** 15457 // ********** Code for InterpStack **************
15923 function InterpStack(previous, quote, isMultiline) { 15458 function InterpStack(previous, quote, isMultiline) {
15924 this.previous = previous; 15459 this.previous = previous;
15925 this.quote = quote; 15460 this.quote = quote;
15926 this.isMultiline = isMultiline; 15461 this.isMultiline = isMultiline;
15927 this.depth = -1; 15462 this.depth = -1;
15928 // Initializers done 15463 // Initializers done
15929 } 15464 }
15930 InterpStack.prototype.is$InterpStack = function(){return this;};
15931 InterpStack.prototype.pop = function() { 15465 InterpStack.prototype.pop = function() {
15932 return this.previous; 15466 return this.previous;
15933 } 15467 }
15934 InterpStack.push = function(stack, quote, isMultiline) { 15468 InterpStack.push = function(stack, quote, isMultiline) {
15935 var newStack = new InterpStack(stack, quote, isMultiline); 15469 var newStack = new InterpStack(stack, quote, isMultiline);
15936 if (stack != null) newStack.previous = stack; 15470 if (stack != null) newStack.previous = stack;
15937 return (newStack && newStack.is$InterpStack()); 15471 return newStack;
15938 } 15472 }
15939 InterpStack.prototype.next$0 = function() { 15473 InterpStack.prototype.next$0 = function() {
15940 return this.next(); 15474 return this.next();
15941 }; 15475 };
15942 // ********** Code for TokenizerBase ************** 15476 // ********** Code for TokenizerBase **************
15943 function TokenizerBase(_source, _skipWhitespace, _index) { 15477 function TokenizerBase(_source, _skipWhitespace, _index) {
15944 this._source = _source; 15478 this._source = _source;
15945 this._skipWhitespace = _skipWhitespace; 15479 this._skipWhitespace = _skipWhitespace;
15946 this._lang_index = _index; 15480 this._lang_index = _index;
15947 // Initializers done 15481 // Initializers done
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
15979 } 15513 }
15980 } 15514 }
15981 TokenizerBase.prototype._finishToken = function(kind) { 15515 TokenizerBase.prototype._finishToken = function(kind) {
15982 return new lang_Token(kind, this._source, this._startIndex, this._lang_index); 15516 return new lang_Token(kind, this._source, this._startIndex, this._lang_index);
15983 } 15517 }
15984 TokenizerBase.prototype._errorToken = function() { 15518 TokenizerBase.prototype._errorToken = function() {
15985 return this._finishToken(65/*TokenKind.ERROR*/); 15519 return this._finishToken(65/*TokenKind.ERROR*/);
15986 } 15520 }
15987 TokenizerBase.prototype.finishWhitespace = function() { 15521 TokenizerBase.prototype.finishWhitespace = function() {
15988 while (this._lang_index < this._text.length) { 15522 while (this._lang_index < this._text.length) {
15989 if (!$notnull_bool(TokenizerHelpers.isWhitespace(this._text.charCodeAt(this. _lang_index++)))) { 15523 if (!TokenizerHelpers.isWhitespace(this._text.charCodeAt(this._lang_index++) )) {
15990 this._lang_index--; 15524 this._lang_index--;
15991 if ($notnull_bool(this._skipWhitespace)) { 15525 if (this._skipWhitespace) {
15992 return this.next(); 15526 return this.next();
15993 } 15527 }
15994 else { 15528 else {
15995 return this._finishToken(63/*TokenKind.WHITESPACE*/); 15529 return this._finishToken(63/*TokenKind.WHITESPACE*/);
15996 } 15530 }
15997 } 15531 }
15998 } 15532 }
15999 return this._finishToken(1/*TokenKind.END_OF_FILE*/); 15533 return this._finishToken(1/*TokenKind.END_OF_FILE*/);
16000 } 15534 }
16001 TokenizerBase.prototype.finishHashBang = function() { 15535 TokenizerBase.prototype.finishHashBang = function() {
16002 while (true) { 15536 while (true) {
16003 var ch = this._nextChar(); 15537 var ch = this._nextChar();
16004 if (ch == 0 || ch == 10 || ch == 13) { 15538 if (ch == 0 || ch == 10 || ch == 13) {
16005 return this._finishToken(13/*TokenKind.HASHBANG*/); 15539 return this._finishToken(13/*TokenKind.HASHBANG*/);
16006 } 15540 }
16007 } 15541 }
16008 } 15542 }
16009 TokenizerBase.prototype.finishSingleLineComment = function() { 15543 TokenizerBase.prototype.finishSingleLineComment = function() {
16010 while (true) { 15544 while (true) {
16011 var ch = this._nextChar(); 15545 var ch = this._nextChar();
16012 if (ch == 0 || ch == 10 || ch == 13) { 15546 if (ch == 0 || ch == 10 || ch == 13) {
16013 if ($notnull_bool(this._skipWhitespace)) { 15547 if (this._skipWhitespace) {
16014 return this.next(); 15548 return this.next();
16015 } 15549 }
16016 else { 15550 else {
16017 return this._finishToken(64/*TokenKind.COMMENT*/); 15551 return this._finishToken(64/*TokenKind.COMMENT*/);
16018 } 15552 }
16019 } 15553 }
16020 } 15554 }
16021 } 15555 }
16022 TokenizerBase.prototype.finishMultiLineComment = function() { 15556 TokenizerBase.prototype.finishMultiLineComment = function() {
16023 while (true) { 15557 while (true) {
16024 var ch = this._nextChar(); 15558 var ch = this._nextChar();
16025 if (ch == 0) { 15559 if (ch == 0) {
16026 return this._finishToken(67/*TokenKind.INCOMPLETE_COMMENT*/); 15560 return this._finishToken(67/*TokenKind.INCOMPLETE_COMMENT*/);
16027 } 15561 }
16028 else if (ch == 42) { 15562 else if (ch == 42) {
16029 if ($notnull_bool(this._maybeEatChar(47))) { 15563 if (this._maybeEatChar(47)) {
16030 if ($notnull_bool(this._skipWhitespace)) { 15564 if (this._skipWhitespace) {
16031 return this.next(); 15565 return this.next();
16032 } 15566 }
16033 else { 15567 else {
16034 return this._finishToken(64/*TokenKind.COMMENT*/); 15568 return this._finishToken(64/*TokenKind.COMMENT*/);
16035 } 15569 }
16036 } 15570 }
16037 } 15571 }
16038 } 15572 }
16039 return this._errorToken(); 15573 return this._errorToken();
16040 } 15574 }
16041 TokenizerBase.prototype.eatDigits = function() { 15575 TokenizerBase.prototype.eatDigits = function() {
16042 while (this._lang_index < this._text.length) { 15576 while (this._lang_index < this._text.length) {
16043 if ($notnull_bool(TokenizerHelpers.isDigit(this._text.charCodeAt(this._lang_ index)))) { 15577 if (TokenizerHelpers.isDigit(this._text.charCodeAt(this._lang_index))) {
16044 this._lang_index++; 15578 this._lang_index++;
16045 } 15579 }
16046 else { 15580 else {
16047 return; 15581 return;
16048 } 15582 }
16049 } 15583 }
16050 } 15584 }
16051 TokenizerBase.prototype.eatHexDigits = function() { 15585 TokenizerBase.prototype.eatHexDigits = function() {
16052 while (this._lang_index < this._text.length) { 15586 while (this._lang_index < this._text.length) {
16053 if ($notnull_bool(TokenizerHelpers.isHexDigit(this._text.charCodeAt(this._la ng_index)))) { 15587 if (TokenizerHelpers.isHexDigit(this._text.charCodeAt(this._lang_index))) {
16054 this._lang_index++; 15588 this._lang_index++;
16055 } 15589 }
16056 else { 15590 else {
16057 return; 15591 return;
16058 } 15592 }
16059 } 15593 }
16060 } 15594 }
16061 TokenizerBase.prototype.maybeEatHexDigit = function() { 15595 TokenizerBase.prototype.maybeEatHexDigit = function() {
16062 if (this._lang_index < this._text.length && $notnull_bool(TokenizerHelpers.isH exDigit(this._text.charCodeAt(this._lang_index)))) { 15596 if (this._lang_index < this._text.length && TokenizerHelpers.isHexDigit(this._ text.charCodeAt(this._lang_index))) {
16063 this._lang_index++; 15597 this._lang_index++;
16064 return true; 15598 return true;
16065 } 15599 }
16066 return false; 15600 return false;
16067 } 15601 }
16068 TokenizerBase.prototype.finishHex = function() { 15602 TokenizerBase.prototype.finishHex = function() {
16069 this.eatHexDigits(); 15603 this.eatHexDigits();
16070 return this._finishToken(61/*TokenKind.HEX_INTEGER*/); 15604 return this._finishToken(61/*TokenKind.HEX_INTEGER*/);
16071 } 15605 }
16072 TokenizerBase.prototype.finishNumber = function() { 15606 TokenizerBase.prototype.finishNumber = function() {
16073 this.eatDigits(); 15607 this.eatDigits();
16074 if (this._peekChar() == 46) { 15608 if (this._peekChar() == 46) {
16075 this._nextChar(); 15609 this._nextChar();
16076 if ($notnull_bool(TokenizerHelpers.isDigit(this._peekChar()))) { 15610 if (TokenizerHelpers.isDigit(this._peekChar())) {
16077 this.eatDigits(); 15611 this.eatDigits();
16078 return this.finishNumberExtra(62/*TokenKind.DOUBLE*/); 15612 return this.finishNumberExtra(62/*TokenKind.DOUBLE*/);
16079 } 15613 }
16080 else { 15614 else {
16081 this._lang_index--; 15615 this._lang_index--;
16082 } 15616 }
16083 } 15617 }
16084 return this.finishNumberExtra(60/*TokenKind.INTEGER*/); 15618 return this.finishNumberExtra(60/*TokenKind.INTEGER*/);
16085 } 15619 }
16086 TokenizerBase.prototype.finishNumberExtra = function(kind) { 15620 TokenizerBase.prototype.finishNumberExtra = function(kind) {
16087 if ($notnull_bool(this._maybeEatChar(101)) || $notnull_bool(this._maybeEatChar (69))) { 15621 if (this._maybeEatChar(101) || this._maybeEatChar(69)) {
16088 kind = 62/*TokenKind.DOUBLE*/; 15622 kind = 62/*TokenKind.DOUBLE*/;
16089 this._maybeEatChar(45); 15623 this._maybeEatChar(45);
16090 this._maybeEatChar(43); 15624 this._maybeEatChar(43);
16091 this.eatDigits(); 15625 this.eatDigits();
16092 } 15626 }
16093 if (this._peekChar() != 0 && $notnull_bool(TokenizerHelpers.isIdentifierStart( this._peekChar()))) { 15627 if (this._peekChar() != 0 && TokenizerHelpers.isIdentifierStart(this._peekChar ())) {
16094 this._nextChar(); 15628 this._nextChar();
16095 return this._errorToken(); 15629 return this._errorToken();
16096 } 15630 }
16097 return this._finishToken(kind); 15631 return this._finishToken(kind);
16098 } 15632 }
16099 TokenizerBase.prototype.finishMultilineString = function(quote) { 15633 TokenizerBase.prototype.finishMultilineString = function(quote) {
16100 while (true) { 15634 while (true) {
16101 var ch = this._nextChar(); 15635 var ch = this._nextChar();
16102 if (ch == 0) { 15636 if (ch == 0) {
16103 var kind = quote == 34 ? 68/*TokenKind.INCOMPLETE_MULTILINE_STRING_DQ*/ : 69/*TokenKind.INCOMPLETE_MULTILINE_STRING_SQ*/; 15637 var kind = quote == 34 ? 68/*TokenKind.INCOMPLETE_MULTILINE_STRING_DQ*/ : 69/*TokenKind.INCOMPLETE_MULTILINE_STRING_SQ*/;
16104 return this._finishToken(kind); 15638 return this._finishToken(kind);
16105 } 15639 }
16106 else if (ch == quote) { 15640 else if (ch == quote) {
16107 if ($notnull_bool(this._maybeEatChar(quote))) { 15641 if (this._maybeEatChar(quote)) {
16108 if ($notnull_bool(this._maybeEatChar(quote))) { 15642 if (this._maybeEatChar(quote)) {
16109 return this._finishToken(58/*TokenKind.STRING*/); 15643 return this._finishToken(58/*TokenKind.STRING*/);
16110 } 15644 }
16111 } 15645 }
16112 } 15646 }
16113 else if (ch == 36) { 15647 else if (ch == 36) {
16114 this._interpStack = InterpStack.push(this._interpStack, quote, true); 15648 this._interpStack = InterpStack.push(this._interpStack, quote, true);
16115 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/); 15649 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/);
16116 } 15650 }
16117 else if (ch == 92) { 15651 else if (ch == 92) {
16118 if (!$notnull_bool(this.eatEscapeSequence())) { 15652 if (!this.eatEscapeSequence()) {
16119 return this._errorToken(); 15653 return this._errorToken();
16120 } 15654 }
16121 } 15655 }
16122 } 15656 }
16123 } 15657 }
16124 TokenizerBase.prototype._finishOpenBrace = function() { 15658 TokenizerBase.prototype._finishOpenBrace = function() {
16125 var $0; 15659 var $0;
16126 if (this._interpStack != null) { 15660 if (this._interpStack != null) {
16127 if (this._interpStack.depth == -1) { 15661 if (this._interpStack.depth == -1) {
16128 this._interpStack.depth = 1; 15662 this._interpStack.depth = 1;
16129 } 15663 }
16130 else { 15664 else {
16131 $assert(this._interpStack.depth >= 0, "_interpStack.depth >= 0", "tokenize r.dart", 261, 16);
16132 ($0 = this._interpStack).depth = $0.depth + 1; 15665 ($0 = this._interpStack).depth = $0.depth + 1;
16133 } 15666 }
16134 } 15667 }
16135 return this._finishToken(6/*TokenKind.LBRACE*/); 15668 return this._finishToken(6/*TokenKind.LBRACE*/);
16136 } 15669 }
16137 TokenizerBase.prototype._finishCloseBrace = function() { 15670 TokenizerBase.prototype._finishCloseBrace = function() {
16138 var $0; 15671 var $0;
16139 if (this._interpStack != null) { 15672 if (this._interpStack != null) {
16140 ($0 = this._interpStack).depth = $0.depth - 1; 15673 ($0 = this._interpStack).depth = $0.depth - 1;
16141 $assert(this._interpStack.depth >= 0, "_interpStack.depth >= 0", "tokenizer. dart", 271, 14);
16142 } 15674 }
16143 return this._finishToken(7/*TokenKind.RBRACE*/); 15675 return this._finishToken(7/*TokenKind.RBRACE*/);
16144 } 15676 }
16145 TokenizerBase.prototype.finishString = function(quote) { 15677 TokenizerBase.prototype.finishString = function(quote) {
16146 if ($notnull_bool(this._maybeEatChar(quote))) { 15678 if (this._maybeEatChar(quote)) {
16147 if ($notnull_bool(this._maybeEatChar(quote))) { 15679 if (this._maybeEatChar(quote)) {
16148 return this.finishMultilineString(quote); 15680 return this.finishMultilineString(quote);
16149 } 15681 }
16150 else { 15682 else {
16151 return this._finishToken(58/*TokenKind.STRING*/); 15683 return this._finishToken(58/*TokenKind.STRING*/);
16152 } 15684 }
16153 } 15685 }
16154 return this.finishStringBody(quote); 15686 return this.finishStringBody(quote);
16155 } 15687 }
16156 TokenizerBase.prototype.finishRawString = function(quote) { 15688 TokenizerBase.prototype.finishRawString = function(quote) {
16157 if ($notnull_bool(this._maybeEatChar(quote))) { 15689 if (this._maybeEatChar(quote)) {
16158 if ($notnull_bool(this._maybeEatChar(quote))) { 15690 if (this._maybeEatChar(quote)) {
16159 return this.finishMultilineRawString(quote); 15691 return this.finishMultilineRawString(quote);
16160 } 15692 }
16161 else { 15693 else {
16162 return this._finishToken(58/*TokenKind.STRING*/); 15694 return this._finishToken(58/*TokenKind.STRING*/);
16163 } 15695 }
16164 } 15696 }
16165 while (true) { 15697 while (true) {
16166 var ch = this._nextChar(); 15698 var ch = this._nextChar();
16167 if (ch == quote) { 15699 if (ch == quote) {
16168 return this._finishToken(58/*TokenKind.STRING*/); 15700 return this._finishToken(58/*TokenKind.STRING*/);
16169 } 15701 }
16170 else if (ch == 0) { 15702 else if (ch == 0) {
16171 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/); 15703 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/);
16172 } 15704 }
16173 } 15705 }
16174 } 15706 }
16175 TokenizerBase.prototype.finishMultilineRawString = function(quote) { 15707 TokenizerBase.prototype.finishMultilineRawString = function(quote) {
16176 while (true) { 15708 while (true) {
16177 var ch = this._nextChar(); 15709 var ch = this._nextChar();
16178 if (ch == 0) { 15710 if (ch == 0) {
16179 var kind = quote == 34 ? 68/*TokenKind.INCOMPLETE_MULTILINE_STRING_DQ*/ : 69/*TokenKind.INCOMPLETE_MULTILINE_STRING_SQ*/; 15711 var kind = quote == 34 ? 68/*TokenKind.INCOMPLETE_MULTILINE_STRING_DQ*/ : 69/*TokenKind.INCOMPLETE_MULTILINE_STRING_SQ*/;
16180 return this._finishToken(kind); 15712 return this._finishToken(kind);
16181 } 15713 }
16182 else if (ch == quote && $notnull_bool(this._maybeEatChar(quote)) && $notnull _bool(this._maybeEatChar(quote))) { 15714 else if (ch == quote && this._maybeEatChar(quote) && this._maybeEatChar(quot e)) {
16183 return this._finishToken(58/*TokenKind.STRING*/); 15715 return this._finishToken(58/*TokenKind.STRING*/);
16184 } 15716 }
16185 } 15717 }
16186 } 15718 }
16187 TokenizerBase.prototype.finishStringBody = function(quote) { 15719 TokenizerBase.prototype.finishStringBody = function(quote) {
16188 while (true) { 15720 while (true) {
16189 var ch = this._nextChar(); 15721 var ch = this._nextChar();
16190 if (ch == quote) { 15722 if (ch == quote) {
16191 return this._finishToken(58/*TokenKind.STRING*/); 15723 return this._finishToken(58/*TokenKind.STRING*/);
16192 } 15724 }
16193 else if (ch == 36) { 15725 else if (ch == 36) {
16194 this._interpStack = InterpStack.push(this._interpStack, quote, false); 15726 this._interpStack = InterpStack.push(this._interpStack, quote, false);
16195 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/); 15727 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/);
16196 } 15728 }
16197 else if (ch == 0) { 15729 else if (ch == 0) {
16198 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/); 15730 return this._finishToken(66/*TokenKind.INCOMPLETE_STRING*/);
16199 } 15731 }
16200 else if (ch == 92) { 15732 else if (ch == 92) {
16201 if (!$notnull_bool(this.eatEscapeSequence())) { 15733 if (!this.eatEscapeSequence()) {
16202 return this._errorToken(); 15734 return this._errorToken();
16203 } 15735 }
16204 } 15736 }
16205 } 15737 }
16206 } 15738 }
16207 TokenizerBase.prototype.eatEscapeSequence = function() { 15739 TokenizerBase.prototype.eatEscapeSequence = function() {
16208 var hex; 15740 var hex;
16209 switch (this._nextChar()) { 15741 switch (this._nextChar()) {
16210 case 120: 15742 case 120:
16211 15743
16212 return $notnull_bool(this.maybeEatHexDigit()) && $notnull_bool(this.maybeE atHexDigit()); 15744 return this.maybeEatHexDigit() && this.maybeEatHexDigit();
16213 15745
16214 case 117: 15746 case 117:
16215 15747
16216 if ($notnull_bool(this._maybeEatChar(123))) { 15748 if (this._maybeEatChar(123)) {
16217 var start = this._lang_index; 15749 var start = this._lang_index;
16218 this.eatHexDigits(); 15750 this.eatHexDigits();
16219 var chars = this._lang_index - start; 15751 var chars = this._lang_index - start;
16220 if (chars > 0 && chars <= 6 && $notnull_bool(this._maybeEatChar(125))) { 15752 if (chars > 0 && chars <= 6 && this._maybeEatChar(125)) {
16221 hex = this._text.substring(start, start + chars); 15753 hex = this._text.substring(start, start + chars);
16222 break; 15754 break;
16223 } 15755 }
16224 else { 15756 else {
16225 return false; 15757 return false;
16226 } 15758 }
16227 } 15759 }
16228 else { 15760 else {
16229 if ($notnull_bool(this.maybeEatHexDigit()) && $notnull_bool(this.maybeEa tHexDigit()) && $notnull_bool(this.maybeEatHexDigit()) && $notnull_bool(this.may beEatHexDigit())) { 15761 if (this.maybeEatHexDigit() && this.maybeEatHexDigit() && this.maybeEatH exDigit() && this.maybeEatHexDigit()) {
16230 hex = this._text.substring(this._lang_index - 4, this._lang_index); 15762 hex = this._text.substring(this._lang_index - 4, this._lang_index);
16231 break; 15763 break;
16232 } 15764 }
16233 else { 15765 else {
16234 return false; 15766 return false;
16235 } 15767 }
16236 } 15768 }
16237 15769
16238 default: 15770 default:
16239 15771
16240 return true; 15772 return true;
16241 15773
16242 } 15774 }
16243 var n = lang_Parser.parseHex(hex); 15775 var n = lang_Parser.parseHex(hex);
16244 return n < 0xD800 || n > 0xDFFF && n <= 0x10FFFF; 15776 return n < 0xD800 || n > 0xDFFF && n <= 0x10FFFF;
16245 } 15777 }
16246 TokenizerBase.prototype.finishDot = function() { 15778 TokenizerBase.prototype.finishDot = function() {
16247 if ($notnull_bool(TokenizerHelpers.isDigit(this._peekChar()))) { 15779 if (TokenizerHelpers.isDigit(this._peekChar())) {
16248 this.eatDigits(); 15780 this.eatDigits();
16249 return this.finishNumberExtra(62/*TokenKind.DOUBLE*/); 15781 return this.finishNumberExtra(62/*TokenKind.DOUBLE*/);
16250 } 15782 }
16251 else { 15783 else {
16252 return this._finishToken(14/*TokenKind.DOT*/); 15784 return this._finishToken(14/*TokenKind.DOT*/);
16253 } 15785 }
16254 } 15786 }
16255 TokenizerBase.prototype.finishIdentifier = function() { 15787 TokenizerBase.prototype.finishIdentifier = function() {
16256 while (this._lang_index < this._text.length) { 15788 while (this._lang_index < this._text.length) {
16257 if (!$notnull_bool(TokenizerHelpers.isIdentifierPart(this._text.charCodeAt(t his._lang_index++)))) { 15789 if (!TokenizerHelpers.isIdentifierPart(this._text.charCodeAt(this._lang_inde x++))) {
16258 this._lang_index--; 15790 this._lang_index--;
16259 break; 15791 break;
16260 } 15792 }
16261 } 15793 }
16262 var kind = this.getIdentifierKind(); 15794 var kind = this.getIdentifierKind();
16263 if (this._interpStack != null && this._interpStack.depth == -1) { 15795 if (this._interpStack != null && this._interpStack.depth == -1) {
16264 this._interpStack.depth = 0; 15796 this._interpStack.depth = 0;
16265 } 15797 }
16266 if (kind == 70/*TokenKind.IDENTIFIER*/) { 15798 if (kind == 70/*TokenKind.IDENTIFIER*/) {
16267 return this._finishToken(70/*TokenKind.IDENTIFIER*/); 15799 return this._finishToken(70/*TokenKind.IDENTIFIER*/);
16268 } 15800 }
16269 else { 15801 else {
16270 return this._finishToken(kind); 15802 return this._finishToken(kind);
16271 } 15803 }
16272 } 15804 }
16273 TokenizerBase.prototype.next$0 = function() { 15805 TokenizerBase.prototype.next$0 = function() {
16274 return this.next(); 15806 return this.next();
16275 }; 15807 };
16276 // ********** Code for Tokenizer ************** 15808 // ********** Code for Tokenizer **************
16277 function Tokenizer(source, skipWhitespace, index) { 15809 function Tokenizer(source, skipWhitespace, index) {
16278 TokenizerBase.call(this, source, skipWhitespace, index); 15810 TokenizerBase.call(this, source, skipWhitespace, index);
16279 // Initializers done 15811 // Initializers done
16280 } 15812 }
16281 $inherits(Tokenizer, TokenizerBase); 15813 $inherits(Tokenizer, TokenizerBase);
16282 Tokenizer.prototype.next = function() { 15814 Tokenizer.prototype.next = function() {
16283 this._startIndex = this._lang_index; 15815 this._startIndex = this._lang_index;
16284 if (this._interpStack != null && this._interpStack.depth == 0) { 15816 if (this._interpStack != null && this._interpStack.depth == 0) {
16285 var istack = this._interpStack; 15817 var istack = this._interpStack;
16286 this._interpStack = this._interpStack.pop(); 15818 this._interpStack = this._interpStack.pop();
16287 if ($notnull_bool(istack.isMultiline)) { 15819 if (istack.isMultiline) {
16288 return this.finishMultilineString(istack.quote); 15820 return this.finishMultilineString(istack.quote);
16289 } 15821 }
16290 else { 15822 else {
16291 return this.finishStringBody(istack.quote); 15823 return this.finishStringBody(istack.quote);
16292 } 15824 }
16293 } 15825 }
16294 var ch; 15826 var ch;
16295 ch = this._nextChar(); 15827 ch = this._nextChar();
16296 switch (ch) { 15828 switch (ch) {
16297 case 0: 15829 case 0:
16298 15830
16299 return this._finishToken(1/*TokenKind.END_OF_FILE*/); 15831 return this._finishToken(1/*TokenKind.END_OF_FILE*/);
16300 15832
16301 case 32: 15833 case 32:
16302 case 9: 15834 case 9:
16303 case 10: 15835 case 10:
16304 case 13: 15836 case 13:
16305 15837
16306 return this.finishWhitespace(); 15838 return this.finishWhitespace();
16307 15839
16308 case 33: 15840 case 33:
16309 15841
16310 if ($notnull_bool(this._maybeEatChar(61))) { 15842 if (this._maybeEatChar(61)) {
16311 if ($notnull_bool(this._maybeEatChar(61))) { 15843 if (this._maybeEatChar(61)) {
16312 return this._finishToken(51/*TokenKind.NE_STRICT*/); 15844 return this._finishToken(51/*TokenKind.NE_STRICT*/);
16313 } 15845 }
16314 else { 15846 else {
16315 return this._finishToken(49/*TokenKind.NE*/); 15847 return this._finishToken(49/*TokenKind.NE*/);
16316 } 15848 }
16317 } 15849 }
16318 else { 15850 else {
16319 return this._finishToken(19/*TokenKind.NOT*/); 15851 return this._finishToken(19/*TokenKind.NOT*/);
16320 } 15852 }
16321 15853
16322 case 34: 15854 case 34:
16323 15855
16324 return this.finishString(34); 15856 return this.finishString(34);
16325 15857
16326 case 35: 15858 case 35:
16327 15859
16328 if ($notnull_bool(this._maybeEatChar(33))) { 15860 if (this._maybeEatChar(33)) {
16329 return this.finishHashBang(); 15861 return this.finishHashBang();
16330 } 15862 }
16331 else { 15863 else {
16332 return this._finishToken(12/*TokenKind.HASH*/); 15864 return this._finishToken(12/*TokenKind.HASH*/);
16333 } 15865 }
16334 15866
16335 case 36: 15867 case 36:
16336 15868
16337 if ($notnull_bool(this._maybeEatChar(34))) { 15869 if (this._maybeEatChar(34)) {
16338 return this.finishString(34); 15870 return this.finishString(34);
16339 } 15871 }
16340 else if ($notnull_bool(this._maybeEatChar(39))) { 15872 else if (this._maybeEatChar(39)) {
16341 return this.finishString(39); 15873 return this.finishString(39);
16342 } 15874 }
16343 else { 15875 else {
16344 return this.finishIdentifier(); 15876 return this.finishIdentifier();
16345 } 15877 }
16346 15878
16347 case 37: 15879 case 37:
16348 15880
16349 if ($notnull_bool(this._maybeEatChar(61))) { 15881 if (this._maybeEatChar(61)) {
16350 return this._finishToken(32/*TokenKind.ASSIGN_MOD*/); 15882 return this._finishToken(32/*TokenKind.ASSIGN_MOD*/);
16351 } 15883 }
16352 else { 15884 else {
16353 return this._finishToken(47/*TokenKind.MOD*/); 15885 return this._finishToken(47/*TokenKind.MOD*/);
16354 } 15886 }
16355 15887
16356 case 38: 15888 case 38:
16357 15889
16358 if ($notnull_bool(this._maybeEatChar(38))) { 15890 if (this._maybeEatChar(38)) {
16359 return this._finishToken(35/*TokenKind.AND*/); 15891 return this._finishToken(35/*TokenKind.AND*/);
16360 } 15892 }
16361 else if ($notnull_bool(this._maybeEatChar(61))) { 15893 else if (this._maybeEatChar(61)) {
16362 return this._finishToken(23/*TokenKind.ASSIGN_AND*/); 15894 return this._finishToken(23/*TokenKind.ASSIGN_AND*/);
16363 } 15895 }
16364 else { 15896 else {
16365 return this._finishToken(38/*TokenKind.BIT_AND*/); 15897 return this._finishToken(38/*TokenKind.BIT_AND*/);
16366 } 15898 }
16367 15899
16368 case 39: 15900 case 39:
16369 15901
16370 return this.finishString(39); 15902 return this.finishString(39);
16371 15903
16372 case 40: 15904 case 40:
16373 15905
16374 return this._finishToken(2/*TokenKind.LPAREN*/); 15906 return this._finishToken(2/*TokenKind.LPAREN*/);
16375 15907
16376 case 41: 15908 case 41:
16377 15909
16378 return this._finishToken(3/*TokenKind.RPAREN*/); 15910 return this._finishToken(3/*TokenKind.RPAREN*/);
16379 15911
16380 case 42: 15912 case 42:
16381 15913
16382 if ($notnull_bool(this._maybeEatChar(61))) { 15914 if (this._maybeEatChar(61)) {
16383 return this._finishToken(29/*TokenKind.ASSIGN_MUL*/); 15915 return this._finishToken(29/*TokenKind.ASSIGN_MUL*/);
16384 } 15916 }
16385 else { 15917 else {
16386 return this._finishToken(44/*TokenKind.MUL*/); 15918 return this._finishToken(44/*TokenKind.MUL*/);
16387 } 15919 }
16388 15920
16389 case 43: 15921 case 43:
16390 15922
16391 if ($notnull_bool(this._maybeEatChar(43))) { 15923 if (this._maybeEatChar(43)) {
16392 return this._finishToken(16/*TokenKind.INCR*/); 15924 return this._finishToken(16/*TokenKind.INCR*/);
16393 } 15925 }
16394 else if ($notnull_bool(this._maybeEatChar(61))) { 15926 else if (this._maybeEatChar(61)) {
16395 return this._finishToken(27/*TokenKind.ASSIGN_ADD*/); 15927 return this._finishToken(27/*TokenKind.ASSIGN_ADD*/);
16396 } 15928 }
16397 else { 15929 else {
16398 return this._finishToken(42/*TokenKind.ADD*/); 15930 return this._finishToken(42/*TokenKind.ADD*/);
16399 } 15931 }
16400 15932
16401 case 44: 15933 case 44:
16402 15934
16403 return this._finishToken(11/*TokenKind.COMMA*/); 15935 return this._finishToken(11/*TokenKind.COMMA*/);
16404 15936
16405 case 45: 15937 case 45:
16406 15938
16407 if ($notnull_bool(this._maybeEatChar(45))) { 15939 if (this._maybeEatChar(45)) {
16408 return this._finishToken(17/*TokenKind.DECR*/); 15940 return this._finishToken(17/*TokenKind.DECR*/);
16409 } 15941 }
16410 else if ($notnull_bool(this._maybeEatChar(61))) { 15942 else if (this._maybeEatChar(61)) {
16411 return this._finishToken(28/*TokenKind.ASSIGN_SUB*/); 15943 return this._finishToken(28/*TokenKind.ASSIGN_SUB*/);
16412 } 15944 }
16413 else { 15945 else {
16414 return this._finishToken(43/*TokenKind.SUB*/); 15946 return this._finishToken(43/*TokenKind.SUB*/);
16415 } 15947 }
16416 15948
16417 case 46: 15949 case 46:
16418 15950
16419 if ($notnull_bool(this._maybeEatChar(46))) { 15951 if (this._maybeEatChar(46)) {
16420 if ($notnull_bool(this._maybeEatChar(46))) { 15952 if (this._maybeEatChar(46)) {
16421 return this._finishToken(15/*TokenKind.ELLIPSIS*/); 15953 return this._finishToken(15/*TokenKind.ELLIPSIS*/);
16422 } 15954 }
16423 else { 15955 else {
16424 return this._errorToken(); 15956 return this._errorToken();
16425 } 15957 }
16426 } 15958 }
16427 else { 15959 else {
16428 return this.finishDot(); 15960 return this.finishDot();
16429 } 15961 }
16430 15962
16431 case 47: 15963 case 47:
16432 15964
16433 if ($notnull_bool(this._maybeEatChar(42))) { 15965 if (this._maybeEatChar(42)) {
16434 return this.finishMultiLineComment(); 15966 return this.finishMultiLineComment();
16435 } 15967 }
16436 else if ($notnull_bool(this._maybeEatChar(47))) { 15968 else if (this._maybeEatChar(47)) {
16437 return this.finishSingleLineComment(); 15969 return this.finishSingleLineComment();
16438 } 15970 }
16439 else if ($notnull_bool(this._maybeEatChar(61))) { 15971 else if (this._maybeEatChar(61)) {
16440 return this._finishToken(30/*TokenKind.ASSIGN_DIV*/); 15972 return this._finishToken(30/*TokenKind.ASSIGN_DIV*/);
16441 } 15973 }
16442 else { 15974 else {
16443 return this._finishToken(45/*TokenKind.DIV*/); 15975 return this._finishToken(45/*TokenKind.DIV*/);
16444 } 15976 }
16445 15977
16446 case 48: 15978 case 48:
16447 15979
16448 if ($notnull_bool(this._maybeEatChar(88))) { 15980 if (this._maybeEatChar(88)) {
16449 return this.finishHex(); 15981 return this.finishHex();
16450 } 15982 }
16451 else if ($notnull_bool(this._maybeEatChar(120))) { 15983 else if (this._maybeEatChar(120)) {
16452 return this.finishHex(); 15984 return this.finishHex();
16453 } 15985 }
16454 else { 15986 else {
16455 return this.finishNumber(); 15987 return this.finishNumber();
16456 } 15988 }
16457 15989
16458 case 58: 15990 case 58:
16459 15991
16460 return this._finishToken(8/*TokenKind.COLON*/); 15992 return this._finishToken(8/*TokenKind.COLON*/);
16461 15993
16462 case 59: 15994 case 59:
16463 15995
16464 return this._finishToken(10/*TokenKind.SEMICOLON*/); 15996 return this._finishToken(10/*TokenKind.SEMICOLON*/);
16465 15997
16466 case 60: 15998 case 60:
16467 15999
16468 if ($notnull_bool(this._maybeEatChar(60))) { 16000 if (this._maybeEatChar(60)) {
16469 if ($notnull_bool(this._maybeEatChar(61))) { 16001 if (this._maybeEatChar(61)) {
16470 return this._finishToken(24/*TokenKind.ASSIGN_SHL*/); 16002 return this._finishToken(24/*TokenKind.ASSIGN_SHL*/);
16471 } 16003 }
16472 else { 16004 else {
16473 return this._finishToken(39/*TokenKind.SHL*/); 16005 return this._finishToken(39/*TokenKind.SHL*/);
16474 } 16006 }
16475 } 16007 }
16476 else if ($notnull_bool(this._maybeEatChar(61))) { 16008 else if (this._maybeEatChar(61)) {
16477 return this._finishToken(54/*TokenKind.LTE*/); 16009 return this._finishToken(54/*TokenKind.LTE*/);
16478 } 16010 }
16479 else { 16011 else {
16480 return this._finishToken(52/*TokenKind.LT*/); 16012 return this._finishToken(52/*TokenKind.LT*/);
16481 } 16013 }
16482 16014
16483 case 61: 16015 case 61:
16484 16016
16485 if ($notnull_bool(this._maybeEatChar(61))) { 16017 if (this._maybeEatChar(61)) {
16486 if ($notnull_bool(this._maybeEatChar(61))) { 16018 if (this._maybeEatChar(61)) {
16487 return this._finishToken(50/*TokenKind.EQ_STRICT*/); 16019 return this._finishToken(50/*TokenKind.EQ_STRICT*/);
16488 } 16020 }
16489 else { 16021 else {
16490 return this._finishToken(48/*TokenKind.EQ*/); 16022 return this._finishToken(48/*TokenKind.EQ*/);
16491 } 16023 }
16492 } 16024 }
16493 else if ($notnull_bool(this._maybeEatChar(62))) { 16025 else if (this._maybeEatChar(62)) {
16494 return this._finishToken(9/*TokenKind.ARROW*/); 16026 return this._finishToken(9/*TokenKind.ARROW*/);
16495 } 16027 }
16496 else { 16028 else {
16497 return this._finishToken(20/*TokenKind.ASSIGN*/); 16029 return this._finishToken(20/*TokenKind.ASSIGN*/);
16498 } 16030 }
16499 16031
16500 case 62: 16032 case 62:
16501 16033
16502 if ($notnull_bool(this._maybeEatChar(61))) { 16034 if (this._maybeEatChar(61)) {
16503 return this._finishToken(55/*TokenKind.GTE*/); 16035 return this._finishToken(55/*TokenKind.GTE*/);
16504 } 16036 }
16505 else if ($notnull_bool(this._maybeEatChar(62))) { 16037 else if (this._maybeEatChar(62)) {
16506 if ($notnull_bool(this._maybeEatChar(61))) { 16038 if (this._maybeEatChar(61)) {
16507 return this._finishToken(25/*TokenKind.ASSIGN_SAR*/); 16039 return this._finishToken(25/*TokenKind.ASSIGN_SAR*/);
16508 } 16040 }
16509 else if ($notnull_bool(this._maybeEatChar(62))) { 16041 else if (this._maybeEatChar(62)) {
16510 if ($notnull_bool(this._maybeEatChar(61))) { 16042 if (this._maybeEatChar(61)) {
16511 return this._finishToken(26/*TokenKind.ASSIGN_SHR*/); 16043 return this._finishToken(26/*TokenKind.ASSIGN_SHR*/);
16512 } 16044 }
16513 else { 16045 else {
16514 return this._finishToken(41/*TokenKind.SHR*/); 16046 return this._finishToken(41/*TokenKind.SHR*/);
16515 } 16047 }
16516 } 16048 }
16517 else { 16049 else {
16518 return this._finishToken(40/*TokenKind.SAR*/); 16050 return this._finishToken(40/*TokenKind.SAR*/);
16519 } 16051 }
16520 } 16052 }
16521 else { 16053 else {
16522 return this._finishToken(53/*TokenKind.GT*/); 16054 return this._finishToken(53/*TokenKind.GT*/);
16523 } 16055 }
16524 16056
16525 case 63: 16057 case 63:
16526 16058
16527 return this._finishToken(33/*TokenKind.CONDITIONAL*/); 16059 return this._finishToken(33/*TokenKind.CONDITIONAL*/);
16528 16060
16529 case 64: 16061 case 64:
16530 16062
16531 if ($notnull_bool(this._maybeEatChar(34))) { 16063 if (this._maybeEatChar(34)) {
16532 return this.finishRawString(34); 16064 return this.finishRawString(34);
16533 } 16065 }
16534 else if ($notnull_bool(this._maybeEatChar(39))) { 16066 else if (this._maybeEatChar(39)) {
16535 return this.finishRawString(39); 16067 return this.finishRawString(39);
16536 } 16068 }
16537 else { 16069 else {
16538 return this._errorToken(); 16070 return this._errorToken();
16539 } 16071 }
16540 16072
16541 case 91: 16073 case 91:
16542 16074
16543 if ($notnull_bool(this._maybeEatChar(93))) { 16075 if (this._maybeEatChar(93)) {
16544 if ($notnull_bool(this._maybeEatChar(61))) { 16076 if (this._maybeEatChar(61)) {
16545 return this._finishToken(57/*TokenKind.SETINDEX*/); 16077 return this._finishToken(57/*TokenKind.SETINDEX*/);
16546 } 16078 }
16547 else { 16079 else {
16548 return this._finishToken(56/*TokenKind.INDEX*/); 16080 return this._finishToken(56/*TokenKind.INDEX*/);
16549 } 16081 }
16550 } 16082 }
16551 else { 16083 else {
16552 return this._finishToken(4/*TokenKind.LBRACK*/); 16084 return this._finishToken(4/*TokenKind.LBRACK*/);
16553 } 16085 }
16554 16086
16555 case 93: 16087 case 93:
16556 16088
16557 return this._finishToken(5/*TokenKind.RBRACK*/); 16089 return this._finishToken(5/*TokenKind.RBRACK*/);
16558 16090
16559 case 94: 16091 case 94:
16560 16092
16561 if ($notnull_bool(this._maybeEatChar(61))) { 16093 if (this._maybeEatChar(61)) {
16562 return this._finishToken(22/*TokenKind.ASSIGN_XOR*/); 16094 return this._finishToken(22/*TokenKind.ASSIGN_XOR*/);
16563 } 16095 }
16564 else { 16096 else {
16565 return this._finishToken(37/*TokenKind.BIT_XOR*/); 16097 return this._finishToken(37/*TokenKind.BIT_XOR*/);
16566 } 16098 }
16567 16099
16568 case 123: 16100 case 123:
16569 16101
16570 return this._finishOpenBrace(); 16102 return this._finishOpenBrace();
16571 16103
16572 case 124: 16104 case 124:
16573 16105
16574 if ($notnull_bool(this._maybeEatChar(61))) { 16106 if (this._maybeEatChar(61)) {
16575 return this._finishToken(21/*TokenKind.ASSIGN_OR*/); 16107 return this._finishToken(21/*TokenKind.ASSIGN_OR*/);
16576 } 16108 }
16577 else if ($notnull_bool(this._maybeEatChar(124))) { 16109 else if (this._maybeEatChar(124)) {
16578 return this._finishToken(34/*TokenKind.OR*/); 16110 return this._finishToken(34/*TokenKind.OR*/);
16579 } 16111 }
16580 else { 16112 else {
16581 return this._finishToken(36/*TokenKind.BIT_OR*/); 16113 return this._finishToken(36/*TokenKind.BIT_OR*/);
16582 } 16114 }
16583 16115
16584 case 125: 16116 case 125:
16585 16117
16586 return this._finishCloseBrace(); 16118 return this._finishCloseBrace();
16587 16119
16588 case 126: 16120 case 126:
16589 16121
16590 if ($notnull_bool(this._maybeEatChar(47))) { 16122 if (this._maybeEatChar(47)) {
16591 if ($notnull_bool(this._maybeEatChar(61))) { 16123 if (this._maybeEatChar(61)) {
16592 return this._finishToken(31/*TokenKind.ASSIGN_TRUNCDIV*/); 16124 return this._finishToken(31/*TokenKind.ASSIGN_TRUNCDIV*/);
16593 } 16125 }
16594 else { 16126 else {
16595 return this._finishToken(46/*TokenKind.TRUNCDIV*/); 16127 return this._finishToken(46/*TokenKind.TRUNCDIV*/);
16596 } 16128 }
16597 } 16129 }
16598 else { 16130 else {
16599 return this._finishToken(18/*TokenKind.BIT_NOT*/); 16131 return this._finishToken(18/*TokenKind.BIT_NOT*/);
16600 } 16132 }
16601 16133
16602 default: 16134 default:
16603 16135
16604 if ($notnull_bool(TokenizerHelpers.isIdentifierStart(ch))) { 16136 if (TokenizerHelpers.isIdentifierStart(ch)) {
16605 return this.finishIdentifier(); 16137 return this.finishIdentifier();
16606 } 16138 }
16607 else if ($notnull_bool(TokenizerHelpers.isDigit(ch))) { 16139 else if (TokenizerHelpers.isDigit(ch)) {
16608 return this.finishNumber(); 16140 return this.finishNumber();
16609 } 16141 }
16610 else { 16142 else {
16611 return this._errorToken(); 16143 return this._errorToken();
16612 } 16144 }
16613 16145
16614 } 16146 }
16615 } 16147 }
16616 Tokenizer.prototype.getIdentifierKind = function() { 16148 Tokenizer.prototype.getIdentifierKind = function() {
16617 var i0 = this._startIndex; 16149 var i0 = this._startIndex;
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
16805 }; 16337 };
16806 // ********** Code for TokenizerHelpers ************** 16338 // ********** Code for TokenizerHelpers **************
16807 function TokenizerHelpers() {} 16339 function TokenizerHelpers() {}
16808 TokenizerHelpers.isIdentifierStart = function(c) { 16340 TokenizerHelpers.isIdentifierStart = function(c) {
16809 return ((c >= 97 && c <= 122) || (c >= 65 && c <= 90) || c == 95); 16341 return ((c >= 97 && c <= 122) || (c >= 65 && c <= 90) || c == 95);
16810 } 16342 }
16811 TokenizerHelpers.isDigit = function(c) { 16343 TokenizerHelpers.isDigit = function(c) {
16812 return (c >= 48 && c <= 57); 16344 return (c >= 48 && c <= 57);
16813 } 16345 }
16814 TokenizerHelpers.isHexDigit = function(c) { 16346 TokenizerHelpers.isHexDigit = function(c) {
16815 return ($notnull_bool(TokenizerHelpers.isDigit(c)) || (c >= 97 && c <= 102) || (c >= 65 && c <= 70)); 16347 return (TokenizerHelpers.isDigit(c) || (c >= 97 && c <= 102) || (c >= 65 && c <= 70));
16816 } 16348 }
16817 TokenizerHelpers.isWhitespace = function(c) { 16349 TokenizerHelpers.isWhitespace = function(c) {
16818 return (c == 32 || c == 9 || c == 10 || c == 13); 16350 return (c == 32 || c == 9 || c == 10 || c == 13);
16819 } 16351 }
16820 TokenizerHelpers.isIdentifierPart = function(c) { 16352 TokenizerHelpers.isIdentifierPart = function(c) {
16821 return ($notnull_bool(TokenizerHelpers.isIdentifierStart(c)) || $notnull_bool( TokenizerHelpers.isDigit(c))); 16353 return (TokenizerHelpers.isIdentifierStart(c) || TokenizerHelpers.isDigit(c));
16822 } 16354 }
16823 // ********** Code for TokenKind ************** 16355 // ********** Code for TokenKind **************
16824 function TokenKind() {} 16356 function TokenKind() {}
16825 TokenKind.kindToString = function(kind) { 16357 TokenKind.kindToString = function(kind) {
16826 switch (kind) { 16358 switch (kind) {
16827 case 1/*TokenKind.END_OF_FILE*/: 16359 case 1/*TokenKind.END_OF_FILE*/:
16828 16360
16829 return "end of file"; 16361 return "end of file";
16830 16362
16831 case 2/*TokenKind.LPAREN*/: 16363 case 2/*TokenKind.LPAREN*/:
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
17630 this.diet = diet; 17162 this.diet = diet;
17631 this.throwOnIncomplete = throwOnIncomplete; 17163 this.throwOnIncomplete = throwOnIncomplete;
17632 this.optionalSemicolons = optionalSemicolons; 17164 this.optionalSemicolons = optionalSemicolons;
17633 // Initializers done 17165 // Initializers done
17634 this.tokenizer = new Tokenizer(this.source, true, startOffset); 17166 this.tokenizer = new Tokenizer(this.source, true, startOffset);
17635 this._peekToken = this.tokenizer.next(); 17167 this._peekToken = this.tokenizer.next();
17636 this._previousToken = null; 17168 this._previousToken = null;
17637 this._inInitializers = false; 17169 this._inInitializers = false;
17638 } 17170 }
17639 lang_Parser.prototype.isPrematureEndOfFile = function() { 17171 lang_Parser.prototype.isPrematureEndOfFile = function() {
17640 if ($notnull_bool(this.throwOnIncomplete) && $notnull_bool(this._maybeEat(1/*T okenKind.END_OF_FILE*/)) || $notnull_bool(this._maybeEat(68/*TokenKind.INCOMPLET E_MULTILINE_STRING_DQ*/)) || $notnull_bool(this._maybeEat(69/*TokenKind.INCOMPLE TE_MULTILINE_STRING_SQ*/))) { 17172 if (this.throwOnIncomplete && this._maybeEat(1/*TokenKind.END_OF_FILE*/) || th is._maybeEat(68/*TokenKind.INCOMPLETE_MULTILINE_STRING_DQ*/) || this._maybeEat(6 9/*TokenKind.INCOMPLETE_MULTILINE_STRING_SQ*/)) {
17641 $throw(new IncompleteSourceException(this._previousToken)); 17173 $throw(new IncompleteSourceException(this._previousToken));
17642 } 17174 }
17643 else if ($notnull_bool(this._maybeEat(1/*TokenKind.END_OF_FILE*/))) { 17175 else if (this._maybeEat(1/*TokenKind.END_OF_FILE*/)) {
17644 this._lang_error('unexpected end of file', this._peekToken.get$span()); 17176 this._lang_error('unexpected end of file', this._peekToken.get$span());
17645 return true; 17177 return true;
17646 } 17178 }
17647 else { 17179 else {
17648 return false; 17180 return false;
17649 } 17181 }
17650 } 17182 }
17651 lang_Parser.prototype._peek = function() { 17183 lang_Parser.prototype._peek = function() {
17652 return this._peekToken.kind; 17184 return this._peekToken.kind;
17653 } 17185 }
(...skipping 12 matching lines...) Expand all
17666 if (this._peekToken.kind == kind) { 17198 if (this._peekToken.kind == kind) {
17667 this._previousToken = this._peekToken; 17199 this._previousToken = this._peekToken;
17668 this._peekToken = this.tokenizer.next(); 17200 this._peekToken = this.tokenizer.next();
17669 return true; 17201 return true;
17670 } 17202 }
17671 else { 17203 else {
17672 return false; 17204 return false;
17673 } 17205 }
17674 } 17206 }
17675 lang_Parser.prototype._eat = function(kind) { 17207 lang_Parser.prototype._eat = function(kind) {
17676 if (!$notnull_bool(this._maybeEat(kind))) { 17208 if (!this._maybeEat(kind)) {
17677 this._errorExpected(TokenKind.kindToString(kind)); 17209 this._errorExpected(TokenKind.kindToString(kind));
17678 } 17210 }
17679 } 17211 }
17680 lang_Parser.prototype._eatSemicolon = function() { 17212 lang_Parser.prototype._eatSemicolon = function() {
17681 if ($notnull_bool(this.optionalSemicolons) && $notnull_bool(this._peekKind(1/* TokenKind.END_OF_FILE*/))) return; 17213 if (this.optionalSemicolons && this._peekKind(1/*TokenKind.END_OF_FILE*/)) ret urn;
17682 this._eat(10/*TokenKind.SEMICOLON*/); 17214 this._eat(10/*TokenKind.SEMICOLON*/);
17683 } 17215 }
17684 lang_Parser.prototype._errorExpected = function(expected) { 17216 lang_Parser.prototype._errorExpected = function(expected) {
17685 if ($notnull_bool(this.throwOnIncomplete)) this.isPrematureEndOfFile(); 17217 if (this.throwOnIncomplete) this.isPrematureEndOfFile();
17686 var tok = this._lang_next(); 17218 var tok = this._lang_next();
17687 var message = ('expected ' + expected + ', but found ' + tok + ''); 17219 var message = ('expected ' + expected + ', but found ' + tok + '');
17688 this._lang_error($assert_String(message), tok.get$span()); 17220 this._lang_error(message, tok.get$span());
17689 } 17221 }
17690 lang_Parser.prototype._lang_error = function(message, location) { 17222 lang_Parser.prototype._lang_error = function(message, location) {
17691 if (location == null) { 17223 if (location == null) {
17692 location = this._peekToken.get$span(); 17224 location = this._peekToken.get$span();
17693 } 17225 }
17694 world.fatal(message, location); 17226 world.fatal(message, location);
17695 } 17227 }
17696 lang_Parser.prototype._skipBlock = function() { 17228 lang_Parser.prototype._skipBlock = function() {
17697 var depth = 1; 17229 var depth = 1;
17698 this._eat(6/*TokenKind.LBRACE*/); 17230 this._eat(6/*TokenKind.LBRACE*/);
17699 while (true) { 17231 while (true) {
17700 var tok = this._lang_next(); 17232 var tok = this._lang_next();
17701 if ($notnull_bool($eq(tok.kind, 6/*TokenKind.LBRACE*/))) { 17233 if ($eq(tok.kind, 6/*TokenKind.LBRACE*/)) {
17702 depth += 1; 17234 depth += 1;
17703 } 17235 }
17704 else if ($notnull_bool($eq(tok.kind, 7/*TokenKind.RBRACE*/))) { 17236 else if ($eq(tok.kind, 7/*TokenKind.RBRACE*/)) {
17705 depth -= 1; 17237 depth -= 1;
17706 if (depth == 0) return; 17238 if (depth == 0) return;
17707 } 17239 }
17708 else if ($notnull_bool($eq(tok.kind, 1/*TokenKind.END_OF_FILE*/))) { 17240 else if ($eq(tok.kind, 1/*TokenKind.END_OF_FILE*/)) {
17709 this._lang_error('unexpected end of file during diet parse', tok.get$span( )); 17241 this._lang_error('unexpected end of file during diet parse', tok.get$span( ));
17710 return; 17242 return;
17711 } 17243 }
17712 } 17244 }
17713 } 17245 }
17714 lang_Parser.prototype._makeSpan = function(start) { 17246 lang_Parser.prototype._makeSpan = function(start) {
17715 return new SourceSpan(this.source, start, this._previousToken.end); 17247 return new SourceSpan(this.source, start, this._previousToken.end);
17716 } 17248 }
17717 lang_Parser.prototype.compilationUnit = function() { 17249 lang_Parser.prototype.compilationUnit = function() {
17718 var ret = []; 17250 var ret = [];
17719 this._maybeEat(13/*TokenKind.HASHBANG*/); 17251 this._maybeEat(13/*TokenKind.HASHBANG*/);
17720 while ($notnull_bool(this._peekKind(12/*TokenKind.HASH*/))) { 17252 while (this._peekKind(12/*TokenKind.HASH*/)) {
17721 ret.add$1(this.directive()); 17253 ret.add$1(this.directive());
17722 } 17254 }
17723 while (!$notnull_bool(this._maybeEat(1/*TokenKind.END_OF_FILE*/))) { 17255 while (!this._maybeEat(1/*TokenKind.END_OF_FILE*/)) {
17724 ret.add$1(this.topLevelDefinition()); 17256 ret.add$1(this.topLevelDefinition());
17725 } 17257 }
17726 return (ret && ret.is$List$Definition()); 17258 return ret;
17727 } 17259 }
17728 lang_Parser.prototype.directive = function() { 17260 lang_Parser.prototype.directive = function() {
17729 var start = this._peekToken.start; 17261 var start = this._peekToken.start;
17730 this._eat(12/*TokenKind.HASH*/); 17262 this._eat(12/*TokenKind.HASH*/);
17731 var name = this.identifier(); 17263 var name = this.identifier();
17732 var args = this.arguments(); 17264 var args = this.arguments();
17733 this._eatSemicolon(); 17265 this._eatSemicolon();
17734 return new DirectiveDefinition(name, args, this._makeSpan(start)); 17266 return new DirectiveDefinition(name, args, this._makeSpan(start));
17735 } 17267 }
17736 lang_Parser.prototype.topLevelDefinition = function() { 17268 lang_Parser.prototype.topLevelDefinition = function() {
(...skipping 14 matching lines...) Expand all
17751 17283
17752 return this.declaration(true); 17284 return this.declaration(true);
17753 17285
17754 } 17286 }
17755 } 17287 }
17756 lang_Parser.prototype.classDefinition = function(kind) { 17288 lang_Parser.prototype.classDefinition = function(kind) {
17757 var start = this._peekToken.start; 17289 var start = this._peekToken.start;
17758 this._eat(kind); 17290 this._eat(kind);
17759 var name = this.identifier(); 17291 var name = this.identifier();
17760 var typeParams = null; 17292 var typeParams = null;
17761 if ($notnull_bool(this._peekKind(52/*TokenKind.LT*/))) { 17293 if (this._peekKind(52/*TokenKind.LT*/)) {
17762 typeParams = this.typeParameters(); 17294 typeParams = this.typeParameters();
17763 } 17295 }
17764 var _extends = null; 17296 var _extends = null;
17765 if ($notnull_bool(this._maybeEat(74/*TokenKind.EXTENDS*/))) { 17297 if (this._maybeEat(74/*TokenKind.EXTENDS*/)) {
17766 _extends = this.typeList(); 17298 _extends = this.typeList();
17767 } 17299 }
17768 var _implements = null; 17300 var _implements = null;
17769 if ($notnull_bool(this._maybeEat(77/*TokenKind.IMPLEMENTS*/))) { 17301 if (this._maybeEat(77/*TokenKind.IMPLEMENTS*/)) {
17770 _implements = this.typeList(); 17302 _implements = this.typeList();
17771 } 17303 }
17772 var _native = null; 17304 var _native = null;
17773 if ($notnull_bool(this._maybeEat(81/*TokenKind.NATIVE*/))) { 17305 if (this._maybeEat(81/*TokenKind.NATIVE*/)) {
17774 _native = this.maybeStringLiteral(); 17306 _native = this.maybeStringLiteral();
17775 } 17307 }
17776 var _factory = null; 17308 var _factory = null;
17777 if ($notnull_bool(this._maybeEat(75/*TokenKind.FACTORY*/))) { 17309 if (this._maybeEat(75/*TokenKind.FACTORY*/)) {
17778 _factory = this.type(0); 17310 _factory = this.type(0);
17779 } 17311 }
17780 var body = []; 17312 var body = [];
17781 if ($notnull_bool(this._maybeEat(6/*TokenKind.LBRACE*/))) { 17313 if (this._maybeEat(6/*TokenKind.LBRACE*/)) {
17782 while (!$notnull_bool(this._maybeEat(7/*TokenKind.RBRACE*/))) { 17314 while (!this._maybeEat(7/*TokenKind.RBRACE*/)) {
17783 if ($notnull_bool(this.isPrematureEndOfFile())) break; 17315 if (this.isPrematureEndOfFile()) break;
17784 body.add$1(this.declaration(true)); 17316 body.add$1(this.declaration(true));
17785 } 17317 }
17786 } 17318 }
17787 else { 17319 else {
17788 this._errorExpected('block starting with "{" or ";"'); 17320 this._errorExpected('block starting with "{" or ";"');
17789 } 17321 }
17790 return new TypeDefinition(kind == 73/*TokenKind.CLASS*/, name, typeParams, _ex tends, _implements, _native, _factory, body, this._makeSpan(start)); 17322 return new TypeDefinition(kind == 73/*TokenKind.CLASS*/, name, typeParams, _ex tends, _implements, _native, _factory, body, this._makeSpan(start));
17791 } 17323 }
17792 lang_Parser.prototype.functionTypeAlias = function() { 17324 lang_Parser.prototype.functionTypeAlias = function() {
17793 var start = this._peekToken.start; 17325 var start = this._peekToken.start;
17794 this._eat(87/*TokenKind.TYPEDEF*/); 17326 this._eat(87/*TokenKind.TYPEDEF*/);
17795 var di = this.declaredIdentifier(false); 17327 var di = this.declaredIdentifier(false);
17796 var typeParams = null; 17328 var typeParams = null;
17797 if ($notnull_bool(this._peekKind(52/*TokenKind.LT*/))) { 17329 if (this._peekKind(52/*TokenKind.LT*/)) {
17798 typeParams = this.typeParameters(); 17330 typeParams = this.typeParameters();
17799 } 17331 }
17800 var formals = this.formalParameterList(); 17332 var formals = this.formalParameterList();
17801 this._eatSemicolon(); 17333 this._eatSemicolon();
17802 var func = new FunctionDefinition(null, di.type, di.get$name(), formals, null, null, this._makeSpan(start)); 17334 var func = new FunctionDefinition(null, di.type, di.get$name(), formals, null, null, this._makeSpan(start));
17803 return new FunctionTypeDefinition(func, typeParams, this._makeSpan(start)); 17335 return new FunctionTypeDefinition(func, typeParams, this._makeSpan(start));
17804 } 17336 }
17805 lang_Parser.prototype.initializers = function() { 17337 lang_Parser.prototype.initializers = function() {
17806 this._inInitializers = true; 17338 this._inInitializers = true;
17807 var ret = []; 17339 var ret = [];
17808 do { 17340 do {
17809 ret.add$1(this.expression()); 17341 ret.add$1(this.expression());
17810 } 17342 }
17811 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) 17343 while (this._maybeEat(11/*TokenKind.COMMA*/))
17812 this._inInitializers = false; 17344 this._inInitializers = false;
17813 return ret; 17345 return ret;
17814 } 17346 }
17815 lang_Parser.prototype.functionBody = function(inExpression) { 17347 lang_Parser.prototype.functionBody = function(inExpression) {
17816 var start = this._peekToken.start; 17348 var start = this._peekToken.start;
17817 if ($notnull_bool(this._maybeEat(9/*TokenKind.ARROW*/))) { 17349 if (this._maybeEat(9/*TokenKind.ARROW*/)) {
17818 var expr = this.expression(); 17350 var expr = this.expression();
17819 if (!$notnull_bool(inExpression)) { 17351 if (!inExpression) {
17820 this._eatSemicolon(); 17352 this._eatSemicolon();
17821 } 17353 }
17822 return new ReturnStatement(expr, this._makeSpan(start)); 17354 return new ReturnStatement(expr, this._makeSpan(start));
17823 } 17355 }
17824 else if ($notnull_bool(this._peekKind(6/*TokenKind.LBRACE*/))) { 17356 else if (this._peekKind(6/*TokenKind.LBRACE*/)) {
17825 if ($notnull_bool(this.diet)) { 17357 if (this.diet) {
17826 this._skipBlock(); 17358 this._skipBlock();
17827 return new DietStatement(this._makeSpan(start)); 17359 return new DietStatement(this._makeSpan(start));
17828 } 17360 }
17829 else { 17361 else {
17830 return this.block(); 17362 return this.block();
17831 } 17363 }
17832 } 17364 }
17833 else if (!$notnull_bool(inExpression)) { 17365 else if (!inExpression) {
17834 if ($notnull_bool(this._maybeEat(10/*TokenKind.SEMICOLON*/))) { 17366 if (this._maybeEat(10/*TokenKind.SEMICOLON*/)) {
17835 return null; 17367 return null;
17836 } 17368 }
17837 else if ($notnull_bool(this._maybeEat(81/*TokenKind.NATIVE*/))) { 17369 else if (this._maybeEat(81/*TokenKind.NATIVE*/)) {
17838 var nativeBody = this.maybeStringLiteral(); 17370 var nativeBody = this.maybeStringLiteral();
17839 if ($notnull_bool(this._peekKind(10/*TokenKind.SEMICOLON*/))) { 17371 if (this._peekKind(10/*TokenKind.SEMICOLON*/)) {
17840 this._eatSemicolon(); 17372 this._eatSemicolon();
17841 return new NativeStatement(nativeBody, this._makeSpan(start)); 17373 return new NativeStatement(nativeBody, this._makeSpan(start));
17842 } 17374 }
17843 else { 17375 else {
17844 return this.functionBody(inExpression); 17376 return this.functionBody(inExpression);
17845 } 17377 }
17846 } 17378 }
17847 } 17379 }
17848 this._lang_error('Expected function body (neither { nor => found)'); 17380 this._lang_error('Expected function body (neither { nor => found)');
17849 } 17381 }
17850 lang_Parser.prototype.finishField = function(start, modifiers, type, name, value ) { 17382 lang_Parser.prototype.finishField = function(start, modifiers, type, name, value ) {
17851 var names = [name]; 17383 var names = [name];
17852 var values = [value]; 17384 var values = [value];
17853 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 17385 while (this._maybeEat(11/*TokenKind.COMMA*/)) {
17854 names.add$1(this.identifier()); 17386 names.add$1(this.identifier());
17855 if ($notnull_bool(this._maybeEat(20/*TokenKind.ASSIGN*/))) { 17387 if (this._maybeEat(20/*TokenKind.ASSIGN*/)) {
17856 values.add$1(this.expression()); 17388 values.add$1(this.expression());
17857 } 17389 }
17858 else { 17390 else {
17859 values.add$1(); 17391 values.add$1();
17860 } 17392 }
17861 } 17393 }
17862 this._eatSemicolon(); 17394 this._eatSemicolon();
17863 return new VariableDefinition(modifiers, type, names, values, this._makeSpan($ assert_num(start))); 17395 return new VariableDefinition(modifiers, type, names, values, this._makeSpan(s tart));
17864 } 17396 }
17865 lang_Parser.prototype.finishDefinition = function(start, modifiers, di) { 17397 lang_Parser.prototype.finishDefinition = function(start, modifiers, di) {
17866 var $0;
17867 switch (this._peek()) { 17398 switch (this._peek()) {
17868 case 2/*TokenKind.LPAREN*/: 17399 case 2/*TokenKind.LPAREN*/:
17869 17400
17870 var formals = this.formalParameterList(); 17401 var formals = this.formalParameterList();
17871 var inits = null; 17402 var inits = null;
17872 if ($notnull_bool(this._maybeEat(8/*TokenKind.COLON*/))) { 17403 if (this._maybeEat(8/*TokenKind.COLON*/)) {
17873 inits = this.initializers(); 17404 inits = this.initializers();
17874 } 17405 }
17875 var body = this.functionBody(false); 17406 var body = this.functionBody(false);
17876 if ($notnull_bool(di.get$name() == null)) { 17407 if (di.get$name() == null) {
17877 di.set$name(di.type.get$name()); 17408 di.name = di.type.get$name();
17878 } 17409 }
17879 return new FunctionDefinition(modifiers, di.type, di.get$name(), formals, inits, body, this._makeSpan($assert_num(start))); 17410 return new FunctionDefinition(modifiers, di.type, di.get$name(), formals, inits, body, this._makeSpan(start));
17880 17411
17881 case 20/*TokenKind.ASSIGN*/: 17412 case 20/*TokenKind.ASSIGN*/:
17882 17413
17883 this._eat(20/*TokenKind.ASSIGN*/); 17414 this._eat(20/*TokenKind.ASSIGN*/);
17884 var value = this.expression(); 17415 var value = this.expression();
17885 return this.finishField(start, modifiers, di.type, di.get$name(), value); 17416 return this.finishField(start, modifiers, di.type, di.get$name(), value);
17886 17417
17887 case 11/*TokenKind.COMMA*/: 17418 case 11/*TokenKind.COMMA*/:
17888 case 10/*TokenKind.SEMICOLON*/: 17419 case 10/*TokenKind.SEMICOLON*/:
17889 17420
17890 return this.finishField(start, modifiers, di.type, di.get$name(), null); 17421 return this.finishField(start, modifiers, di.type, di.get$name(), null);
17891 17422
17892 default: 17423 default:
17893 17424
17894 this._errorExpected('declaration'); 17425 this._errorExpected('declaration');
17895 return null; 17426 return null;
17896 17427
17897 } 17428 }
17898 } 17429 }
17899 lang_Parser.prototype.declaration = function(includeOperators) { 17430 lang_Parser.prototype.declaration = function(includeOperators) {
17900 var start = this._peekToken.start; 17431 var start = this._peekToken.start;
17901 if ($notnull_bool(this._peekKind(75/*TokenKind.FACTORY*/))) { 17432 if (this._peekKind(75/*TokenKind.FACTORY*/)) {
17902 return this.factoryConstructorDeclaration(); 17433 return this.factoryConstructorDeclaration();
17903 } 17434 }
17904 var modifiers = this._readModifiers(); 17435 var modifiers = this._readModifiers();
17905 return this.finishDefinition(start, modifiers, this.declaredIdentifier(include Operators)); 17436 return this.finishDefinition(start, modifiers, this.declaredIdentifier(include Operators));
17906 } 17437 }
17907 lang_Parser.prototype.factoryConstructorDeclaration = function() { 17438 lang_Parser.prototype.factoryConstructorDeclaration = function() {
17908 var start = this._peekToken.start; 17439 var start = this._peekToken.start;
17909 var factoryToken = this._lang_next(); 17440 var factoryToken = this._lang_next();
17910 var names = [this.identifier()]; 17441 var names = [this.identifier()];
17911 while ($notnull_bool(this._maybeEat(14/*TokenKind.DOT*/))) { 17442 while (this._maybeEat(14/*TokenKind.DOT*/)) {
17912 names.add$1(this.identifier()); 17443 names.add$1(this.identifier());
17913 } 17444 }
17914 var typeParams = null; 17445 var typeParams = null;
17915 if ($notnull_bool(this._peekKind(52/*TokenKind.LT*/))) { 17446 if (this._peekKind(52/*TokenKind.LT*/)) {
17916 typeParams = this.typeParameters(); 17447 typeParams = this.typeParameters();
17917 } 17448 }
17918 var name = null; 17449 var name = null;
17919 var type = null; 17450 var type = null;
17920 if ($notnull_bool(this._maybeEat(14/*TokenKind.DOT*/))) { 17451 if (this._maybeEat(14/*TokenKind.DOT*/)) {
17921 name = this.identifier(); 17452 name = this.identifier();
17922 } 17453 }
17923 else if ($notnull_bool(typeParams == null)) { 17454 else if (typeParams == null) {
17924 if (names.length > 1) { 17455 if (names.length > 1) {
17925 name = names.removeLast$0(); 17456 name = names.removeLast$0();
17926 } 17457 }
17927 else { 17458 else {
17928 name = new lang_Identifier('', names.$index(0).get$span()); 17459 name = new lang_Identifier('', names.$index(0).get$span());
17929 } 17460 }
17930 } 17461 }
17931 else { 17462 else {
17932 name = new lang_Identifier('', names.$index(0).get$span()); 17463 name = new lang_Identifier('', names.$index(0).get$span());
17933 } 17464 }
17934 if (names.length > 1) { 17465 if (names.length > 1) {
17935 this._lang_error('unsupported qualified name for factory', names.$index(0).g et$span()); 17466 this._lang_error('unsupported qualified name for factory', names.$index(0).g et$span());
17936 } 17467 }
17937 type = new NameTypeReference(false, names.$index(0), null, names.$index(0).get $span()); 17468 type = new NameTypeReference(false, names.$index(0), null, names.$index(0).get $span());
17938 var di = new DeclaredIdentifier(type, name, this._makeSpan(start)); 17469 var di = new DeclaredIdentifier(type, name, this._makeSpan(start));
17939 return this.finishDefinition(start, [factoryToken], di); 17470 return this.finishDefinition(start, [factoryToken], di);
17940 } 17471 }
17941 lang_Parser.prototype.statement = function() { 17472 lang_Parser.prototype.statement = function() {
17942 var $0;
17943 switch (this._peek()) { 17473 switch (this._peek()) {
17944 case 88/*TokenKind.BREAK*/: 17474 case 88/*TokenKind.BREAK*/:
17945 17475
17946 return (($0 = this.breakStatement()) && $0.is$lang_Statement()); 17476 return this.breakStatement();
17947 17477
17948 case 92/*TokenKind.CONTINUE*/: 17478 case 92/*TokenKind.CONTINUE*/:
17949 17479
17950 return (($0 = this.continueStatement()) && $0.is$lang_Statement()); 17480 return this.continueStatement();
17951 17481
17952 case 105/*TokenKind.RETURN*/: 17482 case 105/*TokenKind.RETURN*/:
17953 17483
17954 return (($0 = this.returnStatement()) && $0.is$lang_Statement()); 17484 return this.returnStatement();
17955 17485
17956 case 109/*TokenKind.THROW*/: 17486 case 109/*TokenKind.THROW*/:
17957 17487
17958 return (($0 = this.throwStatement()) && $0.is$lang_Statement()); 17488 return this.throwStatement();
17959 17489
17960 case 72/*TokenKind.ASSERT*/: 17490 case 72/*TokenKind.ASSERT*/:
17961 17491
17962 return (($0 = this.assertStatement()) && $0.is$lang_Statement()); 17492 return this.assertStatement();
17963 17493
17964 case 114/*TokenKind.WHILE*/: 17494 case 114/*TokenKind.WHILE*/:
17965 17495
17966 return this.whileStatement(); 17496 return this.whileStatement();
17967 17497
17968 case 94/*TokenKind.DO*/: 17498 case 94/*TokenKind.DO*/:
17969 17499
17970 return this.doStatement(); 17500 return this.doStatement();
17971 17501
17972 case 99/*TokenKind.FOR*/: 17502 case 99/*TokenKind.FOR*/:
17973 17503
17974 return (($0 = this.forStatement()) && $0.is$lang_Statement()); 17504 return this.forStatement();
17975 17505
17976 case 100/*TokenKind.IF*/: 17506 case 100/*TokenKind.IF*/:
17977 17507
17978 return this.ifStatement(); 17508 return this.ifStatement();
17979 17509
17980 case 107/*TokenKind.SWITCH*/: 17510 case 107/*TokenKind.SWITCH*/:
17981 17511
17982 return (($0 = this.switchStatement()) && $0.is$lang_Statement()); 17512 return this.switchStatement();
17983 17513
17984 case 111/*TokenKind.TRY*/: 17514 case 111/*TokenKind.TRY*/:
17985 17515
17986 return (($0 = this.tryStatement()) && $0.is$lang_Statement()); 17516 return this.tryStatement();
17987 17517
17988 case 6/*TokenKind.LBRACE*/: 17518 case 6/*TokenKind.LBRACE*/:
17989 17519
17990 return this.block(); 17520 return this.block();
17991 17521
17992 case 10/*TokenKind.SEMICOLON*/: 17522 case 10/*TokenKind.SEMICOLON*/:
17993 17523
17994 return this.emptyStatement(); 17524 return this.emptyStatement();
17995 17525
17996 case 97/*TokenKind.FINAL*/: 17526 case 97/*TokenKind.FINAL*/:
17997 17527
17998 return (($0 = this.declaration(false)) && $0.is$lang_Statement()); 17528 return this.declaration(false);
17999 17529
18000 case 112/*TokenKind.VAR*/: 17530 case 112/*TokenKind.VAR*/:
18001 17531
18002 return (($0 = this.declaration(false)) && $0.is$lang_Statement()); 17532 return this.declaration(false);
18003 17533
18004 default: 17534 default:
18005 17535
18006 return (($0 = this.finishExpressionAsStatement(this.expression())) && $0.i s$lang_Statement()); 17536 return this.finishExpressionAsStatement(this.expression());
18007 17537
18008 } 17538 }
18009 } 17539 }
18010 lang_Parser.prototype.finishExpressionAsStatement = function(expr) { 17540 lang_Parser.prototype.finishExpressionAsStatement = function(expr) {
18011 var $0;
18012 var start = expr.get$span().start; 17541 var start = expr.get$span().start;
18013 if ($notnull_bool(this._maybeEat(8/*TokenKind.COLON*/))) { 17542 if (this._maybeEat(8/*TokenKind.COLON*/)) {
18014 var label = this._makeLabel(expr); 17543 var label = this._makeLabel(expr);
18015 return new LabeledStatement(label, this.statement(), this._makeSpan(start)); 17544 return new LabeledStatement(label, this.statement(), this._makeSpan(start));
18016 } 17545 }
18017 if ((expr instanceof LambdaExpression)) { 17546 if ((expr instanceof LambdaExpression)) {
18018 if (!(expr.func.body instanceof BlockStatement)) { 17547 if (!(expr.func.body instanceof BlockStatement)) {
18019 this._eatSemicolon(); 17548 this._eatSemicolon();
18020 expr.func.span = this._makeSpan(start); 17549 expr.func.span = this._makeSpan(start);
18021 } 17550 }
18022 return expr.func; 17551 return expr.func;
18023 } 17552 }
18024 else if ((expr instanceof DeclaredIdentifier)) { 17553 else if ((expr instanceof DeclaredIdentifier)) {
18025 var value = null; 17554 var value = null;
18026 if ($notnull_bool(this._maybeEat(20/*TokenKind.ASSIGN*/))) { 17555 if (this._maybeEat(20/*TokenKind.ASSIGN*/)) {
18027 value = this.expression(); 17556 value = this.expression();
18028 } 17557 }
18029 return this.finishField(start, null, expr.type, expr.get$name(), value); 17558 return this.finishField(start, null, expr.type, expr.get$name(), value);
18030 } 17559 }
18031 else if ($notnull_bool(this._isBin(expr, 20/*TokenKind.ASSIGN*/)) && ((expr.x instanceof DeclaredIdentifier))) { 17560 else if (this._isBin(expr, 20/*TokenKind.ASSIGN*/) && ((expr.x instanceof Decl aredIdentifier))) {
18032 var di = (($0 = expr.x) && $0.is$DeclaredIdentifier()); 17561 var di = expr.x;
18033 return this.finishField(start, null, di.type, di.name, expr.y); 17562 return this.finishField(start, null, di.type, di.name, expr.y);
18034 } 17563 }
18035 else if ($notnull_bool(this._isBin(expr, 52/*TokenKind.LT*/)) && $notnull_bool (this._maybeEat(11/*TokenKind.COMMA*/))) { 17564 else if (this._isBin(expr, 52/*TokenKind.LT*/) && this._maybeEat(11/*TokenKind .COMMA*/)) {
18036 var baseType = this._makeType(expr.x); 17565 var baseType = this._makeType(expr.x);
18037 var typeArgs = [this._makeType(expr.y)]; 17566 var typeArgs = [this._makeType(expr.y)];
18038 var gt = this._finishTypeArguments((baseType && baseType.is$TypeReference()) , 0, typeArgs); 17567 var gt = this._finishTypeArguments(baseType, 0, typeArgs);
18039 var name = this.identifier(); 17568 var name = this.identifier();
18040 var value = null; 17569 var value = null;
18041 if ($notnull_bool(this._maybeEat(20/*TokenKind.ASSIGN*/))) { 17570 if (this._maybeEat(20/*TokenKind.ASSIGN*/)) {
18042 value = this.expression(); 17571 value = this.expression();
18043 } 17572 }
18044 return this.finishField(expr.get$span().start, null, gt, name, value); 17573 return this.finishField(expr.get$span().start, null, gt, name, value);
18045 } 17574 }
18046 else { 17575 else {
18047 this._eatSemicolon(); 17576 this._eatSemicolon();
18048 return new lang_ExpressionStatement(expr, this._makeSpan(expr.get$span().sta rt)); 17577 return new lang_ExpressionStatement(expr, this._makeSpan(expr.get$span().sta rt));
18049 } 17578 }
18050 } 17579 }
18051 lang_Parser.prototype.testCondition = function() { 17580 lang_Parser.prototype.testCondition = function() {
18052 this._eat(2/*TokenKind.LPAREN*/); 17581 this._eat(2/*TokenKind.LPAREN*/);
18053 var ret = this.expression(); 17582 var ret = this.expression();
18054 this._eat(3/*TokenKind.RPAREN*/); 17583 this._eat(3/*TokenKind.RPAREN*/);
18055 return (ret && ret.is$lang_Expression()); 17584 return ret;
18056 } 17585 }
18057 lang_Parser.prototype.block = function() { 17586 lang_Parser.prototype.block = function() {
18058 var start = this._peekToken.start; 17587 var start = this._peekToken.start;
18059 this._eat(6/*TokenKind.LBRACE*/); 17588 this._eat(6/*TokenKind.LBRACE*/);
18060 var stmts = []; 17589 var stmts = [];
18061 while (!$notnull_bool(this._maybeEat(7/*TokenKind.RBRACE*/))) { 17590 while (!this._maybeEat(7/*TokenKind.RBRACE*/)) {
18062 if ($notnull_bool(this.isPrematureEndOfFile())) break; 17591 if (this.isPrematureEndOfFile()) break;
18063 stmts.add$1(this.statement()); 17592 stmts.add$1(this.statement());
18064 } 17593 }
18065 return new BlockStatement(stmts, this._makeSpan(start)); 17594 return new BlockStatement(stmts, this._makeSpan(start));
18066 } 17595 }
18067 lang_Parser.prototype.emptyStatement = function() { 17596 lang_Parser.prototype.emptyStatement = function() {
18068 var start = this._peekToken.start; 17597 var start = this._peekToken.start;
18069 this._eat(10/*TokenKind.SEMICOLON*/); 17598 this._eat(10/*TokenKind.SEMICOLON*/);
18070 return new EmptyStatement(this._makeSpan(start)); 17599 return new EmptyStatement(this._makeSpan(start));
18071 } 17600 }
18072 lang_Parser.prototype.ifStatement = function() { 17601 lang_Parser.prototype.ifStatement = function() {
18073 var start = this._peekToken.start; 17602 var start = this._peekToken.start;
18074 this._eat(100/*TokenKind.IF*/); 17603 this._eat(100/*TokenKind.IF*/);
18075 var test = this.testCondition(); 17604 var test = this.testCondition();
18076 var trueBranch = this.statement(); 17605 var trueBranch = this.statement();
18077 var falseBranch = null; 17606 var falseBranch = null;
18078 if ($notnull_bool(this._maybeEat(95/*TokenKind.ELSE*/))) { 17607 if (this._maybeEat(95/*TokenKind.ELSE*/)) {
18079 falseBranch = this.statement(); 17608 falseBranch = this.statement();
18080 } 17609 }
18081 return new IfStatement(test, trueBranch, falseBranch, this._makeSpan(start)); 17610 return new IfStatement(test, trueBranch, falseBranch, this._makeSpan(start));
18082 } 17611 }
18083 lang_Parser.prototype.whileStatement = function() { 17612 lang_Parser.prototype.whileStatement = function() {
18084 var start = this._peekToken.start; 17613 var start = this._peekToken.start;
18085 this._eat(114/*TokenKind.WHILE*/); 17614 this._eat(114/*TokenKind.WHILE*/);
18086 var test = this.testCondition(); 17615 var test = this.testCondition();
18087 var body = this.statement(); 17616 var body = this.statement();
18088 return new WhileStatement(test, body, this._makeSpan(start)); 17617 return new WhileStatement(test, body, this._makeSpan(start));
18089 } 17618 }
18090 lang_Parser.prototype.doStatement = function() { 17619 lang_Parser.prototype.doStatement = function() {
18091 var start = this._peekToken.start; 17620 var start = this._peekToken.start;
18092 this._eat(94/*TokenKind.DO*/); 17621 this._eat(94/*TokenKind.DO*/);
18093 var body = this.statement(); 17622 var body = this.statement();
18094 this._eat(114/*TokenKind.WHILE*/); 17623 this._eat(114/*TokenKind.WHILE*/);
18095 var test = this.testCondition(); 17624 var test = this.testCondition();
18096 this._eatSemicolon(); 17625 this._eatSemicolon();
18097 return new DoStatement(body, test, this._makeSpan(start)); 17626 return new DoStatement(body, test, this._makeSpan(start));
18098 } 17627 }
18099 lang_Parser.prototype.forStatement = function() { 17628 lang_Parser.prototype.forStatement = function() {
18100 var start = this._peekToken.start; 17629 var start = this._peekToken.start;
18101 this._eat(99/*TokenKind.FOR*/); 17630 this._eat(99/*TokenKind.FOR*/);
18102 this._eat(2/*TokenKind.LPAREN*/); 17631 this._eat(2/*TokenKind.LPAREN*/);
18103 var init = this.forInitializerStatement(start); 17632 var init = this.forInitializerStatement(start);
18104 if ((init instanceof ForInStatement)) { 17633 if ((init instanceof ForInStatement)) {
18105 return init; 17634 return init;
18106 } 17635 }
18107 var test = null; 17636 var test = null;
18108 if (!$notnull_bool(this._maybeEat(10/*TokenKind.SEMICOLON*/))) { 17637 if (!this._maybeEat(10/*TokenKind.SEMICOLON*/)) {
18109 test = this.expression(); 17638 test = this.expression();
18110 this._eatSemicolon(); 17639 this._eatSemicolon();
18111 } 17640 }
18112 var step = []; 17641 var step = [];
18113 if (!$notnull_bool(this._maybeEat(3/*TokenKind.RPAREN*/))) { 17642 if (!this._maybeEat(3/*TokenKind.RPAREN*/)) {
18114 step.add$1(this.expression()); 17643 step.add$1(this.expression());
18115 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 17644 while (this._maybeEat(11/*TokenKind.COMMA*/)) {
18116 step.add$1(this.expression()); 17645 step.add$1(this.expression());
18117 } 17646 }
18118 this._eat(3/*TokenKind.RPAREN*/); 17647 this._eat(3/*TokenKind.RPAREN*/);
18119 } 17648 }
18120 var body = this.statement(); 17649 var body = this.statement();
18121 return new ForStatement(init, test, step, body, this._makeSpan(start)); 17650 return new ForStatement(init, test, step, body, this._makeSpan(start));
18122 } 17651 }
18123 lang_Parser.prototype.forInitializerStatement = function(start) { 17652 lang_Parser.prototype.forInitializerStatement = function(start) {
18124 var $0; 17653 if (this._maybeEat(10/*TokenKind.SEMICOLON*/)) {
18125 if ($notnull_bool(this._maybeEat(10/*TokenKind.SEMICOLON*/))) {
18126 return null; 17654 return null;
18127 } 17655 }
18128 else { 17656 else {
18129 var init = this.expression(); 17657 var init = this.expression();
18130 if ($notnull_bool(this._peekKind(11/*TokenKind.COMMA*/)) && $notnull_bool(th is._isBin(init, 52/*TokenKind.LT*/))) { 17658 if (this._peekKind(11/*TokenKind.COMMA*/) && this._isBin(init, 52/*TokenKind .LT*/)) {
18131 this._eat(11/*TokenKind.COMMA*/); 17659 this._eat(11/*TokenKind.COMMA*/);
18132 var baseType = this._makeType(init.x); 17660 var baseType = this._makeType(init.x);
18133 var typeArgs = [this._makeType(init.y)]; 17661 var typeArgs = [this._makeType(init.y)];
18134 var gt = this._finishTypeArguments((baseType && baseType.is$TypeReference( )), 0, typeArgs); 17662 var gt = this._finishTypeArguments(baseType, 0, typeArgs);
18135 var name = this.identifier(); 17663 var name = this.identifier();
18136 init = new DeclaredIdentifier(gt, name, this._makeSpan(init.get$span().sta rt)); 17664 init = new DeclaredIdentifier(gt, name, this._makeSpan(init.get$span().sta rt));
18137 } 17665 }
18138 if ($notnull_bool(this._maybeEat(101/*TokenKind.IN*/))) { 17666 if (this._maybeEat(101/*TokenKind.IN*/)) {
18139 return this._finishForIn(start, (($0 = this._makeDeclaredIdentifier(init)) && $0.is$DeclaredIdentifier())); 17667 return this._finishForIn(start, this._makeDeclaredIdentifier(init));
18140 } 17668 }
18141 else { 17669 else {
18142 return this.finishExpressionAsStatement(init); 17670 return this.finishExpressionAsStatement(init);
18143 } 17671 }
18144 } 17672 }
18145 } 17673 }
18146 lang_Parser.prototype._finishForIn = function(start, di) { 17674 lang_Parser.prototype._finishForIn = function(start, di) {
18147 var expr = this.expression(); 17675 var expr = this.expression();
18148 this._eat(3/*TokenKind.RPAREN*/); 17676 this._eat(3/*TokenKind.RPAREN*/);
18149 var body = this.statement(); 17677 var body = this.statement();
18150 return new ForInStatement(di, expr, body, this._makeSpan(start)); 17678 return new ForInStatement(di, expr, body, this._makeSpan(start));
18151 } 17679 }
18152 lang_Parser.prototype.tryStatement = function() { 17680 lang_Parser.prototype.tryStatement = function() {
18153 var start = this._peekToken.start; 17681 var start = this._peekToken.start;
18154 this._eat(111/*TokenKind.TRY*/); 17682 this._eat(111/*TokenKind.TRY*/);
18155 var body = this.block(); 17683 var body = this.block();
18156 var catches = []; 17684 var catches = [];
18157 while ($notnull_bool(this._peekKind(90/*TokenKind.CATCH*/))) { 17685 while (this._peekKind(90/*TokenKind.CATCH*/)) {
18158 catches.add$1(this.catchNode()); 17686 catches.add$1(this.catchNode());
18159 } 17687 }
18160 var finallyBlock = null; 17688 var finallyBlock = null;
18161 if ($notnull_bool(this._maybeEat(98/*TokenKind.FINALLY*/))) { 17689 if (this._maybeEat(98/*TokenKind.FINALLY*/)) {
18162 finallyBlock = this.block(); 17690 finallyBlock = this.block();
18163 } 17691 }
18164 return new TryStatement(body, catches, finallyBlock, this._makeSpan(start)); 17692 return new TryStatement(body, catches, finallyBlock, this._makeSpan(start));
18165 } 17693 }
18166 lang_Parser.prototype.catchNode = function() { 17694 lang_Parser.prototype.catchNode = function() {
18167 var start = this._peekToken.start; 17695 var start = this._peekToken.start;
18168 this._eat(90/*TokenKind.CATCH*/); 17696 this._eat(90/*TokenKind.CATCH*/);
18169 this._eat(2/*TokenKind.LPAREN*/); 17697 this._eat(2/*TokenKind.LPAREN*/);
18170 var exc = this.declaredIdentifier(false); 17698 var exc = this.declaredIdentifier(false);
18171 var trace = null; 17699 var trace = null;
18172 if ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 17700 if (this._maybeEat(11/*TokenKind.COMMA*/)) {
18173 trace = this.declaredIdentifier(false); 17701 trace = this.declaredIdentifier(false);
18174 } 17702 }
18175 this._eat(3/*TokenKind.RPAREN*/); 17703 this._eat(3/*TokenKind.RPAREN*/);
18176 var body = this.block(); 17704 var body = this.block();
18177 return new CatchNode(exc, trace, body, this._makeSpan(start)); 17705 return new CatchNode(exc, trace, body, this._makeSpan(start));
18178 } 17706 }
18179 lang_Parser.prototype.switchStatement = function() { 17707 lang_Parser.prototype.switchStatement = function() {
18180 var start = this._peekToken.start; 17708 var start = this._peekToken.start;
18181 this._eat(107/*TokenKind.SWITCH*/); 17709 this._eat(107/*TokenKind.SWITCH*/);
18182 var test = this.testCondition(); 17710 var test = this.testCondition();
18183 var cases = []; 17711 var cases = [];
18184 this._eat(6/*TokenKind.LBRACE*/); 17712 this._eat(6/*TokenKind.LBRACE*/);
18185 while (!$notnull_bool(this._maybeEat(7/*TokenKind.RBRACE*/))) { 17713 while (!this._maybeEat(7/*TokenKind.RBRACE*/)) {
18186 cases.add$1(this.caseNode()); 17714 cases.add$1(this.caseNode());
18187 } 17715 }
18188 return new SwitchStatement(test, cases, this._makeSpan(start)); 17716 return new SwitchStatement(test, cases, this._makeSpan(start));
18189 } 17717 }
18190 lang_Parser.prototype._peekCaseEnd = function() { 17718 lang_Parser.prototype._peekCaseEnd = function() {
18191 var kind = this._peek(); 17719 var kind = this._peek();
18192 return $notnull_bool($eq(kind, 7/*TokenKind.RBRACE*/)) || $notnull_bool($eq(ki nd, 89/*TokenKind.CASE*/)) || $notnull_bool($eq(kind, 93/*TokenKind.DEFAULT*/)); 17720 return $eq(kind, 7/*TokenKind.RBRACE*/) || $eq(kind, 89/*TokenKind.CASE*/) || $eq(kind, 93/*TokenKind.DEFAULT*/);
18193 } 17721 }
18194 lang_Parser.prototype.caseNode = function() { 17722 lang_Parser.prototype.caseNode = function() {
18195 var start = this._peekToken.start; 17723 var start = this._peekToken.start;
18196 var label = null; 17724 var label = null;
18197 if ($notnull_bool(this._peekIdentifier())) { 17725 if (this._peekIdentifier()) {
18198 label = this.identifier(); 17726 label = this.identifier();
18199 this._eat(8/*TokenKind.COLON*/); 17727 this._eat(8/*TokenKind.COLON*/);
18200 } 17728 }
18201 var cases = []; 17729 var cases = [];
18202 while (true) { 17730 while (true) {
18203 if ($notnull_bool(this._maybeEat(89/*TokenKind.CASE*/))) { 17731 if (this._maybeEat(89/*TokenKind.CASE*/)) {
18204 cases.add$1(this.expression()); 17732 cases.add$1(this.expression());
18205 this._eat(8/*TokenKind.COLON*/); 17733 this._eat(8/*TokenKind.COLON*/);
18206 } 17734 }
18207 else if ($notnull_bool(this._maybeEat(93/*TokenKind.DEFAULT*/))) { 17735 else if (this._maybeEat(93/*TokenKind.DEFAULT*/)) {
18208 cases.add$1(); 17736 cases.add$1();
18209 this._eat(8/*TokenKind.COLON*/); 17737 this._eat(8/*TokenKind.COLON*/);
18210 } 17738 }
18211 else { 17739 else {
18212 break; 17740 break;
18213 } 17741 }
18214 } 17742 }
18215 if (cases.length == 0) { 17743 if (cases.length == 0) {
18216 this._lang_error('case or default'); 17744 this._lang_error('case or default');
18217 } 17745 }
18218 var stmts = []; 17746 var stmts = [];
18219 while (!$notnull_bool(this._peekCaseEnd())) { 17747 while (!this._peekCaseEnd()) {
18220 if ($notnull_bool(this.isPrematureEndOfFile())) break; 17748 if (this.isPrematureEndOfFile()) break;
18221 stmts.add$1(this.statement()); 17749 stmts.add$1(this.statement());
18222 } 17750 }
18223 return new CaseNode(label, cases, stmts, this._makeSpan(start)); 17751 return new CaseNode(label, cases, stmts, this._makeSpan(start));
18224 } 17752 }
18225 lang_Parser.prototype.returnStatement = function() { 17753 lang_Parser.prototype.returnStatement = function() {
18226 var start = this._peekToken.start; 17754 var start = this._peekToken.start;
18227 this._eat(105/*TokenKind.RETURN*/); 17755 this._eat(105/*TokenKind.RETURN*/);
18228 var expr; 17756 var expr;
18229 if ($notnull_bool(this._maybeEat(10/*TokenKind.SEMICOLON*/))) { 17757 if (this._maybeEat(10/*TokenKind.SEMICOLON*/)) {
18230 expr = null; 17758 expr = null;
18231 } 17759 }
18232 else { 17760 else {
18233 expr = this.expression(); 17761 expr = this.expression();
18234 this._eatSemicolon(); 17762 this._eatSemicolon();
18235 } 17763 }
18236 return new ReturnStatement(expr, this._makeSpan(start)); 17764 return new ReturnStatement(expr, this._makeSpan(start));
18237 } 17765 }
18238 lang_Parser.prototype.throwStatement = function() { 17766 lang_Parser.prototype.throwStatement = function() {
18239 var start = this._peekToken.start; 17767 var start = this._peekToken.start;
18240 this._eat(109/*TokenKind.THROW*/); 17768 this._eat(109/*TokenKind.THROW*/);
18241 var expr; 17769 var expr;
18242 if ($notnull_bool(this._maybeEat(10/*TokenKind.SEMICOLON*/))) { 17770 if (this._maybeEat(10/*TokenKind.SEMICOLON*/)) {
18243 expr = null; 17771 expr = null;
18244 } 17772 }
18245 else { 17773 else {
18246 expr = this.expression(); 17774 expr = this.expression();
18247 this._eatSemicolon(); 17775 this._eatSemicolon();
18248 } 17776 }
18249 return new ThrowStatement(expr, this._makeSpan(start)); 17777 return new ThrowStatement(expr, this._makeSpan(start));
18250 } 17778 }
18251 lang_Parser.prototype.assertStatement = function() { 17779 lang_Parser.prototype.assertStatement = function() {
18252 var start = this._peekToken.start; 17780 var start = this._peekToken.start;
18253 this._eat(72/*TokenKind.ASSERT*/); 17781 this._eat(72/*TokenKind.ASSERT*/);
18254 this._eat(2/*TokenKind.LPAREN*/); 17782 this._eat(2/*TokenKind.LPAREN*/);
18255 var expr = this.expression(); 17783 var expr = this.expression();
18256 this._eat(3/*TokenKind.RPAREN*/); 17784 this._eat(3/*TokenKind.RPAREN*/);
18257 this._eatSemicolon(); 17785 this._eatSemicolon();
18258 return new AssertStatement(expr, this._makeSpan(start)); 17786 return new AssertStatement(expr, this._makeSpan(start));
18259 } 17787 }
18260 lang_Parser.prototype.breakStatement = function() { 17788 lang_Parser.prototype.breakStatement = function() {
18261 var start = this._peekToken.start; 17789 var start = this._peekToken.start;
18262 this._eat(88/*TokenKind.BREAK*/); 17790 this._eat(88/*TokenKind.BREAK*/);
18263 var name = null; 17791 var name = null;
18264 if ($notnull_bool(this._peekIdentifier())) { 17792 if (this._peekIdentifier()) {
18265 name = this.identifier(); 17793 name = this.identifier();
18266 } 17794 }
18267 this._eatSemicolon(); 17795 this._eatSemicolon();
18268 return new BreakStatement(name, this._makeSpan(start)); 17796 return new BreakStatement(name, this._makeSpan(start));
18269 } 17797 }
18270 lang_Parser.prototype.continueStatement = function() { 17798 lang_Parser.prototype.continueStatement = function() {
18271 var start = this._peekToken.start; 17799 var start = this._peekToken.start;
18272 this._eat(92/*TokenKind.CONTINUE*/); 17800 this._eat(92/*TokenKind.CONTINUE*/);
18273 var name = null; 17801 var name = null;
18274 if ($notnull_bool(this._peekIdentifier())) { 17802 if (this._peekIdentifier()) {
18275 name = this.identifier(); 17803 name = this.identifier();
18276 } 17804 }
18277 this._eatSemicolon(); 17805 this._eatSemicolon();
18278 return new ContinueStatement(name, this._makeSpan(start)); 17806 return new ContinueStatement(name, this._makeSpan(start));
18279 } 17807 }
18280 lang_Parser.prototype.expression = function() { 17808 lang_Parser.prototype.expression = function() {
18281 return this.infixExpression(0); 17809 return this.infixExpression(0);
18282 } 17810 }
18283 lang_Parser.prototype._makeType = function(expr) { 17811 lang_Parser.prototype._makeType = function(expr) {
18284 if ((expr instanceof VarExpression)) { 17812 if ((expr instanceof VarExpression)) {
18285 return new NameTypeReference(false, expr.get$name(), null, expr.get$span()); 17813 return new NameTypeReference(false, expr.get$name(), null, expr.get$span());
18286 } 17814 }
18287 else if ((expr instanceof DotExpression)) { 17815 else if ((expr instanceof DotExpression)) {
18288 var type = this._makeType(expr.self); 17816 var type = this._makeType(expr.self);
18289 if (type.names == null) { 17817 if (type.names == null) {
18290 type.names = [expr.get$name()]; 17818 type.names = [expr.get$name()];
18291 } 17819 }
18292 else { 17820 else {
18293 type.names.add(expr.get$name()); 17821 type.names.add(expr.get$name());
18294 } 17822 }
18295 type.span = expr.get$span(); 17823 type.span = expr.get$span();
18296 return type; 17824 return type;
18297 } 17825 }
18298 else { 17826 else {
18299 this._lang_error('expected type reference'); 17827 this._lang_error('expected type reference');
18300 return null; 17828 return null;
18301 } 17829 }
18302 } 17830 }
18303 lang_Parser.prototype.infixExpression = function(precedence) { 17831 lang_Parser.prototype.infixExpression = function(precedence) {
18304 var $0; 17832 return this.finishInfixExpression(this.unaryExpression(), precedence);
18305 return this.finishInfixExpression((($0 = this.unaryExpression()) && $0.is$lang _Expression()), precedence);
18306 } 17833 }
18307 lang_Parser.prototype._finishDeclaredId = function(type) { 17834 lang_Parser.prototype._finishDeclaredId = function(type) {
18308 var name = this.identifier(); 17835 var name = this.identifier();
18309 return this.finishPostfixExpression(new DeclaredIdentifier(type, name, this._m akeSpan(type.get$span().start))); 17836 return this.finishPostfixExpression(new DeclaredIdentifier(type, name, this._m akeSpan(type.get$span().start)));
18310 } 17837 }
18311 lang_Parser.prototype._fixAsType = function(x) { 17838 lang_Parser.prototype._fixAsType = function(x) {
18312 $assert(this._isBin(x, 52/*TokenKind.LT*/), "_isBin(x, TokenKind.LT)", "parser .dart", 790, 12); 17839 if (this._maybeEat(53/*TokenKind.GT*/)) {
18313 if ($notnull_bool(this._maybeEat(53/*TokenKind.GT*/))) {
18314 var base = this._makeType(x.x); 17840 var base = this._makeType(x.x);
18315 var typeParam = this._makeType(x.y); 17841 var typeParam = this._makeType(x.y);
18316 var type = new GenericTypeReference(base, [typeParam], 0, this._makeSpan(x.s pan.start)); 17842 var type = new GenericTypeReference(base, [typeParam], 0, this._makeSpan(x.s pan.start));
18317 return this._finishDeclaredId(type); 17843 return this._finishDeclaredId(type);
18318 } 17844 }
18319 else { 17845 else {
18320 $assert(this._peekKind(52/*TokenKind.LT*/), "_peekKind(TokenKind.LT)", "pars er.dart", 801, 14);
18321 var base = this._makeType(x.x); 17846 var base = this._makeType(x.x);
18322 var paramBase = this._makeType(x.y); 17847 var paramBase = this._makeType(x.y);
18323 var firstParam = this.addTypeArguments((paramBase && paramBase.is$TypeRefere nce()), 1); 17848 var firstParam = this.addTypeArguments(paramBase, 1);
18324 var type; 17849 var type;
18325 if (firstParam.depth <= 0) { 17850 if (firstParam.depth <= 0) {
18326 type = new GenericTypeReference(base, [firstParam], 0, this._makeSpan(x.sp an.start)); 17851 type = new GenericTypeReference(base, [firstParam], 0, this._makeSpan(x.sp an.start));
18327 } 17852 }
18328 else if ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 17853 else if (this._maybeEat(11/*TokenKind.COMMA*/)) {
18329 type = this._finishTypeArguments((base && base.is$TypeReference()), 0, [fi rstParam]); 17854 type = this._finishTypeArguments(base, 0, [firstParam]);
18330 } 17855 }
18331 else { 17856 else {
18332 this._eat(53/*TokenKind.GT*/); 17857 this._eat(53/*TokenKind.GT*/);
18333 type = new GenericTypeReference(base, [firstParam], 0, this._makeSpan(x.sp an.start)); 17858 type = new GenericTypeReference(base, [firstParam], 0, this._makeSpan(x.sp an.start));
18334 } 17859 }
18335 return this._finishDeclaredId(type); 17860 return this._finishDeclaredId(type);
18336 } 17861 }
18337 } 17862 }
18338 lang_Parser.prototype.finishInfixExpression = function(x, precedence) { 17863 lang_Parser.prototype.finishInfixExpression = function(x, precedence) {
18339 while (true) { 17864 while (true) {
18340 var kind = this._peek(); 17865 var kind = this._peek();
18341 var prec = TokenKind.infixPrecedence(this._peek()); 17866 var prec = TokenKind.infixPrecedence(this._peek());
18342 if (prec >= precedence) { 17867 if (prec >= precedence) {
18343 if (kind == 52/*TokenKind.LT*/ || kind == 53/*TokenKind.GT*/) { 17868 if (kind == 52/*TokenKind.LT*/ || kind == 53/*TokenKind.GT*/) {
18344 if ($notnull_bool(this._isBin(x, 52/*TokenKind.LT*/))) { 17869 if (this._isBin(x, 52/*TokenKind.LT*/)) {
18345 return this._fixAsType((x && x.is$BinaryExpression())); 17870 return this._fixAsType(x);
18346 } 17871 }
18347 } 17872 }
18348 var op = this._lang_next(); 17873 var op = this._lang_next();
18349 if ($notnull_bool($eq(op.kind, 102/*TokenKind.IS*/))) { 17874 if ($eq(op.kind, 102/*TokenKind.IS*/)) {
18350 var isTrue = !$notnull_bool(this._maybeEat(19/*TokenKind.NOT*/)); 17875 var isTrue = !this._maybeEat(19/*TokenKind.NOT*/);
18351 var typeRef = this.type(0); 17876 var typeRef = this.type(0);
18352 x = new IsExpression(isTrue, x, typeRef, this._makeSpan(x.span.start)); 17877 x = new IsExpression(isTrue, x, typeRef, this._makeSpan(x.span.start));
18353 continue; 17878 continue;
18354 } 17879 }
18355 var y = this.infixExpression($assert_num($notnull_bool($eq(prec, 2)) ? pre c : prec + 1)); 17880 var y = this.infixExpression($eq(prec, 2) ? prec : prec + 1);
18356 if ($notnull_bool($eq(op.kind, 33/*TokenKind.CONDITIONAL*/))) { 17881 if ($eq(op.kind, 33/*TokenKind.CONDITIONAL*/)) {
18357 this._eat(8/*TokenKind.COLON*/); 17882 this._eat(8/*TokenKind.COLON*/);
18358 var z = this.infixExpression($assert_num(prec)); 17883 var z = this.infixExpression(prec);
18359 x = new ConditionalExpression(x, y, z, this._makeSpan(x.span.start)); 17884 x = new ConditionalExpression(x, y, z, this._makeSpan(x.span.start));
18360 } 17885 }
18361 else { 17886 else {
18362 x = new BinaryExpression(op, x, y, this._makeSpan(x.span.start)); 17887 x = new BinaryExpression(op, x, y, this._makeSpan(x.span.start));
18363 } 17888 }
18364 } 17889 }
18365 else { 17890 else {
18366 break; 17891 break;
18367 } 17892 }
18368 } 17893 }
(...skipping 11 matching lines...) Expand all
18380 return true; 17905 return true;
18381 17906
18382 default: 17907 default:
18383 17908
18384 return false; 17909 return false;
18385 17910
18386 } 17911 }
18387 } 17912 }
18388 lang_Parser.prototype.unaryExpression = function() { 17913 lang_Parser.prototype.unaryExpression = function() {
18389 var start = this._peekToken.start; 17914 var start = this._peekToken.start;
18390 if ($notnull_bool(this._isPrefixUnaryOperator(this._peek()))) { 17915 if (this._isPrefixUnaryOperator(this._peek())) {
18391 var tok = this._lang_next(); 17916 var tok = this._lang_next();
18392 var expr = this.unaryExpression(); 17917 var expr = this.unaryExpression();
18393 return new UnaryExpression(tok, expr, this._makeSpan(start)); 17918 return new UnaryExpression(tok, expr, this._makeSpan(start));
18394 } 17919 }
18395 return this.finishPostfixExpression(this.primary()); 17920 return this.finishPostfixExpression(this.primary());
18396 } 17921 }
18397 lang_Parser.prototype.argument = function() { 17922 lang_Parser.prototype.argument = function() {
18398 var start = this._peekToken.start; 17923 var start = this._peekToken.start;
18399 var expr; 17924 var expr;
18400 var label = null; 17925 var label = null;
18401 if ($notnull_bool(this._maybeEat(15/*TokenKind.ELLIPSIS*/))) { 17926 if (this._maybeEat(15/*TokenKind.ELLIPSIS*/)) {
18402 label = new lang_Identifier('...', this._makeSpan(start)); 17927 label = new lang_Identifier('...', this._makeSpan(start));
18403 } 17928 }
18404 expr = this.expression(); 17929 expr = this.expression();
18405 if (label == null && $notnull_bool(this._maybeEat(8/*TokenKind.COLON*/))) { 17930 if (label == null && this._maybeEat(8/*TokenKind.COLON*/)) {
18406 label = this._makeLabel(expr); 17931 label = this._makeLabel(expr);
18407 expr = this.expression(); 17932 expr = this.expression();
18408 } 17933 }
18409 return new ArgumentNode(label, expr, this._makeSpan(start)); 17934 return new ArgumentNode(label, expr, this._makeSpan(start));
18410 } 17935 }
18411 lang_Parser.prototype.arguments = function() { 17936 lang_Parser.prototype.arguments = function() {
18412 var args = []; 17937 var args = [];
18413 this._eat(2/*TokenKind.LPAREN*/); 17938 this._eat(2/*TokenKind.LPAREN*/);
18414 if (!$notnull_bool(this._maybeEat(3/*TokenKind.RPAREN*/))) { 17939 if (!this._maybeEat(3/*TokenKind.RPAREN*/)) {
18415 do { 17940 do {
18416 args.add$1(this.argument()); 17941 args.add$1(this.argument());
18417 } 17942 }
18418 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) 17943 while (this._maybeEat(11/*TokenKind.COMMA*/))
18419 this._eat(3/*TokenKind.RPAREN*/); 17944 this._eat(3/*TokenKind.RPAREN*/);
18420 } 17945 }
18421 return args; 17946 return args;
18422 } 17947 }
18423 lang_Parser.prototype.get$arguments = function() { 17948 lang_Parser.prototype.get$arguments = function() {
18424 return lang_Parser.prototype.arguments.bind(this); 17949 return lang_Parser.prototype.arguments.bind(this);
18425 } 17950 }
18426 lang_Parser.prototype.finishPostfixExpression = function(expr) { 17951 lang_Parser.prototype.finishPostfixExpression = function(expr) {
18427 switch (this._peek()) { 17952 switch (this._peek()) {
18428 case 2/*TokenKind.LPAREN*/: 17953 case 2/*TokenKind.LPAREN*/:
(...skipping 16 matching lines...) Expand all
18445 17970
18446 case 16/*TokenKind.INCR*/: 17971 case 16/*TokenKind.INCR*/:
18447 case 17/*TokenKind.DECR*/: 17972 case 17/*TokenKind.DECR*/:
18448 17973
18449 var tok = this._lang_next(); 17974 var tok = this._lang_next();
18450 return new PostfixExpression(expr, tok, this._makeSpan(expr.get$span().sta rt)); 17975 return new PostfixExpression(expr, tok, this._makeSpan(expr.get$span().sta rt));
18451 17976
18452 case 9/*TokenKind.ARROW*/: 17977 case 9/*TokenKind.ARROW*/:
18453 case 6/*TokenKind.LBRACE*/: 17978 case 6/*TokenKind.LBRACE*/:
18454 17979
18455 if ($notnull_bool(this._inInitializers)) return expr; 17980 if (this._inInitializers) return expr;
18456 var body = this.functionBody(true); 17981 var body = this.functionBody(true);
18457 return this._makeFunction(expr, body); 17982 return this._makeFunction(expr, body);
18458 17983
18459 default: 17984 default:
18460 17985
18461 if ($notnull_bool(this._peekIdentifier())) { 17986 if (this._peekIdentifier()) {
18462 return this.finishPostfixExpression(new DeclaredIdentifier(this._makeTyp e(expr), this.identifier(), this._makeSpan(expr.get$span().start))); 17987 return this.finishPostfixExpression(new DeclaredIdentifier(this._makeTyp e(expr), this.identifier(), this._makeSpan(expr.get$span().start)));
18463 } 17988 }
18464 else { 17989 else {
18465 return expr; 17990 return expr;
18466 } 17991 }
18467 17992
18468 } 17993 }
18469 } 17994 }
18470 lang_Parser.prototype._isBin = function(expr, kind) { 17995 lang_Parser.prototype._isBin = function(expr, kind) {
18471 return (expr instanceof BinaryExpression) && expr.op.kind == kind; 17996 return (expr instanceof BinaryExpression) && expr.op.kind == kind;
(...skipping 19 matching lines...) Expand all
18491 return new ThisExpression(this._makeSpan(start)); 18016 return new ThisExpression(this._makeSpan(start));
18492 18017
18493 case 106/*TokenKind.SUPER*/: 18018 case 106/*TokenKind.SUPER*/:
18494 18019
18495 this._eat(106/*TokenKind.SUPER*/); 18020 this._eat(106/*TokenKind.SUPER*/);
18496 return new SuperExpression(this._makeSpan(start)); 18021 return new SuperExpression(this._makeSpan(start));
18497 18022
18498 case 91/*TokenKind.CONST*/: 18023 case 91/*TokenKind.CONST*/:
18499 18024
18500 this._eat(91/*TokenKind.CONST*/); 18025 this._eat(91/*TokenKind.CONST*/);
18501 if ($notnull_bool(this._peekKind(4/*TokenKind.LBRACK*/)) || $notnull_bool( this._peekKind(56/*TokenKind.INDEX*/))) { 18026 if (this._peekKind(4/*TokenKind.LBRACK*/) || this._peekKind(56/*TokenKind. INDEX*/)) {
18502 return this.finishListLiteral(start, true, null); 18027 return this.finishListLiteral(start, true, null);
18503 } 18028 }
18504 else if ($notnull_bool(this._peekKind(6/*TokenKind.LBRACE*/))) { 18029 else if (this._peekKind(6/*TokenKind.LBRACE*/)) {
18505 return this.finishMapLiteral(start, true, null); 18030 return this.finishMapLiteral(start, true, null);
18506 } 18031 }
18507 else if ($notnull_bool(this._peekKind(52/*TokenKind.LT*/))) { 18032 else if (this._peekKind(52/*TokenKind.LT*/)) {
18508 return this.finishTypedLiteral(start, true); 18033 return this.finishTypedLiteral(start, true);
18509 } 18034 }
18510 else { 18035 else {
18511 return this.finishNewExpression(start, true); 18036 return this.finishNewExpression(start, true);
18512 } 18037 }
18513 18038
18514 case 103/*TokenKind.NEW*/: 18039 case 103/*TokenKind.NEW*/:
18515 18040
18516 this._eat(103/*TokenKind.NEW*/); 18041 this._eat(103/*TokenKind.NEW*/);
18517 return this.finishNewExpression(start, false); 18042 return this.finishNewExpression(start, false);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
18572 return this.finishTypedLiteral(start, false); 18097 return this.finishTypedLiteral(start, false);
18573 18098
18574 case 113/*TokenKind.VOID*/: 18099 case 113/*TokenKind.VOID*/:
18575 case 112/*TokenKind.VAR*/: 18100 case 112/*TokenKind.VAR*/:
18576 case 97/*TokenKind.FINAL*/: 18101 case 97/*TokenKind.FINAL*/:
18577 18102
18578 return this.declaredIdentifier(false); 18103 return this.declaredIdentifier(false);
18579 18104
18580 default: 18105 default:
18581 18106
18582 if (!$notnull_bool(this._peekIdentifier())) { 18107 if (!this._peekIdentifier()) {
18583 this._errorExpected('expression'); 18108 this._errorExpected('expression');
18584 } 18109 }
18585 return new VarExpression(this.identifier(), this._makeSpan(start)); 18110 return new VarExpression(this.identifier(), this._makeSpan(start));
18586 18111
18587 } 18112 }
18588 } 18113 }
18589 lang_Parser.prototype.stringInterpolation = function() { 18114 lang_Parser.prototype.stringInterpolation = function() {
18590 var start = this._peekToken.start; 18115 var start = this._peekToken.start;
18591 var lits = []; 18116 var lits = [];
18592 var startQuote = null, endQuote = null; 18117 var startQuote = null, endQuote = null;
18593 while ($notnull_bool(this._peekKind(66/*TokenKind.INCOMPLETE_STRING*/))) { 18118 while (this._peekKind(66/*TokenKind.INCOMPLETE_STRING*/)) {
18594 var token = this._lang_next(); 18119 var token = this._lang_next();
18595 var text = token.get$text(); 18120 var text = token.get$text();
18596 if ($notnull_bool(startQuote == null)) { 18121 if (startQuote == null) {
18597 if ($notnull_bool(isMultilineString($assert_String(text)))) { 18122 if (isMultilineString(text)) {
18598 endQuote = text.substring$2(0, 3); 18123 endQuote = text.substring$2(0, 3);
18599 startQuote = $add(endQuote, '\n'); 18124 startQuote = endQuote + '\n';
18600 } 18125 }
18601 else { 18126 else {
18602 startQuote = endQuote = text.$index(0); 18127 startQuote = endQuote = text.$index(0);
18603 } 18128 }
18604 text = $add(text.substring$2(0, text.length - 1), endQuote); 18129 text = text.substring$2(0, text.length - 1) + endQuote;
18605 } 18130 }
18606 else { 18131 else {
18607 text = $add($add(startQuote, text.substring$2(0, text.length - 1)), endQuo te); 18132 text = startQuote + text.substring$2(0, text.length - 1) + endQuote;
18608 } 18133 }
18609 lits.add$1(this.makeStringLiteral($assert_String(text), token.get$span())); 18134 lits.add$1(this.makeStringLiteral(text, token.get$span()));
18610 if ($notnull_bool(this._maybeEat(6/*TokenKind.LBRACE*/))) { 18135 if (this._maybeEat(6/*TokenKind.LBRACE*/)) {
18611 lits.add$1(this.expression()); 18136 lits.add$1(this.expression());
18612 this._eat(7/*TokenKind.RBRACE*/); 18137 this._eat(7/*TokenKind.RBRACE*/);
18613 } 18138 }
18614 else { 18139 else {
18615 var id = this.identifier(); 18140 var id = this.identifier();
18616 lits.add$1(new VarExpression(id, id.get$span())); 18141 lits.add$1(new VarExpression(id, id.get$span()));
18617 } 18142 }
18618 } 18143 }
18619 var tok = this._lang_next(); 18144 var tok = this._lang_next();
18620 if ($notnull_bool($ne(tok.kind, 58/*TokenKind.STRING*/))) { 18145 if ($ne(tok.kind, 58/*TokenKind.STRING*/)) {
18621 this._errorExpected('interpolated string'); 18146 this._errorExpected('interpolated string');
18622 } 18147 }
18623 var text = $add(startQuote, tok.get$text()); 18148 var text = startQuote + tok.get$text();
18624 lits.add$1(this.makeStringLiteral($assert_String(text), tok.get$span())); 18149 lits.add$1(this.makeStringLiteral(text, tok.get$span()));
18625 var span = this._makeSpan(start); 18150 var span = this._makeSpan(start);
18626 return new LiteralExpression(lits, this._stringTypeRef((span && span.is$Source Span())), '\$\$\$', (span && span.is$SourceSpan())); 18151 return new LiteralExpression(lits, this._stringTypeRef(span), '\$\$\$', span);
18627 } 18152 }
18628 lang_Parser.prototype.makeStringLiteral = function(text, span) { 18153 lang_Parser.prototype.makeStringLiteral = function(text, span) {
18629 return new LiteralExpression(text, this._stringTypeRef(span), text, span); 18154 return new LiteralExpression(text, this._stringTypeRef(span), text, span);
18630 } 18155 }
18631 lang_Parser.prototype.stringLiteralExpr = function() { 18156 lang_Parser.prototype.stringLiteralExpr = function() {
18632 var token = this._lang_next(); 18157 var token = this._lang_next();
18633 return this.makeStringLiteral(token.get$text(), token.get$span()); 18158 return this.makeStringLiteral(token.get$text(), token.get$span());
18634 } 18159 }
18635 lang_Parser.prototype.maybeStringLiteral = function() { 18160 lang_Parser.prototype.maybeStringLiteral = function() {
18636 var kind = this._peek(); 18161 var kind = this._peek();
18637 if ($notnull_bool($eq(kind, 58/*TokenKind.STRING*/))) { 18162 if ($eq(kind, 58/*TokenKind.STRING*/)) {
18638 return parseStringLiteral(this._lang_next().get$text()); 18163 return parseStringLiteral(this._lang_next().get$text());
18639 } 18164 }
18640 else if ($notnull_bool($eq(kind, 59/*TokenKind.STRING_PART*/))) { 18165 else if ($eq(kind, 59/*TokenKind.STRING_PART*/)) {
18641 this._lang_next(); 18166 this._lang_next();
18642 this._errorExpected('string literal, but found interpolated string start'); 18167 this._errorExpected('string literal, but found interpolated string start');
18643 } 18168 }
18644 else if ($notnull_bool($eq(kind, 66/*TokenKind.INCOMPLETE_STRING*/))) { 18169 else if ($eq(kind, 66/*TokenKind.INCOMPLETE_STRING*/)) {
18645 this._lang_next(); 18170 this._lang_next();
18646 this._errorExpected('string literal, but found incomplete string'); 18171 this._errorExpected('string literal, but found incomplete string');
18647 } 18172 }
18648 return null; 18173 return null;
18649 } 18174 }
18650 lang_Parser.prototype._parenOrLambda = function() { 18175 lang_Parser.prototype._parenOrLambda = function() {
18651 var start = this._peekToken.start; 18176 var start = this._peekToken.start;
18652 var args = this.arguments(); 18177 var args = this.arguments();
18653 if (!$notnull_bool(this._inInitializers) && ($notnull_bool(this._peekKind(9/*T okenKind.ARROW*/)) || $notnull_bool(this._peekKind(6/*TokenKind.LBRACE*/)))) { 18178 if (!this._inInitializers && (this._peekKind(9/*TokenKind.ARROW*/) || this._pe ekKind(6/*TokenKind.LBRACE*/))) {
18654 var body = this.functionBody(true); 18179 var body = this.functionBody(true);
18655 var formals = this._makeFormals(args); 18180 var formals = this._makeFormals(args);
18656 var func = new FunctionDefinition(null, null, null, formals, null, body, thi s._makeSpan(start)); 18181 var func = new FunctionDefinition(null, null, null, formals, null, body, thi s._makeSpan(start));
18657 return new LambdaExpression(func, func.get$span()); 18182 return new LambdaExpression(func, func.get$span());
18658 } 18183 }
18659 else { 18184 else {
18660 if (args.length == 1) { 18185 if (args.length == 1) {
18661 return new ParenExpression(args.$index(0).get$value(), this._makeSpan(star t)); 18186 return new ParenExpression(args.$index(0).get$value(), this._makeSpan(star t));
18662 } 18187 }
18663 else { 18188 else {
18664 this._lang_error('unexpected comma expression'); 18189 this._lang_error('unexpected comma expression');
18665 return args.$index(0).get$value(); 18190 return args.$index(0).get$value();
18666 } 18191 }
18667 } 18192 }
18668 } 18193 }
18669 lang_Parser.prototype._typeAsIdentifier = function(type) { 18194 lang_Parser.prototype._typeAsIdentifier = function(type) {
18670 return type.get$name(); 18195 return type.get$name();
18671 } 18196 }
18672 lang_Parser.prototype._specialIdentifier = function(includeOperators) { 18197 lang_Parser.prototype._specialIdentifier = function(includeOperators) {
18673 var start = this._peekToken.start; 18198 var start = this._peekToken.start;
18674 var name; 18199 var name;
18675 switch (this._peek()) { 18200 switch (this._peek()) {
18676 case 15/*TokenKind.ELLIPSIS*/: 18201 case 15/*TokenKind.ELLIPSIS*/:
18677 18202
18678 this._eat(15/*TokenKind.ELLIPSIS*/); 18203 this._eat(15/*TokenKind.ELLIPSIS*/);
18679 this._lang_error('rest no longer supported', this._previousToken.get$span( )); 18204 this._lang_error('rest no longer supported', this._previousToken.get$span( ));
18680 name = $assert_String(this.identifier().get$name()); 18205 name = this.identifier().get$name();
18681 break; 18206 break;
18682 18207
18683 case 108/*TokenKind.THIS*/: 18208 case 108/*TokenKind.THIS*/:
18684 18209
18685 this._eat(108/*TokenKind.THIS*/); 18210 this._eat(108/*TokenKind.THIS*/);
18686 this._eat(14/*TokenKind.DOT*/); 18211 this._eat(14/*TokenKind.DOT*/);
18687 name = ('this.' + this.identifier().get$name() + ''); 18212 name = ('this.' + this.identifier().get$name() + '');
18688 break; 18213 break;
18689 18214
18690 case 76/*TokenKind.GET*/: 18215 case 76/*TokenKind.GET*/:
18691 18216
18692 if (!$notnull_bool(includeOperators)) return null; 18217 if (!includeOperators) return null;
18693 this._eat(76/*TokenKind.GET*/); 18218 this._eat(76/*TokenKind.GET*/);
18694 if ($notnull_bool(this._peekIdentifier())) { 18219 if (this._peekIdentifier()) {
18695 name = ('get\$' + this.identifier().get$name() + ''); 18220 name = ('get\$' + this.identifier().get$name() + '');
18696 } 18221 }
18697 else { 18222 else {
18698 name = 'get'; 18223 name = 'get';
18699 } 18224 }
18700 break; 18225 break;
18701 18226
18702 case 84/*TokenKind.SET*/: 18227 case 84/*TokenKind.SET*/:
18703 18228
18704 if (!$notnull_bool(includeOperators)) return null; 18229 if (!includeOperators) return null;
18705 this._eat(84/*TokenKind.SET*/); 18230 this._eat(84/*TokenKind.SET*/);
18706 if ($notnull_bool(this._peekIdentifier())) { 18231 if (this._peekIdentifier()) {
18707 name = ('set\$' + this.identifier().get$name() + ''); 18232 name = ('set\$' + this.identifier().get$name() + '');
18708 } 18233 }
18709 else { 18234 else {
18710 name = 'set'; 18235 name = 'set';
18711 } 18236 }
18712 break; 18237 break;
18713 18238
18714 case 83/*TokenKind.OPERATOR*/: 18239 case 83/*TokenKind.OPERATOR*/:
18715 18240
18716 if (!$notnull_bool(includeOperators)) return null; 18241 if (!includeOperators) return null;
18717 this._eat(83/*TokenKind.OPERATOR*/); 18242 this._eat(83/*TokenKind.OPERATOR*/);
18718 var kind = this._peek(); 18243 var kind = this._peek();
18719 if ($notnull_bool($eq(kind, 82/*TokenKind.NEGATE*/))) { 18244 if ($eq(kind, 82/*TokenKind.NEGATE*/)) {
18720 name = '\$negate'; 18245 name = '\$negate';
18721 this._lang_next(); 18246 this._lang_next();
18722 } 18247 }
18723 else { 18248 else {
18724 name = TokenKind.binaryMethodName($assert_num(kind)); 18249 name = TokenKind.binaryMethodName(kind);
18725 if (name == null) { 18250 if (name == null) {
18726 name = 'operator'; 18251 name = 'operator';
18727 } 18252 }
18728 else { 18253 else {
18729 this._lang_next(); 18254 this._lang_next();
18730 } 18255 }
18731 } 18256 }
18732 break; 18257 break;
18733 18258
18734 default: 18259 default:
18735 18260
18736 return null; 18261 return null;
18737 18262
18738 } 18263 }
18739 return new lang_Identifier(name, this._makeSpan(start)); 18264 return new lang_Identifier(name, this._makeSpan(start));
18740 } 18265 }
18741 lang_Parser.prototype.declaredIdentifier = function(includeOperators) { 18266 lang_Parser.prototype.declaredIdentifier = function(includeOperators) {
18742 var start = this._peekToken.start; 18267 var start = this._peekToken.start;
18743 var myType = null; 18268 var myType = null;
18744 var name = this._specialIdentifier(includeOperators); 18269 var name = this._specialIdentifier(includeOperators);
18745 if (name == null) { 18270 if (name == null) {
18746 myType = this.type(0); 18271 myType = this.type(0);
18747 name = this._specialIdentifier(includeOperators); 18272 name = this._specialIdentifier(includeOperators);
18748 if (name == null) { 18273 if (name == null) {
18749 if ($notnull_bool(this._peekIdentifier())) { 18274 if (this._peekIdentifier()) {
18750 name = this.identifier(); 18275 name = this.identifier();
18751 } 18276 }
18752 else if ((myType instanceof NameTypeReference) && myType.names == null) { 18277 else if ((myType instanceof NameTypeReference) && myType.names == null) {
18753 name = this._typeAsIdentifier(myType); 18278 name = this._typeAsIdentifier(myType);
18754 myType = null; 18279 myType = null;
18755 } 18280 }
18756 else { 18281 else {
18757 } 18282 }
18758 } 18283 }
18759 } 18284 }
(...skipping 11 matching lines...) Expand all
18771 } 18296 }
18772 else { 18297 else {
18773 return -1; 18298 return -1;
18774 } 18299 }
18775 } 18300 }
18776 lang_Parser.parseHex = function(hex) { 18301 lang_Parser.parseHex = function(hex) {
18777 var result = 0; 18302 var result = 0;
18778 for (var i = 0; 18303 for (var i = 0;
18779 i < hex.length; i++) { 18304 i < hex.length; i++) {
18780 var digit = lang_Parser._hexDigit(hex.charCodeAt(i)); 18305 var digit = lang_Parser._hexDigit(hex.charCodeAt(i));
18781 $assert($ne(digit, -1), "digit != -1", "parser.dart", 1259, 14); 18306 result = (result << 4) + digit;
18782 result = (result << 4) + $assert_num(digit);
18783 } 18307 }
18784 return $assert_num(result); 18308 return result;
18785 } 18309 }
18786 lang_Parser.prototype.finishNewExpression = function(start, isConst) { 18310 lang_Parser.prototype.finishNewExpression = function(start, isConst) {
18787 var type = this.type(0); 18311 var type = this.type(0);
18788 var name = null; 18312 var name = null;
18789 if ($notnull_bool(this._maybeEat(14/*TokenKind.DOT*/))) { 18313 if (this._maybeEat(14/*TokenKind.DOT*/)) {
18790 name = this.identifier(); 18314 name = this.identifier();
18791 } 18315 }
18792 var args = this.arguments(); 18316 var args = this.arguments();
18793 return new lang_NewExpression(isConst, type, name, args, this._makeSpan(start) ); 18317 return new lang_NewExpression(isConst, type, name, args, this._makeSpan(start) );
18794 } 18318 }
18795 lang_Parser.prototype.finishListLiteral = function(start, isConst, type) { 18319 lang_Parser.prototype.finishListLiteral = function(start, isConst, type) {
18796 if ($notnull_bool(this._maybeEat(56/*TokenKind.INDEX*/))) { 18320 if (this._maybeEat(56/*TokenKind.INDEX*/)) {
18797 return new ListExpression(isConst, type, [], this._makeSpan(start)); 18321 return new ListExpression(isConst, type, [], this._makeSpan(start));
18798 } 18322 }
18799 var values = []; 18323 var values = [];
18800 this._eat(4/*TokenKind.LBRACK*/); 18324 this._eat(4/*TokenKind.LBRACK*/);
18801 while (!$notnull_bool(this._maybeEat(5/*TokenKind.RBRACK*/))) { 18325 while (!this._maybeEat(5/*TokenKind.RBRACK*/)) {
18802 if ($notnull_bool(this.isPrematureEndOfFile())) break; 18326 if (this.isPrematureEndOfFile()) break;
18803 values.add$1(this.expression()); 18327 values.add$1(this.expression());
18804 if (!$notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 18328 if (!this._maybeEat(11/*TokenKind.COMMA*/)) {
18805 this._eat(5/*TokenKind.RBRACK*/); 18329 this._eat(5/*TokenKind.RBRACK*/);
18806 break; 18330 break;
18807 } 18331 }
18808 } 18332 }
18809 return new ListExpression(isConst, type, values, this._makeSpan(start)); 18333 return new ListExpression(isConst, type, values, this._makeSpan(start));
18810 } 18334 }
18811 lang_Parser.prototype.finishMapLiteral = function(start, isConst, type) { 18335 lang_Parser.prototype.finishMapLiteral = function(start, isConst, type) {
18812 var items = []; 18336 var items = [];
18813 this._eat(6/*TokenKind.LBRACE*/); 18337 this._eat(6/*TokenKind.LBRACE*/);
18814 while (!$notnull_bool(this._maybeEat(7/*TokenKind.RBRACE*/))) { 18338 while (!this._maybeEat(7/*TokenKind.RBRACE*/)) {
18815 if ($notnull_bool(this.isPrematureEndOfFile())) break; 18339 if (this.isPrematureEndOfFile()) break;
18816 items.add$1(this.expression()); 18340 items.add$1(this.expression());
18817 this._eat(8/*TokenKind.COLON*/); 18341 this._eat(8/*TokenKind.COLON*/);
18818 items.add$1(this.expression()); 18342 items.add$1(this.expression());
18819 if (!$notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 18343 if (!this._maybeEat(11/*TokenKind.COMMA*/)) {
18820 this._eat(7/*TokenKind.RBRACE*/); 18344 this._eat(7/*TokenKind.RBRACE*/);
18821 break; 18345 break;
18822 } 18346 }
18823 } 18347 }
18824 return new MapExpression(isConst, type, items, this._makeSpan(start)); 18348 return new MapExpression(isConst, type, items, this._makeSpan(start));
18825 } 18349 }
18826 lang_Parser.prototype.finishTypedLiteral = function(start, isConst) { 18350 lang_Parser.prototype.finishTypedLiteral = function(start, isConst) {
18827 var span = this._makeSpan(start); 18351 var span = this._makeSpan(start);
18828 var typeToBeNamedLater = new NameTypeReference(false, null, null, (span && spa n.is$SourceSpan())); 18352 var typeToBeNamedLater = new NameTypeReference(false, null, null, span);
18829 var genericType = this.addTypeArguments((typeToBeNamedLater && typeToBeNamedLa ter.is$TypeReference()), 0); 18353 var genericType = this.addTypeArguments(typeToBeNamedLater, 0);
18830 if ($notnull_bool(this._peekKind(4/*TokenKind.LBRACK*/)) || $notnull_bool(this ._peekKind(56/*TokenKind.INDEX*/))) { 18354 if (this._peekKind(4/*TokenKind.LBRACK*/) || this._peekKind(56/*TokenKind.INDE X*/)) {
18831 return this.finishListLiteral(start, isConst, (genericType && genericType.is $TypeReference())); 18355 return this.finishListLiteral(start, isConst, genericType);
18832 } 18356 }
18833 else if ($notnull_bool(this._peekKind(6/*TokenKind.LBRACE*/))) { 18357 else if (this._peekKind(6/*TokenKind.LBRACE*/)) {
18834 return this.finishMapLiteral(start, isConst, (genericType && genericType.is$ TypeReference())); 18358 return this.finishMapLiteral(start, isConst, genericType);
18835 } 18359 }
18836 else { 18360 else {
18837 this._errorExpected('array or map literal'); 18361 this._errorExpected('array or map literal');
18838 } 18362 }
18839 } 18363 }
18840 lang_Parser.prototype._readModifiers = function() { 18364 lang_Parser.prototype._readModifiers = function() {
18841 var modifiers = null; 18365 var modifiers = null;
18842 while (true) { 18366 while (true) {
18843 switch (this._peek()) { 18367 switch (this._peek()) {
18844 case 86/*TokenKind.STATIC*/: 18368 case 86/*TokenKind.STATIC*/:
(...skipping 11 matching lines...) Expand all
18856 return modifiers; 18380 return modifiers;
18857 18381
18858 } 18382 }
18859 } 18383 }
18860 return null; 18384 return null;
18861 } 18385 }
18862 lang_Parser.prototype.typeParameter = function() { 18386 lang_Parser.prototype.typeParameter = function() {
18863 var start = this._peekToken.start; 18387 var start = this._peekToken.start;
18864 var name = this.identifier(); 18388 var name = this.identifier();
18865 var myType = null; 18389 var myType = null;
18866 if ($notnull_bool(this._maybeEat(74/*TokenKind.EXTENDS*/))) { 18390 if (this._maybeEat(74/*TokenKind.EXTENDS*/)) {
18867 myType = this.type(1); 18391 myType = this.type(1);
18868 } 18392 }
18869 return new TypeParameter(name, myType, this._makeSpan(start)); 18393 return new TypeParameter(name, myType, this._makeSpan(start));
18870 } 18394 }
18871 lang_Parser.prototype.typeParameters = function() { 18395 lang_Parser.prototype.typeParameters = function() {
18872 this._eat(52/*TokenKind.LT*/); 18396 this._eat(52/*TokenKind.LT*/);
18873 var closed = false; 18397 var closed = false;
18874 var ret = []; 18398 var ret = [];
18875 do { 18399 do {
18876 var tp = this.typeParameter(); 18400 var tp = this.typeParameter();
18877 ret.add$1(tp); 18401 ret.add$1(tp);
18878 if ((tp.extendsType instanceof GenericTypeReference) && tp.extendsType.depth == 0) { 18402 if ((tp.extendsType instanceof GenericTypeReference) && tp.extendsType.depth == 0) {
18879 closed = true; 18403 closed = true;
18880 break; 18404 break;
18881 } 18405 }
18882 } 18406 }
18883 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) 18407 while (this._maybeEat(11/*TokenKind.COMMA*/))
18884 if (!$notnull_bool(closed)) { 18408 if (!closed) {
18885 this._eat(53/*TokenKind.GT*/); 18409 this._eat(53/*TokenKind.GT*/);
18886 } 18410 }
18887 return ret; 18411 return ret;
18888 } 18412 }
18889 lang_Parser.prototype.get$typeParameters = function() { 18413 lang_Parser.prototype.get$typeParameters = function() {
18890 return lang_Parser.prototype.typeParameters.bind(this); 18414 return lang_Parser.prototype.typeParameters.bind(this);
18891 } 18415 }
18892 lang_Parser.prototype._eatClosingAngle = function(depth) { 18416 lang_Parser.prototype._eatClosingAngle = function(depth) {
18893 if ($notnull_bool(this._maybeEat(53/*TokenKind.GT*/))) { 18417 if (this._maybeEat(53/*TokenKind.GT*/)) {
18894 return depth; 18418 return depth;
18895 } 18419 }
18896 else if (depth > 0 && $notnull_bool(this._maybeEat(40/*TokenKind.SAR*/))) { 18420 else if (depth > 0 && this._maybeEat(40/*TokenKind.SAR*/)) {
18897 return depth - 1; 18421 return depth - 1;
18898 } 18422 }
18899 else if (depth > 1 && $notnull_bool(this._maybeEat(41/*TokenKind.SHR*/))) { 18423 else if (depth > 1 && this._maybeEat(41/*TokenKind.SHR*/)) {
18900 return depth - 2; 18424 return depth - 2;
18901 } 18425 }
18902 else { 18426 else {
18903 this._errorExpected('>'); 18427 this._errorExpected('>');
18904 return depth; 18428 return depth;
18905 } 18429 }
18906 } 18430 }
18907 lang_Parser.prototype.addTypeArguments = function(baseType, depth) { 18431 lang_Parser.prototype.addTypeArguments = function(baseType, depth) {
18908 this._eat(52/*TokenKind.LT*/); 18432 this._eat(52/*TokenKind.LT*/);
18909 return this._finishTypeArguments(baseType, depth, []); 18433 return this._finishTypeArguments(baseType, depth, []);
18910 } 18434 }
18911 lang_Parser.prototype._finishTypeArguments = function(baseType, depth, types) { 18435 lang_Parser.prototype._finishTypeArguments = function(baseType, depth, types) {
18912 var delta = -1; 18436 var delta = -1;
18913 do { 18437 do {
18914 var myType = this.type(depth + 1); 18438 var myType = this.type(depth + 1);
18915 types.add$1(myType); 18439 types.add$1(myType);
18916 if ((myType instanceof GenericTypeReference) && myType.depth <= depth) { 18440 if ((myType instanceof GenericTypeReference) && myType.depth <= depth) {
18917 delta = depth - myType.depth; 18441 delta = depth - myType.depth;
18918 break; 18442 break;
18919 } 18443 }
18920 } 18444 }
18921 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) 18445 while (this._maybeEat(11/*TokenKind.COMMA*/))
18922 if (delta >= 0) { 18446 if (delta >= 0) {
18923 depth -= $assert_num(delta); 18447 depth = depth - delta;
18924 } 18448 }
18925 else { 18449 else {
18926 depth = this._eatClosingAngle(depth); 18450 depth = this._eatClosingAngle(depth);
18927 } 18451 }
18928 var span = this._makeSpan(baseType.span.start); 18452 var span = this._makeSpan(baseType.span.start);
18929 return new GenericTypeReference(baseType, types, depth, (span && span.is$Sourc eSpan())); 18453 return new GenericTypeReference(baseType, types, depth, span);
18930 } 18454 }
18931 lang_Parser.prototype.typeList = function() { 18455 lang_Parser.prototype.typeList = function() {
18932 var types = []; 18456 var types = [];
18933 do { 18457 do {
18934 types.add$1(this.type(0)); 18458 types.add$1(this.type(0));
18935 } 18459 }
18936 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) 18460 while (this._maybeEat(11/*TokenKind.COMMA*/))
18937 return types; 18461 return types;
18938 } 18462 }
18939 lang_Parser.prototype.type = function(depth) { 18463 lang_Parser.prototype.type = function(depth) {
18940 var start = this._peekToken.start; 18464 var start = this._peekToken.start;
18941 var name; 18465 var name;
18942 var names = null; 18466 var names = null;
18943 var typeArgs = null; 18467 var typeArgs = null;
18944 var isFinal = false; 18468 var isFinal = false;
18945 switch (this._peek()) { 18469 switch (this._peek()) {
18946 case 113/*TokenKind.VOID*/: 18470 case 113/*TokenKind.VOID*/:
(...skipping 10 matching lines...) Expand all
18957 isFinal = true; 18481 isFinal = true;
18958 name = this.identifier(); 18482 name = this.identifier();
18959 break; 18483 break;
18960 18484
18961 default: 18485 default:
18962 18486
18963 name = this.identifier(); 18487 name = this.identifier();
18964 break; 18488 break;
18965 18489
18966 } 18490 }
18967 while ($notnull_bool(this._maybeEat(14/*TokenKind.DOT*/))) { 18491 while (this._maybeEat(14/*TokenKind.DOT*/)) {
18968 if (names == null) names = []; 18492 if (names == null) names = [];
18969 names.add$1(this.identifier()); 18493 names.add$1(this.identifier());
18970 } 18494 }
18971 var typeRef = new NameTypeReference(isFinal, name, names, this._makeSpan(start )); 18495 var typeRef = new NameTypeReference(isFinal, name, names, this._makeSpan(start ));
18972 if ($notnull_bool(this._peekKind(52/*TokenKind.LT*/))) { 18496 if (this._peekKind(52/*TokenKind.LT*/)) {
18973 return this.addTypeArguments((typeRef && typeRef.is$TypeReference()), depth) ; 18497 return this.addTypeArguments(typeRef, depth);
18974 } 18498 }
18975 else { 18499 else {
18976 return typeRef; 18500 return typeRef;
18977 } 18501 }
18978 } 18502 }
18979 lang_Parser.prototype.get$type = function() {
18980 return lang_Parser.prototype.type.bind(this);
18981 }
18982 lang_Parser.prototype.formalParameter = function(inOptionalBlock) { 18503 lang_Parser.prototype.formalParameter = function(inOptionalBlock) {
18983 var start = this._peekToken.start; 18504 var start = this._peekToken.start;
18984 var isThis = false; 18505 var isThis = false;
18985 var isRest = false; 18506 var isRest = false;
18986 var di = this.declaredIdentifier(false); 18507 var di = this.declaredIdentifier(false);
18987 var type = di.type; 18508 var type = di.type;
18988 var name = di.get$name(); 18509 var name = di.get$name();
18989 var value = null; 18510 var value = null;
18990 if ($notnull_bool(this._maybeEat(20/*TokenKind.ASSIGN*/))) { 18511 if (this._maybeEat(20/*TokenKind.ASSIGN*/)) {
18991 if (!$notnull_bool(inOptionalBlock)) { 18512 if (!inOptionalBlock) {
18992 this._lang_error('default values only allowed inside [optional] section'); 18513 this._lang_error('default values only allowed inside [optional] section');
18993 } 18514 }
18994 value = this.expression(); 18515 value = this.expression();
18995 } 18516 }
18996 else if ($notnull_bool(this._peekKind(2/*TokenKind.LPAREN*/))) { 18517 else if (this._peekKind(2/*TokenKind.LPAREN*/)) {
18997 var formals = this.formalParameterList(); 18518 var formals = this.formalParameterList();
18998 var func = new FunctionDefinition(null, type, name, formals, null, null, thi s._makeSpan(start)); 18519 var func = new FunctionDefinition(null, type, name, formals, null, null, thi s._makeSpan(start));
18999 type = new FunctionTypeReference(false, func, func.get$span()); 18520 type = new FunctionTypeReference(false, func, func.get$span());
19000 } 18521 }
19001 if ($notnull_bool(inOptionalBlock) && $notnull_bool(value == null)) { 18522 if (inOptionalBlock && value == null) {
19002 value = new NullExpression(this._makeSpan(start)); 18523 value = new NullExpression(this._makeSpan(start));
19003 } 18524 }
19004 return new FormalNode(isThis, isRest, type, name, value, this._makeSpan(start) ); 18525 return new FormalNode(isThis, isRest, type, name, value, this._makeSpan(start) );
19005 } 18526 }
19006 lang_Parser.prototype.formalParameterList = function() { 18527 lang_Parser.prototype.formalParameterList = function() {
19007 this._eat(2/*TokenKind.LPAREN*/); 18528 this._eat(2/*TokenKind.LPAREN*/);
19008 var formals = []; 18529 var formals = [];
19009 var inOptionalBlock = false; 18530 var inOptionalBlock = false;
19010 if (!$notnull_bool(this._maybeEat(3/*TokenKind.RPAREN*/))) { 18531 if (!this._maybeEat(3/*TokenKind.RPAREN*/)) {
19011 if ($notnull_bool(this._maybeEat(4/*TokenKind.LBRACK*/))) { 18532 if (this._maybeEat(4/*TokenKind.LBRACK*/)) {
19012 inOptionalBlock = true; 18533 inOptionalBlock = true;
19013 } 18534 }
19014 formals.add$1(this.formalParameter($assert_bool(inOptionalBlock))); 18535 formals.add$1(this.formalParameter(inOptionalBlock));
19015 while ($notnull_bool(this._maybeEat(11/*TokenKind.COMMA*/))) { 18536 while (this._maybeEat(11/*TokenKind.COMMA*/)) {
19016 if ($notnull_bool(this._maybeEat(4/*TokenKind.LBRACK*/))) { 18537 if (this._maybeEat(4/*TokenKind.LBRACK*/)) {
19017 if ($notnull_bool(inOptionalBlock)) { 18538 if (inOptionalBlock) {
19018 this._lang_error('already inside an optional block', this._previousTok en.get$span()); 18539 this._lang_error('already inside an optional block', this._previousTok en.get$span());
19019 } 18540 }
19020 inOptionalBlock = true; 18541 inOptionalBlock = true;
19021 } 18542 }
19022 formals.add$1(this.formalParameter($assert_bool(inOptionalBlock))); 18543 formals.add$1(this.formalParameter(inOptionalBlock));
19023 } 18544 }
19024 if ($notnull_bool(inOptionalBlock)) { 18545 if (inOptionalBlock) {
19025 this._eat(5/*TokenKind.RBRACK*/); 18546 this._eat(5/*TokenKind.RBRACK*/);
19026 } 18547 }
19027 this._eat(3/*TokenKind.RPAREN*/); 18548 this._eat(3/*TokenKind.RPAREN*/);
19028 } 18549 }
19029 return formals; 18550 return formals;
19030 } 18551 }
19031 lang_Parser.prototype.identifier = function() { 18552 lang_Parser.prototype.identifier = function() {
19032 var tok = this._lang_next(); 18553 var tok = this._lang_next();
19033 if (!$notnull_bool(TokenKind.isIdentifier($assert_num(tok.kind)))) { 18554 if (!TokenKind.isIdentifier(tok.kind)) {
19034 this._lang_error(('expected identifier, but found ' + tok + ''), tok.get$spa n()); 18555 this._lang_error(('expected identifier, but found ' + tok + ''), tok.get$spa n());
19035 } 18556 }
19036 return new lang_Identifier(tok.get$text(), this._makeSpan(tok.start)); 18557 return new lang_Identifier(tok.get$text(), this._makeSpan(tok.start));
19037 } 18558 }
19038 lang_Parser.prototype._makeFunction = function(expr, body) { 18559 lang_Parser.prototype._makeFunction = function(expr, body) {
19039 var name, type; 18560 var name, type;
19040 if ((expr instanceof CallExpression)) { 18561 if ((expr instanceof CallExpression)) {
19041 if ((expr.target instanceof VarExpression)) { 18562 if ((expr.target instanceof VarExpression)) {
19042 name = expr.target.get$name(); 18563 name = expr.target.get$name();
19043 type = null; 18564 type = null;
19044 } 18565 }
19045 else if ((expr.target instanceof DeclaredIdentifier)) { 18566 else if ((expr.target instanceof DeclaredIdentifier)) {
19046 name = expr.target.get$name(); 18567 name = expr.target.get$name();
19047 type = expr.target.type; 18568 type = expr.target.type;
19048 } 18569 }
19049 else { 18570 else {
19050 this._lang_error('bad function'); 18571 this._lang_error('bad function');
19051 } 18572 }
19052 var formals = this._makeFormals(expr.get$arguments()); 18573 var formals = this._makeFormals(expr.get$arguments());
19053 var span = new SourceSpan(expr.get$span().file, expr.get$span().start, body. get$span().end); 18574 var span = new SourceSpan(expr.get$span().file, expr.get$span().start, body. get$span().end);
19054 var func = new FunctionDefinition(null, type, name, formals, null, body, (sp an && span.is$SourceSpan())); 18575 var func = new FunctionDefinition(null, type, name, formals, null, body, spa n);
19055 return new LambdaExpression(func, func.get$span()); 18576 return new LambdaExpression(func, func.get$span());
19056 } 18577 }
19057 else { 18578 else {
19058 this._lang_error('expected function'); 18579 this._lang_error('expected function');
19059 } 18580 }
19060 } 18581 }
19061 lang_Parser.prototype._makeFormal = function(expr) { 18582 lang_Parser.prototype._makeFormal = function(expr) {
19062 var $0;
19063 if ((expr instanceof VarExpression)) { 18583 if ((expr instanceof VarExpression)) {
19064 return new FormalNode(false, false, null, expr.get$name(), null, expr.get$sp an()); 18584 return new FormalNode(false, false, null, expr.get$name(), null, expr.get$sp an());
19065 } 18585 }
19066 else if ((expr instanceof DeclaredIdentifier)) { 18586 else if ((expr instanceof DeclaredIdentifier)) {
19067 return new FormalNode(false, false, expr.type, expr.get$name(), null, expr.g et$span()); 18587 return new FormalNode(false, false, expr.type, expr.get$name(), null, expr.g et$span());
19068 } 18588 }
19069 else if ($notnull_bool(this._isBin(expr, 20/*TokenKind.ASSIGN*/)) && ((expr.x instanceof DeclaredIdentifier))) { 18589 else if (this._isBin(expr, 20/*TokenKind.ASSIGN*/) && ((expr.x instanceof Decl aredIdentifier))) {
19070 var di = (($0 = expr.x) && $0.is$DeclaredIdentifier()); 18590 var di = expr.x;
19071 return new FormalNode(false, false, di.type, di.name, expr.y, expr.get$span( )); 18591 return new FormalNode(false, false, di.type, di.name, expr.y, expr.get$span( ));
19072 } 18592 }
19073 else if ($notnull_bool(this._isBin(expr, 52/*TokenKind.LT*/))) { 18593 else if (this._isBin(expr, 52/*TokenKind.LT*/)) {
19074 return null; 18594 return null;
19075 } 18595 }
19076 else if ((expr instanceof ListExpression)) { 18596 else if ((expr instanceof ListExpression)) {
19077 return this._makeFormalsFromList(expr); 18597 return this._makeFormalsFromList(expr);
19078 } 18598 }
19079 else { 18599 else {
19080 this._lang_error('expected formal', expr.get$span()); 18600 this._lang_error('expected formal', expr.get$span());
19081 } 18601 }
19082 } 18602 }
19083 lang_Parser.prototype._makeFormalsFromList = function(expr) { 18603 lang_Parser.prototype._makeFormalsFromList = function(expr) {
19084 if ($notnull_bool(expr.get$isConst())) { 18604 if (expr.get$isConst()) {
19085 this._lang_error('expected formal, but found "const"', expr.get$span()); 18605 this._lang_error('expected formal, but found "const"', expr.get$span());
19086 } 18606 }
19087 else if ($notnull_bool($ne(expr.type, null))) { 18607 else if ($ne(expr.type, null)) {
19088 this._lang_error('expected formal, but found generic type arguments', expr.t ype.get$span()); 18608 this._lang_error('expected formal, but found generic type arguments', expr.t ype.get$span());
19089 } 18609 }
19090 return this._makeFormalsFromExpressions(expr.values, false); 18610 return this._makeFormalsFromExpressions(expr.values, false);
19091 } 18611 }
19092 lang_Parser.prototype._makeFormals = function(arguments) { 18612 lang_Parser.prototype._makeFormals = function(arguments) {
19093 var expressions = []; 18613 var expressions = [];
19094 for (var i = 0; 18614 for (var i = 0;
19095 i < arguments.length; i++) { 18615 i < arguments.length; i++) {
19096 var arg = arguments.$index(i); 18616 var arg = arguments.$index(i);
19097 if (arg.label != null) { 18617 if (arg.label != null) {
19098 this._lang_error('expected formal, but found ":"'); 18618 this._lang_error('expected formal, but found ":"');
19099 } 18619 }
19100 expressions.add$1(arg.get$value()); 18620 expressions.add$1(arg.get$value());
19101 } 18621 }
19102 return this._makeFormalsFromExpressions(expressions, true); 18622 return this._makeFormalsFromExpressions(expressions, true);
19103 } 18623 }
19104 lang_Parser.prototype._makeFormalsFromExpressions = function(expressions, allowO ptional) { 18624 lang_Parser.prototype._makeFormalsFromExpressions = function(expressions, allowO ptional) {
19105 var $0;
19106 var formals = []; 18625 var formals = [];
19107 for (var i = 0; 18626 for (var i = 0;
19108 i < expressions.length; i++) { 18627 i < expressions.length; i++) {
19109 var formal = this._makeFormal(expressions.$index(i)); 18628 var formal = this._makeFormal(expressions.$index(i));
19110 if ($notnull_bool(formal == null)) { 18629 if (formal == null) {
19111 var baseType = this._makeType(expressions.$index(i).x); 18630 var baseType = this._makeType(expressions.$index(i).x);
19112 var typeParams = [this._makeType(expressions.$index(i).y)]; 18631 var typeParams = [this._makeType(expressions.$index(i).y)];
19113 i++; 18632 i++;
19114 while (i < expressions.length) { 18633 while (i < expressions.length) {
19115 var expr = expressions.$index(i++); 18634 var expr = expressions.$index(i++);
19116 if ($notnull_bool(this._isBin(expr, 53/*TokenKind.GT*/))) { 18635 if (this._isBin(expr, 53/*TokenKind.GT*/)) {
19117 typeParams.add$1(this._makeType(expr.x)); 18636 typeParams.add$1(this._makeType(expr.x));
19118 var type = new GenericTypeReference(baseType, typeParams, 0, this._mak eSpan(baseType.get$span().start)); 18637 var type = new GenericTypeReference(baseType, typeParams, 0, this._mak eSpan(baseType.get$span().start));
19119 var name = null; 18638 var name = null;
19120 if ((expr.y instanceof VarExpression)) { 18639 if ((expr.y instanceof VarExpression)) {
19121 var ve = (($0 = expr.y) && $0.is$VarExpression()); 18640 var ve = expr.y;
19122 name = ve.name; 18641 name = ve.name;
19123 } 18642 }
19124 else { 18643 else {
19125 this._lang_error('expected formal', expr.get$span()); 18644 this._lang_error('expected formal', expr.get$span());
19126 } 18645 }
19127 formal = new FormalNode(false, false, type, name, null, this._makeSpan (expressions.$index(0).get$span().start)); 18646 formal = new FormalNode(false, false, type, name, null, this._makeSpan (expressions.$index(0).get$span().start));
19128 break; 18647 break;
19129 } 18648 }
19130 else { 18649 else {
19131 typeParams.add$1(this._makeType(expr)); 18650 typeParams.add$1(this._makeType(expr));
19132 } 18651 }
19133 } 18652 }
19134 formals.add$1(formal); 18653 formals.add$1(formal);
19135 } 18654 }
19136 else if (!!(formal && formal.is$List)) { 18655 else if (!!(formal && formal.is$List)) {
19137 formals.addAll$1(formal); 18656 formals.addAll$1(formal);
19138 if (!$notnull_bool(allowOptional)) { 18657 if (!allowOptional) {
19139 this._lang_error('unexpected nested optional formal', expressions.$index (i).get$span()); 18658 this._lang_error('unexpected nested optional formal', expressions.$index (i).get$span());
19140 } 18659 }
19141 } 18660 }
19142 else { 18661 else {
19143 formals.add$1(formal); 18662 formals.add$1(formal);
19144 } 18663 }
19145 } 18664 }
19146 return formals; 18665 return formals;
19147 } 18666 }
19148 lang_Parser.prototype._makeDeclaredIdentifier = function(e) { 18667 lang_Parser.prototype._makeDeclaredIdentifier = function(e) {
(...skipping 20 matching lines...) Expand all
19169 lang_Parser.prototype.block$0 = function() { 18688 lang_Parser.prototype.block$0 = function() {
19170 return this.block(); 18689 return this.block();
19171 }; 18690 };
19172 // ********** Code for IncompleteSourceException ************** 18691 // ********** Code for IncompleteSourceException **************
19173 function IncompleteSourceException(token) { 18692 function IncompleteSourceException(token) {
19174 this.token = token; 18693 this.token = token;
19175 // Initializers done 18694 // Initializers done
19176 } 18695 }
19177 IncompleteSourceException.prototype.toString = function() { 18696 IncompleteSourceException.prototype.toString = function() {
19178 if (this.token.get$span() == null) return ('Unexpected ' + this.token + ''); 18697 if (this.token.get$span() == null) return ('Unexpected ' + this.token + '');
19179 return $assert_String(this.token.get$span().toMessageString(('Unexpected ' + t his.token + ''))); 18698 return this.token.get$span().toMessageString(('Unexpected ' + this.token + '') );
19180 } 18699 }
19181 IncompleteSourceException.prototype.toString$0 = function() { 18700 IncompleteSourceException.prototype.toString$0 = function() {
19182 return this.toString(); 18701 return this.toString();
19183 }; 18702 };
19184 // ********** Code for lang_Node ************** 18703 // ********** Code for lang_Node **************
19185 function lang_Node(span) { 18704 function lang_Node(span) {
19186 this.span = span; 18705 this.span = span;
19187 // Initializers done 18706 // Initializers done
19188 } 18707 }
19189 lang_Node.prototype.is$lang_Node = function(){return this;};
19190 lang_Node.prototype.get$span = function() { return this.span; }; 18708 lang_Node.prototype.get$span = function() { return this.span; };
19191 lang_Node.prototype.set$span = function(value) { return this.span = value; }; 18709 lang_Node.prototype.set$span = function(value) { return this.span = value; };
19192 lang_Node.prototype.visit$1 = function($0) { 18710 lang_Node.prototype.visit$1 = function($0) {
19193 return this.visit(($0 && $0.is$TreeVisitor())); 18711 return this.visit($0);
19194 }; 18712 };
19195 // ********** Code for Definition ************** 18713 // ********** Code for Definition **************
19196 function Definition(span) { 18714 function Definition(span) {
19197 lang_Statement.call(this, span); 18715 lang_Statement.call(this, span);
19198 // Initializers done 18716 // Initializers done
19199 } 18717 }
19200 $inherits(Definition, lang_Statement); 18718 $inherits(Definition, lang_Statement);
19201 Definition.prototype.is$Definition = function(){return this;};
19202 Definition.prototype.get$typeParameters = function() { 18719 Definition.prototype.get$typeParameters = function() {
19203 return null; 18720 return null;
19204 } 18721 }
19205 Definition.prototype.get$nativeType = function() { 18722 Definition.prototype.get$nativeType = function() {
19206 return null; 18723 return null;
19207 } 18724 }
19208 // ********** Code for lang_Statement ************** 18725 // ********** Code for lang_Statement **************
19209 function lang_Statement(span) { 18726 function lang_Statement(span) {
19210 lang_Node.call(this, span); 18727 lang_Node.call(this, span);
19211 // Initializers done 18728 // Initializers done
19212 } 18729 }
19213 $inherits(lang_Statement, lang_Node); 18730 $inherits(lang_Statement, lang_Node);
19214 lang_Statement.prototype.is$lang_Statement = function(){return this;};
19215 // ********** Code for lang_Expression ************** 18731 // ********** Code for lang_Expression **************
19216 function lang_Expression(span) { 18732 function lang_Expression(span) {
19217 lang_Node.call(this, span); 18733 lang_Node.call(this, span);
19218 // Initializers done 18734 // Initializers done
19219 } 18735 }
19220 $inherits(lang_Expression, lang_Node); 18736 $inherits(lang_Expression, lang_Node);
19221 lang_Expression.prototype.is$lang_Expression = function(){return this;};
19222 // ********** Code for TypeReference ************** 18737 // ********** Code for TypeReference **************
19223 function TypeReference(span, type) { 18738 function TypeReference(span, type) {
19224 this.type = type; 18739 this.type = type;
19225 lang_Node.call(this, span); 18740 lang_Node.call(this, span);
19226 // Initializers done 18741 // Initializers done
19227 } 18742 }
19228 $inherits(TypeReference, lang_Node); 18743 $inherits(TypeReference, lang_Node);
19229 TypeReference.prototype.is$TypeReference = function(){return this;};
19230 TypeReference.prototype.get$type = function() { return this.type; };
19231 TypeReference.prototype.set$type = function(value) { return this.type = value; } ;
19232 TypeReference.prototype.visit = function(visitor) { 18744 TypeReference.prototype.visit = function(visitor) {
19233 return visitor.visitTypeReference(this); 18745 return visitor.visitTypeReference(this);
19234 } 18746 }
19235 TypeReference.prototype.visit$1 = function($0) { 18747 TypeReference.prototype.visit$1 = function($0) {
19236 return this.visit(($0 && $0.is$TreeVisitor())); 18748 return this.visit($0);
19237 }; 18749 };
19238 // ********** Code for DirectiveDefinition ************** 18750 // ********** Code for DirectiveDefinition **************
19239 function DirectiveDefinition(name, arguments, span) { 18751 function DirectiveDefinition(name, arguments, span) {
19240 this.name = name; 18752 this.name = name;
19241 this.arguments = arguments; 18753 this.arguments = arguments;
19242 Definition.call(this, span); 18754 Definition.call(this, span);
19243 // Initializers done 18755 // Initializers done
19244 } 18756 }
19245 $inherits(DirectiveDefinition, Definition); 18757 $inherits(DirectiveDefinition, Definition);
19246 DirectiveDefinition.prototype.get$name = function() { return this.name; }; 18758 DirectiveDefinition.prototype.get$name = function() { return this.name; };
19247 DirectiveDefinition.prototype.set$name = function(value) { return this.name = va lue; }; 18759 DirectiveDefinition.prototype.set$name = function(value) { return this.name = va lue; };
19248 DirectiveDefinition.prototype.get$arguments = function() { return this.arguments ; }; 18760 DirectiveDefinition.prototype.get$arguments = function() { return this.arguments ; };
19249 DirectiveDefinition.prototype.set$arguments = function(value) { return this.argu ments = value; }; 18761 DirectiveDefinition.prototype.set$arguments = function(value) { return this.argu ments = value; };
19250 DirectiveDefinition.prototype.visit = function(visitor) { 18762 DirectiveDefinition.prototype.visit = function(visitor) {
19251 return visitor.visitDirectiveDefinition(this); 18763 return visitor.visitDirectiveDefinition(this);
19252 } 18764 }
19253 DirectiveDefinition.prototype.visit$1 = function($0) { 18765 DirectiveDefinition.prototype.visit$1 = function($0) {
19254 return this.visit(($0 && $0.is$TreeVisitor())); 18766 return this.visit($0);
19255 }; 18767 };
19256 // ********** Code for TypeDefinition ************** 18768 // ********** Code for TypeDefinition **************
19257 function TypeDefinition(isClass, name, typeParameters, extendsTypes, implementsT ypes, nativeType, factoryType, body, span) { 18769 function TypeDefinition(isClass, name, typeParameters, extendsTypes, implementsT ypes, nativeType, factoryType, body, span) {
19258 this.isClass = isClass; 18770 this.isClass = isClass;
19259 this.name = name; 18771 this.name = name;
19260 this.typeParameters = typeParameters; 18772 this.typeParameters = typeParameters;
19261 this.extendsTypes = extendsTypes; 18773 this.extendsTypes = extendsTypes;
19262 this.implementsTypes = implementsTypes; 18774 this.implementsTypes = implementsTypes;
19263 this.nativeType = nativeType; 18775 this.nativeType = nativeType;
19264 this.factoryType = factoryType; 18776 this.factoryType = factoryType;
19265 this.body = body; 18777 this.body = body;
19266 Definition.call(this, span); 18778 Definition.call(this, span);
19267 // Initializers done 18779 // Initializers done
19268 } 18780 }
19269 $inherits(TypeDefinition, Definition); 18781 $inherits(TypeDefinition, Definition);
19270 TypeDefinition.prototype.is$TypeDefinition = function(){return this;};
19271 TypeDefinition.prototype.get$isClass = function() { return this.isClass; }; 18782 TypeDefinition.prototype.get$isClass = function() { return this.isClass; };
19272 TypeDefinition.prototype.set$isClass = function(value) { return this.isClass = v alue; }; 18783 TypeDefinition.prototype.set$isClass = function(value) { return this.isClass = v alue; };
19273 TypeDefinition.prototype.get$name = function() { return this.name; }; 18784 TypeDefinition.prototype.get$name = function() { return this.name; };
19274 TypeDefinition.prototype.set$name = function(value) { return this.name = value; }; 18785 TypeDefinition.prototype.set$name = function(value) { return this.name = value; };
19275 TypeDefinition.prototype.get$typeParameters = function() { return this.typeParam eters; }; 18786 TypeDefinition.prototype.get$typeParameters = function() { return this.typeParam eters; };
19276 TypeDefinition.prototype.set$typeParameters = function(value) { return this.type Parameters = value; }; 18787 TypeDefinition.prototype.set$typeParameters = function(value) { return this.type Parameters = value; };
19277 TypeDefinition.prototype.get$nativeType = function() { return this.nativeType; } ; 18788 TypeDefinition.prototype.get$nativeType = function() { return this.nativeType; } ;
19278 TypeDefinition.prototype.set$nativeType = function(value) { return this.nativeTy pe = value; }; 18789 TypeDefinition.prototype.set$nativeType = function(value) { return this.nativeTy pe = value; };
19279 TypeDefinition.prototype.visit = function(visitor) { 18790 TypeDefinition.prototype.visit = function(visitor) {
19280 return visitor.visitTypeDefinition(this); 18791 return visitor.visitTypeDefinition(this);
19281 } 18792 }
19282 TypeDefinition.prototype.visit$1 = function($0) { 18793 TypeDefinition.prototype.visit$1 = function($0) {
19283 return this.visit(($0 && $0.is$TreeVisitor())); 18794 return this.visit($0);
19284 }; 18795 };
19285 // ********** Code for FunctionTypeDefinition ************** 18796 // ********** Code for FunctionTypeDefinition **************
19286 function FunctionTypeDefinition(func, typeParameters, span) { 18797 function FunctionTypeDefinition(func, typeParameters, span) {
19287 this.func = func; 18798 this.func = func;
19288 this.typeParameters = typeParameters; 18799 this.typeParameters = typeParameters;
19289 Definition.call(this, span); 18800 Definition.call(this, span);
19290 // Initializers done 18801 // Initializers done
19291 } 18802 }
19292 $inherits(FunctionTypeDefinition, Definition); 18803 $inherits(FunctionTypeDefinition, Definition);
19293 FunctionTypeDefinition.prototype.get$typeParameters = function() { return this.t ypeParameters; }; 18804 FunctionTypeDefinition.prototype.get$typeParameters = function() { return this.t ypeParameters; };
19294 FunctionTypeDefinition.prototype.set$typeParameters = function(value) { return t his.typeParameters = value; }; 18805 FunctionTypeDefinition.prototype.set$typeParameters = function(value) { return t his.typeParameters = value; };
19295 FunctionTypeDefinition.prototype.visit = function(visitor) { 18806 FunctionTypeDefinition.prototype.visit = function(visitor) {
19296 return visitor.visitFunctionTypeDefinition(this); 18807 return visitor.visitFunctionTypeDefinition(this);
19297 } 18808 }
19298 FunctionTypeDefinition.prototype.visit$1 = function($0) { 18809 FunctionTypeDefinition.prototype.visit$1 = function($0) {
19299 return this.visit(($0 && $0.is$TreeVisitor())); 18810 return this.visit($0);
19300 }; 18811 };
19301 // ********** Code for VariableDefinition ************** 18812 // ********** Code for VariableDefinition **************
19302 function VariableDefinition(modifiers, type, names, values, span) { 18813 function VariableDefinition(modifiers, type, names, values, span) {
19303 this.modifiers = modifiers; 18814 this.modifiers = modifiers;
19304 this.type = type; 18815 this.type = type;
19305 this.names = names; 18816 this.names = names;
19306 this.values = values; 18817 this.values = values;
19307 Definition.call(this, span); 18818 Definition.call(this, span);
19308 // Initializers done 18819 // Initializers done
19309 } 18820 }
19310 $inherits(VariableDefinition, Definition); 18821 $inherits(VariableDefinition, Definition);
19311 VariableDefinition.prototype.get$type = function() { return this.type; };
19312 VariableDefinition.prototype.set$type = function(value) { return this.type = val ue; };
19313 VariableDefinition.prototype.visit = function(visitor) { 18822 VariableDefinition.prototype.visit = function(visitor) {
19314 return visitor.visitVariableDefinition(this); 18823 return visitor.visitVariableDefinition(this);
19315 } 18824 }
19316 VariableDefinition.prototype.visit$1 = function($0) { 18825 VariableDefinition.prototype.visit$1 = function($0) {
19317 return this.visit(($0 && $0.is$TreeVisitor())); 18826 return this.visit($0);
19318 }; 18827 };
19319 // ********** Code for FunctionDefinition ************** 18828 // ********** Code for FunctionDefinition **************
19320 function FunctionDefinition(modifiers, returnType, name, formals, initializers, body, span) { 18829 function FunctionDefinition(modifiers, returnType, name, formals, initializers, body, span) {
19321 this.modifiers = modifiers; 18830 this.modifiers = modifiers;
19322 this.returnType = returnType; 18831 this.returnType = returnType;
19323 this.name = name; 18832 this.name = name;
19324 this.formals = formals; 18833 this.formals = formals;
19325 this.initializers = initializers; 18834 this.initializers = initializers;
19326 this.body = body; 18835 this.body = body;
19327 Definition.call(this, span); 18836 Definition.call(this, span);
19328 // Initializers done 18837 // Initializers done
19329 } 18838 }
19330 $inherits(FunctionDefinition, Definition); 18839 $inherits(FunctionDefinition, Definition);
19331 FunctionDefinition.prototype.is$FunctionDefinition = function(){return this;};
19332 FunctionDefinition.prototype.get$returnType = function() { return this.returnTyp e; }; 18840 FunctionDefinition.prototype.get$returnType = function() { return this.returnTyp e; };
19333 FunctionDefinition.prototype.set$returnType = function(value) { return this.retu rnType = value; }; 18841 FunctionDefinition.prototype.set$returnType = function(value) { return this.retu rnType = value; };
19334 FunctionDefinition.prototype.get$name = function() { return this.name; }; 18842 FunctionDefinition.prototype.get$name = function() { return this.name; };
19335 FunctionDefinition.prototype.set$name = function(value) { return this.name = val ue; }; 18843 FunctionDefinition.prototype.set$name = function(value) { return this.name = val ue; };
19336 FunctionDefinition.prototype.visit = function(visitor) { 18844 FunctionDefinition.prototype.visit = function(visitor) {
19337 return visitor.visitFunctionDefinition(this); 18845 return visitor.visitFunctionDefinition(this);
19338 } 18846 }
19339 FunctionDefinition.prototype.visit$1 = function($0) { 18847 FunctionDefinition.prototype.visit$1 = function($0) {
19340 return this.visit(($0 && $0.is$TreeVisitor())); 18848 return this.visit($0);
19341 }; 18849 };
19342 // ********** Code for ReturnStatement ************** 18850 // ********** Code for ReturnStatement **************
19343 function ReturnStatement(value, span) { 18851 function ReturnStatement(value, span) {
19344 this.value = value; 18852 this.value = value;
19345 lang_Statement.call(this, span); 18853 lang_Statement.call(this, span);
19346 // Initializers done 18854 // Initializers done
19347 } 18855 }
19348 $inherits(ReturnStatement, lang_Statement); 18856 $inherits(ReturnStatement, lang_Statement);
19349 ReturnStatement.prototype.get$value = function() { return this.value; }; 18857 ReturnStatement.prototype.get$value = function() { return this.value; };
19350 ReturnStatement.prototype.set$value = function(value) { return this.value = valu e; }; 18858 ReturnStatement.prototype.set$value = function(value) { return this.value = valu e; };
19351 ReturnStatement.prototype.visit = function(visitor) { 18859 ReturnStatement.prototype.visit = function(visitor) {
19352 return visitor.visitReturnStatement(this); 18860 return visitor.visitReturnStatement(this);
19353 } 18861 }
19354 ReturnStatement.prototype.visit$1 = function($0) { 18862 ReturnStatement.prototype.visit$1 = function($0) {
19355 return this.visit(($0 && $0.is$TreeVisitor())); 18863 return this.visit($0);
19356 }; 18864 };
19357 // ********** Code for ThrowStatement ************** 18865 // ********** Code for ThrowStatement **************
19358 function ThrowStatement(value, span) { 18866 function ThrowStatement(value, span) {
19359 this.value = value; 18867 this.value = value;
19360 lang_Statement.call(this, span); 18868 lang_Statement.call(this, span);
19361 // Initializers done 18869 // Initializers done
19362 } 18870 }
19363 $inherits(ThrowStatement, lang_Statement); 18871 $inherits(ThrowStatement, lang_Statement);
19364 ThrowStatement.prototype.get$value = function() { return this.value; }; 18872 ThrowStatement.prototype.get$value = function() { return this.value; };
19365 ThrowStatement.prototype.set$value = function(value) { return this.value = value ; }; 18873 ThrowStatement.prototype.set$value = function(value) { return this.value = value ; };
19366 ThrowStatement.prototype.visit = function(visitor) { 18874 ThrowStatement.prototype.visit = function(visitor) {
19367 return visitor.visitThrowStatement(this); 18875 return visitor.visitThrowStatement(this);
19368 } 18876 }
19369 ThrowStatement.prototype.visit$1 = function($0) { 18877 ThrowStatement.prototype.visit$1 = function($0) {
19370 return this.visit(($0 && $0.is$TreeVisitor())); 18878 return this.visit($0);
19371 }; 18879 };
19372 // ********** Code for AssertStatement ************** 18880 // ********** Code for AssertStatement **************
19373 function AssertStatement(test, span) { 18881 function AssertStatement(test, span) {
19374 this.test = test; 18882 this.test = test;
19375 lang_Statement.call(this, span); 18883 lang_Statement.call(this, span);
19376 // Initializers done 18884 // Initializers done
19377 } 18885 }
19378 $inherits(AssertStatement, lang_Statement); 18886 $inherits(AssertStatement, lang_Statement);
19379 AssertStatement.prototype.visit = function(visitor) { 18887 AssertStatement.prototype.visit = function(visitor) {
19380 return visitor.visitAssertStatement(this); 18888 return visitor.visitAssertStatement(this);
19381 } 18889 }
19382 AssertStatement.prototype.visit$1 = function($0) { 18890 AssertStatement.prototype.visit$1 = function($0) {
19383 return this.visit(($0 && $0.is$TreeVisitor())); 18891 return this.visit($0);
19384 }; 18892 };
19385 // ********** Code for BreakStatement ************** 18893 // ********** Code for BreakStatement **************
19386 function BreakStatement(label, span) { 18894 function BreakStatement(label, span) {
19387 this.label = label; 18895 this.label = label;
19388 lang_Statement.call(this, span); 18896 lang_Statement.call(this, span);
19389 // Initializers done 18897 // Initializers done
19390 } 18898 }
19391 $inherits(BreakStatement, lang_Statement); 18899 $inherits(BreakStatement, lang_Statement);
19392 BreakStatement.prototype.visit = function(visitor) { 18900 BreakStatement.prototype.visit = function(visitor) {
19393 return visitor.visitBreakStatement(this); 18901 return visitor.visitBreakStatement(this);
19394 } 18902 }
19395 BreakStatement.prototype.visit$1 = function($0) { 18903 BreakStatement.prototype.visit$1 = function($0) {
19396 return this.visit(($0 && $0.is$TreeVisitor())); 18904 return this.visit($0);
19397 }; 18905 };
19398 // ********** Code for ContinueStatement ************** 18906 // ********** Code for ContinueStatement **************
19399 function ContinueStatement(label, span) { 18907 function ContinueStatement(label, span) {
19400 this.label = label; 18908 this.label = label;
19401 lang_Statement.call(this, span); 18909 lang_Statement.call(this, span);
19402 // Initializers done 18910 // Initializers done
19403 } 18911 }
19404 $inherits(ContinueStatement, lang_Statement); 18912 $inherits(ContinueStatement, lang_Statement);
19405 ContinueStatement.prototype.visit = function(visitor) { 18913 ContinueStatement.prototype.visit = function(visitor) {
19406 return visitor.visitContinueStatement(this); 18914 return visitor.visitContinueStatement(this);
19407 } 18915 }
19408 ContinueStatement.prototype.visit$1 = function($0) { 18916 ContinueStatement.prototype.visit$1 = function($0) {
19409 return this.visit(($0 && $0.is$TreeVisitor())); 18917 return this.visit($0);
19410 }; 18918 };
19411 // ********** Code for IfStatement ************** 18919 // ********** Code for IfStatement **************
19412 function IfStatement(test, trueBranch, falseBranch, span) { 18920 function IfStatement(test, trueBranch, falseBranch, span) {
19413 this.test = test; 18921 this.test = test;
19414 this.trueBranch = trueBranch; 18922 this.trueBranch = trueBranch;
19415 this.falseBranch = falseBranch; 18923 this.falseBranch = falseBranch;
19416 lang_Statement.call(this, span); 18924 lang_Statement.call(this, span);
19417 // Initializers done 18925 // Initializers done
19418 } 18926 }
19419 $inherits(IfStatement, lang_Statement); 18927 $inherits(IfStatement, lang_Statement);
19420 IfStatement.prototype.visit = function(visitor) { 18928 IfStatement.prototype.visit = function(visitor) {
19421 return visitor.visitIfStatement(this); 18929 return visitor.visitIfStatement(this);
19422 } 18930 }
19423 IfStatement.prototype.visit$1 = function($0) { 18931 IfStatement.prototype.visit$1 = function($0) {
19424 return this.visit(($0 && $0.is$TreeVisitor())); 18932 return this.visit($0);
19425 }; 18933 };
19426 // ********** Code for WhileStatement ************** 18934 // ********** Code for WhileStatement **************
19427 function WhileStatement(test, body, span) { 18935 function WhileStatement(test, body, span) {
19428 this.test = test; 18936 this.test = test;
19429 this.body = body; 18937 this.body = body;
19430 lang_Statement.call(this, span); 18938 lang_Statement.call(this, span);
19431 // Initializers done 18939 // Initializers done
19432 } 18940 }
19433 $inherits(WhileStatement, lang_Statement); 18941 $inherits(WhileStatement, lang_Statement);
19434 WhileStatement.prototype.visit = function(visitor) { 18942 WhileStatement.prototype.visit = function(visitor) {
19435 return visitor.visitWhileStatement(this); 18943 return visitor.visitWhileStatement(this);
19436 } 18944 }
19437 WhileStatement.prototype.visit$1 = function($0) { 18945 WhileStatement.prototype.visit$1 = function($0) {
19438 return this.visit(($0 && $0.is$TreeVisitor())); 18946 return this.visit($0);
19439 }; 18947 };
19440 // ********** Code for DoStatement ************** 18948 // ********** Code for DoStatement **************
19441 function DoStatement(body, test, span) { 18949 function DoStatement(body, test, span) {
19442 this.body = body; 18950 this.body = body;
19443 this.test = test; 18951 this.test = test;
19444 lang_Statement.call(this, span); 18952 lang_Statement.call(this, span);
19445 // Initializers done 18953 // Initializers done
19446 } 18954 }
19447 $inherits(DoStatement, lang_Statement); 18955 $inherits(DoStatement, lang_Statement);
19448 DoStatement.prototype.visit = function(visitor) { 18956 DoStatement.prototype.visit = function(visitor) {
19449 return visitor.visitDoStatement(this); 18957 return visitor.visitDoStatement(this);
19450 } 18958 }
19451 DoStatement.prototype.visit$1 = function($0) { 18959 DoStatement.prototype.visit$1 = function($0) {
19452 return this.visit(($0 && $0.is$TreeVisitor())); 18960 return this.visit($0);
19453 }; 18961 };
19454 // ********** Code for ForStatement ************** 18962 // ********** Code for ForStatement **************
19455 function ForStatement(init, test, step, body, span) { 18963 function ForStatement(init, test, step, body, span) {
19456 this.init = init; 18964 this.init = init;
19457 this.test = test; 18965 this.test = test;
19458 this.step = step; 18966 this.step = step;
19459 this.body = body; 18967 this.body = body;
19460 lang_Statement.call(this, span); 18968 lang_Statement.call(this, span);
19461 // Initializers done 18969 // Initializers done
19462 } 18970 }
19463 $inherits(ForStatement, lang_Statement); 18971 $inherits(ForStatement, lang_Statement);
19464 ForStatement.prototype.visit = function(visitor) { 18972 ForStatement.prototype.visit = function(visitor) {
19465 return visitor.visitForStatement(this); 18973 return visitor.visitForStatement(this);
19466 } 18974 }
19467 ForStatement.prototype.visit$1 = function($0) { 18975 ForStatement.prototype.visit$1 = function($0) {
19468 return this.visit(($0 && $0.is$TreeVisitor())); 18976 return this.visit($0);
19469 }; 18977 };
19470 // ********** Code for ForInStatement ************** 18978 // ********** Code for ForInStatement **************
19471 function ForInStatement(item, list, body, span) { 18979 function ForInStatement(item, list, body, span) {
19472 this.item = item; 18980 this.item = item;
19473 this.list = list; 18981 this.list = list;
19474 this.body = body; 18982 this.body = body;
19475 lang_Statement.call(this, span); 18983 lang_Statement.call(this, span);
19476 // Initializers done 18984 // Initializers done
19477 } 18985 }
19478 $inherits(ForInStatement, lang_Statement); 18986 $inherits(ForInStatement, lang_Statement);
19479 ForInStatement.prototype.visit = function(visitor) { 18987 ForInStatement.prototype.visit = function(visitor) {
19480 return visitor.visitForInStatement(this); 18988 return visitor.visitForInStatement(this);
19481 } 18989 }
19482 ForInStatement.prototype.visit$1 = function($0) { 18990 ForInStatement.prototype.visit$1 = function($0) {
19483 return this.visit(($0 && $0.is$TreeVisitor())); 18991 return this.visit($0);
19484 }; 18992 };
19485 // ********** Code for TryStatement ************** 18993 // ********** Code for TryStatement **************
19486 function TryStatement(body, catches, finallyBlock, span) { 18994 function TryStatement(body, catches, finallyBlock, span) {
19487 this.body = body; 18995 this.body = body;
19488 this.catches = catches; 18996 this.catches = catches;
19489 this.finallyBlock = finallyBlock; 18997 this.finallyBlock = finallyBlock;
19490 lang_Statement.call(this, span); 18998 lang_Statement.call(this, span);
19491 // Initializers done 18999 // Initializers done
19492 } 19000 }
19493 $inherits(TryStatement, lang_Statement); 19001 $inherits(TryStatement, lang_Statement);
19494 TryStatement.prototype.visit = function(visitor) { 19002 TryStatement.prototype.visit = function(visitor) {
19495 return visitor.visitTryStatement(this); 19003 return visitor.visitTryStatement(this);
19496 } 19004 }
19497 TryStatement.prototype.visit$1 = function($0) { 19005 TryStatement.prototype.visit$1 = function($0) {
19498 return this.visit(($0 && $0.is$TreeVisitor())); 19006 return this.visit($0);
19499 }; 19007 };
19500 // ********** Code for SwitchStatement ************** 19008 // ********** Code for SwitchStatement **************
19501 function SwitchStatement(test, cases, span) { 19009 function SwitchStatement(test, cases, span) {
19502 this.test = test; 19010 this.test = test;
19503 this.cases = cases; 19011 this.cases = cases;
19504 lang_Statement.call(this, span); 19012 lang_Statement.call(this, span);
19505 // Initializers done 19013 // Initializers done
19506 } 19014 }
19507 $inherits(SwitchStatement, lang_Statement); 19015 $inherits(SwitchStatement, lang_Statement);
19508 SwitchStatement.prototype.visit = function(visitor) { 19016 SwitchStatement.prototype.visit = function(visitor) {
19509 return visitor.visitSwitchStatement(this); 19017 return visitor.visitSwitchStatement(this);
19510 } 19018 }
19511 SwitchStatement.prototype.visit$1 = function($0) { 19019 SwitchStatement.prototype.visit$1 = function($0) {
19512 return this.visit(($0 && $0.is$TreeVisitor())); 19020 return this.visit($0);
19513 }; 19021 };
19514 // ********** Code for BlockStatement ************** 19022 // ********** Code for BlockStatement **************
19515 function BlockStatement(body, span) { 19023 function BlockStatement(body, span) {
19516 this.body = body; 19024 this.body = body;
19517 lang_Statement.call(this, span); 19025 lang_Statement.call(this, span);
19518 // Initializers done 19026 // Initializers done
19519 } 19027 }
19520 $inherits(BlockStatement, lang_Statement); 19028 $inherits(BlockStatement, lang_Statement);
19521 BlockStatement.prototype.is$BlockStatement = function(){return this;};
19522 BlockStatement.prototype.visit = function(visitor) { 19029 BlockStatement.prototype.visit = function(visitor) {
19523 return visitor.visitBlockStatement(this); 19030 return visitor.visitBlockStatement(this);
19524 } 19031 }
19525 BlockStatement.prototype.visit$1 = function($0) { 19032 BlockStatement.prototype.visit$1 = function($0) {
19526 return this.visit(($0 && $0.is$TreeVisitor())); 19033 return this.visit($0);
19527 }; 19034 };
19528 // ********** Code for LabeledStatement ************** 19035 // ********** Code for LabeledStatement **************
19529 function LabeledStatement(name, body, span) { 19036 function LabeledStatement(name, body, span) {
19530 this.name = name; 19037 this.name = name;
19531 this.body = body; 19038 this.body = body;
19532 lang_Statement.call(this, span); 19039 lang_Statement.call(this, span);
19533 // Initializers done 19040 // Initializers done
19534 } 19041 }
19535 $inherits(LabeledStatement, lang_Statement); 19042 $inherits(LabeledStatement, lang_Statement);
19536 LabeledStatement.prototype.get$name = function() { return this.name; }; 19043 LabeledStatement.prototype.get$name = function() { return this.name; };
19537 LabeledStatement.prototype.set$name = function(value) { return this.name = value ; }; 19044 LabeledStatement.prototype.set$name = function(value) { return this.name = value ; };
19538 LabeledStatement.prototype.visit = function(visitor) { 19045 LabeledStatement.prototype.visit = function(visitor) {
19539 return visitor.visitLabeledStatement(this); 19046 return visitor.visitLabeledStatement(this);
19540 } 19047 }
19541 LabeledStatement.prototype.visit$1 = function($0) { 19048 LabeledStatement.prototype.visit$1 = function($0) {
19542 return this.visit(($0 && $0.is$TreeVisitor())); 19049 return this.visit($0);
19543 }; 19050 };
19544 // ********** Code for lang_ExpressionStatement ************** 19051 // ********** Code for lang_ExpressionStatement **************
19545 function lang_ExpressionStatement(body, span) { 19052 function lang_ExpressionStatement(body, span) {
19546 this.body = body; 19053 this.body = body;
19547 lang_Statement.call(this, span); 19054 lang_Statement.call(this, span);
19548 // Initializers done 19055 // Initializers done
19549 } 19056 }
19550 $inherits(lang_ExpressionStatement, lang_Statement); 19057 $inherits(lang_ExpressionStatement, lang_Statement);
19551 lang_ExpressionStatement.prototype.visit = function(visitor) { 19058 lang_ExpressionStatement.prototype.visit = function(visitor) {
19552 return visitor.visitExpressionStatement(this); 19059 return visitor.visitExpressionStatement(this);
19553 } 19060 }
19554 lang_ExpressionStatement.prototype.visit$1 = function($0) { 19061 lang_ExpressionStatement.prototype.visit$1 = function($0) {
19555 return this.visit(($0 && $0.is$TreeVisitor())); 19062 return this.visit($0);
19556 }; 19063 };
19557 // ********** Code for EmptyStatement ************** 19064 // ********** Code for EmptyStatement **************
19558 function EmptyStatement(span) { 19065 function EmptyStatement(span) {
19559 lang_Statement.call(this, span); 19066 lang_Statement.call(this, span);
19560 // Initializers done 19067 // Initializers done
19561 } 19068 }
19562 $inherits(EmptyStatement, lang_Statement); 19069 $inherits(EmptyStatement, lang_Statement);
19563 EmptyStatement.prototype.visit = function(visitor) { 19070 EmptyStatement.prototype.visit = function(visitor) {
19564 return visitor.visitEmptyStatement(this); 19071 return visitor.visitEmptyStatement(this);
19565 } 19072 }
19566 EmptyStatement.prototype.visit$1 = function($0) { 19073 EmptyStatement.prototype.visit$1 = function($0) {
19567 return this.visit(($0 && $0.is$TreeVisitor())); 19074 return this.visit($0);
19568 }; 19075 };
19569 // ********** Code for DietStatement ************** 19076 // ********** Code for DietStatement **************
19570 function DietStatement(span) { 19077 function DietStatement(span) {
19571 lang_Statement.call(this, span); 19078 lang_Statement.call(this, span);
19572 // Initializers done 19079 // Initializers done
19573 } 19080 }
19574 $inherits(DietStatement, lang_Statement); 19081 $inherits(DietStatement, lang_Statement);
19575 DietStatement.prototype.visit = function(visitor) { 19082 DietStatement.prototype.visit = function(visitor) {
19576 return visitor.visitDietStatement(this); 19083 return visitor.visitDietStatement(this);
19577 } 19084 }
19578 DietStatement.prototype.visit$1 = function($0) { 19085 DietStatement.prototype.visit$1 = function($0) {
19579 return this.visit(($0 && $0.is$TreeVisitor())); 19086 return this.visit($0);
19580 }; 19087 };
19581 // ********** Code for NativeStatement ************** 19088 // ********** Code for NativeStatement **************
19582 function NativeStatement(body, span) { 19089 function NativeStatement(body, span) {
19583 this.body = body; 19090 this.body = body;
19584 lang_Statement.call(this, span); 19091 lang_Statement.call(this, span);
19585 // Initializers done 19092 // Initializers done
19586 } 19093 }
19587 $inherits(NativeStatement, lang_Statement); 19094 $inherits(NativeStatement, lang_Statement);
19588 NativeStatement.prototype.visit = function(visitor) { 19095 NativeStatement.prototype.visit = function(visitor) {
19589 return visitor.visitNativeStatement(this); 19096 return visitor.visitNativeStatement(this);
19590 } 19097 }
19591 NativeStatement.prototype.visit$1 = function($0) { 19098 NativeStatement.prototype.visit$1 = function($0) {
19592 return this.visit(($0 && $0.is$TreeVisitor())); 19099 return this.visit($0);
19593 }; 19100 };
19594 // ********** Code for LambdaExpression ************** 19101 // ********** Code for LambdaExpression **************
19595 function LambdaExpression(func, span) { 19102 function LambdaExpression(func, span) {
19596 this.func = func; 19103 this.func = func;
19597 lang_Expression.call(this, span); 19104 lang_Expression.call(this, span);
19598 // Initializers done 19105 // Initializers done
19599 } 19106 }
19600 $inherits(LambdaExpression, lang_Expression); 19107 $inherits(LambdaExpression, lang_Expression);
19601 LambdaExpression.prototype.is$LambdaExpression = function(){return this;};
19602 LambdaExpression.prototype.visit = function(visitor) { 19108 LambdaExpression.prototype.visit = function(visitor) {
19603 return visitor.visitLambdaExpression(this); 19109 return visitor.visitLambdaExpression(this);
19604 } 19110 }
19605 LambdaExpression.prototype.visit$1 = function($0) { 19111 LambdaExpression.prototype.visit$1 = function($0) {
19606 return this.visit(($0 && $0.is$TreeVisitor())); 19112 return this.visit($0);
19607 }; 19113 };
19608 // ********** Code for CallExpression ************** 19114 // ********** Code for CallExpression **************
19609 function CallExpression(target, arguments, span) { 19115 function CallExpression(target, arguments, span) {
19610 this.target = target; 19116 this.target = target;
19611 this.arguments = arguments; 19117 this.arguments = arguments;
19612 lang_Expression.call(this, span); 19118 lang_Expression.call(this, span);
19613 // Initializers done 19119 // Initializers done
19614 } 19120 }
19615 $inherits(CallExpression, lang_Expression); 19121 $inherits(CallExpression, lang_Expression);
19616 CallExpression.prototype.is$CallExpression = function(){return this;};
19617 CallExpression.prototype.get$arguments = function() { return this.arguments; }; 19122 CallExpression.prototype.get$arguments = function() { return this.arguments; };
19618 CallExpression.prototype.set$arguments = function(value) { return this.arguments = value; }; 19123 CallExpression.prototype.set$arguments = function(value) { return this.arguments = value; };
19619 CallExpression.prototype.visit = function(visitor) { 19124 CallExpression.prototype.visit = function(visitor) {
19620 return visitor.visitCallExpression(this); 19125 return visitor.visitCallExpression(this);
19621 } 19126 }
19622 CallExpression.prototype.visit$1 = function($0) { 19127 CallExpression.prototype.visit$1 = function($0) {
19623 return this.visit(($0 && $0.is$TreeVisitor())); 19128 return this.visit($0);
19624 }; 19129 };
19625 // ********** Code for IndexExpression ************** 19130 // ********** Code for IndexExpression **************
19626 function IndexExpression(target, index, span) { 19131 function IndexExpression(target, index, span) {
19627 this.target = target; 19132 this.target = target;
19628 this.index = index; 19133 this.index = index;
19629 lang_Expression.call(this, span); 19134 lang_Expression.call(this, span);
19630 // Initializers done 19135 // Initializers done
19631 } 19136 }
19632 $inherits(IndexExpression, lang_Expression); 19137 $inherits(IndexExpression, lang_Expression);
19633 IndexExpression.prototype.is$IndexExpression = function(){return this;};
19634 IndexExpression.prototype.visit = function(visitor) { 19138 IndexExpression.prototype.visit = function(visitor) {
19635 return visitor.visitIndexExpression(this); 19139 return visitor.visitIndexExpression(this);
19636 } 19140 }
19637 IndexExpression.prototype.visit$1 = function($0) { 19141 IndexExpression.prototype.visit$1 = function($0) {
19638 return this.visit(($0 && $0.is$TreeVisitor())); 19142 return this.visit($0);
19639 }; 19143 };
19640 // ********** Code for BinaryExpression ************** 19144 // ********** Code for BinaryExpression **************
19641 function BinaryExpression(op, x, y, span) { 19145 function BinaryExpression(op, x, y, span) {
19642 this.op = op; 19146 this.op = op;
19643 this.x = x; 19147 this.x = x;
19644 this.y = y; 19148 this.y = y;
19645 lang_Expression.call(this, span); 19149 lang_Expression.call(this, span);
19646 // Initializers done 19150 // Initializers done
19647 } 19151 }
19648 $inherits(BinaryExpression, lang_Expression); 19152 $inherits(BinaryExpression, lang_Expression);
19649 BinaryExpression.prototype.is$BinaryExpression = function(){return this;};
19650 BinaryExpression.prototype.visit = function(visitor) { 19153 BinaryExpression.prototype.visit = function(visitor) {
19651 return visitor.visitBinaryExpression(this); 19154 return visitor.visitBinaryExpression(this);
19652 } 19155 }
19653 BinaryExpression.prototype.visit$1 = function($0) { 19156 BinaryExpression.prototype.visit$1 = function($0) {
19654 return this.visit(($0 && $0.is$TreeVisitor())); 19157 return this.visit($0);
19655 }; 19158 };
19656 // ********** Code for UnaryExpression ************** 19159 // ********** Code for UnaryExpression **************
19657 function UnaryExpression(op, self, span) { 19160 function UnaryExpression(op, self, span) {
19658 this.op = op; 19161 this.op = op;
19659 this.self = self; 19162 this.self = self;
19660 lang_Expression.call(this, span); 19163 lang_Expression.call(this, span);
19661 // Initializers done 19164 // Initializers done
19662 } 19165 }
19663 $inherits(UnaryExpression, lang_Expression); 19166 $inherits(UnaryExpression, lang_Expression);
19664 UnaryExpression.prototype.visit = function(visitor) { 19167 UnaryExpression.prototype.visit = function(visitor) {
19665 return visitor.visitUnaryExpression(this); 19168 return visitor.visitUnaryExpression(this);
19666 } 19169 }
19667 UnaryExpression.prototype.visit$1 = function($0) { 19170 UnaryExpression.prototype.visit$1 = function($0) {
19668 return this.visit(($0 && $0.is$TreeVisitor())); 19171 return this.visit($0);
19669 }; 19172 };
19670 // ********** Code for PostfixExpression ************** 19173 // ********** Code for PostfixExpression **************
19671 function PostfixExpression(body, op, span) { 19174 function PostfixExpression(body, op, span) {
19672 this.body = body; 19175 this.body = body;
19673 this.op = op; 19176 this.op = op;
19674 lang_Expression.call(this, span); 19177 lang_Expression.call(this, span);
19675 // Initializers done 19178 // Initializers done
19676 } 19179 }
19677 $inherits(PostfixExpression, lang_Expression); 19180 $inherits(PostfixExpression, lang_Expression);
19678 PostfixExpression.prototype.is$PostfixExpression = function(){return this;};
19679 PostfixExpression.prototype.visit = function(visitor) { 19181 PostfixExpression.prototype.visit = function(visitor) {
19680 return visitor.visitPostfixExpression$1(this); 19182 return visitor.visitPostfixExpression$1(this);
19681 } 19183 }
19682 PostfixExpression.prototype.visit$1 = function($0) { 19184 PostfixExpression.prototype.visit$1 = function($0) {
19683 return this.visit(($0 && $0.is$TreeVisitor())); 19185 return this.visit($0);
19684 }; 19186 };
19685 // ********** Code for lang_NewExpression ************** 19187 // ********** Code for lang_NewExpression **************
19686 function lang_NewExpression(isConst, type, name, arguments, span) { 19188 function lang_NewExpression(isConst, type, name, arguments, span) {
19687 this.isConst = isConst; 19189 this.isConst = isConst;
19688 this.type = type; 19190 this.type = type;
19689 this.name = name; 19191 this.name = name;
19690 this.arguments = arguments; 19192 this.arguments = arguments;
19691 lang_Expression.call(this, span); 19193 lang_Expression.call(this, span);
19692 // Initializers done 19194 // Initializers done
19693 } 19195 }
19694 $inherits(lang_NewExpression, lang_Expression); 19196 $inherits(lang_NewExpression, lang_Expression);
19695 lang_NewExpression.prototype.get$isConst = function() { return this.isConst; }; 19197 lang_NewExpression.prototype.get$isConst = function() { return this.isConst; };
19696 lang_NewExpression.prototype.set$isConst = function(value) { return this.isConst = value; }; 19198 lang_NewExpression.prototype.set$isConst = function(value) { return this.isConst = value; };
19697 lang_NewExpression.prototype.get$type = function() { return this.type; };
19698 lang_NewExpression.prototype.set$type = function(value) { return this.type = val ue; };
19699 lang_NewExpression.prototype.get$name = function() { return this.name; }; 19199 lang_NewExpression.prototype.get$name = function() { return this.name; };
19700 lang_NewExpression.prototype.set$name = function(value) { return this.name = val ue; }; 19200 lang_NewExpression.prototype.set$name = function(value) { return this.name = val ue; };
19701 lang_NewExpression.prototype.get$arguments = function() { return this.arguments; }; 19201 lang_NewExpression.prototype.get$arguments = function() { return this.arguments; };
19702 lang_NewExpression.prototype.set$arguments = function(value) { return this.argum ents = value; }; 19202 lang_NewExpression.prototype.set$arguments = function(value) { return this.argum ents = value; };
19703 lang_NewExpression.prototype.visit = function(visitor) { 19203 lang_NewExpression.prototype.visit = function(visitor) {
19704 return visitor.visitNewExpression(this); 19204 return visitor.visitNewExpression(this);
19705 } 19205 }
19706 lang_NewExpression.prototype.visit$1 = function($0) { 19206 lang_NewExpression.prototype.visit$1 = function($0) {
19707 return this.visit(($0 && $0.is$TreeVisitor())); 19207 return this.visit($0);
19708 }; 19208 };
19709 // ********** Code for ListExpression ************** 19209 // ********** Code for ListExpression **************
19710 function ListExpression(isConst, type, values, span) { 19210 function ListExpression(isConst, type, values, span) {
19711 this.isConst = isConst; 19211 this.isConst = isConst;
19712 this.type = type; 19212 this.type = type;
19713 this.values = values; 19213 this.values = values;
19714 lang_Expression.call(this, span); 19214 lang_Expression.call(this, span);
19715 // Initializers done 19215 // Initializers done
19716 } 19216 }
19717 $inherits(ListExpression, lang_Expression); 19217 $inherits(ListExpression, lang_Expression);
19718 ListExpression.prototype.get$isConst = function() { return this.isConst; }; 19218 ListExpression.prototype.get$isConst = function() { return this.isConst; };
19719 ListExpression.prototype.set$isConst = function(value) { return this.isConst = v alue; }; 19219 ListExpression.prototype.set$isConst = function(value) { return this.isConst = v alue; };
19720 ListExpression.prototype.get$type = function() { return this.type; };
19721 ListExpression.prototype.set$type = function(value) { return this.type = value; };
19722 ListExpression.prototype.visit = function(visitor) { 19220 ListExpression.prototype.visit = function(visitor) {
19723 return visitor.visitListExpression(this); 19221 return visitor.visitListExpression(this);
19724 } 19222 }
19725 ListExpression.prototype.visit$1 = function($0) { 19223 ListExpression.prototype.visit$1 = function($0) {
19726 return this.visit(($0 && $0.is$TreeVisitor())); 19224 return this.visit($0);
19727 }; 19225 };
19728 // ********** Code for MapExpression ************** 19226 // ********** Code for MapExpression **************
19729 function MapExpression(isConst, type, items, span) { 19227 function MapExpression(isConst, type, items, span) {
19730 this.isConst = isConst; 19228 this.isConst = isConst;
19731 this.type = type; 19229 this.type = type;
19732 this.items = items; 19230 this.items = items;
19733 lang_Expression.call(this, span); 19231 lang_Expression.call(this, span);
19734 // Initializers done 19232 // Initializers done
19735 } 19233 }
19736 $inherits(MapExpression, lang_Expression); 19234 $inherits(MapExpression, lang_Expression);
19737 MapExpression.prototype.get$isConst = function() { return this.isConst; }; 19235 MapExpression.prototype.get$isConst = function() { return this.isConst; };
19738 MapExpression.prototype.set$isConst = function(value) { return this.isConst = va lue; }; 19236 MapExpression.prototype.set$isConst = function(value) { return this.isConst = va lue; };
19739 MapExpression.prototype.get$type = function() { return this.type; };
19740 MapExpression.prototype.set$type = function(value) { return this.type = value; } ;
19741 MapExpression.prototype.visit = function(visitor) { 19237 MapExpression.prototype.visit = function(visitor) {
19742 return visitor.visitMapExpression(this); 19238 return visitor.visitMapExpression(this);
19743 } 19239 }
19744 MapExpression.prototype.visit$1 = function($0) { 19240 MapExpression.prototype.visit$1 = function($0) {
19745 return this.visit(($0 && $0.is$TreeVisitor())); 19241 return this.visit($0);
19746 }; 19242 };
19747 // ********** Code for ConditionalExpression ************** 19243 // ********** Code for ConditionalExpression **************
19748 function ConditionalExpression(test, trueBranch, falseBranch, span) { 19244 function ConditionalExpression(test, trueBranch, falseBranch, span) {
19749 this.test = test; 19245 this.test = test;
19750 this.trueBranch = trueBranch; 19246 this.trueBranch = trueBranch;
19751 this.falseBranch = falseBranch; 19247 this.falseBranch = falseBranch;
19752 lang_Expression.call(this, span); 19248 lang_Expression.call(this, span);
19753 // Initializers done 19249 // Initializers done
19754 } 19250 }
19755 $inherits(ConditionalExpression, lang_Expression); 19251 $inherits(ConditionalExpression, lang_Expression);
19756 ConditionalExpression.prototype.visit = function(visitor) { 19252 ConditionalExpression.prototype.visit = function(visitor) {
19757 return visitor.visitConditionalExpression(this); 19253 return visitor.visitConditionalExpression(this);
19758 } 19254 }
19759 ConditionalExpression.prototype.visit$1 = function($0) { 19255 ConditionalExpression.prototype.visit$1 = function($0) {
19760 return this.visit(($0 && $0.is$TreeVisitor())); 19256 return this.visit($0);
19761 }; 19257 };
19762 // ********** Code for IsExpression ************** 19258 // ********** Code for IsExpression **************
19763 function IsExpression(isTrue, x, type, span) { 19259 function IsExpression(isTrue, x, type, span) {
19764 this.isTrue = isTrue; 19260 this.isTrue = isTrue;
19765 this.x = x; 19261 this.x = x;
19766 this.type = type; 19262 this.type = type;
19767 lang_Expression.call(this, span); 19263 lang_Expression.call(this, span);
19768 // Initializers done 19264 // Initializers done
19769 } 19265 }
19770 $inherits(IsExpression, lang_Expression); 19266 $inherits(IsExpression, lang_Expression);
19771 IsExpression.prototype.get$type = function() { return this.type; };
19772 IsExpression.prototype.set$type = function(value) { return this.type = value; };
19773 IsExpression.prototype.visit = function(visitor) { 19267 IsExpression.prototype.visit = function(visitor) {
19774 return visitor.visitIsExpression(this); 19268 return visitor.visitIsExpression(this);
19775 } 19269 }
19776 IsExpression.prototype.visit$1 = function($0) { 19270 IsExpression.prototype.visit$1 = function($0) {
19777 return this.visit(($0 && $0.is$TreeVisitor())); 19271 return this.visit($0);
19778 }; 19272 };
19779 // ********** Code for ParenExpression ************** 19273 // ********** Code for ParenExpression **************
19780 function ParenExpression(body, span) { 19274 function ParenExpression(body, span) {
19781 this.body = body; 19275 this.body = body;
19782 lang_Expression.call(this, span); 19276 lang_Expression.call(this, span);
19783 // Initializers done 19277 // Initializers done
19784 } 19278 }
19785 $inherits(ParenExpression, lang_Expression); 19279 $inherits(ParenExpression, lang_Expression);
19786 ParenExpression.prototype.visit = function(visitor) { 19280 ParenExpression.prototype.visit = function(visitor) {
19787 return visitor.visitParenExpression(this); 19281 return visitor.visitParenExpression(this);
19788 } 19282 }
19789 ParenExpression.prototype.visit$1 = function($0) { 19283 ParenExpression.prototype.visit$1 = function($0) {
19790 return this.visit(($0 && $0.is$TreeVisitor())); 19284 return this.visit($0);
19791 }; 19285 };
19792 // ********** Code for DotExpression ************** 19286 // ********** Code for DotExpression **************
19793 function DotExpression(self, name, span) { 19287 function DotExpression(self, name, span) {
19794 this.self = self; 19288 this.self = self;
19795 this.name = name; 19289 this.name = name;
19796 lang_Expression.call(this, span); 19290 lang_Expression.call(this, span);
19797 // Initializers done 19291 // Initializers done
19798 } 19292 }
19799 $inherits(DotExpression, lang_Expression); 19293 $inherits(DotExpression, lang_Expression);
19800 DotExpression.prototype.is$DotExpression = function(){return this;};
19801 DotExpression.prototype.get$name = function() { return this.name; }; 19294 DotExpression.prototype.get$name = function() { return this.name; };
19802 DotExpression.prototype.set$name = function(value) { return this.name = value; } ; 19295 DotExpression.prototype.set$name = function(value) { return this.name = value; } ;
19803 DotExpression.prototype.visit = function(visitor) { 19296 DotExpression.prototype.visit = function(visitor) {
19804 return visitor.visitDotExpression(this); 19297 return visitor.visitDotExpression(this);
19805 } 19298 }
19806 DotExpression.prototype.visit$1 = function($0) { 19299 DotExpression.prototype.visit$1 = function($0) {
19807 return this.visit(($0 && $0.is$TreeVisitor())); 19300 return this.visit($0);
19808 }; 19301 };
19809 // ********** Code for VarExpression ************** 19302 // ********** Code for VarExpression **************
19810 function VarExpression(name, span) { 19303 function VarExpression(name, span) {
19811 this.name = name; 19304 this.name = name;
19812 lang_Expression.call(this, span); 19305 lang_Expression.call(this, span);
19813 // Initializers done 19306 // Initializers done
19814 } 19307 }
19815 $inherits(VarExpression, lang_Expression); 19308 $inherits(VarExpression, lang_Expression);
19816 VarExpression.prototype.is$VarExpression = function(){return this;};
19817 VarExpression.prototype.get$name = function() { return this.name; }; 19309 VarExpression.prototype.get$name = function() { return this.name; };
19818 VarExpression.prototype.set$name = function(value) { return this.name = value; } ; 19310 VarExpression.prototype.set$name = function(value) { return this.name = value; } ;
19819 VarExpression.prototype.visit = function(visitor) { 19311 VarExpression.prototype.visit = function(visitor) {
19820 return visitor.visitVarExpression(this); 19312 return visitor.visitVarExpression(this);
19821 } 19313 }
19822 VarExpression.prototype.visit$1 = function($0) { 19314 VarExpression.prototype.visit$1 = function($0) {
19823 return this.visit(($0 && $0.is$TreeVisitor())); 19315 return this.visit($0);
19824 }; 19316 };
19825 // ********** Code for ThisExpression ************** 19317 // ********** Code for ThisExpression **************
19826 function ThisExpression(span) { 19318 function ThisExpression(span) {
19827 lang_Expression.call(this, span); 19319 lang_Expression.call(this, span);
19828 // Initializers done 19320 // Initializers done
19829 } 19321 }
19830 $inherits(ThisExpression, lang_Expression); 19322 $inherits(ThisExpression, lang_Expression);
19831 ThisExpression.prototype.visit = function(visitor) { 19323 ThisExpression.prototype.visit = function(visitor) {
19832 return visitor.visitThisExpression(this); 19324 return visitor.visitThisExpression(this);
19833 } 19325 }
19834 ThisExpression.prototype.visit$1 = function($0) { 19326 ThisExpression.prototype.visit$1 = function($0) {
19835 return this.visit(($0 && $0.is$TreeVisitor())); 19327 return this.visit($0);
19836 }; 19328 };
19837 // ********** Code for SuperExpression ************** 19329 // ********** Code for SuperExpression **************
19838 function SuperExpression(span) { 19330 function SuperExpression(span) {
19839 lang_Expression.call(this, span); 19331 lang_Expression.call(this, span);
19840 // Initializers done 19332 // Initializers done
19841 } 19333 }
19842 $inherits(SuperExpression, lang_Expression); 19334 $inherits(SuperExpression, lang_Expression);
19843 SuperExpression.prototype.visit = function(visitor) { 19335 SuperExpression.prototype.visit = function(visitor) {
19844 return visitor.visitSuperExpression(this); 19336 return visitor.visitSuperExpression(this);
19845 } 19337 }
19846 SuperExpression.prototype.visit$1 = function($0) { 19338 SuperExpression.prototype.visit$1 = function($0) {
19847 return this.visit(($0 && $0.is$TreeVisitor())); 19339 return this.visit($0);
19848 }; 19340 };
19849 // ********** Code for NullExpression ************** 19341 // ********** Code for NullExpression **************
19850 function NullExpression(span) { 19342 function NullExpression(span) {
19851 lang_Expression.call(this, span); 19343 lang_Expression.call(this, span);
19852 // Initializers done 19344 // Initializers done
19853 } 19345 }
19854 $inherits(NullExpression, lang_Expression); 19346 $inherits(NullExpression, lang_Expression);
19855 NullExpression.prototype.visit = function(visitor) { 19347 NullExpression.prototype.visit = function(visitor) {
19856 return visitor.visitNullExpression(this); 19348 return visitor.visitNullExpression(this);
19857 } 19349 }
19858 NullExpression.prototype.visit$1 = function($0) { 19350 NullExpression.prototype.visit$1 = function($0) {
19859 return this.visit(($0 && $0.is$TreeVisitor())); 19351 return this.visit($0);
19860 }; 19352 };
19861 // ********** Code for LiteralExpression ************** 19353 // ********** Code for LiteralExpression **************
19862 function LiteralExpression(value, type, text, span) { 19354 function LiteralExpression(value, type, text, span) {
19863 this.value = value; 19355 this.value = value;
19864 this.type = type; 19356 this.type = type;
19865 this.text = text; 19357 this.text = text;
19866 lang_Expression.call(this, span); 19358 lang_Expression.call(this, span);
19867 // Initializers done 19359 // Initializers done
19868 } 19360 }
19869 $inherits(LiteralExpression, lang_Expression); 19361 $inherits(LiteralExpression, lang_Expression);
19870 LiteralExpression.prototype.get$value = function() { return this.value; }; 19362 LiteralExpression.prototype.get$value = function() { return this.value; };
19871 LiteralExpression.prototype.set$value = function(value) { return this.value = va lue; }; 19363 LiteralExpression.prototype.set$value = function(value) { return this.value = va lue; };
19872 LiteralExpression.prototype.get$type = function() { return this.type; };
19873 LiteralExpression.prototype.set$type = function(value) { return this.type = valu e; };
19874 LiteralExpression.prototype.get$text = function() { return this.text; }; 19364 LiteralExpression.prototype.get$text = function() { return this.text; };
19875 LiteralExpression.prototype.set$text = function(value) { return this.text = valu e; }; 19365 LiteralExpression.prototype.set$text = function(value) { return this.text = valu e; };
19876 LiteralExpression.prototype.visit = function(visitor) { 19366 LiteralExpression.prototype.visit = function(visitor) {
19877 return visitor.visitLiteralExpression(this); 19367 return visitor.visitLiteralExpression(this);
19878 } 19368 }
19879 LiteralExpression.prototype.visit$1 = function($0) { 19369 LiteralExpression.prototype.visit$1 = function($0) {
19880 return this.visit(($0 && $0.is$TreeVisitor())); 19370 return this.visit($0);
19881 }; 19371 };
19882 // ********** Code for NameTypeReference ************** 19372 // ********** Code for NameTypeReference **************
19883 function NameTypeReference(isFinal, name, names, span) { 19373 function NameTypeReference(isFinal, name, names, span) {
19884 this.isFinal = isFinal; 19374 this.isFinal = isFinal;
19885 this.name = name; 19375 this.name = name;
19886 this.names = names; 19376 this.names = names;
19887 TypeReference.call(this, span); 19377 TypeReference.call(this, span);
19888 // Initializers done 19378 // Initializers done
19889 } 19379 }
19890 $inherits(NameTypeReference, TypeReference); 19380 $inherits(NameTypeReference, TypeReference);
19891 NameTypeReference.prototype.is$NameTypeReference = function(){return this;};
19892 NameTypeReference.prototype.get$name = function() { return this.name; }; 19381 NameTypeReference.prototype.get$name = function() { return this.name; };
19893 NameTypeReference.prototype.set$name = function(value) { return this.name = valu e; }; 19382 NameTypeReference.prototype.set$name = function(value) { return this.name = valu e; };
19894 NameTypeReference.prototype.visit = function(visitor) { 19383 NameTypeReference.prototype.visit = function(visitor) {
19895 return visitor.visitNameTypeReference(this); 19384 return visitor.visitNameTypeReference(this);
19896 } 19385 }
19897 NameTypeReference.prototype.visit$1 = function($0) { 19386 NameTypeReference.prototype.visit$1 = function($0) {
19898 return this.visit(($0 && $0.is$TreeVisitor())); 19387 return this.visit($0);
19899 }; 19388 };
19900 // ********** Code for GenericTypeReference ************** 19389 // ********** Code for GenericTypeReference **************
19901 function GenericTypeReference(baseType, typeArguments, depth, span) { 19390 function GenericTypeReference(baseType, typeArguments, depth, span) {
19902 this.baseType = baseType; 19391 this.baseType = baseType;
19903 this.typeArguments = typeArguments; 19392 this.typeArguments = typeArguments;
19904 this.depth = depth; 19393 this.depth = depth;
19905 TypeReference.call(this, span); 19394 TypeReference.call(this, span);
19906 // Initializers done 19395 // Initializers done
19907 } 19396 }
19908 $inherits(GenericTypeReference, TypeReference); 19397 $inherits(GenericTypeReference, TypeReference);
19909 GenericTypeReference.prototype.is$GenericTypeReference = function(){return this; };
19910 GenericTypeReference.prototype.visit = function(visitor) { 19398 GenericTypeReference.prototype.visit = function(visitor) {
19911 return visitor.visitGenericTypeReference(this); 19399 return visitor.visitGenericTypeReference(this);
19912 } 19400 }
19913 GenericTypeReference.prototype.visit$1 = function($0) { 19401 GenericTypeReference.prototype.visit$1 = function($0) {
19914 return this.visit(($0 && $0.is$TreeVisitor())); 19402 return this.visit($0);
19915 }; 19403 };
19916 // ********** Code for FunctionTypeReference ************** 19404 // ********** Code for FunctionTypeReference **************
19917 function FunctionTypeReference(isFinal, func, span) { 19405 function FunctionTypeReference(isFinal, func, span) {
19918 this.isFinal = isFinal; 19406 this.isFinal = isFinal;
19919 this.func = func; 19407 this.func = func;
19920 TypeReference.call(this, span); 19408 TypeReference.call(this, span);
19921 // Initializers done 19409 // Initializers done
19922 } 19410 }
19923 $inherits(FunctionTypeReference, TypeReference); 19411 $inherits(FunctionTypeReference, TypeReference);
19924 FunctionTypeReference.prototype.is$FunctionTypeReference = function(){return thi s;};
19925 FunctionTypeReference.prototype.visit = function(visitor) { 19412 FunctionTypeReference.prototype.visit = function(visitor) {
19926 return visitor.visitFunctionTypeReference(this); 19413 return visitor.visitFunctionTypeReference(this);
19927 } 19414 }
19928 FunctionTypeReference.prototype.visit$1 = function($0) { 19415 FunctionTypeReference.prototype.visit$1 = function($0) {
19929 return this.visit(($0 && $0.is$TreeVisitor())); 19416 return this.visit($0);
19930 }; 19417 };
19931 // ********** Code for ArgumentNode ************** 19418 // ********** Code for ArgumentNode **************
19932 function ArgumentNode(label, value, span) { 19419 function ArgumentNode(label, value, span) {
19933 this.label = label; 19420 this.label = label;
19934 this.value = value; 19421 this.value = value;
19935 lang_Node.call(this, span); 19422 lang_Node.call(this, span);
19936 // Initializers done 19423 // Initializers done
19937 } 19424 }
19938 $inherits(ArgumentNode, lang_Node); 19425 $inherits(ArgumentNode, lang_Node);
19939 ArgumentNode.prototype.is$ArgumentNode = function(){return this;};
19940 ArgumentNode.prototype.get$value = function() { return this.value; }; 19426 ArgumentNode.prototype.get$value = function() { return this.value; };
19941 ArgumentNode.prototype.set$value = function(value) { return this.value = value; }; 19427 ArgumentNode.prototype.set$value = function(value) { return this.value = value; };
19942 ArgumentNode.prototype.visit = function(visitor) { 19428 ArgumentNode.prototype.visit = function(visitor) {
19943 return visitor.visitArgumentNode(this); 19429 return visitor.visitArgumentNode(this);
19944 } 19430 }
19945 ArgumentNode.prototype.visit$1 = function($0) { 19431 ArgumentNode.prototype.visit$1 = function($0) {
19946 return this.visit(($0 && $0.is$TreeVisitor())); 19432 return this.visit($0);
19947 }; 19433 };
19948 // ********** Code for FormalNode ************** 19434 // ********** Code for FormalNode **************
19949 function FormalNode(isThis, isRest, type, name, value, span) { 19435 function FormalNode(isThis, isRest, type, name, value, span) {
19950 this.isThis = isThis; 19436 this.isThis = isThis;
19951 this.isRest = isRest; 19437 this.isRest = isRest;
19952 this.type = type; 19438 this.type = type;
19953 this.name = name; 19439 this.name = name;
19954 this.value = value; 19440 this.value = value;
19955 lang_Node.call(this, span); 19441 lang_Node.call(this, span);
19956 // Initializers done 19442 // Initializers done
19957 } 19443 }
19958 $inherits(FormalNode, lang_Node); 19444 $inherits(FormalNode, lang_Node);
19959 FormalNode.prototype.get$type = function() { return this.type; };
19960 FormalNode.prototype.set$type = function(value) { return this.type = value; };
19961 FormalNode.prototype.get$name = function() { return this.name; }; 19445 FormalNode.prototype.get$name = function() { return this.name; };
19962 FormalNode.prototype.set$name = function(value) { return this.name = value; }; 19446 FormalNode.prototype.set$name = function(value) { return this.name = value; };
19963 FormalNode.prototype.get$value = function() { return this.value; }; 19447 FormalNode.prototype.get$value = function() { return this.value; };
19964 FormalNode.prototype.set$value = function(value) { return this.value = value; }; 19448 FormalNode.prototype.set$value = function(value) { return this.value = value; };
19965 FormalNode.prototype.visit = function(visitor) { 19449 FormalNode.prototype.visit = function(visitor) {
19966 return visitor.visitFormalNode(this); 19450 return visitor.visitFormalNode(this);
19967 } 19451 }
19968 FormalNode.prototype.visit$1 = function($0) { 19452 FormalNode.prototype.visit$1 = function($0) {
19969 return this.visit(($0 && $0.is$TreeVisitor())); 19453 return this.visit($0);
19970 }; 19454 };
19971 // ********** Code for CatchNode ************** 19455 // ********** Code for CatchNode **************
19972 function CatchNode(exception, trace, body, span) { 19456 function CatchNode(exception, trace, body, span) {
19973 this.exception = exception; 19457 this.exception = exception;
19974 this.trace = trace; 19458 this.trace = trace;
19975 this.body = body; 19459 this.body = body;
19976 lang_Node.call(this, span); 19460 lang_Node.call(this, span);
19977 // Initializers done 19461 // Initializers done
19978 } 19462 }
19979 $inherits(CatchNode, lang_Node); 19463 $inherits(CatchNode, lang_Node);
19980 CatchNode.prototype.get$exception = function() { return this.exception; }; 19464 CatchNode.prototype.get$exception = function() { return this.exception; };
19981 CatchNode.prototype.set$exception = function(value) { return this.exception = va lue; }; 19465 CatchNode.prototype.set$exception = function(value) { return this.exception = va lue; };
19982 CatchNode.prototype.visit = function(visitor) { 19466 CatchNode.prototype.visit = function(visitor) {
19983 return visitor.visitCatchNode(this); 19467 return visitor.visitCatchNode(this);
19984 } 19468 }
19985 CatchNode.prototype.visit$1 = function($0) { 19469 CatchNode.prototype.visit$1 = function($0) {
19986 return this.visit(($0 && $0.is$TreeVisitor())); 19470 return this.visit($0);
19987 }; 19471 };
19988 // ********** Code for CaseNode ************** 19472 // ********** Code for CaseNode **************
19989 function CaseNode(label, cases, statements, span) { 19473 function CaseNode(label, cases, statements, span) {
19990 this.label = label; 19474 this.label = label;
19991 this.cases = cases; 19475 this.cases = cases;
19992 this.statements = statements; 19476 this.statements = statements;
19993 lang_Node.call(this, span); 19477 lang_Node.call(this, span);
19994 // Initializers done 19478 // Initializers done
19995 } 19479 }
19996 $inherits(CaseNode, lang_Node); 19480 $inherits(CaseNode, lang_Node);
19997 CaseNode.prototype.visit = function(visitor) { 19481 CaseNode.prototype.visit = function(visitor) {
19998 return visitor.visitCaseNode(this); 19482 return visitor.visitCaseNode(this);
19999 } 19483 }
20000 CaseNode.prototype.visit$1 = function($0) { 19484 CaseNode.prototype.visit$1 = function($0) {
20001 return this.visit(($0 && $0.is$TreeVisitor())); 19485 return this.visit($0);
20002 }; 19486 };
20003 // ********** Code for TypeParameter ************** 19487 // ********** Code for TypeParameter **************
20004 function TypeParameter(name, extendsType, span) { 19488 function TypeParameter(name, extendsType, span) {
20005 this.name = name; 19489 this.name = name;
20006 this.extendsType = extendsType; 19490 this.extendsType = extendsType;
20007 lang_Node.call(this, span); 19491 lang_Node.call(this, span);
20008 // Initializers done 19492 // Initializers done
20009 } 19493 }
20010 $inherits(TypeParameter, lang_Node); 19494 $inherits(TypeParameter, lang_Node);
20011 TypeParameter.prototype.get$name = function() { return this.name; }; 19495 TypeParameter.prototype.get$name = function() { return this.name; };
20012 TypeParameter.prototype.set$name = function(value) { return this.name = value; } ; 19496 TypeParameter.prototype.set$name = function(value) { return this.name = value; } ;
20013 TypeParameter.prototype.visit = function(visitor) { 19497 TypeParameter.prototype.visit = function(visitor) {
20014 return visitor.visitTypeParameter(this); 19498 return visitor.visitTypeParameter(this);
20015 } 19499 }
20016 TypeParameter.prototype.visit$1 = function($0) { 19500 TypeParameter.prototype.visit$1 = function($0) {
20017 return this.visit(($0 && $0.is$TreeVisitor())); 19501 return this.visit($0);
20018 }; 19502 };
20019 // ********** Code for lang_Identifier ************** 19503 // ********** Code for lang_Identifier **************
20020 function lang_Identifier(name, span) { 19504 function lang_Identifier(name, span) {
20021 this.name = name; 19505 this.name = name;
20022 lang_Node.call(this, span); 19506 lang_Node.call(this, span);
20023 // Initializers done 19507 // Initializers done
20024 } 19508 }
20025 $inherits(lang_Identifier, lang_Node); 19509 $inherits(lang_Identifier, lang_Node);
20026 lang_Identifier.prototype.is$lang_Identifier = function(){return this;};
20027 lang_Identifier.prototype.get$name = function() { return this.name; }; 19510 lang_Identifier.prototype.get$name = function() { return this.name; };
20028 lang_Identifier.prototype.set$name = function(value) { return this.name = value; }; 19511 lang_Identifier.prototype.set$name = function(value) { return this.name = value; };
20029 lang_Identifier.prototype.visit = function(visitor) { 19512 lang_Identifier.prototype.visit = function(visitor) {
20030 return visitor.visitIdentifier(this); 19513 return visitor.visitIdentifier(this);
20031 } 19514 }
20032 lang_Identifier.prototype.visit$1 = function($0) { 19515 lang_Identifier.prototype.visit$1 = function($0) {
20033 return this.visit(($0 && $0.is$TreeVisitor())); 19516 return this.visit($0);
20034 }; 19517 };
20035 // ********** Code for DeclaredIdentifier ************** 19518 // ********** Code for DeclaredIdentifier **************
20036 function DeclaredIdentifier(type, name, span) { 19519 function DeclaredIdentifier(type, name, span) {
20037 this.type = type; 19520 this.type = type;
20038 this.name = name; 19521 this.name = name;
20039 lang_Expression.call(this, span); 19522 lang_Expression.call(this, span);
20040 // Initializers done 19523 // Initializers done
20041 } 19524 }
20042 $inherits(DeclaredIdentifier, lang_Expression); 19525 $inherits(DeclaredIdentifier, lang_Expression);
20043 DeclaredIdentifier.prototype.is$DeclaredIdentifier = function(){return this;};
20044 DeclaredIdentifier.prototype.get$type = function() { return this.type; };
20045 DeclaredIdentifier.prototype.set$type = function(value) { return this.type = val ue; };
20046 DeclaredIdentifier.prototype.get$name = function() { return this.name; }; 19526 DeclaredIdentifier.prototype.get$name = function() { return this.name; };
20047 DeclaredIdentifier.prototype.set$name = function(value) { return this.name = val ue; }; 19527 DeclaredIdentifier.prototype.set$name = function(value) { return this.name = val ue; };
20048 DeclaredIdentifier.prototype.visit = function(visitor) { 19528 DeclaredIdentifier.prototype.visit = function(visitor) {
20049 return visitor.visitDeclaredIdentifier(this); 19529 return visitor.visitDeclaredIdentifier(this);
20050 } 19530 }
20051 DeclaredIdentifier.prototype.visit$1 = function($0) { 19531 DeclaredIdentifier.prototype.visit$1 = function($0) {
20052 return this.visit(($0 && $0.is$TreeVisitor())); 19532 return this.visit($0);
20053 }; 19533 };
20054 // ********** Code for lang_Type ************** 19534 // ********** Code for lang_Type **************
20055 function lang_Type(name) { 19535 function lang_Type(name) {
20056 this.name = name; 19536 this.name = name;
20057 this.isTested = false; 19537 this.isTested = false;
20058 // Initializers done 19538 // Initializers done
20059 } 19539 }
20060 lang_Type.prototype.is$lang_Type = function(){return this;};
20061 lang_Type.prototype.is$Named = function(){return this;};
20062 lang_Type.prototype.get$name = function() { return this.name; }; 19540 lang_Type.prototype.get$name = function() { return this.name; };
20063 lang_Type.prototype.markUsed = function() { 19541 lang_Type.prototype.markUsed = function() {
20064 19542
20065 } 19543 }
20066 lang_Type.prototype.get$typeMember = function() { 19544 lang_Type.prototype.get$typeMember = function() {
20067 var $0;
20068 if (this._typeMember == null) { 19545 if (this._typeMember == null) {
20069 this._typeMember = new TypeMember((this && this.is$DefinedType())); 19546 this._typeMember = new TypeMember(this);
20070 } 19547 }
20071 return (($0 = this._typeMember) && $0.is$TypeMember()); 19548 return this._typeMember;
20072 } 19549 }
20073 lang_Type.prototype.getMember = function(name) { 19550 lang_Type.prototype.getMember = function(name) {
20074 return null; 19551 return null;
20075 } 19552 }
20076 lang_Type.prototype.get$isVar = function() { 19553 lang_Type.prototype.get$isVar = function() {
20077 return false; 19554 return false;
20078 } 19555 }
20079 lang_Type.prototype.get$isTop = function() { 19556 lang_Type.prototype.get$isTop = function() {
20080 return false; 19557 return false;
20081 } 19558 }
(...skipping 15 matching lines...) Expand all
20097 lang_Type.prototype.get$isNum = function() { 19574 lang_Type.prototype.get$isNum = function() {
20098 return false; 19575 return false;
20099 } 19576 }
20100 lang_Type.prototype.get$isVoid = function() { 19577 lang_Type.prototype.get$isVoid = function() {
20101 return false; 19578 return false;
20102 } 19579 }
20103 lang_Type.prototype.get$isNullable = function() { 19580 lang_Type.prototype.get$isNullable = function() {
20104 return true; 19581 return true;
20105 } 19582 }
20106 lang_Type.prototype.get$isVarOrFunction = function() { 19583 lang_Type.prototype.get$isVarOrFunction = function() {
20107 return $notnull_bool(this.get$isVar()) || $notnull_bool(this.get$isFunction()) ; 19584 return this.get$isVar() || this.get$isFunction();
20108 } 19585 }
20109 lang_Type.prototype.getCallMethod = function() { 19586 lang_Type.prototype.getCallMethod = function() {
20110 return null; 19587 return null;
20111 } 19588 }
20112 lang_Type.prototype.get$isClosed = function() { 19589 lang_Type.prototype.get$isClosed = function() {
20113 return $notnull_bool(this.get$isString()) || $notnull_bool(this.get$isBool()) || $notnull_bool(this.get$isNum()) || $notnull_bool(this.get$isFunction()) || $n otnull_bool(this.get$isVar()); 19590 return this.get$isString() || this.get$isBool() || this.get$isNum() || this.ge t$isFunction() || this.get$isVar();
20114 } 19591 }
20115 lang_Type.prototype.get$isUsed = function() { 19592 lang_Type.prototype.get$isUsed = function() {
20116 return false; 19593 return false;
20117 } 19594 }
20118 lang_Type.prototype.get$isGeneric = function() { 19595 lang_Type.prototype.get$isGeneric = function() {
20119 return false; 19596 return false;
20120 } 19597 }
20121 lang_Type.prototype.get$isNativeType = function() { 19598 lang_Type.prototype.get$isNativeType = function() {
20122 return false; 19599 return false;
20123 } 19600 }
(...skipping 18 matching lines...) Expand all
20142 lang_Type.prototype.get$definition = function() { 19619 lang_Type.prototype.get$definition = function() {
20143 return null; 19620 return null;
20144 } 19621 }
20145 lang_Type.prototype.get$factories = function() { 19622 lang_Type.prototype.get$factories = function() {
20146 return null; 19623 return null;
20147 } 19624 }
20148 lang_Type.prototype.get$typeArgsInOrder = function() { 19625 lang_Type.prototype.get$typeArgsInOrder = function() {
20149 return null; 19626 return null;
20150 } 19627 }
20151 lang_Type.prototype.get$genericType = function() { 19628 lang_Type.prototype.get$genericType = function() {
20152 return (this && this.is$DefinedType()); 19629 return this;
20153 } 19630 }
20154 lang_Type.prototype.get$interfaces = function() { 19631 lang_Type.prototype.get$interfaces = function() {
20155 return null; 19632 return null;
20156 } 19633 }
20157 lang_Type.prototype.get$parent = function() { 19634 lang_Type.prototype.get$parent = function() {
20158 return null; 19635 return null;
20159 } 19636 }
20160 lang_Type.prototype.getAllMembers = function() { 19637 lang_Type.prototype.getAllMembers = function() {
20161 return $map([]); 19638 return $map([]);
20162 } 19639 }
20163 lang_Type.prototype.hashCode = function() { 19640 lang_Type.prototype.hashCode = function() {
20164 return this.name.hashCode(); 19641 return this.name.hashCode();
20165 } 19642 }
20166 lang_Type.prototype.ensureSubtypeOf = function(other, span, typeErrors) { 19643 lang_Type.prototype.ensureSubtypeOf = function(other, span, typeErrors) {
20167 if (!$notnull_bool(this.isSubtypeOf(other))) { 19644 if (!this.isSubtypeOf(other)) {
20168 var msg = ('type ' + this.name + ' is not a subtype of ' + other.name + ''); 19645 var msg = ('type ' + this.name + ' is not a subtype of ' + other.name + '');
20169 if ($notnull_bool(typeErrors)) { 19646 if (typeErrors) {
20170 world.error($assert_String(msg), span); 19647 world.error(msg, span);
20171 } 19648 }
20172 else { 19649 else {
20173 world.warning($assert_String(msg), span); 19650 world.warning(msg, span);
20174 } 19651 }
20175 } 19652 }
20176 } 19653 }
20177 lang_Type.prototype.needsVarCall = function(args) { 19654 lang_Type.prototype.needsVarCall = function(args) {
20178 if ($notnull_bool(this.get$isVarOrFunction())) { 19655 if (this.get$isVarOrFunction()) {
20179 return true; 19656 return true;
20180 } 19657 }
20181 var call = this.getCallMethod(); 19658 var call = this.getCallMethod();
20182 if ($notnull_bool($ne(call, null))) { 19659 if ($ne(call, null)) {
20183 if (args.get$length() != call.get$parameters().length || !$notnull_bool(call .namesInOrder$1(args))) { 19660 if (args.get$length() != call.get$parameters().length || !call.namesInOrder$ 1(args)) {
20184 return true; 19661 return true;
20185 } 19662 }
20186 } 19663 }
20187 return false; 19664 return false;
20188 } 19665 }
20189 lang_Type.union = function(x, y) { 19666 lang_Type.union = function(x, y) {
20190 if ($eq(x, y)) return x; 19667 if ($eq(x, y)) return x;
20191 if ($notnull_bool(x.get$isNum()) && $notnull_bool(y.get$isNum())) return world .numType; 19668 if (x.get$isNum() && y.get$isNum()) return world.numType;
20192 if ($notnull_bool(x.get$isString()) && $notnull_bool(y.get$isString())) return world.stringType; 19669 if (x.get$isString() && y.get$isString()) return world.stringType;
20193 return world.varType; 19670 return world.varType;
20194 } 19671 }
20195 lang_Type.prototype.isAssignable = function(other) { 19672 lang_Type.prototype.isAssignable = function(other) {
20196 return $notnull_bool(this.isSubtypeOf(other)) || $notnull_bool(other.isSubtype Of(this)); 19673 return this.isSubtypeOf(other) || other.isSubtypeOf(this);
20197 } 19674 }
20198 lang_Type.prototype._isDirectSupertypeOf = function(other) { 19675 lang_Type.prototype._isDirectSupertypeOf = function(other) {
20199 var $this = this; // closure support 19676 var $this = this; // closure support
20200 if ($notnull_bool(other.get$isClass())) { 19677 if (other.get$isClass()) {
20201 return $eq(other.get$parent(), this) || $notnull_bool(this.get$isObject()) & & other.get$parent() == null; 19678 return $eq(other.get$parent(), this) || this.get$isObject() && other.get$par ent() == null;
20202 } 19679 }
20203 else { 19680 else {
20204 if (other.get$interfaces() == null || other.get$interfaces().isEmpty()) { 19681 if (other.get$interfaces() == null || other.get$interfaces().isEmpty()) {
20205 return this.get$isObject(); 19682 return this.get$isObject();
20206 } 19683 }
20207 else { 19684 else {
20208 return other.get$interfaces().some((function (i) { 19685 return other.get$interfaces().some((function (i) {
20209 return $eq(i, $this); 19686 return $eq(i, $this);
20210 }) 19687 })
20211 ); 19688 );
20212 } 19689 }
20213 } 19690 }
20214 } 19691 }
20215 lang_Type.prototype.isSubtypeOf = function(other) { 19692 lang_Type.prototype.isSubtypeOf = function(other) {
20216 if ((other instanceof ParameterType)) { 19693 if ((other instanceof ParameterType)) {
20217 return true; 19694 return true;
20218 } 19695 }
20219 if ($eq(this, other)) return true; 19696 if ($eq(this, other)) return true;
20220 if ($notnull_bool(this.get$isVar())) return true; 19697 if (this.get$isVar()) return true;
20221 if ($notnull_bool(other.get$isVar())) return true; 19698 if (other.get$isVar()) return true;
20222 if ($notnull_bool(other._isDirectSupertypeOf(this))) return true; 19699 if (other._isDirectSupertypeOf(this)) return true;
20223 var call = this.getCallMethod(); 19700 var call = this.getCallMethod();
20224 var otherCall = other.getCallMethod(); 19701 var otherCall = other.getCallMethod();
20225 if ($notnull_bool($ne(call, null)) && $notnull_bool($ne(otherCall, null))) { 19702 if ($ne(call, null) && $ne(otherCall, null)) {
20226 return lang_Type._isFunctionSubtypeOf((call && call.is$MethodMember()), (oth erCall && otherCall.is$MethodMember())); 19703 return lang_Type._isFunctionSubtypeOf(call, otherCall);
20227 } 19704 }
20228 if ($eq(this.get$genericType(), other.get$genericType()) && $notnull_bool($ne( this.get$typeArgsInOrder(), null)) && $notnull_bool($ne(other.get$typeArgsInOrde r(), null)) && this.get$typeArgsInOrder().length == other.get$typeArgsInOrder(). length) { 19705 if ($eq(this.get$genericType(), other.get$genericType()) && $ne(this.get$typeA rgsInOrder(), null) && $ne(other.get$typeArgsInOrder(), null) && this.get$typeAr gsInOrder().length == other.get$typeArgsInOrder().length) {
20229 var t = this.get$typeArgsInOrder().iterator$0(); 19706 var t = this.get$typeArgsInOrder().iterator$0();
20230 var s = other.get$typeArgsInOrder().iterator$0(); 19707 var s = other.get$typeArgsInOrder().iterator$0();
20231 while ($notnull_bool(t.hasNext$0())) { 19708 while (t.hasNext$0()) {
20232 if (!$notnull_bool(t.next$0().isSubtypeOf$1(s.next$0()))) return false; 19709 if (!t.next$0().isSubtypeOf$1(s.next$0())) return false;
20233 } 19710 }
20234 return true; 19711 return true;
20235 } 19712 }
20236 if (this.get$parent() != null && $notnull_bool(this.get$parent().isSubtypeOf(o ther))) { 19713 if (this.get$parent() != null && this.get$parent().isSubtypeOf(other)) {
20237 return true; 19714 return true;
20238 } 19715 }
20239 if (this.get$interfaces() != null && this.get$interfaces().some((function (i) { 19716 if (this.get$interfaces() != null && this.get$interfaces().some((function (i) {
20240 return i.isSubtypeOf$1(other); 19717 return i.isSubtypeOf$1(other);
20241 }) 19718 })
20242 )) { 19719 )) {
20243 return true; 19720 return true;
20244 } 19721 }
20245 return false; 19722 return false;
20246 } 19723 }
20247 lang_Type._isFunctionSubtypeOf = function(t, s) { 19724 lang_Type._isFunctionSubtypeOf = function(t, s) {
20248 if (!$notnull_bool(s.returnType.get$isVoid()) && !$notnull_bool(s.returnType.i sAssignable(t.returnType))) { 19725 if (!s.returnType.get$isVoid() && !s.returnType.isAssignable(t.returnType)) {
20249 return false; 19726 return false;
20250 } 19727 }
20251 var tp = t.parameters; 19728 var tp = t.parameters;
20252 var sp = s.parameters; 19729 var sp = s.parameters;
20253 if (tp.length < sp.length) return false; 19730 if (tp.length < sp.length) return false;
20254 for (var i = 0; 19731 for (var i = 0;
20255 i < sp.length; i++) { 19732 i < sp.length; i++) {
20256 if ($ne(tp.$index(i).get$isOptional(), sp.$index(i).get$isOptional())) retur n false; 19733 if ($ne(tp.$index(i).get$isOptional(), sp.$index(i).get$isOptional())) retur n false;
20257 if ($notnull_bool(tp.$index(i).get$isOptional()) && $notnull_bool($ne(tp.$in dex(i).get$name(), sp.$index(i).get$name()))) return false; 19734 if (tp.$index(i).get$isOptional() && $ne(tp.$index(i).get$name(), sp.$index( i).get$name())) return false;
20258 if (!$notnull_bool(tp.$index(i).type.isAssignable$1(sp.$index(i).type))) ret urn false; 19735 if (!tp.$index(i).type.isAssignable$1(sp.$index(i).type)) return false;
20259 } 19736 }
20260 if (tp.length > sp.length && !$notnull_bool(tp.$index(sp.length).get$isOptiona l())) return false; 19737 if (tp.length > sp.length && !tp.$index(sp.length).get$isOptional()) return fa lse;
20261 return true; 19738 return true;
20262 } 19739 }
20263 lang_Type.prototype.addDirectSubtype$1 = function($0) { 19740 lang_Type.prototype.addDirectSubtype$1 = function($0) {
20264 return this.addDirectSubtype(($0 && $0.is$lang_Type())); 19741 return this.addDirectSubtype($0);
20265 }; 19742 };
20266 lang_Type.prototype.ensureSubtypeOf$3 = function($0, $1, $2) { 19743 lang_Type.prototype.ensureSubtypeOf$3 = function($0, $1, $2) {
20267 return this.ensureSubtypeOf(($0 && $0.is$lang_Type()), ($1 && $1.is$SourceSpan ()), $assert_bool($2)); 19744 return this.ensureSubtypeOf($0, $1, $2);
20268 }; 19745 };
20269 lang_Type.prototype.getConstructor$1 = function($0) { 19746 lang_Type.prototype.getConstructor$1 = function($0) {
20270 return this.getConstructor($assert_String($0)); 19747 return this.getConstructor($0);
20271 }; 19748 };
20272 lang_Type.prototype.getFactory$2 = function($0, $1) { 19749 lang_Type.prototype.getFactory$2 = function($0, $1) {
20273 return this.getFactory(($0 && $0.is$lang_Type()), $assert_String($1)); 19750 return this.getFactory($0, $1);
20274 }; 19751 };
20275 lang_Type.prototype.getMember$1 = function($0) { 19752 lang_Type.prototype.getMember$1 = function($0) {
20276 return this.getMember($assert_String($0)); 19753 return this.getMember($0);
20277 }; 19754 };
20278 lang_Type.prototype.getOrMakeConcreteType$1 = function($0) { 19755 lang_Type.prototype.getOrMakeConcreteType$1 = function($0) {
20279 return this.getOrMakeConcreteType(($0 && $0.is$List$Type())); 19756 return this.getOrMakeConcreteType($0);
20280 }; 19757 };
20281 lang_Type.prototype.hashCode$0 = function() { 19758 lang_Type.prototype.hashCode$0 = function() {
20282 return this.hashCode(); 19759 return this.hashCode();
20283 }; 19760 };
20284 lang_Type.prototype.isAssignable$1 = function($0) { 19761 lang_Type.prototype.isAssignable$1 = function($0) {
20285 return this.isAssignable(($0 && $0.is$lang_Type())); 19762 return this.isAssignable($0);
20286 }; 19763 };
20287 lang_Type.prototype.isSubtypeOf$1 = function($0) { 19764 lang_Type.prototype.isSubtypeOf$1 = function($0) {
20288 return this.isSubtypeOf(($0 && $0.is$lang_Type())); 19765 return this.isSubtypeOf($0);
20289 }; 19766 };
20290 lang_Type.prototype.markUsed$0 = function() { 19767 lang_Type.prototype.markUsed$0 = function() {
20291 return this.markUsed(); 19768 return this.markUsed();
20292 }; 19769 };
20293 lang_Type.prototype.resolveMember$1 = function($0) { 19770 lang_Type.prototype.resolveMember$1 = function($0) {
20294 return this.resolveMember($assert_String($0)); 19771 return this.resolveMember($0);
20295 }; 19772 };
20296 lang_Type.prototype.resolveTypeParams$1 = function($0) { 19773 lang_Type.prototype.resolveTypeParams$1 = function($0) {
20297 return this.resolveTypeParams(($0 && $0.is$ConcreteType())); 19774 return this.resolveTypeParams($0);
20298 }; 19775 };
20299 // ********** Code for ParameterType ************** 19776 // ********** Code for ParameterType **************
20300 function ParameterType(name, typeParameter) { 19777 function ParameterType(name, typeParameter) {
20301 this.typeParameter = typeParameter; 19778 this.typeParameter = typeParameter;
20302 lang_Type.call(this, name); 19779 lang_Type.call(this, name);
20303 // Initializers done 19780 // Initializers done
20304 } 19781 }
20305 $inherits(ParameterType, lang_Type); 19782 $inherits(ParameterType, lang_Type);
20306 ParameterType.prototype.is$ParameterType = function(){return this;};
20307 ParameterType.prototype.get$isClass = function() { 19783 ParameterType.prototype.get$isClass = function() {
20308 return false; 19784 return false;
20309 } 19785 }
20310 ParameterType.prototype.get$library = function() { 19786 ParameterType.prototype.get$library = function() {
20311 return null; 19787 return null;
20312 } 19788 }
20313 ParameterType.prototype.get$span = function() { 19789 ParameterType.prototype.get$span = function() {
20314 return this.typeParameter.span; 19790 return this.typeParameter.span;
20315 } 19791 }
20316 ParameterType.prototype.get$constructors = function() { 19792 ParameterType.prototype.get$constructors = function() {
(...skipping 11 matching lines...) Expand all
20328 ParameterType.prototype.resolveMember = function(memberName) { 19804 ParameterType.prototype.resolveMember = function(memberName) {
20329 return this.extendsType.resolveMember(memberName); 19805 return this.extendsType.resolveMember(memberName);
20330 } 19806 }
20331 ParameterType.prototype.getConstructor = function(constructorName) { 19807 ParameterType.prototype.getConstructor = function(constructorName) {
20332 world.internalError('no constructors on type parameters yet'); 19808 world.internalError('no constructors on type parameters yet');
20333 } 19809 }
20334 ParameterType.prototype.getOrMakeConcreteType = function(typeArgs) { 19810 ParameterType.prototype.getOrMakeConcreteType = function(typeArgs) {
20335 world.internalError('no concrete types of type parameters yet', this.get$span( )); 19811 world.internalError('no concrete types of type parameters yet', this.get$span( ));
20336 } 19812 }
20337 ParameterType.prototype.resolveTypeParams = function(inType) { 19813 ParameterType.prototype.resolveTypeParams = function(inType) {
20338 var $0; 19814 return inType.typeArguments.$index(this.name);
20339 return (($0 = inType.typeArguments.$index(this.name)) && $0.is$lang_Type());
20340 } 19815 }
20341 ParameterType.prototype.addDirectSubtype = function(type) { 19816 ParameterType.prototype.addDirectSubtype = function(type) {
20342 world.internalError('no subtypes of type parameters yet', this.get$span()); 19817 world.internalError('no subtypes of type parameters yet', this.get$span());
20343 } 19818 }
20344 ParameterType.prototype.resolve = function(inType) { 19819 ParameterType.prototype.resolve = function(inType) {
20345 if (this.typeParameter.extendsType != null) { 19820 if (this.typeParameter.extendsType != null) {
20346 this.extendsType = inType.resolveType(this.typeParameter.extendsType, true); 19821 this.extendsType = inType.resolveType(this.typeParameter.extendsType, true);
20347 } 19822 }
20348 else { 19823 else {
20349 this.extendsType = world.objectType; 19824 this.extendsType = world.objectType;
20350 } 19825 }
20351 } 19826 }
20352 ParameterType.prototype.addDirectSubtype$1 = function($0) { 19827 ParameterType.prototype.addDirectSubtype$1 = function($0) {
20353 return this.addDirectSubtype(($0 && $0.is$lang_Type())); 19828 return this.addDirectSubtype($0);
20354 }; 19829 };
20355 ParameterType.prototype.getConstructor$1 = function($0) { 19830 ParameterType.prototype.getConstructor$1 = function($0) {
20356 return this.getConstructor($assert_String($0)); 19831 return this.getConstructor($0);
20357 }; 19832 };
20358 ParameterType.prototype.getOrMakeConcreteType$1 = function($0) { 19833 ParameterType.prototype.getOrMakeConcreteType$1 = function($0) {
20359 return this.getOrMakeConcreteType(($0 && $0.is$List$Type())); 19834 return this.getOrMakeConcreteType($0);
20360 }; 19835 };
20361 ParameterType.prototype.isSubtypeOf$1 = function($0) { 19836 ParameterType.prototype.isSubtypeOf$1 = function($0) {
20362 return this.isSubtypeOf(($0 && $0.is$lang_Type())); 19837 return this.isSubtypeOf($0);
20363 }; 19838 };
20364 ParameterType.prototype.resolve$1 = function($0) { 19839 ParameterType.prototype.resolve$1 = function($0) {
20365 return this.resolve(($0 && $0.is$lang_Type())); 19840 return this.resolve($0);
20366 }; 19841 };
20367 ParameterType.prototype.resolveMember$1 = function($0) { 19842 ParameterType.prototype.resolveMember$1 = function($0) {
20368 return this.resolveMember($assert_String($0)); 19843 return this.resolveMember($0);
20369 }; 19844 };
20370 ParameterType.prototype.resolveTypeParams$1 = function($0) { 19845 ParameterType.prototype.resolveTypeParams$1 = function($0) {
20371 return this.resolveTypeParams(($0 && $0.is$ConcreteType())); 19846 return this.resolveTypeParams($0);
20372 }; 19847 };
20373 // ********** Code for NonNullableType ************** 19848 // ********** Code for NonNullableType **************
20374 function NonNullableType(type) { 19849 function NonNullableType(type) {
20375 this.type = type; 19850 this.type = type;
20376 lang_Type.call(this, type.name); 19851 lang_Type.call(this, type.name);
20377 // Initializers done 19852 // Initializers done
20378 } 19853 }
20379 $inherits(NonNullableType, lang_Type); 19854 $inherits(NonNullableType, lang_Type);
20380 NonNullableType.prototype.get$type = function() { return this.type; };
20381 NonNullableType.prototype.get$isNullable = function() { 19855 NonNullableType.prototype.get$isNullable = function() {
20382 return false; 19856 return false;
20383 } 19857 }
20384 NonNullableType.prototype.get$isBool = function() { 19858 NonNullableType.prototype.get$isBool = function() {
20385 return this.type.get$isBool(); 19859 return this.type.get$isBool();
20386 } 19860 }
20387 NonNullableType.prototype.get$isUsed = function() { 19861 NonNullableType.prototype.get$isUsed = function() {
20388 return false; 19862 return false;
20389 } 19863 }
20390 NonNullableType.prototype.isSubtypeOf = function(other) { 19864 NonNullableType.prototype.isSubtypeOf = function(other) {
20391 return $eq(this, other) || $eq(this.type, other) || $notnull_bool(this.type.is SubtypeOf(other)); 19865 return $eq(this, other) || $eq(this.type, other) || this.type.isSubtypeOf(othe r);
20392 } 19866 }
20393 NonNullableType.prototype.resolveType = function(node, isRequired) { 19867 NonNullableType.prototype.resolveType = function(node, isRequired) {
20394 return this.type.resolveType(node, isRequired); 19868 return this.type.resolveType(node, isRequired);
20395 } 19869 }
20396 NonNullableType.prototype.resolveTypeParams = function(inType) { 19870 NonNullableType.prototype.resolveTypeParams = function(inType) {
20397 return this.type.resolveTypeParams(inType); 19871 return this.type.resolveTypeParams(inType);
20398 } 19872 }
20399 NonNullableType.prototype.addDirectSubtype = function(subtype) { 19873 NonNullableType.prototype.addDirectSubtype = function(subtype) {
20400 this.type.addDirectSubtype(subtype); 19874 this.type.addDirectSubtype(subtype);
20401 } 19875 }
20402 NonNullableType.prototype.markUsed = function() { 19876 NonNullableType.prototype.markUsed = function() {
20403 this.type.markUsed(); 19877 this.type.markUsed();
20404 } 19878 }
20405 NonNullableType.prototype.genMethod = function(method) { 19879 NonNullableType.prototype.genMethod = function(method) {
20406 this.type.genMethod(method); 19880 this.type.genMethod(method);
20407 } 19881 }
20408 NonNullableType.prototype.get$span = function() { 19882 NonNullableType.prototype.get$span = function() {
20409 return this.type.get$span(); 19883 return this.type.get$span();
20410 } 19884 }
20411 NonNullableType.prototype.resolveMember = function(name) { 19885 NonNullableType.prototype.resolveMember = function(name) {
20412 return this.type.resolveMember(name); 19886 return this.type.resolveMember(name);
20413 } 19887 }
20414 NonNullableType.prototype.getMember = function(name) { 19888 NonNullableType.prototype.getMember = function(name) {
20415 return this.type.getMember(name); 19889 return this.type.getMember(name);
20416 } 19890 }
20417 NonNullableType.prototype.getConstructor = function(name) { 19891 NonNullableType.prototype.getConstructor = function(name) {
20418 var $0; 19892 return this.type.getConstructor(name);
20419 return (($0 = this.type.getConstructor(name)) && $0.is$MethodMember());
20420 } 19893 }
20421 NonNullableType.prototype.getFactory = function(t, name) { 19894 NonNullableType.prototype.getFactory = function(t, name) {
20422 var $0; 19895 return this.type.getFactory(t, name);
20423 return (($0 = this.type.getFactory(t, name)) && $0.is$MethodMember());
20424 } 19896 }
20425 NonNullableType.prototype.getOrMakeConcreteType = function(typeArgs) { 19897 NonNullableType.prototype.getOrMakeConcreteType = function(typeArgs) {
20426 return this.type.getOrMakeConcreteType(typeArgs); 19898 return this.type.getOrMakeConcreteType(typeArgs);
20427 } 19899 }
20428 NonNullableType.prototype.get$constructors = function() { 19900 NonNullableType.prototype.get$constructors = function() {
20429 return this.type.get$constructors(); 19901 return this.type.get$constructors();
20430 } 19902 }
20431 NonNullableType.prototype.get$isClass = function() { 19903 NonNullableType.prototype.get$isClass = function() {
20432 return this.type.get$isClass(); 19904 return this.type.get$isClass();
20433 } 19905 }
(...skipping 21 matching lines...) Expand all
20455 NonNullableType.prototype.get$members = function() { 19927 NonNullableType.prototype.get$members = function() {
20456 return this.type.get$members(); 19928 return this.type.get$members();
20457 } 19929 }
20458 NonNullableType.prototype.get$definition = function() { 19930 NonNullableType.prototype.get$definition = function() {
20459 return this.type.get$definition(); 19931 return this.type.get$definition();
20460 } 19932 }
20461 NonNullableType.prototype.get$factories = function() { 19933 NonNullableType.prototype.get$factories = function() {
20462 return this.type.get$factories(); 19934 return this.type.get$factories();
20463 } 19935 }
20464 NonNullableType.prototype.get$typeArgsInOrder = function() { 19936 NonNullableType.prototype.get$typeArgsInOrder = function() {
20465 var $0; 19937 return this.type.get$typeArgsInOrder();
20466 return (($0 = this.type.get$typeArgsInOrder()) && $0.is$Collection$Type());
20467 } 19938 }
20468 NonNullableType.prototype.get$genericType = function() { 19939 NonNullableType.prototype.get$genericType = function() {
20469 return this.type.get$genericType(); 19940 return this.type.get$genericType();
20470 } 19941 }
20471 NonNullableType.prototype.get$interfaces = function() { 19942 NonNullableType.prototype.get$interfaces = function() {
20472 return this.type.get$interfaces(); 19943 return this.type.get$interfaces();
20473 } 19944 }
20474 NonNullableType.prototype.get$parent = function() { 19945 NonNullableType.prototype.get$parent = function() {
20475 return this.type.get$parent(); 19946 return this.type.get$parent();
20476 } 19947 }
20477 NonNullableType.prototype.getAllMembers = function() { 19948 NonNullableType.prototype.getAllMembers = function() {
20478 return this.type.getAllMembers(); 19949 return this.type.getAllMembers();
20479 } 19950 }
20480 NonNullableType.prototype.get$isNativeType = function() { 19951 NonNullableType.prototype.get$isNativeType = function() {
20481 return this.type.get$isNativeType(); 19952 return this.type.get$isNativeType();
20482 } 19953 }
20483 NonNullableType.prototype.addDirectSubtype$1 = function($0) { 19954 NonNullableType.prototype.addDirectSubtype$1 = function($0) {
20484 return this.addDirectSubtype(($0 && $0.is$lang_Type())); 19955 return this.addDirectSubtype($0);
20485 }; 19956 };
20486 NonNullableType.prototype.getConstructor$1 = function($0) { 19957 NonNullableType.prototype.getConstructor$1 = function($0) {
20487 return this.getConstructor($assert_String($0)); 19958 return this.getConstructor($0);
20488 }; 19959 };
20489 NonNullableType.prototype.getFactory$2 = function($0, $1) { 19960 NonNullableType.prototype.getFactory$2 = function($0, $1) {
20490 return this.getFactory(($0 && $0.is$lang_Type()), $assert_String($1)); 19961 return this.getFactory($0, $1);
20491 }; 19962 };
20492 NonNullableType.prototype.getMember$1 = function($0) { 19963 NonNullableType.prototype.getMember$1 = function($0) {
20493 return this.getMember($assert_String($0)); 19964 return this.getMember($0);
20494 }; 19965 };
20495 NonNullableType.prototype.getOrMakeConcreteType$1 = function($0) { 19966 NonNullableType.prototype.getOrMakeConcreteType$1 = function($0) {
20496 return this.getOrMakeConcreteType(($0 && $0.is$List$Type())); 19967 return this.getOrMakeConcreteType($0);
20497 }; 19968 };
20498 NonNullableType.prototype.isSubtypeOf$1 = function($0) { 19969 NonNullableType.prototype.isSubtypeOf$1 = function($0) {
20499 return this.isSubtypeOf(($0 && $0.is$lang_Type())); 19970 return this.isSubtypeOf($0);
20500 }; 19971 };
20501 NonNullableType.prototype.markUsed$0 = function() { 19972 NonNullableType.prototype.markUsed$0 = function() {
20502 return this.markUsed(); 19973 return this.markUsed();
20503 }; 19974 };
20504 NonNullableType.prototype.resolveMember$1 = function($0) { 19975 NonNullableType.prototype.resolveMember$1 = function($0) {
20505 return this.resolveMember($assert_String($0)); 19976 return this.resolveMember($0);
20506 }; 19977 };
20507 NonNullableType.prototype.resolveTypeParams$1 = function($0) { 19978 NonNullableType.prototype.resolveTypeParams$1 = function($0) {
20508 return this.resolveTypeParams(($0 && $0.is$ConcreteType())); 19979 return this.resolveTypeParams($0);
20509 }; 19980 };
20510 // ********** Code for ConcreteType ************** 19981 // ********** Code for ConcreteType **************
20511 function ConcreteType(name, genericType, typeArguments, typeArgsInOrder) { 19982 function ConcreteType(name, genericType, typeArguments, typeArgsInOrder) {
20512 this.genericType = genericType; 19983 this.genericType = genericType;
20513 this.typeArguments = typeArguments; 19984 this.typeArguments = typeArguments;
20514 this.typeArgsInOrder = typeArgsInOrder; 19985 this.typeArgsInOrder = typeArgsInOrder;
20515 this.constructors = $map([]); 19986 this.constructors = $map([]);
20516 this.members = $map([]); 19987 this.members = $map([]);
20517 this.factories = new FactoryMap(); 19988 this.factories = new FactoryMap();
20518 lang_Type.call(this, name); 19989 lang_Type.call(this, name);
20519 // Initializers done 19990 // Initializers done
20520 } 19991 }
20521 $inherits(ConcreteType, lang_Type); 19992 $inherits(ConcreteType, lang_Type);
20522 ConcreteType.prototype.is$ConcreteType = function(){return this;};
20523 ConcreteType.prototype.get$genericType = function() { return this.genericType; } ; 19993 ConcreteType.prototype.get$genericType = function() { return this.genericType; } ;
20524 ConcreteType.prototype.get$typeArgsInOrder = function() { return this.typeArgsIn Order; }; 19994 ConcreteType.prototype.get$typeArgsInOrder = function() { return this.typeArgsIn Order; };
20525 ConcreteType.prototype.set$typeArgsInOrder = function(value) { return this.typeA rgsInOrder = value; }; 19995 ConcreteType.prototype.set$typeArgsInOrder = function(value) { return this.typeA rgsInOrder = value; };
20526 ConcreteType.prototype.get$isList = function() { 19996 ConcreteType.prototype.get$isList = function() {
20527 return this.genericType.get$isList(); 19997 return this.genericType.get$isList();
20528 } 19998 }
20529 ConcreteType.prototype.get$isClass = function() { 19999 ConcreteType.prototype.get$isClass = function() {
20530 return this.genericType.isClass; 20000 return this.genericType.isClass;
20531 } 20001 }
20532 ConcreteType.prototype.get$library = function() { 20002 ConcreteType.prototype.get$library = function() {
(...skipping 14 matching lines...) Expand all
20547 ConcreteType.prototype.set$constructors = function(value) { return this.construc tors = value; }; 20017 ConcreteType.prototype.set$constructors = function(value) { return this.construc tors = value; };
20548 ConcreteType.prototype.get$factories = function() { return this.factories; }; 20018 ConcreteType.prototype.get$factories = function() { return this.factories; };
20549 ConcreteType.prototype.set$factories = function(value) { return this.factories = value; }; 20019 ConcreteType.prototype.set$factories = function(value) { return this.factories = value; };
20550 ConcreteType.prototype.resolveTypeParams = function(inType) { 20020 ConcreteType.prototype.resolveTypeParams = function(inType) {
20551 var newTypeArgs = []; 20021 var newTypeArgs = [];
20552 var needsNewType = false; 20022 var needsNewType = false;
20553 var $list = this.typeArgsInOrder; 20023 var $list = this.typeArgsInOrder;
20554 for (var $i = 0;$i < $list.length; $i++) { 20024 for (var $i = 0;$i < $list.length; $i++) {
20555 var t = $list.$index($i); 20025 var t = $list.$index($i);
20556 var newType = t.resolveTypeParams$1(inType); 20026 var newType = t.resolveTypeParams$1(inType);
20557 if ($notnull_bool($ne(newType, t))) needsNewType = true; 20027 if ($ne(newType, t)) needsNewType = true;
20558 newTypeArgs.add$1(newType); 20028 newTypeArgs.add$1(newType);
20559 } 20029 }
20560 if (!$notnull_bool(needsNewType)) return this; 20030 if (!needsNewType) return this;
20561 return this.genericType.getOrMakeConcreteType((newTypeArgs && newTypeArgs.is$L ist$Type())); 20031 return this.genericType.getOrMakeConcreteType(newTypeArgs);
20562 } 20032 }
20563 ConcreteType.prototype.getOrMakeConcreteType = function(typeArgs) { 20033 ConcreteType.prototype.getOrMakeConcreteType = function(typeArgs) {
20564 return this.genericType.getOrMakeConcreteType(typeArgs); 20034 return this.genericType.getOrMakeConcreteType(typeArgs);
20565 } 20035 }
20566 ConcreteType.prototype.get$parent = function() { 20036 ConcreteType.prototype.get$parent = function() {
20567 return this.genericType.get$parent(); 20037 return this.genericType.get$parent();
20568 } 20038 }
20569 ConcreteType.prototype.get$interfaces = function() { 20039 ConcreteType.prototype.get$interfaces = function() {
20570 if (this._interfaces == null && this.genericType.interfaces != null) { 20040 if (this._interfaces == null && this.genericType.interfaces != null) {
20571 this._interfaces = []; 20041 this._interfaces = [];
20572 var $list = this.genericType.interfaces; 20042 var $list = this.genericType.interfaces;
20573 for (var $i = 0;$i < $list.length; $i++) { 20043 for (var $i = 0;$i < $list.length; $i++) {
20574 var i = $list.$index($i); 20044 var i = $list.$index($i);
20575 this._interfaces.add(i.resolveTypeParams$1(this)); 20045 this._interfaces.add(i.resolveTypeParams$1(this));
20576 } 20046 }
20577 } 20047 }
20578 return this._interfaces; 20048 return this._interfaces;
20579 } 20049 }
20580 ConcreteType.prototype.getCallMethod = function() { 20050 ConcreteType.prototype.getCallMethod = function() {
20581 return this.genericType.getCallMethod(); 20051 return this.genericType.getCallMethod();
20582 } 20052 }
20583 ConcreteType.prototype.getAllMembers = function() { 20053 ConcreteType.prototype.getAllMembers = function() {
20584 var result = this.genericType.getAllMembers(); 20054 var result = this.genericType.getAllMembers();
20585 var $list = result.getKeys$0(); 20055 var $list = result.getKeys$0();
20586 for (var $i = result.getKeys$0().iterator(); $i.hasNext$0(); ) { 20056 for (var $i = result.getKeys$0().iterator(); $i.hasNext$0(); ) {
20587 var memberName = $i.next$0(); 20057 var memberName = $i.next$0();
20588 var myMember = this.members.$index(memberName); 20058 var myMember = this.members.$index(memberName);
20589 if ($notnull_bool($ne(myMember, null))) { 20059 if ($ne(myMember, null)) {
20590 result.$setindex(memberName, myMember); 20060 result.$setindex(memberName, myMember);
20591 } 20061 }
20592 } 20062 }
20593 return (result && result.is$Map$String$Member()); 20063 return result;
20594 } 20064 }
20595 ConcreteType.prototype.markUsed = function() { 20065 ConcreteType.prototype.markUsed = function() {
20596 this.genericType.markUsed(); 20066 this.genericType.markUsed();
20597 } 20067 }
20598 ConcreteType.prototype.genMethod = function(method) { 20068 ConcreteType.prototype.genMethod = function(method) {
20599 this.genericType.genMethod(method); 20069 this.genericType.genMethod(method);
20600 } 20070 }
20601 ConcreteType.prototype.getFactory = function(type, constructorName) { 20071 ConcreteType.prototype.getFactory = function(type, constructorName) {
20602 return this.genericType.getFactory(type, constructorName); 20072 return this.genericType.getFactory(type, constructorName);
20603 } 20073 }
20604 ConcreteType.prototype.getConstructor = function(constructorName) { 20074 ConcreteType.prototype.getConstructor = function(constructorName) {
20605 var ret = this.constructors.$index(constructorName); 20075 var ret = this.constructors.$index(constructorName);
20606 if ($notnull_bool($ne(ret, null))) return ret; 20076 if ($ne(ret, null)) return ret;
20607 ret = this.factories.getFactory(this.name, constructorName); 20077 ret = this.factories.getFactory(this.name, constructorName);
20608 if ($notnull_bool($ne(ret, null))) return ret; 20078 if ($ne(ret, null)) return ret;
20609 var genericMember = this.genericType.getConstructor(constructorName); 20079 var genericMember = this.genericType.getConstructor(constructorName);
20610 if ($notnull_bool(genericMember == null)) return null; 20080 if (genericMember == null) return null;
20611 if ($ne(genericMember.declaringType, this.genericType)) { 20081 if ($ne(genericMember.declaringType, this.genericType)) {
20612 if (!$notnull_bool(genericMember.declaringType.get$isGeneric())) return gene ricMember; 20082 if (!genericMember.declaringType.get$isGeneric()) return genericMember;
20613 var newDeclaringType = genericMember.declaringType.getOrMakeConcreteType(thi s.typeArgsInOrder); 20083 var newDeclaringType = genericMember.declaringType.getOrMakeConcreteType(thi s.typeArgsInOrder);
20614 var factory = newDeclaringType.getFactory$2(this.genericType, constructorNam e); 20084 var factory = newDeclaringType.getFactory$2(this.genericType, constructorNam e);
20615 if (factory != null) return factory; 20085 if (factory != null) return factory;
20616 return newDeclaringType.getConstructor$1(constructorName); 20086 return newDeclaringType.getConstructor$1(constructorName);
20617 } 20087 }
20618 if ($notnull_bool(genericMember.get$isFactory())) { 20088 if (genericMember.get$isFactory()) {
20619 ret = new ConcreteMember($assert_String(genericMember.get$name()), this, gen ericMember); 20089 ret = new ConcreteMember(genericMember.get$name(), this, genericMember);
20620 this.factories.addFactory(this.name, constructorName, (ret && ret.is$Member( ))); 20090 this.factories.addFactory(this.name, constructorName, ret);
20621 } 20091 }
20622 else { 20092 else {
20623 ret = new ConcreteMember(this.name, this, genericMember); 20093 ret = new ConcreteMember(this.name, this, genericMember);
20624 this.constructors.$setindex(constructorName, ret); 20094 this.constructors.$setindex(constructorName, ret);
20625 } 20095 }
20626 return ret; 20096 return ret;
20627 } 20097 }
20628 ConcreteType.prototype.getMember = function(memberName) { 20098 ConcreteType.prototype.getMember = function(memberName) {
20629 var ret = this.members.$index(memberName); 20099 var ret = this.members.$index(memberName);
20630 if ($notnull_bool($ne(ret, null))) return (ret && ret.is$Member()); 20100 if ($ne(ret, null)) return ret;
20631 var genericMember = this.genericType.getMember(memberName); 20101 var genericMember = this.genericType.getMember(memberName);
20632 if ($notnull_bool(genericMember == null)) return null; 20102 if (genericMember == null) return null;
20633 ret = new ConcreteMember($assert_String(genericMember.get$name()), this, gener icMember); 20103 ret = new ConcreteMember(genericMember.get$name(), this, genericMember);
20634 this.members.$setindex(memberName, ret); 20104 this.members.$setindex(memberName, ret);
20635 return (ret && ret.is$Member()); 20105 return ret;
20636 } 20106 }
20637 ConcreteType.prototype.resolveMember = function(memberName) { 20107 ConcreteType.prototype.resolveMember = function(memberName) {
20638 var mem = this.getMember(memberName); 20108 var mem = this.getMember(memberName);
20639 if ($notnull_bool(mem == null)) return null; 20109 if (mem == null) return null;
20640 var ret = new MemberSet((mem && mem.is$Member()), false); 20110 var ret = new MemberSet(mem, false);
20641 if ($notnull_bool(mem.get$isStatic())) return (ret && ret.is$MemberSet()); 20111 if (mem.get$isStatic()) return ret;
20642 var $list = this.genericType.get$subtypes(); 20112 var $list = this.genericType.get$subtypes();
20643 for (var $i = this.genericType.get$subtypes().iterator(); $i.hasNext$0(); ) { 20113 for (var $i = this.genericType.get$subtypes().iterator(); $i.hasNext$0(); ) {
20644 var t = $i.next$0(); 20114 var t = $i.next$0();
20645 var m = t.get$members().$index(memberName); 20115 var m = t.get$members().$index(memberName);
20646 if ($notnull_bool($ne(m, null))) ret.add$1(m); 20116 if ($ne(m, null)) ret.add$1(m);
20647 } 20117 }
20648 return (ret && ret.is$MemberSet()); 20118 return ret;
20649 } 20119 }
20650 ConcreteType.prototype.resolveType = function(node, isRequired) { 20120 ConcreteType.prototype.resolveType = function(node, isRequired) {
20651 var ret = this.genericType.resolveType(node, isRequired); 20121 var ret = this.genericType.resolveType(node, isRequired);
20652 return (ret && ret.is$lang_Type()); 20122 return ret;
20653 } 20123 }
20654 ConcreteType.prototype.addDirectSubtype = function(type) { 20124 ConcreteType.prototype.addDirectSubtype = function(type) {
20655 this.genericType.addDirectSubtype(type); 20125 this.genericType.addDirectSubtype(type);
20656 } 20126 }
20657 ConcreteType.prototype.addDirectSubtype$1 = function($0) { 20127 ConcreteType.prototype.addDirectSubtype$1 = function($0) {
20658 return this.addDirectSubtype(($0 && $0.is$lang_Type())); 20128 return this.addDirectSubtype($0);
20659 }; 20129 };
20660 ConcreteType.prototype.getConstructor$1 = function($0) { 20130 ConcreteType.prototype.getConstructor$1 = function($0) {
20661 return this.getConstructor($assert_String($0)); 20131 return this.getConstructor($0);
20662 }; 20132 };
20663 ConcreteType.prototype.getFactory$2 = function($0, $1) { 20133 ConcreteType.prototype.getFactory$2 = function($0, $1) {
20664 return this.getFactory(($0 && $0.is$lang_Type()), $assert_String($1)); 20134 return this.getFactory($0, $1);
20665 }; 20135 };
20666 ConcreteType.prototype.getMember$1 = function($0) { 20136 ConcreteType.prototype.getMember$1 = function($0) {
20667 return this.getMember($assert_String($0)); 20137 return this.getMember($0);
20668 }; 20138 };
20669 ConcreteType.prototype.getOrMakeConcreteType$1 = function($0) { 20139 ConcreteType.prototype.getOrMakeConcreteType$1 = function($0) {
20670 return this.getOrMakeConcreteType(($0 && $0.is$List$Type())); 20140 return this.getOrMakeConcreteType($0);
20671 }; 20141 };
20672 ConcreteType.prototype.markUsed$0 = function() { 20142 ConcreteType.prototype.markUsed$0 = function() {
20673 return this.markUsed(); 20143 return this.markUsed();
20674 }; 20144 };
20675 ConcreteType.prototype.resolveMember$1 = function($0) { 20145 ConcreteType.prototype.resolveMember$1 = function($0) {
20676 return this.resolveMember($assert_String($0)); 20146 return this.resolveMember($0);
20677 }; 20147 };
20678 ConcreteType.prototype.resolveTypeParams$1 = function($0) { 20148 ConcreteType.prototype.resolveTypeParams$1 = function($0) {
20679 return this.resolveTypeParams(($0 && $0.is$ConcreteType())); 20149 return this.resolveTypeParams($0);
20680 }; 20150 };
20681 // ********** Code for DefinedType ************** 20151 // ********** Code for DefinedType **************
20682 function DefinedType(name, library, definition, isClass) { 20152 function DefinedType(name, library, definition, isClass) {
20683 this.isUsed = false 20153 this.isUsed = false
20684 this.isNativeType = false 20154 this.isNativeType = false
20685 this.library = library; 20155 this.library = library;
20686 this.isClass = isClass; 20156 this.isClass = isClass;
20687 this.directSubtypes = new HashSetImplementation(); 20157 this.directSubtypes = new HashSetImplementation();
20688 this.constructors = $map([]); 20158 this.constructors = $map([]);
20689 this.members = $map([]); 20159 this.members = $map([]);
20690 this.factories = new FactoryMap(); 20160 this.factories = new FactoryMap();
20691 this._resolvedMembers = $map([]); 20161 this._resolvedMembers = $map([]);
20692 lang_Type.call(this, name); 20162 lang_Type.call(this, name);
20693 // Initializers done 20163 // Initializers done
20694 this.setDefinition(definition); 20164 this.setDefinition(definition);
20695 } 20165 }
20696 $inherits(DefinedType, lang_Type); 20166 $inherits(DefinedType, lang_Type);
20697 DefinedType.prototype.is$DefinedType = function(){return this;};
20698 DefinedType.prototype.get$definition = function() { return this.definition; }; 20167 DefinedType.prototype.get$definition = function() { return this.definition; };
20699 DefinedType.prototype.set$definition = function(value) { return this.definition = value; }; 20168 DefinedType.prototype.set$definition = function(value) { return this.definition = value; };
20700 DefinedType.prototype.get$library = function() { return this.library; }; 20169 DefinedType.prototype.get$library = function() { return this.library; };
20701 DefinedType.prototype.get$isClass = function() { return this.isClass; }; 20170 DefinedType.prototype.get$isClass = function() { return this.isClass; };
20702 DefinedType.prototype.get$parent = function() { 20171 DefinedType.prototype.get$parent = function() {
20703 return this._parent; 20172 return this._parent;
20704 } 20173 }
20705 DefinedType.prototype.set$parent = function(p) { 20174 DefinedType.prototype.set$parent = function(p) {
20706 this._parent = p; 20175 this._parent = p;
20707 } 20176 }
20708 DefinedType.prototype.get$interfaces = function() { return this.interfaces; }; 20177 DefinedType.prototype.get$interfaces = function() { return this.interfaces; };
20709 DefinedType.prototype.set$interfaces = function(value) { return this.interfaces = value; }; 20178 DefinedType.prototype.set$interfaces = function(value) { return this.interfaces = value; };
20710 DefinedType.prototype.get$typeParameters = function() { return this.typeParamete rs; }; 20179 DefinedType.prototype.get$typeParameters = function() { return this.typeParamete rs; };
20711 DefinedType.prototype.set$typeParameters = function(value) { return this.typePar ameters = value; }; 20180 DefinedType.prototype.set$typeParameters = function(value) { return this.typePar ameters = value; };
20712 DefinedType.prototype.get$constructors = function() { return this.constructors; }; 20181 DefinedType.prototype.get$constructors = function() { return this.constructors; };
20713 DefinedType.prototype.set$constructors = function(value) { return this.construct ors = value; }; 20182 DefinedType.prototype.set$constructors = function(value) { return this.construct ors = value; };
20714 DefinedType.prototype.get$members = function() { return this.members; }; 20183 DefinedType.prototype.get$members = function() { return this.members; };
20715 DefinedType.prototype.set$members = function(value) { return this.members = valu e; }; 20184 DefinedType.prototype.set$members = function(value) { return this.members = valu e; };
20716 DefinedType.prototype.get$factories = function() { return this.factories; }; 20185 DefinedType.prototype.get$factories = function() { return this.factories; };
20717 DefinedType.prototype.set$factories = function(value) { return this.factories = value; }; 20186 DefinedType.prototype.set$factories = function(value) { return this.factories = value; };
20718 DefinedType.prototype.get$isUsed = function() { return this.isUsed; }; 20187 DefinedType.prototype.get$isUsed = function() { return this.isUsed; };
20719 DefinedType.prototype.set$isUsed = function(value) { return this.isUsed = value; }; 20188 DefinedType.prototype.set$isUsed = function(value) { return this.isUsed = value; };
20720 DefinedType.prototype.get$isNativeType = function() { return this.isNativeType; }; 20189 DefinedType.prototype.get$isNativeType = function() { return this.isNativeType; };
20721 DefinedType.prototype.set$isNativeType = function(value) { return this.isNativeT ype = value; }; 20190 DefinedType.prototype.set$isNativeType = function(value) { return this.isNativeT ype = value; };
20722 DefinedType.prototype.setDefinition = function(def) { 20191 DefinedType.prototype.setDefinition = function(def) {
20723 $assert(this.definition == null, "definition == null", "type.dart", 630, 12);
20724 this.definition = def; 20192 this.definition = def;
20725 if ((this.definition instanceof TypeDefinition) && this.definition.get$nativeT ype() != null) { 20193 if ((this.definition instanceof TypeDefinition) && this.definition.get$nativeT ype() != null) {
20726 this.isNativeType = true; 20194 this.isNativeType = true;
20727 } 20195 }
20728 if (this.definition != null && this.definition.get$typeParameters() != null) { 20196 if (this.definition != null && this.definition.get$typeParameters() != null) {
20729 this._concreteTypes = $map([]); 20197 this._concreteTypes = $map([]);
20730 this.typeParameters = []; 20198 this.typeParameters = [];
20731 var $list = this.definition.get$typeParameters(); 20199 var $list = this.definition.get$typeParameters();
20732 for (var $i = 0;$i < $list.length; $i++) { 20200 for (var $i = 0;$i < $list.length; $i++) {
20733 var tp = $list.$index($i); 20201 var tp = $list.$index($i);
20734 var paramName = tp.get$name().get$name(); 20202 var paramName = tp.get$name().get$name();
20735 this.typeParameters.add(new ParameterType($assert_String(paramName), tp)); 20203 this.typeParameters.add(new ParameterType(paramName, tp));
20736 } 20204 }
20737 } 20205 }
20738 } 20206 }
20739 DefinedType.prototype.get$typeArgsInOrder = function() { 20207 DefinedType.prototype.get$typeArgsInOrder = function() {
20740 if (this.typeParameters == null) return null; 20208 if (this.typeParameters == null) return null;
20741 if (this._typeArgsInOrder == null) { 20209 if (this._typeArgsInOrder == null) {
20742 this._typeArgsInOrder = new FixedCollection$Type(world.varType, this.typePar ameters.length); 20210 this._typeArgsInOrder = new FixedCollection$Type(world.varType, this.typePar ameters.length);
20743 } 20211 }
20744 return this._typeArgsInOrder; 20212 return this._typeArgsInOrder;
20745 } 20213 }
20746 DefinedType.prototype.get$isVar = function() { 20214 DefinedType.prototype.get$isVar = function() {
20747 return $eq(this, world.varType); 20215 return $eq(this, world.varType);
20748 } 20216 }
20749 DefinedType.prototype.get$isVoid = function() { 20217 DefinedType.prototype.get$isVoid = function() {
20750 return $eq(this, world.voidType); 20218 return $eq(this, world.voidType);
20751 } 20219 }
20752 DefinedType.prototype.get$isTop = function() { 20220 DefinedType.prototype.get$isTop = function() {
20753 return this.name == null; 20221 return this.name == null;
20754 } 20222 }
20755 DefinedType.prototype.get$isObject = function() { 20223 DefinedType.prototype.get$isObject = function() {
20756 return $notnull_bool(this.library.get$isCore()) && this.name == 'Object'; 20224 return this.library.get$isCore() && this.name == 'Object';
20757 } 20225 }
20758 DefinedType.prototype.get$isString = function() { 20226 DefinedType.prototype.get$isString = function() {
20759 return $notnull_bool(this.library.get$isCore()) && this.name == 'String' || $n otnull_bool(this.library.get$isCoreImpl()) && this.name == 'StringImplementation '; 20227 return this.library.get$isCore() && this.name == 'String' || this.library.get$ isCoreImpl() && this.name == 'StringImplementation';
20760 } 20228 }
20761 DefinedType.prototype.get$isBool = function() { 20229 DefinedType.prototype.get$isBool = function() {
20762 return $notnull_bool(this.library.get$isCore()) && this.name == 'bool'; 20230 return this.library.get$isCore() && this.name == 'bool';
20763 } 20231 }
20764 DefinedType.prototype.get$isFunction = function() { 20232 DefinedType.prototype.get$isFunction = function() {
20765 return $notnull_bool(this.library.get$isCore()) && this.name == 'Function'; 20233 return this.library.get$isCore() && this.name == 'Function';
20766 } 20234 }
20767 DefinedType.prototype.get$isList = function() { 20235 DefinedType.prototype.get$isList = function() {
20768 return $notnull_bool(this.library.get$isCore()) && this.name == 'List'; 20236 return this.library.get$isCore() && this.name == 'List';
20769 } 20237 }
20770 DefinedType.prototype.get$isGeneric = function() { 20238 DefinedType.prototype.get$isGeneric = function() {
20771 return this.typeParameters != null; 20239 return this.typeParameters != null;
20772 } 20240 }
20773 DefinedType.prototype.get$span = function() { 20241 DefinedType.prototype.get$span = function() {
20774 var $0; 20242 return this.definition == null ? null : this.definition.span;
20775 return (($0 = this.definition == null ? null : this.definition.span) && $0.is$ SourceSpan());
20776 } 20243 }
20777 DefinedType.prototype.get$typeofName = function() { 20244 DefinedType.prototype.get$typeofName = function() {
20778 if (!$notnull_bool(this.library.get$isCore())) return null; 20245 if (!this.library.get$isCore()) return null;
20779 if ($notnull_bool(this.get$isBool())) return 'boolean'; 20246 if (this.get$isBool()) return 'boolean';
20780 else if ($notnull_bool(this.get$isNum())) return 'number'; 20247 else if (this.get$isNum()) return 'number';
20781 else if ($notnull_bool(this.get$isString())) return 'string'; 20248 else if (this.get$isString()) return 'string';
20782 else if ($notnull_bool(this.get$isFunction())) return 'function'; 20249 else if (this.get$isFunction()) return 'function';
20783 else return null; 20250 else return null;
20784 } 20251 }
20785 DefinedType.prototype.get$isNum = function() { 20252 DefinedType.prototype.get$isNum = function() {
20786 return this.library != null && $notnull_bool(this.library.get$isCore()) && (th is.name == 'num' || this.name == 'int' || this.name == 'double'); 20253 return this.library != null && this.library.get$isCore() && (this.name == 'num ' || this.name == 'int' || this.name == 'double');
20787 } 20254 }
20788 DefinedType.prototype.getCallMethod = function() { 20255 DefinedType.prototype.getCallMethod = function() {
20789 var $0; 20256 return this.members.$index('\$call');
20790 return (($0 = this.members.$index('\$call')) && $0.is$MethodMember());
20791 } 20257 }
20792 DefinedType.prototype.getAllMembers = function() { 20258 DefinedType.prototype.getAllMembers = function() {
20793 return HashMapImplementation.HashMapImplementation$from$factory(this.members); 20259 return HashMapImplementation.HashMapImplementation$from$factory(this.members);
20794 } 20260 }
20795 DefinedType.prototype.markUsed = function() { 20261 DefinedType.prototype.markUsed = function() {
20796 if ($notnull_bool(this.isUsed)) return; 20262 if (this.isUsed) return;
20797 this.isUsed = true; 20263 this.isUsed = true;
20798 if (this._lazyGenMethods != null) { 20264 if (this._lazyGenMethods != null) {
20799 var $list = orderValuesByKeys(this._lazyGenMethods); 20265 var $list = orderValuesByKeys(this._lazyGenMethods);
20800 for (var $i = 0;$i < $list.length; $i++) { 20266 for (var $i = 0;$i < $list.length; $i++) {
20801 var method = $list.$index($i); 20267 var method = $list.$index($i);
20802 world.gen.genMethod((method && method.is$Member())); 20268 world.gen.genMethod(method);
20803 } 20269 }
20804 this._lazyGenMethods = null; 20270 this._lazyGenMethods = null;
20805 } 20271 }
20806 if (this.get$parent() != null) this.get$parent().markUsed(); 20272 if (this.get$parent() != null) this.get$parent().markUsed();
20807 } 20273 }
20808 DefinedType.prototype.genMethod = function(method) { 20274 DefinedType.prototype.genMethod = function(method) {
20809 if ($notnull_bool(this.isUsed)) { 20275 if (this.isUsed) {
20810 world.gen.genMethod(method); 20276 world.gen.genMethod(method);
20811 } 20277 }
20812 else if ($notnull_bool(this.isClass)) { 20278 else if (this.isClass) {
20813 if (this._lazyGenMethods == null) this._lazyGenMethods = $map([]); 20279 if (this._lazyGenMethods == null) this._lazyGenMethods = $map([]);
20814 this._lazyGenMethods.$setindex(method.name, method); 20280 this._lazyGenMethods.$setindex(method.name, method);
20815 } 20281 }
20816 } 20282 }
20817 DefinedType.prototype._resolveInterfaces = function(types) { 20283 DefinedType.prototype._resolveInterfaces = function(types) {
20818 if (types == null) return []; 20284 if (types == null) return [];
20819 var interfaces = []; 20285 var interfaces = [];
20820 for (var $i = 0;$i < types.length; $i++) { 20286 for (var $i = 0;$i < types.length; $i++) {
20821 var type = types.$index($i); 20287 var type = types.$index($i);
20822 var resolvedInterface = this.resolveType((type && type.is$TypeReference()), true); 20288 var resolvedInterface = this.resolveType(type, true);
20823 if ($notnull_bool(resolvedInterface.get$isClosed()) && !($notnull_bool(this. library.get$isCore()) || $notnull_bool(this.library.get$isCoreImpl()))) { 20289 if (resolvedInterface.get$isClosed() && !(this.library.get$isCore() || this. library.get$isCoreImpl())) {
20824 world.error(('can not implement "' + resolvedInterface.get$name() + '": ') + 'only native implementation allowed', type.get$span()); 20290 world.error(('can not implement "' + resolvedInterface.get$name() + '": ') + 'only native implementation allowed', type.get$span());
20825 } 20291 }
20826 resolvedInterface.addDirectSubtype$1(this); 20292 resolvedInterface.addDirectSubtype$1(this);
20827 interfaces.add$1(resolvedInterface); 20293 interfaces.add$1(resolvedInterface);
20828 } 20294 }
20829 return (interfaces && interfaces.is$List$Type()); 20295 return interfaces;
20830 } 20296 }
20831 DefinedType.prototype.addDirectSubtype = function(type) { 20297 DefinedType.prototype.addDirectSubtype = function(type) {
20832 $assert(this._subtypes == null, "_subtypes == null", "type.dart", 746, 12);
20833 this.directSubtypes.add(type); 20298 this.directSubtypes.add(type);
20834 } 20299 }
20835 DefinedType.prototype.get$subtypes = function() { 20300 DefinedType.prototype.get$subtypes = function() {
20836 if (this._subtypes == null) { 20301 if (this._subtypes == null) {
20837 this._subtypes = new HashSetImplementation(); 20302 this._subtypes = new HashSetImplementation();
20838 var $list = this.directSubtypes; 20303 var $list = this.directSubtypes;
20839 for (var $i = this.directSubtypes.iterator(); $i.hasNext$0(); ) { 20304 for (var $i = this.directSubtypes.iterator(); $i.hasNext$0(); ) {
20840 var st = $i.next$0(); 20305 var st = $i.next$0();
20841 this._subtypes.add(st); 20306 this._subtypes.add(st);
20842 this._subtypes.addAll(st.get$subtypes()); 20307 this._subtypes.addAll(st.get$subtypes());
20843 } 20308 }
20844 } 20309 }
20845 return this._subtypes; 20310 return this._subtypes;
20846 } 20311 }
20847 DefinedType.prototype._cycleInClassExtends = function() { 20312 DefinedType.prototype._cycleInClassExtends = function() {
20848 var seen = new HashSetImplementation(); 20313 var seen = new HashSetImplementation();
20849 seen.add(this); 20314 seen.add(this);
20850 var ancestor = this.get$parent(); 20315 var ancestor = this.get$parent();
20851 while ($notnull_bool($ne(ancestor, null))) { 20316 while ($ne(ancestor, null)) {
20852 if (ancestor === this) { 20317 if (ancestor === this) {
20853 return true; 20318 return true;
20854 } 20319 }
20855 if (seen.contains(ancestor)) { 20320 if (seen.contains(ancestor)) {
20856 return false; 20321 return false;
20857 } 20322 }
20858 seen.add(ancestor); 20323 seen.add(ancestor);
20859 ancestor = ancestor.get$parent(); 20324 ancestor = ancestor.get$parent();
20860 } 20325 }
20861 return false; 20326 return false;
20862 } 20327 }
20863 DefinedType.prototype._cycleInInterfaceExtends = function() { 20328 DefinedType.prototype._cycleInInterfaceExtends = function() {
20864 var $this = this; // closure support 20329 var $this = this; // closure support
20865 var seen = new HashSetImplementation(); 20330 var seen = new HashSetImplementation();
20866 seen.add(this); 20331 seen.add(this);
20867 function _helper(ancestor) { 20332 function _helper(ancestor) {
20868 if ($notnull_bool(ancestor == null)) return false; 20333 if (ancestor == null) return false;
20869 if (ancestor === $this) return true; 20334 if (ancestor === $this) return true;
20870 if (seen.contains(ancestor)) { 20335 if (seen.contains(ancestor)) {
20871 return false; 20336 return false;
20872 } 20337 }
20873 seen.add(ancestor); 20338 seen.add(ancestor);
20874 if ($notnull_bool($ne(ancestor.get$interfaces(), null))) { 20339 if ($ne(ancestor.get$interfaces(), null)) {
20875 var $list = ancestor.get$interfaces(); 20340 var $list = ancestor.get$interfaces();
20876 for (var $i = ancestor.get$interfaces().iterator$0(); $i.hasNext$0(); ) { 20341 for (var $i = ancestor.get$interfaces().iterator$0(); $i.hasNext$0(); ) {
20877 var parent = $i.next$0(); 20342 var parent = $i.next$0();
20878 if ($notnull_bool(_helper(parent))) return true; 20343 if (_helper(parent)) return true;
20879 } 20344 }
20880 } 20345 }
20881 return false; 20346 return false;
20882 } 20347 }
20883 for (var i = 0; 20348 for (var i = 0;
20884 i < this.interfaces.length; i++) { 20349 i < this.interfaces.length; i++) {
20885 if ($notnull_bool(_helper(this.interfaces.$index(i)))) return i; 20350 if (_helper(this.interfaces.$index(i))) return i;
20886 } 20351 }
20887 return -1; 20352 return -1;
20888 } 20353 }
20889 DefinedType.prototype.resolve = function() { 20354 DefinedType.prototype.resolve = function() {
20890 var $this = this; // closure support 20355 var $this = this; // closure support
20891 var $0;
20892 if ((this.definition instanceof TypeDefinition)) { 20356 if ((this.definition instanceof TypeDefinition)) {
20893 var typeDef = (($0 = this.definition) && $0.is$TypeDefinition()); 20357 var typeDef = this.definition;
20894 if ($notnull_bool(this.isClass)) { 20358 if (this.isClass) {
20895 if (typeDef.extendsTypes != null && typeDef.extendsTypes.length > 0) { 20359 if (typeDef.extendsTypes != null && typeDef.extendsTypes.length > 0) {
20896 if (typeDef.extendsTypes.length > 1) { 20360 if (typeDef.extendsTypes.length > 1) {
20897 world.error('more than one base class', typeDef.extendsTypes.$index(1) .get$span()); 20361 world.error('more than one base class', typeDef.extendsTypes.$index(1) .get$span());
20898 } 20362 }
20899 var extendsTypeRef = typeDef.extendsTypes.$index(0); 20363 var extendsTypeRef = typeDef.extendsTypes.$index(0);
20900 if ((extendsTypeRef instanceof GenericTypeReference)) { 20364 if ((extendsTypeRef instanceof GenericTypeReference)) {
20901 var g = (extendsTypeRef && extendsTypeRef.is$GenericTypeReference()); 20365 var g = extendsTypeRef;
20902 this.set$parent(this.resolveType(g.baseType, true)); 20366 this.set$parent(this.resolveType(g.baseType, true));
20903 } 20367 }
20904 this.set$parent(this.resolveType((extendsTypeRef && extendsTypeRef.is$Ty peReference()), true)); 20368 this.set$parent(this.resolveType(extendsTypeRef, true));
20905 if (!$notnull_bool(this.get$parent().get$isClass())) { 20369 if (!this.get$parent().get$isClass()) {
20906 world.error('class may not extend an interface - use implements', type Def.extendsTypes.$index(0).get$span()); 20370 world.error('class may not extend an interface - use implements', type Def.extendsTypes.$index(0).get$span());
20907 } 20371 }
20908 this.get$parent().addDirectSubtype(this); 20372 this.get$parent().addDirectSubtype(this);
20909 if ($notnull_bool(this._cycleInClassExtends())) { 20373 if (this._cycleInClassExtends()) {
20910 world.error(('class "' + this.name + '" has a cycle in its inheritance chain'), extendsTypeRef.get$span()); 20374 world.error(('class "' + this.name + '" has a cycle in its inheritance chain'), extendsTypeRef.get$span());
20911 } 20375 }
20912 } 20376 }
20913 else { 20377 else {
20914 if (!$notnull_bool(this.get$isObject())) { 20378 if (!this.get$isObject()) {
20915 this.set$parent(world.objectType); 20379 this.set$parent(world.objectType);
20916 this.get$parent().addDirectSubtype(this); 20380 this.get$parent().addDirectSubtype(this);
20917 } 20381 }
20918 } 20382 }
20919 this.interfaces = this._resolveInterfaces(typeDef.implementsTypes); 20383 this.interfaces = this._resolveInterfaces(typeDef.implementsTypes);
20920 if (typeDef.factoryType != null) { 20384 if (typeDef.factoryType != null) {
20921 world.error('factory not allowed on classes', typeDef.factoryType.span); 20385 world.error('factory not allowed on classes', typeDef.factoryType.span);
20922 } 20386 }
20923 } 20387 }
20924 else { 20388 else {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
20960 m.resolve$1(this); 20424 m.resolve$1(this);
20961 } 20425 }
20962 this.factories.forEach((function (f) { 20426 this.factories.forEach((function (f) {
20963 return f.resolve$1($this); 20427 return f.resolve$1($this);
20964 }) 20428 })
20965 ); 20429 );
20966 } 20430 }
20967 DefinedType.prototype.addMethod = function(methodName, definition) { 20431 DefinedType.prototype.addMethod = function(methodName, definition) {
20968 if (methodName == null) methodName = definition.name.name; 20432 if (methodName == null) methodName = definition.name.name;
20969 var method = new MethodMember(methodName, this, definition); 20433 var method = new MethodMember(methodName, this, definition);
20970 if ($notnull_bool(method.get$isConstructor())) { 20434 if (method.get$isConstructor()) {
20971 if (this.constructors.containsKey(method.get$constructorName())) { 20435 if (this.constructors.containsKey(method.get$constructorName())) {
20972 world.error(('duplicate constructor definition of ' + method.get$name() + ''), definition.span); 20436 world.error(('duplicate constructor definition of ' + method.get$name() + ''), definition.span);
20973 return; 20437 return;
20974 } 20438 }
20975 this.constructors.$setindex(method.get$constructorName(), method); 20439 this.constructors.$setindex(method.get$constructorName(), method);
20976 return; 20440 return;
20977 } 20441 }
20978 if (definition.modifiers != null && definition.modifiers.length == 1 && $notnu ll_bool($eq(definition.modifiers.$index(0).kind, 75/*TokenKind.FACTORY*/))) { 20442 if (definition.modifiers != null && definition.modifiers.length == 1 && $eq(de finition.modifiers.$index(0).kind, 75/*TokenKind.FACTORY*/)) {
20979 if (this.factories.getFactory(method.get$constructorName(), $assert_String(m ethod.get$name())) != null) { 20443 if (this.factories.getFactory(method.get$constructorName(), method.get$name( )) != null) {
20980 world.error(('duplicate factory definition of "' + method.get$name() + '"' ), definition.span); 20444 world.error(('duplicate factory definition of "' + method.get$name() + '"' ), definition.span);
20981 return; 20445 return;
20982 } 20446 }
20983 this.factories.addFactory(method.get$constructorName(), $assert_String(metho d.get$name()), (method && method.is$Member())); 20447 this.factories.addFactory(method.get$constructorName(), method.get$name(), m ethod);
20984 return; 20448 return;
20985 } 20449 }
20986 if (methodName.startsWith('get\$') || methodName.startsWith('set\$')) { 20450 if (methodName.startsWith('get\$') || methodName.startsWith('set\$')) {
20987 var propName = methodName.substring(4); 20451 var propName = methodName.substring(4);
20988 var prop = this.members.$index(propName); 20452 var prop = this.members.$index(propName);
20989 if ($notnull_bool(prop == null)) { 20453 if (prop == null) {
20990 prop = new PropertyMember($assert_String(propName), this); 20454 prop = new PropertyMember(propName, this);
20991 this.members.$setindex(propName, prop); 20455 this.members.$setindex(propName, prop);
20992 } 20456 }
20993 if (!(prop instanceof PropertyMember)) { 20457 if (!(prop instanceof PropertyMember)) {
20994 world.error(('property conflicts with field "' + propName + '"'), definiti on.span); 20458 world.error(('property conflicts with field "' + propName + '"'), definiti on.span);
20995 return; 20459 return;
20996 } 20460 }
20997 if (methodName[0] == 'g') { 20461 if (methodName[0] == 'g') {
20998 if (prop.getter != null) { 20462 if (prop.getter != null) {
20999 world.error(('duplicate getter definition for "' + propName + '"'), defi nition.span); 20463 world.error(('duplicate getter definition for "' + propName + '"'), defi nition.span);
21000 } 20464 }
21001 prop.getter = (method && method.is$MethodMember()); 20465 prop.getter = method;
21002 } 20466 }
21003 else { 20467 else {
21004 if (prop.setter != null) { 20468 if (prop.setter != null) {
21005 world.error(('duplicate setter definition for "' + propName + '"'), defi nition.span); 20469 world.error(('duplicate setter definition for "' + propName + '"'), defi nition.span);
21006 } 20470 }
21007 prop.setter = (method && method.is$MethodMember()); 20471 prop.setter = method;
21008 } 20472 }
21009 return; 20473 return;
21010 } 20474 }
21011 if (this.members.containsKey(methodName)) { 20475 if (this.members.containsKey(methodName)) {
21012 world.error(('duplicate method definition of "' + method.get$name() + '"'), definition.span); 20476 world.error(('duplicate method definition of "' + method.get$name() + '"'), definition.span);
21013 return; 20477 return;
21014 } 20478 }
21015 this.members.$setindex(methodName, method); 20479 this.members.$setindex(methodName, method);
21016 } 20480 }
21017 DefinedType.prototype.addField = function(definition) { 20481 DefinedType.prototype.addField = function(definition) {
21018 for (var i = 0; 20482 for (var i = 0;
21019 i < definition.names.length; i++) { 20483 i < definition.names.length; i++) {
21020 var name = definition.names.$index(i).get$name(); 20484 var name = definition.names.$index(i).get$name();
21021 if (this.members.containsKey(name)) { 20485 if (this.members.containsKey(name)) {
21022 world.error(('duplicate field definition of "' + name + '"'), definition.s pan); 20486 world.error(('duplicate field definition of "' + name + '"'), definition.s pan);
21023 return; 20487 return;
21024 } 20488 }
21025 var value = null; 20489 var value = null;
21026 if (definition.values != null) { 20490 if (definition.values != null) {
21027 value = definition.values.$index(i); 20491 value = definition.values.$index(i);
21028 } 20492 }
21029 var field = new FieldMember($assert_String(name), this, definition, value); 20493 var field = new FieldMember(name, this, definition, value);
21030 this.members.$setindex(name, field); 20494 this.members.$setindex(name, field);
21031 if ($notnull_bool(this.isNativeType)) { 20495 if (this.isNativeType) {
21032 field.isNative = true; 20496 field.isNative = true;
21033 } 20497 }
21034 } 20498 }
21035 } 20499 }
21036 DefinedType.prototype.getFactory = function(type, constructorName) { 20500 DefinedType.prototype.getFactory = function(type, constructorName) {
21037 var ret = this.factories.getFactory(type.name, constructorName); 20501 var ret = this.factories.getFactory(type.name, constructorName);
21038 if ($notnull_bool($ne(ret, null))) return ret; 20502 if ($ne(ret, null)) return ret;
21039 ret = this.factories.getFactory(this.name, constructorName); 20503 ret = this.factories.getFactory(this.name, constructorName);
21040 if ($notnull_bool($ne(ret, null))) return ret; 20504 if ($ne(ret, null)) return ret;
21041 ret = this.constructors.$index(constructorName); 20505 ret = this.constructors.$index(constructorName);
21042 if ($notnull_bool($ne(ret, null))) return ret; 20506 if ($ne(ret, null)) return ret;
21043 return this._tryCreateDefaultConstructor(constructorName); 20507 return this._tryCreateDefaultConstructor(constructorName);
21044 } 20508 }
21045 DefinedType.prototype.getConstructor = function(constructorName) { 20509 DefinedType.prototype.getConstructor = function(constructorName) {
21046 var ret = this.constructors.$index(constructorName); 20510 var ret = this.constructors.$index(constructorName);
21047 if ($notnull_bool($ne(ret, null))) { 20511 if ($ne(ret, null)) {
21048 if (this.factory_ != null) { 20512 if (this.factory_ != null) {
21049 return this.factory_.getFactory(this, constructorName); 20513 return this.factory_.getFactory(this, constructorName);
21050 } 20514 }
21051 return ret; 20515 return ret;
21052 } 20516 }
21053 ret = this.factories.getFactory(this.name, constructorName); 20517 ret = this.factories.getFactory(this.name, constructorName);
21054 if ($notnull_bool($ne(ret, null))) return ret; 20518 if ($ne(ret, null)) return ret;
21055 return this._tryCreateDefaultConstructor(constructorName); 20519 return this._tryCreateDefaultConstructor(constructorName);
21056 } 20520 }
21057 DefinedType.prototype._tryCreateDefaultConstructor = function(name) { 20521 DefinedType.prototype._tryCreateDefaultConstructor = function(name) {
21058 var $0; 20522 if (name == '' && this.definition != null && this.isClass && this.constructors .get$length() == 0) {
21059 if (name == '' && this.definition != null && $notnull_bool(this.isClass) && th is.constructors.get$length() == 0) {
21060 var span = this.definition.span; 20523 var span = this.definition.span;
21061 var inits = null, body = null; 20524 var inits = null, body = null;
21062 if ($notnull_bool(this.isNativeType)) { 20525 if (this.isNativeType) {
21063 body = new NativeStatement(null, (span && span.is$SourceSpan())); 20526 body = new NativeStatement(null, span);
21064 inits = null; 20527 inits = null;
21065 } 20528 }
21066 else { 20529 else {
21067 body = null; 20530 body = null;
21068 inits = [new CallExpression(new SuperExpression((span && span.is$SourceSpa n())), [], (span && span.is$SourceSpan()))]; 20531 inits = [new CallExpression(new SuperExpression(span), [], span)];
21069 } 20532 }
21070 var typeDef = (($0 = this.definition) && $0.is$TypeDefinition()); 20533 var typeDef = this.definition;
21071 var c = new FunctionDefinition(null, null, typeDef.name, [], inits, body, (s pan && span.is$SourceSpan())); 20534 var c = new FunctionDefinition(null, null, typeDef.name, [], inits, body, sp an);
21072 this.addMethod(null, (c && c.is$FunctionDefinition())); 20535 this.addMethod(null, c);
21073 this.constructors.$index('').resolve$1(this); 20536 this.constructors.$index('').resolve$1(this);
21074 return this.constructors.$index(''); 20537 return this.constructors.$index('');
21075 } 20538 }
21076 return null; 20539 return null;
21077 } 20540 }
21078 DefinedType.prototype.getMember = function(memberName) { 20541 DefinedType.prototype.getMember = function(memberName) {
21079 var $0; 20542 var member = this.members.$index(memberName);
21080 var member = (($0 = this.members.$index(memberName)) && $0.is$Member());
21081 if (member != null) { 20543 if (member != null) {
21082 var parentMember = this.getMemberInParents(memberName); 20544 var parentMember = this.getMemberInParents(memberName);
21083 if ($notnull_bool($ne(parentMember, null))) { 20545 if ($ne(parentMember, null)) {
21084 if (!$notnull_bool(member.get$isPrivate()) || $eq(member.get$library(), pa rentMember.get$library())) { 20546 if (!member.get$isPrivate() || $eq(member.get$library(), parentMember.get$ library())) {
21085 member.override((parentMember && parentMember.is$Member())); 20547 member.override(parentMember);
21086 } 20548 }
21087 } 20549 }
21088 return member; 20550 return member;
21089 } 20551 }
21090 if ($notnull_bool(this.get$isTop())) { 20552 if (this.get$isTop()) {
21091 var libType = this.library.findTypeByName(memberName); 20553 var libType = this.library.findTypeByName(memberName);
21092 if ($notnull_bool($ne(libType, null))) { 20554 if ($ne(libType, null)) {
21093 return libType.get$typeMember(); 20555 return libType.get$typeMember();
21094 } 20556 }
21095 } 20557 }
21096 return this.getMemberInParents(memberName); 20558 return this.getMemberInParents(memberName);
21097 } 20559 }
21098 DefinedType.prototype.getMemberInParents = function(memberName) { 20560 DefinedType.prototype.getMemberInParents = function(memberName) {
21099 if ($notnull_bool(this.isClass)) { 20561 if (this.isClass) {
21100 if (this.get$parent() != null) { 20562 if (this.get$parent() != null) {
21101 return this.get$parent().getMember(memberName); 20563 return this.get$parent().getMember(memberName);
21102 } 20564 }
21103 else if ($notnull_bool(this.get$isObject())) { 20565 else if (this.get$isObject()) {
21104 if (memberName == '\$ne') { 20566 if (memberName == '\$ne') {
21105 var ret = this._createNotEqualMember(); 20567 var ret = this._createNotEqualMember();
21106 this.members.$setindex(memberName, ret); 20568 this.members.$setindex(memberName, ret);
21107 return (ret && ret.is$Member()); 20569 return ret;
21108 } 20570 }
21109 return null; 20571 return null;
21110 } 20572 }
21111 } 20573 }
21112 else { 20574 else {
21113 if (this.interfaces != null && this.interfaces.length > 0) { 20575 if (this.interfaces != null && this.interfaces.length > 0) {
21114 var $list = this.interfaces; 20576 var $list = this.interfaces;
21115 for (var $i = 0;$i < $list.length; $i++) { 20577 for (var $i = 0;$i < $list.length; $i++) {
21116 var i = $list.$index($i); 20578 var i = $list.$index($i);
21117 var ret = i.getMember$1(memberName); 20579 var ret = i.getMember$1(memberName);
21118 if ($notnull_bool($ne(ret, null))) { 20580 if ($ne(ret, null)) {
21119 return (ret && ret.is$Member()); 20581 return ret;
21120 } 20582 }
21121 } 20583 }
21122 return null; 20584 return null;
21123 } 20585 }
21124 else { 20586 else {
21125 return world.objectType.getMember(memberName); 20587 return world.objectType.getMember(memberName);
21126 } 20588 }
21127 } 20589 }
21128 } 20590 }
21129 DefinedType.prototype.resolveMember = function(memberName) { 20591 DefinedType.prototype.resolveMember = function(memberName) {
21130 var $0; 20592 var ret = this._resolvedMembers.$index(memberName);
21131 var ret = (($0 = this._resolvedMembers.$index(memberName)) && $0.is$MemberSet( ));
21132 if (ret != null) return ret; 20593 if (ret != null) return ret;
21133 var member = this.getMember(memberName); 20594 var member = this.getMember(memberName);
21134 if (member == null) { 20595 if (member == null) {
21135 return null; 20596 return null;
21136 } 20597 }
21137 ret = new MemberSet(member, false); 20598 ret = new MemberSet(member, false);
21138 this._resolvedMembers.$setindex(memberName, ret); 20599 this._resolvedMembers.$setindex(memberName, ret);
21139 if ($notnull_bool(member.get$isStatic())) { 20600 if (member.get$isStatic()) {
21140 return ret; 20601 return ret;
21141 } 20602 }
21142 else { 20603 else {
21143 var $list = this.get$subtypes(); 20604 var $list = this.get$subtypes();
21144 for (var $i = this.get$subtypes().iterator(); $i.hasNext$0(); ) { 20605 for (var $i = this.get$subtypes().iterator(); $i.hasNext$0(); ) {
21145 var t = $i.next$0(); 20606 var t = $i.next$0();
21146 var m; 20607 var m;
21147 if (!$notnull_bool(this.isClass) && $notnull_bool(t.get$isClass())) { 20608 if (!this.isClass && t.get$isClass()) {
21148 m = t.getMember$1(memberName); 20609 m = t.getMember$1(memberName);
21149 } 20610 }
21150 else { 20611 else {
21151 m = t.get$members().$index(memberName); 20612 m = t.get$members().$index(memberName);
21152 } 20613 }
21153 if ($notnull_bool($ne(m, null))) ret.add((m && m.is$Member())); 20614 if ($ne(m, null)) ret.add(m);
21154 } 20615 }
21155 return ret; 20616 return ret;
21156 } 20617 }
21157 } 20618 }
21158 DefinedType.prototype._createNotEqualMember = function() { 20619 DefinedType.prototype._createNotEqualMember = function() {
21159 var $0; 20620 var eq = this.members.$index('\$eq');
21160 var eq = (($0 = this.members.$index('\$eq')) && $0.is$MethodMember());
21161 if (eq == null) { 20621 if (eq == null) {
21162 world.internalError('INTERNAL: object does not define ==', this.definition.s pan); 20622 world.internalError('INTERNAL: object does not define ==', this.definition.s pan);
21163 } 20623 }
21164 var ne = new MethodMember('\$ne', this, eq.definition); 20624 var ne = new MethodMember('\$ne', this, eq.definition);
21165 ne.isGenerated = true; 20625 ne.isGenerated = true;
21166 ne.returnType = eq.returnType; 20626 ne.returnType = eq.returnType;
21167 ne.parameters = eq.parameters; 20627 ne.parameters = eq.parameters;
21168 ne.isStatic = eq.isStatic; 20628 ne.isStatic = eq.isStatic;
21169 ne.isAbstract = eq.isAbstract; 20629 ne.isAbstract = eq.isAbstract;
21170 return ne; 20630 return ne;
21171 } 20631 }
21172 DefinedType._getDottedName = function(type) { 20632 DefinedType._getDottedName = function(type) {
21173 if (type.names != null) { 20633 if (type.names != null) {
21174 var names = map(type.names, (function (n) { 20634 var names = map(type.names, (function (n) {
21175 return n.get$name(); 20635 return n.get$name();
21176 }) 20636 })
21177 ); 20637 );
21178 return type.name.name + '.' + Strings.join((names && names.is$List$String()) , '.'); 20638 return type.name.name + '.' + Strings.join(names, '.');
21179 } 20639 }
21180 else { 20640 else {
21181 return type.name.name; 20641 return type.name.name;
21182 } 20642 }
21183 } 20643 }
21184 DefinedType.prototype.resolveType = function(node, typeErrors) { 20644 DefinedType.prototype.resolveType = function(node, typeErrors) {
21185 var $0;
21186 if (node == null) return world.varType; 20645 if (node == null) return world.varType;
21187 if (node.type != null) return node.type; 20646 if (node.type != null) return node.type;
21188 if ((node instanceof NameTypeReference)) { 20647 if ((node instanceof NameTypeReference)) {
21189 var typeRef = (node && node.is$NameTypeReference()); 20648 var typeRef = node;
21190 var name; 20649 var name;
21191 if (typeRef.names != null) { 20650 if (typeRef.names != null) {
21192 name = $assert_String(typeRef.names.last().get$name()); 20651 name = typeRef.names.last().get$name();
21193 } 20652 }
21194 else { 20653 else {
21195 name = typeRef.name.name; 20654 name = typeRef.name.name;
21196 } 20655 }
21197 if (this.typeParameters != null) { 20656 if (this.typeParameters != null) {
21198 var $list = this.typeParameters; 20657 var $list = this.typeParameters;
21199 for (var $i = 0;$i < $list.length; $i++) { 20658 for (var $i = 0;$i < $list.length; $i++) {
21200 var tp = $list.$index($i); 20659 var tp = $list.$index($i);
21201 if ($notnull_bool($eq(tp.get$name(), name))) { 20660 if ($eq(tp.get$name(), name)) {
21202 typeRef.type = (tp && tp.is$lang_Type()); 20661 typeRef.type = tp;
21203 } 20662 }
21204 } 20663 }
21205 } 20664 }
21206 if (typeRef.type == null) { 20665 if (typeRef.type == null) {
21207 typeRef.type = this.library.findType(typeRef); 20666 typeRef.type = this.library.findType(typeRef);
21208 } 20667 }
21209 if (typeRef.type == null) { 20668 if (typeRef.type == null) {
21210 var message = ('can not find type ' + DefinedType._getDottedName(typeRef) + ''); 20669 var message = ('can not find type ' + DefinedType._getDottedName(typeRef) + '');
21211 if ($notnull_bool(typeErrors)) { 20670 if (typeErrors) {
21212 world.error($assert_String(message), typeRef.span); 20671 world.error(message, typeRef.span);
21213 typeRef.type = world.objectType; 20672 typeRef.type = world.objectType;
21214 } 20673 }
21215 else { 20674 else {
21216 world.warning($assert_String(message), typeRef.span); 20675 world.warning(message, typeRef.span);
21217 typeRef.type = world.varType; 20676 typeRef.type = world.varType;
21218 } 20677 }
21219 } 20678 }
21220 } 20679 }
21221 else if ((node instanceof GenericTypeReference)) { 20680 else if ((node instanceof GenericTypeReference)) {
21222 var typeRef = (node && node.is$GenericTypeReference()); 20681 var typeRef = node;
21223 var baseType = this.resolveType(typeRef.baseType, typeErrors); 20682 var baseType = this.resolveType(typeRef.baseType, typeErrors);
21224 if (!$notnull_bool(baseType.get$isGeneric())) { 20683 if (!baseType.get$isGeneric()) {
21225 world.error(('' + baseType.get$name() + ' is not generic'), typeRef.span); 20684 world.error(('' + baseType.get$name() + ' is not generic'), typeRef.span);
21226 return null; 20685 return null;
21227 } 20686 }
21228 if (typeRef.typeArguments.length != baseType.get$typeParameters().length) { 20687 if (typeRef.typeArguments.length != baseType.get$typeParameters().length) {
21229 world.error('wrong number of type arguments', typeRef.span); 20688 world.error('wrong number of type arguments', typeRef.span);
21230 return null; 20689 return null;
21231 } 20690 }
21232 var typeArgs = []; 20691 var typeArgs = [];
21233 for (var i = 0; 20692 for (var i = 0;
21234 i < typeRef.typeArguments.length; i++) { 20693 i < typeRef.typeArguments.length; i++) {
21235 var extendsType = baseType.get$typeParameters().$index(i).extendsType; 20694 var extendsType = baseType.get$typeParameters().$index(i).extendsType;
21236 var typeArg = this.resolveType((($0 = typeRef.typeArguments.$index(i)) && $0.is$TypeReference()), typeErrors); 20695 var typeArg = this.resolveType(typeRef.typeArguments.$index(i), typeErrors );
21237 typeArgs.add$1(typeArg); 20696 typeArgs.add$1(typeArg);
21238 if ($notnull_bool($ne(extendsType, null)) && !(typeArg instanceof Paramete rType)) { 20697 if ($ne(extendsType, null) && !(typeArg instanceof ParameterType)) {
21239 typeArg.ensureSubtypeOf$3(extendsType, typeRef.typeArguments.$index(i).g et$span(), typeErrors); 20698 typeArg.ensureSubtypeOf$3(extendsType, typeRef.typeArguments.$index(i).g et$span(), typeErrors);
21240 } 20699 }
21241 } 20700 }
21242 typeRef.type = baseType.getOrMakeConcreteType$1(typeArgs); 20701 typeRef.type = baseType.getOrMakeConcreteType$1(typeArgs);
21243 } 20702 }
21244 else if ((node instanceof FunctionTypeReference)) { 20703 else if ((node instanceof FunctionTypeReference)) {
21245 var typeRef = (node && node.is$FunctionTypeReference()); 20704 var typeRef = node;
21246 var name = ''; 20705 var name = '';
21247 if (typeRef.func.name != null) name = typeRef.func.name.name; 20706 if (typeRef.func.name != null) name = typeRef.func.name.name;
21248 typeRef.type = this.library.getOrAddFunctionType($assert_String(name), typeR ef.func, this); 20707 typeRef.type = this.library.getOrAddFunctionType(name, typeRef.func, this);
21249 } 20708 }
21250 else { 20709 else {
21251 world.internalError('unknown type reference', node.span); 20710 world.internalError('unknown type reference', node.span);
21252 } 20711 }
21253 return node.type; 20712 return node.type;
21254 } 20713 }
21255 DefinedType.prototype.resolveTypeParams = function(inType) { 20714 DefinedType.prototype.resolveTypeParams = function(inType) {
21256 return this; 20715 return this;
21257 } 20716 }
21258 DefinedType.prototype.getOrMakeConcreteType = function(typeArgs) { 20717 DefinedType.prototype.getOrMakeConcreteType = function(typeArgs) {
21259 $assert(this.get$isGeneric(), "isGeneric", "type.dart", 1229, 12);
21260 var names = [this.name]; 20718 var names = [this.name];
21261 var typeMap = $map([]); 20719 var typeMap = $map([]);
21262 for (var i = 0; 20720 for (var i = 0;
21263 i < typeArgs.length; i++) { 20721 i < typeArgs.length; i++) {
21264 var paramName = this.typeParameters.$index(i).get$name(); 20722 var paramName = this.typeParameters.$index(i).get$name();
21265 typeMap.$setindex(paramName, typeArgs.$index(i)); 20723 typeMap.$setindex(paramName, typeArgs.$index(i));
21266 names.add$1(typeArgs.$index(i).get$name()); 20724 names.add$1(typeArgs.$index(i).get$name());
21267 } 20725 }
21268 var concreteName = Strings.join((names && names.is$List$String()), '\$'); 20726 var concreteName = Strings.join(names, '\$');
21269 var ret = this._concreteTypes.$index(concreteName); 20727 var ret = this._concreteTypes.$index(concreteName);
21270 if ($notnull_bool(ret == null)) { 20728 if (ret == null) {
21271 ret = new ConcreteType($assert_String(concreteName), this, typeMap, typeArgs ); 20729 ret = new ConcreteType(concreteName, this, typeMap, typeArgs);
21272 this._concreteTypes.$setindex(concreteName, ret); 20730 this._concreteTypes.$setindex(concreteName, ret);
21273 } 20731 }
21274 return (ret && ret.is$lang_Type()); 20732 return ret;
21275 } 20733 }
21276 DefinedType.prototype.getCallStub = function(args) { 20734 DefinedType.prototype.getCallStub = function(args) {
21277 $assert(this.get$isFunction(), "isFunction", "type.dart", 1249, 12);
21278 var name = _getCallStubName('call', args); 20735 var name = _getCallStubName('call', args);
21279 if (this.varStubs == null) this.varStubs = $map([]); 20736 if (this.varStubs == null) this.varStubs = $map([]);
21280 var stub = this.varStubs.$index(name); 20737 var stub = this.varStubs.$index(name);
21281 if ($notnull_bool(stub == null)) { 20738 if (stub == null) {
21282 stub = new VarFunctionStub($assert_String(name), args); 20739 stub = new VarFunctionStub(name, args);
21283 this.varStubs.$setindex(name, stub); 20740 this.varStubs.$setindex(name, stub);
21284 } 20741 }
21285 return (stub && stub.is$VarFunctionStub()); 20742 return stub;
21286 } 20743 }
21287 DefinedType.prototype.addDirectSubtype$1 = function($0) { 20744 DefinedType.prototype.addDirectSubtype$1 = function($0) {
21288 return this.addDirectSubtype(($0 && $0.is$lang_Type())); 20745 return this.addDirectSubtype($0);
21289 }; 20746 };
21290 DefinedType.prototype.addMethod$2 = function($0, $1) { 20747 DefinedType.prototype.addMethod$2 = function($0, $1) {
21291 return this.addMethod($assert_String($0), ($1 && $1.is$FunctionDefinition())); 20748 return this.addMethod($0, $1);
21292 }; 20749 };
21293 DefinedType.prototype.getConstructor$1 = function($0) { 20750 DefinedType.prototype.getConstructor$1 = function($0) {
21294 return this.getConstructor($assert_String($0)); 20751 return this.getConstructor($0);
21295 }; 20752 };
21296 DefinedType.prototype.getFactory$2 = function($0, $1) { 20753 DefinedType.prototype.getFactory$2 = function($0, $1) {
21297 return this.getFactory(($0 && $0.is$lang_Type()), $assert_String($1)); 20754 return this.getFactory($0, $1);
21298 }; 20755 };
21299 DefinedType.prototype.getMember$1 = function($0) { 20756 DefinedType.prototype.getMember$1 = function($0) {
21300 return this.getMember($assert_String($0)); 20757 return this.getMember($0);
21301 }; 20758 };
21302 DefinedType.prototype.getOrMakeConcreteType$1 = function($0) { 20759 DefinedType.prototype.getOrMakeConcreteType$1 = function($0) {
21303 return this.getOrMakeConcreteType(($0 && $0.is$List$Type())); 20760 return this.getOrMakeConcreteType($0);
21304 }; 20761 };
21305 DefinedType.prototype.markUsed$0 = function() { 20762 DefinedType.prototype.markUsed$0 = function() {
21306 return this.markUsed(); 20763 return this.markUsed();
21307 }; 20764 };
21308 DefinedType.prototype.resolve$0 = function() { 20765 DefinedType.prototype.resolve$0 = function() {
21309 return this.resolve(); 20766 return this.resolve();
21310 }; 20767 };
21311 DefinedType.prototype.resolveMember$1 = function($0) { 20768 DefinedType.prototype.resolveMember$1 = function($0) {
21312 return this.resolveMember($assert_String($0)); 20769 return this.resolveMember($0);
21313 }; 20770 };
21314 DefinedType.prototype.resolveTypeParams$1 = function($0) { 20771 DefinedType.prototype.resolveTypeParams$1 = function($0) {
21315 return this.resolveTypeParams(($0 && $0.is$ConcreteType())); 20772 return this.resolveTypeParams($0);
21316 }; 20773 };
21317 DefinedType.prototype.setDefinition$1 = function($0) { 20774 DefinedType.prototype.setDefinition$1 = function($0) {
21318 return this.setDefinition(($0 && $0.is$Definition())); 20775 return this.setDefinition($0);
21319 }; 20776 };
21320 // ********** Code for FixedCollection ************** 20777 // ********** Code for FixedCollection **************
21321 function FixedCollection(value, length) { 20778 function FixedCollection(value, length) {
21322 this.value = value; 20779 this.value = value;
21323 this.length = length; 20780 this.length = length;
21324 // Initializers done 20781 // Initializers done
21325 } 20782 }
21326 FixedCollection.prototype.is$Collection$E = function(){return this;};
21327 FixedCollection.prototype.is$Collection$Object = function(){return this;};
21328 FixedCollection.prototype.is$Collection$Type = function(){return this;};
21329 FixedCollection.prototype.is$Iterable = function(){return this;};
21330 FixedCollection.prototype.get$value = function() { return this.value; }; 20783 FixedCollection.prototype.get$value = function() { return this.value; };
21331 FixedCollection.prototype.iterator = function() { 20784 FixedCollection.prototype.iterator = function() {
21332 return new FixedIterator$E(this.value, this.length); 20785 return new FixedIterator$E(this.value, this.length);
21333 } 20786 }
21334 FixedCollection.prototype.forEach = function(f) { 20787 FixedCollection.prototype.forEach = function(f) {
21335 Collections.forEach(this, f); 20788 Collections.forEach(this, f);
21336 } 20789 }
21337 FixedCollection.prototype.filter = function(f) { 20790 FixedCollection.prototype.filter = function(f) {
21338 return Collections.filter(this, new ListFactory(), f); 20791 return Collections.filter(this, new ListFactory(), f);
21339 } 20792 }
(...skipping 11 matching lines...) Expand all
21351 return this.iterator(); 20804 return this.iterator();
21352 }; 20805 };
21353 FixedCollection.prototype.some$1 = FixedCollection.prototype.some; 20806 FixedCollection.prototype.some$1 = FixedCollection.prototype.some;
21354 // ********** Code for FixedCollection$Type ************** 20807 // ********** Code for FixedCollection$Type **************
21355 function FixedCollection$Type(value, length) { 20808 function FixedCollection$Type(value, length) {
21356 this.value = value; 20809 this.value = value;
21357 this.length = length; 20810 this.length = length;
21358 // Initializers done 20811 // Initializers done
21359 } 20812 }
21360 $inherits(FixedCollection$Type, FixedCollection); 20813 $inherits(FixedCollection$Type, FixedCollection);
21361 FixedCollection$Type.prototype.is$Collection$E = function(){return this;};
21362 FixedCollection$Type.prototype.is$Collection$Object = function(){return this;};
21363 FixedCollection$Type.prototype.is$Collection$Type = function(){return this;};
21364 FixedCollection$Type.prototype.is$Iterable = function(){return this;};
21365 // ********** Code for FixedIterator ************** 20814 // ********** Code for FixedIterator **************
21366 function FixedIterator(value, length) { 20815 function FixedIterator(value, length) {
21367 this._index = 0 20816 this._index = 0
21368 this.value = value; 20817 this.value = value;
21369 this.length = length; 20818 this.length = length;
21370 // Initializers done 20819 // Initializers done
21371 } 20820 }
21372 FixedIterator.prototype.is$Iterator$T = function(){return this;};
21373 FixedIterator.prototype.get$value = function() { return this.value; }; 20821 FixedIterator.prototype.get$value = function() { return this.value; };
21374 FixedIterator.prototype.hasNext = function() { 20822 FixedIterator.prototype.hasNext = function() {
21375 return this._index < this.length; 20823 return this._index < this.length;
21376 } 20824 }
21377 FixedIterator.prototype.next = function() { 20825 FixedIterator.prototype.next = function() {
21378 this._index++; 20826 this._index++;
21379 return this.value; 20827 return this.value;
21380 } 20828 }
21381 FixedIterator.prototype.hasNext$0 = function() { 20829 FixedIterator.prototype.hasNext$0 = function() {
21382 return this.hasNext(); 20830 return this.hasNext();
21383 }; 20831 };
21384 FixedIterator.prototype.next$0 = function() { 20832 FixedIterator.prototype.next$0 = function() {
21385 return this.next(); 20833 return this.next();
21386 }; 20834 };
21387 // ********** Code for FixedIterator$E ************** 20835 // ********** Code for FixedIterator$E **************
21388 function FixedIterator$E(value, length) { 20836 function FixedIterator$E(value, length) {
21389 this._index = 0 20837 this._index = 0
21390 this.value = value; 20838 this.value = value;
21391 this.length = length; 20839 this.length = length;
21392 // Initializers done 20840 // Initializers done
21393 } 20841 }
21394 $inherits(FixedIterator$E, FixedIterator); 20842 $inherits(FixedIterator$E, FixedIterator);
21395 FixedIterator$E.prototype.is$Iterator$T = function(){return this;};
21396 // ********** Code for Value ************** 20843 // ********** Code for Value **************
21397 function Value(type, code, span, needsTemp) { 20844 function Value(type, code, span, needsTemp) {
21398 this.isSuper = false 20845 this.isSuper = false
21399 this.isType = false 20846 this.isType = false
21400 this.type = type; 20847 this.type = type;
21401 this.code = code; 20848 this.code = code;
21402 this.span = span; 20849 this.span = span;
21403 this.needsTemp = needsTemp; 20850 this.needsTemp = needsTemp;
21404 // Initializers done 20851 // Initializers done
21405 if (this.type == null) world.internalError('type passed as null', this.span); 20852 if (this.type == null) world.internalError('type passed as null', this.span);
21406 } 20853 }
21407 Value.prototype.is$Value = function(){return this;};
21408 Value.prototype.get$type = function() { return this.type; };
21409 Value.prototype.set$type = function(value) { return this.type = value; };
21410 Value.prototype.get$span = function() { return this.span; }; 20854 Value.prototype.get$span = function() { return this.span; };
21411 Value.prototype.set$span = function(value) { return this.span = value; }; 20855 Value.prototype.set$span = function(value) { return this.span = value; };
21412 Value.prototype.get$_typeIsVarOrParameterType = function() { 20856 Value.prototype.get$_typeIsVarOrParameterType = function() {
21413 return $notnull_bool(this.type.get$isVar()) || (this.type instanceof Parameter Type); 20857 return this.type.get$isVar() || (this.type instanceof ParameterType);
21414 } 20858 }
21415 Value.prototype.get$isConst = function() { 20859 Value.prototype.get$isConst = function() {
21416 return false; 20860 return false;
21417 } 20861 }
21418 Value.prototype.get$canonicalCode = function() { 20862 Value.prototype.get$canonicalCode = function() {
21419 return null; 20863 return null;
21420 } 20864 }
21421 Value.prototype.get_ = function(context, name, node) { 20865 Value.prototype.get_ = function(context, name, node) {
21422 var member = this._resolveMember(context, name, node, false); 20866 var member = this._resolveMember(context, name, node, false);
21423 if ($notnull_bool($ne(member, null))) { 20867 if ($ne(member, null)) {
21424 return member._get$3(context, node, this); 20868 return member._get$3(context, node, this);
21425 } 20869 }
21426 else { 20870 else {
21427 return this.invokeNoSuchMethod(context, ('get:' + name + ''), node); 20871 return this.invokeNoSuchMethod(context, ('get:' + name + ''), node);
21428 } 20872 }
21429 } 20873 }
21430 Value.prototype.set_ = function(context, name, node, value, isDynamic) { 20874 Value.prototype.set_ = function(context, name, node, value, isDynamic) {
21431 var member = this._resolveMember(context, name, node, isDynamic); 20875 var member = this._resolveMember(context, name, node, isDynamic);
21432 if ($notnull_bool($ne(member, null))) { 20876 if ($ne(member, null)) {
21433 return member._set(context, node, this, value, isDynamic); 20877 return member._set(context, node, this, value, isDynamic);
21434 } 20878 }
21435 else { 20879 else {
21436 return this.invokeNoSuchMethod(context, ('set:' + name + ''), node, new Argu ments(null, [value])); 20880 return this.invokeNoSuchMethod(context, ('set:' + name + ''), node, new Argu ments(null, [value]));
21437 } 20881 }
21438 } 20882 }
21439 Value.prototype.invoke = function(context, name, node, args, isDynamic) { 20883 Value.prototype.invoke = function(context, name, node, args, isDynamic) {
21440 if ($notnull_bool(this.get$_typeIsVarOrParameterType()) && name == '\$ne') { 20884 if (this.get$_typeIsVarOrParameterType() && name == '\$ne') {
21441 if (args.values.length != 1) { 20885 if (args.values.length != 1) {
21442 world.warning('wrong number of arguments for !=', node.span); 20886 world.warning('wrong number of arguments for !=', node.span);
21443 } 20887 }
21444 var eq = this.invoke(context, '\$eq', node, args, isDynamic); 20888 var eq = this.invoke(context, '\$eq', node, args, isDynamic);
21445 world.gen.corejs.useOperator('\$ne'); 20889 world.gen.corejs.useOperator('\$ne');
21446 return new Value(eq.type, ('\$ne(' + this.code + ', ' + args.values.$index(0 ).code + ')'), node.span, true); 20890 return new Value(eq.type, ('\$ne(' + this.code + ', ' + args.values.$index(0 ).code + ')'), node.span, true);
21447 } 20891 }
21448 if (name == '\$call') { 20892 if (name == '\$call') {
21449 if ($notnull_bool(this.isType)) { 20893 if (this.isType) {
21450 world.error('must use "new" or "const" to construct a new instance', node. span); 20894 world.error('must use "new" or "const" to construct a new instance', node. span);
21451 } 20895 }
21452 if ($notnull_bool(this.type.needsVarCall(args))) { 20896 if (this.type.needsVarCall(args)) {
21453 return this._varCall(context, args); 20897 return this._varCall(context, args);
21454 } 20898 }
21455 } 20899 }
21456 var member = this._resolveMember(context, name, node, isDynamic); 20900 var member = this._resolveMember(context, name, node, isDynamic);
21457 if ($notnull_bool(member == null)) { 20901 if (member == null) {
21458 return this.invokeNoSuchMethod(context, name, node, args); 20902 return this.invokeNoSuchMethod(context, name, node, args);
21459 } 20903 }
21460 else { 20904 else {
21461 return member.invoke$5(context, node, this, args, isDynamic); 20905 return member.invoke$5(context, node, this, args, isDynamic);
21462 } 20906 }
21463 } 20907 }
21464 Value.prototype.canInvoke = function(context, name, args) { 20908 Value.prototype.canInvoke = function(context, name, args) {
21465 if ($notnull_bool(this.get$_typeIsVarOrParameterType()) && name == '\$ne') { 20909 if (this.get$_typeIsVarOrParameterType() && name == '\$ne') {
21466 return true; 20910 return true;
21467 } 20911 }
21468 if ($notnull_bool(this.type.get$isVarOrFunction()) && name == '\$call') { 20912 if (this.type.get$isVarOrFunction() && name == '\$call') {
21469 return true; 20913 return true;
21470 } 20914 }
21471 var member = this._resolveMember(context, name, null, true); 20915 var member = this._resolveMember(context, name, null, true);
21472 return $notnull_bool($ne(member, null)) && $notnull_bool(member.canInvoke$2(co ntext, args)); 20916 return $ne(member, null) && member.canInvoke$2(context, args);
21473 } 20917 }
21474 Value.prototype._hasOverriddenNoSuchMethod = function() { 20918 Value.prototype._hasOverriddenNoSuchMethod = function() {
21475 if ($notnull_bool(this.isSuper)) { 20919 if (this.isSuper) {
21476 var m = this.type.getMember('noSuchMethod'); 20920 var m = this.type.getMember('noSuchMethod');
21477 return $notnull_bool($ne(m, null)) && !$notnull_bool(m.declaringType.get$isO bject()); 20921 return $ne(m, null) && !m.declaringType.get$isObject();
21478 } 20922 }
21479 else { 20923 else {
21480 return this.type.resolveMember('noSuchMethod').members.length > 1; 20924 return this.type.resolveMember('noSuchMethod').members.length > 1;
21481 } 20925 }
21482 } 20926 }
21483 Value.prototype._tryResolveMember = function(context, name) { 20927 Value.prototype._tryResolveMember = function(context, name) {
21484 if ($notnull_bool(this.isSuper)) { 20928 if (this.isSuper) {
21485 return this.type.getMember(name); 20929 return this.type.getMember(name);
21486 } 20930 }
21487 else { 20931 else {
21488 return this.type.resolveMember(name); 20932 return this.type.resolveMember(name);
21489 } 20933 }
21490 } 20934 }
21491 Value.prototype._resolveMember = function(context, name, node, isDynamic) { 20935 Value.prototype._resolveMember = function(context, name, node, isDynamic) {
21492 var member; 20936 var member;
21493 if (!$notnull_bool(this.get$_typeIsVarOrParameterType())) { 20937 if (!this.get$_typeIsVarOrParameterType()) {
21494 member = this._tryResolveMember(context, name); 20938 member = this._tryResolveMember(context, name);
21495 if ($notnull_bool($ne(member, null)) && $notnull_bool(this.isType) && !$notn ull_bool(member.get$isStatic())) { 20939 if ($ne(member, null) && this.isType && !member.get$isStatic()) {
21496 if (!$notnull_bool(isDynamic)) { 20940 if (!isDynamic) {
21497 world.error('can not refer to instance member as static', node.span); 20941 world.error('can not refer to instance member as static', node.span);
21498 } 20942 }
21499 return null; 20943 return null;
21500 } 20944 }
21501 if ($notnull_bool(member == null) && !$notnull_bool(isDynamic) && !$notnull_ bool(this._hasOverriddenNoSuchMethod())) { 20945 if (member == null && !isDynamic && !this._hasOverriddenNoSuchMethod()) {
21502 var typeName = this.type.name == null ? this.type.get$library().name : thi s.type.name; 20946 var typeName = this.type.name == null ? this.type.get$library().name : thi s.type.name;
21503 var message = ('can not resolve "' + name + '" on "' + typeName + '"'); 20947 var message = ('can not resolve "' + name + '" on "' + typeName + '"');
21504 if ($notnull_bool(this.isType)) { 20948 if (this.isType) {
21505 world.error($assert_String(message), node.span); 20949 world.error(message, node.span);
21506 } 20950 }
21507 else { 20951 else {
21508 world.warning($assert_String(message), node.span); 20952 world.warning(message, node.span);
21509 } 20953 }
21510 } 20954 }
21511 } 20955 }
21512 if ($notnull_bool(member == null) && !$notnull_bool(this.isSuper) && !$notnull _bool(this.isType)) { 20956 if (member == null && !this.isSuper && !this.isType) {
21513 member = context.findMembers(name); 20957 member = context.findMembers(name);
21514 if ($notnull_bool(member == null) && !$notnull_bool(isDynamic)) { 20958 if (member == null && !isDynamic) {
21515 world.warning(('' + name + ' is not defined anywhere in the world.'), node .span); 20959 world.warning(('' + name + ' is not defined anywhere in the world.'), node .span);
21516 } 20960 }
21517 } 20961 }
21518 return member; 20962 return member;
21519 } 20963 }
21520 Value.prototype.checkFirstClass = function(span) { 20964 Value.prototype.checkFirstClass = function(span) {
21521 if ($notnull_bool(this.isType)) { 20965 if (this.isType) {
21522 world.error('Types are not first class', span); 20966 world.error('Types are not first class', span);
21523 } 20967 }
21524 } 20968 }
21525 Value.prototype._varCall = function(context, args) { 20969 Value.prototype._varCall = function(context, args) {
21526 var stub = world.functionType.getCallStub(args); 20970 var stub = world.functionType.getCallStub(args);
21527 return new Value(world.varType, ('' + this.code + '.' + stub.get$name() + '(' + args.getCode() + ')'), this.span, true); 20971 return new Value(world.varType, ('' + this.code + '.' + stub.get$name() + '(' + args.getCode() + ')'), this.span, true);
21528 } 20972 }
21529 Value.prototype.needsConversion = function(toType) { 20973 Value.prototype.needsConversion = function(toType) {
21530 var callMethod = toType.getCallMethod(); 20974 var callMethod = toType.getCallMethod();
21531 if ($notnull_bool($ne(callMethod, null))) { 20975 if ($ne(callMethod, null)) {
21532 var arity = callMethod.get$parameters().length; 20976 var arity = callMethod.get$parameters().length;
21533 var myCall = this.type.getCallMethod(); 20977 var myCall = this.type.getCallMethod();
21534 if ($notnull_bool(myCall == null) || myCall.get$parameters().length != arity ) { 20978 if (myCall == null || myCall.get$parameters().length != arity) {
21535 return true; 20979 return true;
21536 } 20980 }
21537 } 20981 }
21538 if ($notnull_bool(options.enableTypeChecks)) { 20982 if (options.enableTypeChecks) {
21539 var fromType = this.type; 20983 var fromType = this.type;
21540 if ($notnull_bool(this.type.get$isVar()) && (this.code != 'null' || !$notnul l_bool(toType.get$isNullable()))) { 20984 if (this.type.get$isVar() && (this.code != 'null' || !toType.get$isNullable( ))) {
21541 fromType = world.objectType; 20985 fromType = world.objectType;
21542 } 20986 }
21543 var bothNum = $notnull_bool(this.type.get$isNum()) && $notnull_bool(toType.g et$isNum()); 20987 var bothNum = this.type.get$isNum() && toType.get$isNum();
21544 return $notnull_bool(fromType.isSubtypeOf(toType)) || $notnull_bool(bothNum) ; 20988 return fromType.isSubtypeOf(toType) || bothNum;
21545 } 20989 }
21546 return false; 20990 return false;
21547 } 20991 }
21548 Value.prototype.convertTo = function(context, toType, node, isDynamic) { 20992 Value.prototype.convertTo = function(context, toType, node, isDynamic) {
21549 var $0; 20993 var checked = !isDynamic;
21550 var checked = !$notnull_bool(isDynamic);
21551 var callMethod = toType.getCallMethod(); 20994 var callMethod = toType.getCallMethod();
21552 if ($notnull_bool($ne(callMethod, null))) { 20995 if ($ne(callMethod, null)) {
21553 if ($notnull_bool(checked) && !$notnull_bool(toType.isAssignable(this.type)) ) { 20996 if (checked && !toType.isAssignable(this.type)) {
21554 this.convertWarning(toType, node); 20997 this.convertWarning(toType, node);
21555 } 20998 }
21556 var arity = callMethod.get$parameters().length; 20999 var arity = callMethod.get$parameters().length;
21557 var myCall = this.type.getCallMethod(); 21000 var myCall = this.type.getCallMethod();
21558 if ($notnull_bool(myCall == null) || myCall.get$parameters().length != arity ) { 21001 if (myCall == null || myCall.get$parameters().length != arity) {
21559 var stub = world.functionType.getCallStub(Arguments.Arguments$bare$factory (arity)); 21002 var stub = world.functionType.getCallStub(Arguments.Arguments$bare$factory (arity));
21560 var val = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), node.span, true); 21003 var val = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), node.span, true);
21561 return (($0 = $notnull_bool(this._isDomCallback(toType)) && !$notnull_bool (this._isDomCallback(this.type)) ? val._wrapDomCallback(toType, arity) : val) && $0.is$Value()); 21004 return this._isDomCallback(toType) && !this._isDomCallback(this.type) ? va l._wrapDomCallback(toType, arity) : val;
21562 } 21005 }
21563 else if ($notnull_bool(this._isDomCallback(toType)) && !$notnull_bool(this._ isDomCallback(this.type))) { 21006 else if (this._isDomCallback(toType) && !this._isDomCallback(this.type)) {
21564 return this._wrapDomCallback(toType, arity); 21007 return this._wrapDomCallback(toType, arity);
21565 } 21008 }
21566 } 21009 }
21567 var fromType = this.type; 21010 var fromType = this.type;
21568 if ($notnull_bool(this.type.get$isVar()) && (this.code != 'null' || !$notnull_ bool(toType.get$isNullable()))) { 21011 if (this.type.get$isVar() && (this.code != 'null' || !toType.get$isNullable()) ) {
21569 fromType = world.objectType; 21012 fromType = world.objectType;
21570 } 21013 }
21571 var bothNum = $notnull_bool(this.type.get$isNum()) && $notnull_bool(toType.get $isNum()); 21014 var bothNum = this.type.get$isNum() && toType.get$isNum();
21572 if ($notnull_bool(fromType.isSubtypeOf(toType)) || $notnull_bool(bothNum)) { 21015 if (fromType.isSubtypeOf(toType) || bothNum) {
21573 return this; 21016 return this;
21574 } 21017 }
21575 if ($notnull_bool(checked) && !$notnull_bool(toType.isSubtypeOf(this.type))) { 21018 if (checked && !toType.isSubtypeOf(this.type)) {
21576 this.convertWarning(toType, node); 21019 this.convertWarning(toType, node);
21577 } 21020 }
21578 if ($notnull_bool(options.enableTypeChecks)) { 21021 if (options.enableTypeChecks) {
21579 return this._typeAssert(context, toType, node); 21022 return this._typeAssert(context, toType, node);
21580 } 21023 }
21581 else { 21024 else {
21582 return this; 21025 return this;
21583 } 21026 }
21584 } 21027 }
21585 Value.prototype._isDomCallback = function(toType) { 21028 Value.prototype._isDomCallback = function(toType) {
21586 return ((toType.get$definition() instanceof FunctionTypeDefinition) && $eq(toT ype.get$library(), world.get$dom())); 21029 return ((toType.get$definition() instanceof FunctionTypeDefinition) && $eq(toT ype.get$library(), world.get$dom()));
21587 } 21030 }
21588 Value.prototype._wrapDomCallback = function(toType, arity) { 21031 Value.prototype._wrapDomCallback = function(toType, arity) {
21589 return new Value(toType, ('\$wrap_call\$' + arity + '(' + this.code + ')'), th is.span, true); 21032 return new Value(toType, ('\$wrap_call\$' + arity + '(' + this.code + ')'), th is.span, true);
21590 } 21033 }
21591 Value.prototype._typeAssert = function(context, toType, node) { 21034 Value.prototype._typeAssert = function(context, toType, node) {
21592 if ((toType instanceof ParameterType)) { 21035 if ((toType instanceof ParameterType)) {
21593 var p = (toType && toType.is$ParameterType()); 21036 var p = toType;
21594 toType = p.extendsType; 21037 toType = p.extendsType;
21595 } 21038 }
21596 if (toType.getCallMethod() != null) { 21039 if (toType.getCallMethod() != null) {
21597 return this; 21040 return this;
21598 } 21041 }
21599 if ($notnull_bool(toType.get$isObject()) || $notnull_bool(toType.get$isVar())) { 21042 if (toType.get$isObject() || toType.get$isVar()) {
21600 world.internalError(('We thought ' + this.type.name + ' is not a subtype of ' + toType.name + '?')); 21043 world.internalError(('We thought ' + this.type.name + ' is not a subtype of ' + toType.name + '?'));
21601 } 21044 }
21602 if ($notnull_bool(toType.get$isNum())) toType = world.numType; 21045 if (toType.get$isNum()) toType = world.numType;
21603 var check; 21046 var check;
21604 if ($notnull_bool(toType.get$isVoid())) { 21047 if (toType.get$isVoid()) {
21605 check = ('\$assert_void(' + this.code + ')'); 21048 check = ('\$assert_void(' + this.code + ')');
21606 if (toType.typeCheckCode == null) { 21049 if (toType.typeCheckCode == null) {
21607 toType.typeCheckCode = "function $assert_void(x) {\n return x == null ? x : x.is$void(); // throws TypeError\n}"; 21050 toType.typeCheckCode = "function $assert_void(x) {\n return x == null ? x : x.is$void(); // throws TypeError\n}";
21608 } 21051 }
21609 } 21052 }
21610 else if ($eq(toType, world.nonNullBool)) { 21053 else if ($eq(toType, world.nonNullBool)) {
21611 world.gen.corejs.useNotNullBool = true; 21054 world.gen.corejs.useNotNullBool = true;
21612 check = ('\$notnull_bool(' + this.code + ')'); 21055 check = ('\$notnull_bool(' + this.code + ')');
21613 } 21056 }
21614 else if ($notnull_bool(toType.get$library().get$isCore()) && toType.get$typeof Name() != null) { 21057 else if (toType.get$library().get$isCore() && toType.get$typeofName() != null) {
21615 check = ('\$assert_' + toType.name + '(' + this.code + ')'); 21058 check = ('\$assert_' + toType.name + '(' + this.code + ')');
21616 if (toType.typeCheckCode == null) { 21059 if (toType.typeCheckCode == null) {
21617 toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if ( x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n thro w new TypeError(\"'\" + x + \"' is not a " + toType.name + ".\");\n}"); 21060 toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if ( x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n thro w new TypeError(\"'\" + x + \"' is not a " + toType.name + ".\");\n}");
21618 } 21061 }
21619 } 21062 }
21620 else { 21063 else {
21621 toType.isTested = true; 21064 toType.isTested = true;
21622 var temp = context.getTemp(this); 21065 var temp = context.getTemp(this);
21623 check = ('(' + context.assignTemp((temp && temp.is$Value()), this).code + ' &&'); 21066 check = ('(' + context.assignTemp(temp, this).code + ' &&');
21624 check = check + (' ' + temp.code + '.is\$' + toType.get$jsname() + '())'); 21067 check = check + (' ' + temp.code + '.is\$' + toType.get$jsname() + '())');
21625 if ($ne(this, temp)) context.freeTemp((temp && temp.is$Value())); 21068 if ($ne(this, temp)) context.freeTemp(temp);
21626 } 21069 }
21627 return new Value(toType, check, this.span, true); 21070 return new Value(toType, check, this.span, true);
21628 } 21071 }
21629 Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck) { 21072 Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck) {
21630 if ($notnull_bool(toType.get$isVar())) { 21073 if (toType.get$isVar()) {
21631 world.error('can not resolve type', span); 21074 world.error('can not resolve type', span);
21632 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, true, 'true' , null); 21075 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, true, 'true' , null);
21633 } 21076 }
21634 if ((toType instanceof ParameterType)) { 21077 if ((toType instanceof ParameterType)) {
21635 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, true, 'true' , null); 21078 return EvaluatedValue.EvaluatedValue$factory(world.nonNullBool, true, 'true' , null);
21636 } 21079 }
21637 var testCode = null; 21080 var testCode = null;
21638 if ($notnull_bool(toType.get$library().get$isCore())) { 21081 if (toType.get$library().get$isCore()) {
21639 var typeofName = toType.get$typeofName(); 21082 var typeofName = toType.get$typeofName();
21640 if ($notnull_bool($ne(typeofName, null))) { 21083 if ($ne(typeofName, null)) {
21641 testCode = ("(typeof(" + this.code + ") " + ($notnull_bool(isTrue) ? '==' : '!=') + " '" + typeofName + "')"); 21084 testCode = ("(typeof(" + this.code + ") " + (isTrue ? '==' : '!=') + " '" + typeofName + "')");
21642 } 21085 }
21643 } 21086 }
21644 if ($notnull_bool(toType.get$isClass()) && !(toType instanceof ConcreteType)) { 21087 if (toType.get$isClass() && !(toType instanceof ConcreteType)) {
21645 toType.markUsed(); 21088 toType.markUsed();
21646 testCode = ('(' + this.code + ' instanceof ' + toType.get$jsname() + ')'); 21089 testCode = ('(' + this.code + ' instanceof ' + toType.get$jsname() + ')');
21647 if (!$notnull_bool(isTrue)) { 21090 if (!isTrue) {
21648 testCode = '!' + testCode; 21091 testCode = '!' + testCode;
21649 } 21092 }
21650 } 21093 }
21651 if (testCode == null) { 21094 if (testCode == null) {
21652 toType.isTested = true; 21095 toType.isTested = true;
21653 var temp = context.getTemp(this); 21096 var temp = context.getTemp(this);
21654 testCode = ('(' + context.assignTemp((temp && temp.is$Value()), this).code + ' &&'); 21097 testCode = ('(' + context.assignTemp(temp, this).code + ' &&');
21655 testCode = testCode + (' ' + temp.code + '.is\$' + toType.get$jsname() + ')' ); 21098 testCode = testCode + (' ' + temp.code + '.is\$' + toType.get$jsname() + ')' );
21656 if ($notnull_bool(isTrue)) { 21099 if (isTrue) {
21657 testCode = '!!' + testCode; 21100 testCode = '!!' + testCode;
21658 } 21101 }
21659 else { 21102 else {
21660 testCode = '!' + testCode; 21103 testCode = '!' + testCode;
21661 } 21104 }
21662 if ($ne(this, temp)) context.freeTemp((temp && temp.is$Value())); 21105 if ($ne(this, temp)) context.freeTemp(temp);
21663 } 21106 }
21664 return new Value(world.nonNullBool, testCode, span, true); 21107 return new Value(world.nonNullBool, testCode, span, true);
21665 } 21108 }
21666 Value.prototype.convertWarning = function(toType, node) { 21109 Value.prototype.convertWarning = function(toType, node) {
21667 world.warning(('type "' + this.type.name + '" is not assignable to "' + toType .name + '"'), node.span); 21110 world.warning(('type "' + this.type.name + '" is not assignable to "' + toType .name + '"'), node.span);
21668 } 21111 }
21669 Value.prototype.invokeNoSuchMethod = function(context, name, node, args) { 21112 Value.prototype.invokeNoSuchMethod = function(context, name, node, args) {
21670 var pos = ''; 21113 var pos = '';
21671 if (args != null) { 21114 if (args != null) {
21672 var argsCode = []; 21115 var argsCode = [];
21673 for (var i = 0; 21116 for (var i = 0;
21674 i < args.get$length(); i++) { 21117 i < args.get$length(); i++) {
21675 argsCode.add$1(args.values.$index(i).code); 21118 argsCode.add$1(args.values.$index(i).code);
21676 } 21119 }
21677 pos = Strings.join((argsCode && argsCode.is$List$String()), ", "); 21120 pos = Strings.join(argsCode, ", ");
21678 } 21121 }
21679 var noSuchArgs = [new Value(world.stringType, ('"' + name + '"'), node.span, t rue), new Value(world.listType, ('[' + pos + ']'), node.span, true)]; 21122 var noSuchArgs = [new Value(world.stringType, ('"' + name + '"'), node.span, t rue), new Value(world.listType, ('[' + pos + ']'), node.span, true)];
21680 return this._resolveMember(context, 'noSuchMethod', node, false).invoke$4(cont ext, node, this, new Arguments(null, noSuchArgs)); 21123 return this._resolveMember(context, 'noSuchMethod', node, false).invoke$4(cont ext, node, this, new Arguments(null, noSuchArgs));
21681 } 21124 }
21682 Value.prototype.invokeSpecial = function(name, args, returnType) { 21125 Value.prototype.invokeSpecial = function(name, args, returnType) {
21683 $assert(name.startsWith('\$'), "name.startsWith('\\$')", "value.dart", 455, 12 );
21684 $assert(!$notnull_bool(args.get$hasNames()), "!args.hasNames", "value.dart", 4 56, 12);
21685 var argsString = args.getCode(); 21126 var argsString = args.getCode();
21686 if (name == '\$index' || name == '\$setindex') { 21127 if (name == '\$index' || name == '\$setindex') {
21687 return new Value(returnType, ('' + this.code + '.' + name + '(' + argsString + ')'), this.span, true); 21128 return new Value(returnType, ('' + this.code + '.' + name + '(' + argsString + ')'), this.span, true);
21688 } 21129 }
21689 else { 21130 else {
21690 if (argsString.length > 0) argsString = (', ' + argsString + ''); 21131 if (argsString.length > 0) argsString = (', ' + argsString + '');
21691 world.gen.corejs.useOperator(name); 21132 world.gen.corejs.useOperator(name);
21692 return new Value(returnType, ('' + name + '(' + this.code + '' + argsString + ')'), this.span, true); 21133 return new Value(returnType, ('' + name + '(' + this.code + '' + argsString + ')'), this.span, true);
21693 } 21134 }
21694 } 21135 }
21695 Value.prototype.checkFirstClass$1 = function($0) { 21136 Value.prototype.checkFirstClass$1 = function($0) {
21696 return this.checkFirstClass(($0 && $0.is$SourceSpan())); 21137 return this.checkFirstClass($0);
21697 }; 21138 };
21698 Value.prototype.convertTo$3 = function($0, $1, $2) { 21139 Value.prototype.convertTo$3 = function($0, $1, $2) {
21699 return this.convertTo(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Type( )), ($2 && $2.is$lang_Node()), false); 21140 return this.convertTo($0, $1, $2, false);
21700 }; 21141 };
21701 Value.prototype.convertTo$4 = function($0, $1, $2, $3) { 21142 Value.prototype.convertTo$4 = function($0, $1, $2, $3) {
21702 return this.convertTo(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Type( )), ($2 && $2.is$lang_Node()), $assert_bool($3)); 21143 return this.convertTo($0, $1, $2, $3);
21703 }; 21144 };
21704 Value.prototype.get_$3 = function($0, $1, $2) { 21145 Value.prototype.get_$3 = function($0, $1, $2) {
21705 return this.get_(($0 && $0.is$MethodGenerator()), $assert_String($1), ($2 && $ 2.is$lang_Node())); 21146 return this.get_($0, $1, $2);
21706 }; 21147 };
21707 Value.prototype.instanceOf$3$isTrue$forceCheck = function($0, $1, $2, isTrue, fo rceCheck) { 21148 Value.prototype.instanceOf$3$isTrue$forceCheck = function($0, $1, $2, isTrue, fo rceCheck) {
21708 return this.instanceOf(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Type ()), ($2 && $2.is$SourceSpan()), $assert_bool(isTrue), $assert_bool(forceCheck)) ; 21149 return this.instanceOf($0, $1, $2, isTrue, forceCheck);
21709 }; 21150 };
21710 Value.prototype.instanceOf$4 = function($0, $1, $2, $3) { 21151 Value.prototype.instanceOf$4 = function($0, $1, $2, $3) {
21711 return this.instanceOf(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Type ()), ($2 && $2.is$SourceSpan()), $assert_bool($3), false); 21152 return this.instanceOf($0, $1, $2, $3, false);
21712 }; 21153 };
21713 Value.prototype.invoke$4 = function($0, $1, $2, $3) { 21154 Value.prototype.invoke$4 = function($0, $1, $2, $3) {
21714 return this.invoke(($0 && $0.is$MethodGenerator()), $assert_String($1), ($2 && $2.is$lang_Node()), ($3 && $3.is$Arguments()), false); 21155 return this.invoke($0, $1, $2, $3, false);
21715 }; 21156 };
21716 Value.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 21157 Value.prototype.invoke$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
21717 return this.invoke(($0 && $0.is$MethodGenerator()), $assert_String($1), ($2 && $2.is$lang_Node()), ($3 && $3.is$Arguments()), $assert_bool(isDynamic)); 21158 return this.invoke($0, $1, $2, $3, isDynamic);
21718 }; 21159 };
21719 Value.prototype.invoke$5 = function($0, $1, $2, $3, $4) { 21160 Value.prototype.invoke$5 = function($0, $1, $2, $3, $4) {
21720 return this.invoke(($0 && $0.is$MethodGenerator()), $assert_String($1), ($2 && $2.is$lang_Node()), ($3 && $3.is$Arguments()), $assert_bool($4)); 21161 return this.invoke($0, $1, $2, $3, $4);
21721 }; 21162 };
21722 Value.prototype.needsConversion$1 = function($0) { 21163 Value.prototype.needsConversion$1 = function($0) {
21723 return this.needsConversion(($0 && $0.is$lang_Type())); 21164 return this.needsConversion($0);
21724 }; 21165 };
21725 Value.prototype.set_$4 = function($0, $1, $2, $3) { 21166 Value.prototype.set_$4 = function($0, $1, $2, $3) {
21726 return this.set_(($0 && $0.is$MethodGenerator()), $assert_String($1), ($2 && $ 2.is$lang_Node()), ($3 && $3.is$Value()), false); 21167 return this.set_($0, $1, $2, $3, false);
21727 }; 21168 };
21728 // ********** Code for EvaluatedValue ************** 21169 // ********** Code for EvaluatedValue **************
21729 function EvaluatedValue() {} 21170 function EvaluatedValue() {}
21730 EvaluatedValue._internal$ctor = function(type, actualValue, canonicalCode, span, code) { 21171 EvaluatedValue._internal$ctor = function(type, actualValue, canonicalCode, span, code) {
21731 this.actualValue = actualValue; 21172 this.actualValue = actualValue;
21732 this.canonicalCode = canonicalCode; 21173 this.canonicalCode = canonicalCode;
21733 Value.call(this, type, code, span, false); 21174 Value.call(this, type, code, span, false);
21734 // Initializers done 21175 // Initializers done
21735 } 21176 }
21736 EvaluatedValue._internal$ctor.prototype = EvaluatedValue.prototype; 21177 EvaluatedValue._internal$ctor.prototype = EvaluatedValue.prototype;
21737 $inherits(EvaluatedValue, Value); 21178 $inherits(EvaluatedValue, Value);
21738 EvaluatedValue.EvaluatedValue$factory = function(type, actualValue, canonicalCod e, span) { 21179 EvaluatedValue.EvaluatedValue$factory = function(type, actualValue, canonicalCod e, span) {
21739 return new EvaluatedValue._internal$ctor(type, actualValue, canonicalCode, spa n, EvaluatedValue.codeWithComments(canonicalCode, span)); 21180 return new EvaluatedValue._internal$ctor(type, actualValue, canonicalCode, spa n, EvaluatedValue.codeWithComments(canonicalCode, span));
21740 } 21181 }
21741 EvaluatedValue.prototype.get$actualValue = function() { return this.actualValue; }; 21182 EvaluatedValue.prototype.get$actualValue = function() { return this.actualValue; };
21742 EvaluatedValue.prototype.set$actualValue = function(value) { return this.actualV alue = value; }; 21183 EvaluatedValue.prototype.set$actualValue = function(value) { return this.actualV alue = value; };
21743 EvaluatedValue.prototype.get$isConst = function() { 21184 EvaluatedValue.prototype.get$isConst = function() {
21744 return true; 21185 return true;
21745 } 21186 }
21746 EvaluatedValue.prototype.get$canonicalCode = function() { return this.canonicalC ode; }; 21187 EvaluatedValue.prototype.get$canonicalCode = function() { return this.canonicalC ode; };
21747 EvaluatedValue.prototype.set$canonicalCode = function(value) { return this.canon icalCode = value; }; 21188 EvaluatedValue.prototype.set$canonicalCode = function(value) { return this.canon icalCode = value; };
21748 EvaluatedValue.codeWithComments = function(canonicalCode, span) { 21189 EvaluatedValue.codeWithComments = function(canonicalCode, span) {
21749 return (span != null && span.get$text() != canonicalCode) ? ('' + canonicalCod e + '/*' + span.get$text() + '*/') : canonicalCode; 21190 return (span != null && span.get$text() != canonicalCode) ? ('' + canonicalCod e + '/*' + span.get$text() + '*/') : canonicalCode;
21750 } 21191 }
21751 // ********** Code for ConstListValue ************** 21192 // ********** Code for ConstListValue **************
21752 function ConstListValue() {} 21193 function ConstListValue() {}
21753 ConstListValue._internal$ctor = function(type, values, actualValue, canonicalCod e, span, code) { 21194 ConstListValue._internal$ctor = function(type, values, actualValue, canonicalCod e, span, code) {
21754 this.values = values; 21195 this.values = values;
21755 EvaluatedValue._internal$ctor.call(this, (type && type.is$lang_Type()), actual Value, canonicalCode, (span && span.is$SourceSpan()), $assert_String(code)); 21196 EvaluatedValue._internal$ctor.call(this, type, actualValue, canonicalCode, spa n, code);
21756 // Initializers done 21197 // Initializers done
21757 } 21198 }
21758 ConstListValue._internal$ctor.prototype = ConstListValue.prototype; 21199 ConstListValue._internal$ctor.prototype = ConstListValue.prototype;
21759 $inherits(ConstListValue, EvaluatedValue); 21200 $inherits(ConstListValue, EvaluatedValue);
21760 ConstListValue.ConstListValue$factory = function(type, values, actualValue, cano nicalCode, span) { 21201 ConstListValue.ConstListValue$factory = function(type, values, actualValue, cano nicalCode, span) {
21761 return new ConstListValue._internal$ctor(type, values, actualValue, canonicalC ode, span, EvaluatedValue.codeWithComments(canonicalCode, span)); 21202 return new ConstListValue._internal$ctor(type, values, actualValue, canonicalC ode, span, EvaluatedValue.codeWithComments(canonicalCode, span));
21762 } 21203 }
21763 // ********** Code for ConstMapValue ************** 21204 // ********** Code for ConstMapValue **************
21764 function ConstMapValue() {} 21205 function ConstMapValue() {}
21765 ConstMapValue._internal$ctor = function(type, values, actualValue, canonicalCode , span, code) { 21206 ConstMapValue._internal$ctor = function(type, values, actualValue, canonicalCode , span, code) {
21766 this.values = values; 21207 this.values = values;
21767 EvaluatedValue._internal$ctor.call(this, (type && type.is$lang_Type()), actual Value, canonicalCode, (span && span.is$SourceSpan()), $assert_String(code)); 21208 EvaluatedValue._internal$ctor.call(this, type, actualValue, canonicalCode, spa n, code);
21768 // Initializers done 21209 // Initializers done
21769 } 21210 }
21770 ConstMapValue._internal$ctor.prototype = ConstMapValue.prototype; 21211 ConstMapValue._internal$ctor.prototype = ConstMapValue.prototype;
21771 $inherits(ConstMapValue, EvaluatedValue); 21212 $inherits(ConstMapValue, EvaluatedValue);
21772 ConstMapValue.ConstMapValue$factory = function(type, keyValuePairs, actualValue, canonicalCode, span) { 21213 ConstMapValue.ConstMapValue$factory = function(type, keyValuePairs, actualValue, canonicalCode, span) {
21773 var values = new HashMapImplementation(); 21214 var values = new HashMapImplementation();
21774 for (var i = 0; 21215 for (var i = 0;
21775 i < keyValuePairs.length; i += 2) { 21216 i < keyValuePairs.length; i += 2) {
21776 values.$setindex(keyValuePairs.$index(i).get$actualValue(), keyValuePairs.$i ndex(i + 1)); 21217 values.$setindex(keyValuePairs.$index(i).get$actualValue(), keyValuePairs.$i ndex(i + 1));
21777 } 21218 }
21778 return new ConstMapValue._internal$ctor(type, values, actualValue, canonicalCo de, span, EvaluatedValue.codeWithComments(canonicalCode, span)); 21219 return new ConstMapValue._internal$ctor(type, values, actualValue, canonicalCo de, span, EvaluatedValue.codeWithComments(canonicalCode, span));
21779 } 21220 }
21780 // ********** Code for ConstObjectValue ************** 21221 // ********** Code for ConstObjectValue **************
21781 function ConstObjectValue() {} 21222 function ConstObjectValue() {}
21782 ConstObjectValue._internal$ctor = function(type, fields, actualValue, canonicalC ode, span, code) { 21223 ConstObjectValue._internal$ctor = function(type, fields, actualValue, canonicalC ode, span, code) {
21783 this.fields = fields; 21224 this.fields = fields;
21784 EvaluatedValue._internal$ctor.call(this, (type && type.is$lang_Type()), actual Value, canonicalCode, (span && span.is$SourceSpan()), $assert_String(code)); 21225 EvaluatedValue._internal$ctor.call(this, type, actualValue, canonicalCode, spa n, code);
21785 // Initializers done 21226 // Initializers done
21786 } 21227 }
21787 ConstObjectValue._internal$ctor.prototype = ConstObjectValue.prototype; 21228 ConstObjectValue._internal$ctor.prototype = ConstObjectValue.prototype;
21788 $inherits(ConstObjectValue, EvaluatedValue); 21229 $inherits(ConstObjectValue, EvaluatedValue);
21789 ConstObjectValue.ConstObjectValue$factory = function(type, fields, canonicalCode , span) { 21230 ConstObjectValue.ConstObjectValue$factory = function(type, fields, canonicalCode , span) {
21790 var fieldValues = []; 21231 var fieldValues = [];
21791 var $list = fields.getKeys(); 21232 var $list = fields.getKeys();
21792 for (var $i = fields.getKeys().iterator$0(); $i.hasNext$0(); ) { 21233 for (var $i = fields.getKeys().iterator$0(); $i.hasNext$0(); ) {
21793 var f = $i.next$0(); 21234 var f = $i.next$0();
21794 fieldValues.add(('' + f + ' = ' + fields.$index(f).get$actualValue() + '')); 21235 fieldValues.add(('' + f + ' = ' + fields.$index(f).get$actualValue() + ''));
21795 } 21236 }
21796 fieldValues.sort((function (a, b) { 21237 fieldValues.sort((function (a, b) {
21797 return a.compareTo$1(b); 21238 return a.compareTo$1(b);
21798 }) 21239 })
21799 ); 21240 );
21800 var actualValue = ('const ' + type.get$jsname() + ' [') + Strings.join(fieldVa lues, ',') + ']'; 21241 var actualValue = ('const ' + type.get$jsname() + ' [') + Strings.join(fieldVa lues, ',') + ']';
21801 return new ConstObjectValue._internal$ctor(type, fields, actualValue, canonica lCode, span, EvaluatedValue.codeWithComments(canonicalCode, span)); 21242 return new ConstObjectValue._internal$ctor(type, fields, actualValue, canonica lCode, span, EvaluatedValue.codeWithComments(canonicalCode, span));
21802 } 21243 }
21803 // ********** Code for GlobalValue ************** 21244 // ********** Code for GlobalValue **************
21804 function GlobalValue(type, code, isConst, field, name, exp, canonicalCode, span, dependencies) { 21245 function GlobalValue(type, code, isConst, field, name, exp, canonicalCode, span, dependencies) {
21805 this.field = field; 21246 this.field = field;
21806 this.name = name; 21247 this.name = name;
21807 this.exp = exp; 21248 this.exp = exp;
21808 this.canonicalCode = canonicalCode; 21249 this.canonicalCode = canonicalCode;
21809 this.dependencies = dependencies; 21250 this.dependencies = dependencies;
21810 Value.call(this, type, code, span, !$notnull_bool(isConst)); 21251 Value.call(this, type, code, span, !isConst);
21811 // Initializers done 21252 // Initializers done
21812 } 21253 }
21813 $inherits(GlobalValue, Value); 21254 $inherits(GlobalValue, Value);
21814 GlobalValue.prototype.is$GlobalValue = function(){return this;};
21815 GlobalValue.prototype.is$Comparable = function(){return this;};
21816 GlobalValue.GlobalValue$fromStatic$factory = function(field, exp, dependencies) { 21255 GlobalValue.GlobalValue$fromStatic$factory = function(field, exp, dependencies) {
21817 var code = ($notnull_bool(exp.get$isConst()) ? exp.get$canonicalCode() : exp.c ode); 21256 var code = (exp.get$isConst() ? exp.get$canonicalCode() : exp.code);
21818 var codeWithComment = ('' + code + '/*' + field.declaringType.name + '.' + fie ld.get$name() + '*/'); 21257 var codeWithComment = ('' + code + '/*' + field.declaringType.name + '.' + fie ld.get$name() + '*/');
21819 return new GlobalValue(exp.type, $assert_String(codeWithComment), field.isFina l, field, null, exp, code, exp.span, dependencies.filter$1((function (d) { 21258 return new GlobalValue(exp.type, codeWithComment, field.isFinal, field, null, exp, code, exp.span, dependencies.filter$1((function (d) {
21820 return (d instanceof GlobalValue); 21259 return (d instanceof GlobalValue);
21821 }) 21260 })
21822 )); 21261 ));
21823 } 21262 }
21824 GlobalValue.GlobalValue$fromConst$factory = function(uniqueId, exp, dependencies ) { 21263 GlobalValue.GlobalValue$fromConst$factory = function(uniqueId, exp, dependencies ) {
21825 var name = ("const\$" + uniqueId + ""); 21264 var name = ("const\$" + uniqueId + "");
21826 var codeWithComment = ("" + name + "/*" + exp.span.get$text() + "*/"); 21265 var codeWithComment = ("" + name + "/*" + exp.span.get$text() + "*/");
21827 return new GlobalValue(exp.type, $assert_String(codeWithComment), true, null, name, exp, name, exp.span, dependencies.filter$1((function (d) { 21266 return new GlobalValue(exp.type, codeWithComment, true, null, name, exp, name, exp.span, dependencies.filter$1((function (d) {
21828 return (d instanceof GlobalValue); 21267 return (d instanceof GlobalValue);
21829 }) 21268 })
21830 )); 21269 ));
21831 } 21270 }
21832 GlobalValue.prototype.get$name = function() { return this.name; }; 21271 GlobalValue.prototype.get$name = function() { return this.name; };
21833 GlobalValue.prototype.set$name = function(value) { return this.name = value; }; 21272 GlobalValue.prototype.set$name = function(value) { return this.name = value; };
21834 GlobalValue.prototype.get$canonicalCode = function() { return this.canonicalCode ; }; 21273 GlobalValue.prototype.get$canonicalCode = function() { return this.canonicalCode ; };
21835 GlobalValue.prototype.set$canonicalCode = function(value) { return this.canonica lCode = value; }; 21274 GlobalValue.prototype.set$canonicalCode = function(value) { return this.canonica lCode = value; };
21836 GlobalValue.prototype.get$isConst = function() { 21275 GlobalValue.prototype.get$isConst = function() {
21837 return $notnull_bool(this.exp.get$isConst()) && (this.field == null || $notnul l_bool(this.field.isFinal)); 21276 return this.exp.get$isConst() && (this.field == null || this.field.isFinal);
21838 } 21277 }
21839 GlobalValue.prototype.get$actualValue = function() { 21278 GlobalValue.prototype.get$actualValue = function() {
21840 return this.exp.get$dynamic().get$actualValue(); 21279 return this.exp.get$dynamic().get$actualValue();
21841 } 21280 }
21842 GlobalValue.prototype.compareTo = function(other) { 21281 GlobalValue.prototype.compareTo = function(other) {
21843 if ($eq(other, this)) { 21282 if ($eq(other, this)) {
21844 return 0; 21283 return 0;
21845 } 21284 }
21846 else if (this.dependencies.indexOf(other, 0) >= 0) { 21285 else if (this.dependencies.indexOf(other, 0) >= 0) {
21847 return 1; 21286 return 1;
(...skipping 14 matching lines...) Expand all
21862 return -1; 21301 return -1;
21863 } 21302 }
21864 else if (this.name != null) { 21303 else if (this.name != null) {
21865 return this.name.compareTo(other.name); 21304 return this.name.compareTo(other.name);
21866 } 21305 }
21867 else { 21306 else {
21868 return this.field.name.compareTo(other.field.name); 21307 return this.field.name.compareTo(other.field.name);
21869 } 21308 }
21870 } 21309 }
21871 GlobalValue.prototype.compareTo$1 = function($0) { 21310 GlobalValue.prototype.compareTo$1 = function($0) {
21872 return this.compareTo(($0 && $0.is$GlobalValue())); 21311 return this.compareTo($0);
21873 }; 21312 };
21874 // ********** Code for BareValue ************** 21313 // ********** Code for BareValue **************
21875 function BareValue(home, outermost, span) { 21314 function BareValue(home, outermost, span) {
21876 this.home = home; 21315 this.home = home;
21877 Value.call(this, outermost.method.declaringType, null, span, false); 21316 Value.call(this, outermost.method.declaringType, null, span, false);
21878 // Initializers done 21317 // Initializers done
21879 this.isType = outermost.get$isStatic(); 21318 this.isType = outermost.get$isStatic();
21880 } 21319 }
21881 $inherits(BareValue, Value); 21320 $inherits(BareValue, Value);
21882 BareValue.prototype._tryResolveMember = function(context, name) { 21321 BareValue.prototype._tryResolveMember = function(context, name) {
21883 $assert($eq(context, this.home), "context == home", "value.dart", 660, 12);
21884 var member = this.type.resolveMember(name); 21322 var member = this.type.resolveMember(name);
21885 if ($notnull_bool($ne(member, null))) { 21323 if ($ne(member, null)) {
21886 $assert(this.code == null, "code == null", "value.dart", 665, 14); 21324 if (this.isType) {
21887 if ($notnull_bool(this.isType)) {
21888 this.code = this.type.get$jsname(); 21325 this.code = this.type.get$jsname();
21889 } 21326 }
21890 else { 21327 else {
21891 this.code = this.home._makeThisCode(); 21328 this.code = this.home._makeThisCode();
21892 } 21329 }
21893 return member; 21330 return member;
21894 } 21331 }
21895 member = this.home.get$library().lookup(name, this.span); 21332 member = this.home.get$library().lookup(name, this.span);
21896 if ($notnull_bool($ne(member, null))) { 21333 if ($ne(member, null)) {
21897 return member; 21334 return member;
21898 } 21335 }
21899 return null; 21336 return null;
21900 } 21337 }
21901 // ********** Code for CompilerException ************** 21338 // ********** Code for CompilerException **************
21902 function CompilerException(_message, _location) { 21339 function CompilerException(_message, _location) {
21903 this._lang_message = _message; 21340 this._lang_message = _message;
21904 this._location = _location; 21341 this._location = _location;
21905 // Initializers done 21342 // Initializers done
21906 } 21343 }
(...skipping 17 matching lines...) Expand all
21924 this.seenFatal = false 21361 this.seenFatal = false
21925 this.files = files; 21362 this.files = files;
21926 this.libraries = $map([]); 21363 this.libraries = $map([]);
21927 this._todo = []; 21364 this._todo = [];
21928 this._members = $map([]); 21365 this._members = $map([]);
21929 this._topNames = $map([]); 21366 this._topNames = $map([]);
21930 this.reader = new LibraryReader(); 21367 this.reader = new LibraryReader();
21931 // Initializers done 21368 // Initializers done
21932 } 21369 }
21933 World.prototype.get$coreimpl = function() { 21370 World.prototype.get$coreimpl = function() {
21934 var $0; 21371 return this.libraries.$index('dart:coreimpl');
21935 return (($0 = this.libraries.$index('dart:coreimpl')) && $0.is$Library());
21936 } 21372 }
21937 World.prototype.get$dom = function() { 21373 World.prototype.get$dom = function() {
21938 var $0; 21374 return this.libraries.$index('dart:dom');
21939 return (($0 = this.libraries.$index('dart:dom')) && $0.is$Library());
21940 } 21375 }
21941 World.prototype.get$functionType = function() { return this.functionType; }; 21376 World.prototype.get$functionType = function() { return this.functionType; };
21942 World.prototype.set$functionType = function(value) { return this.functionType = value; }; 21377 World.prototype.set$functionType = function(value) { return this.functionType = value; };
21943 World.prototype.init = function() { 21378 World.prototype.init = function() {
21944 var $0;
21945 this.corelib = new Library(this.readFile('dart:core')); 21379 this.corelib = new Library(this.readFile('dart:core'));
21946 this.libraries.$setindex('dart:core', this.corelib); 21380 this.libraries.$setindex('dart:core', this.corelib);
21947 this._todo.add(this.corelib); 21381 this._todo.add(this.corelib);
21948 this.voidType = (($0 = this._addToCoreLib('void', false)) && $0.is$DefinedType ()); 21382 this.voidType = this._addToCoreLib('void', false);
21949 this.dynamicType = (($0 = this._addToCoreLib('Dynamic', false)) && $0.is$Defin edType()); 21383 this.dynamicType = this._addToCoreLib('Dynamic', false);
21950 this.varType = this.dynamicType; 21384 this.varType = this.dynamicType;
21951 this.objectType = (($0 = this._addToCoreLib('Object', true)) && $0.is$DefinedT ype()); 21385 this.objectType = this._addToCoreLib('Object', true);
21952 this.numType = (($0 = this._addToCoreLib('num', false)) && $0.is$DefinedType() ); 21386 this.numType = this._addToCoreLib('num', false);
21953 this.intType = (($0 = this._addToCoreLib('int', false)) && $0.is$DefinedType() ); 21387 this.intType = this._addToCoreLib('int', false);
21954 this.doubleType = (($0 = this._addToCoreLib('double', false)) && $0.is$Defined Type()); 21388 this.doubleType = this._addToCoreLib('double', false);
21955 this.boolType = (($0 = this._addToCoreLib('bool', false)) && $0.is$DefinedType ()); 21389 this.boolType = this._addToCoreLib('bool', false);
21956 this.stringType = (($0 = this._addToCoreLib('String', false)) && $0.is$Defined Type()); 21390 this.stringType = this._addToCoreLib('String', false);
21957 this.listType = (($0 = this._addToCoreLib('List', false)) && $0.is$DefinedType ()); 21391 this.listType = this._addToCoreLib('List', false);
21958 this.mapType = (($0 = this._addToCoreLib('Map', false)) && $0.is$DefinedType() ); 21392 this.mapType = this._addToCoreLib('Map', false);
21959 this.functionType = (($0 = this._addToCoreLib('Function', false)) && $0.is$Def inedType()); 21393 this.functionType = this._addToCoreLib('Function', false);
21960 this.nonNullBool = new NonNullableType(this.boolType); 21394 this.nonNullBool = new NonNullableType(this.boolType);
21961 } 21395 }
21962 World.prototype._addMember = function(member) { 21396 World.prototype._addMember = function(member) {
21963 $assert(!$notnull_bool(member.get$isPrivate()), "!member.isPrivate", "world.da rt", 145, 12); 21397 if (member.get$isStatic()) {
21964 if ($notnull_bool(member.get$isStatic())) { 21398 if (member.declaringType.get$isTop()) {
21965 if ($notnull_bool(member.declaringType.get$isTop())) {
21966 this._addTopName(member); 21399 this._addTopName(member);
21967 } 21400 }
21968 return; 21401 return;
21969 } 21402 }
21970 var mset = this._members.$index(member.name); 21403 var mset = this._members.$index(member.name);
21971 if ($notnull_bool(mset == null)) { 21404 if (mset == null) {
21972 mset = new MemberSet(member, true); 21405 mset = new MemberSet(member, true);
21973 this._members.$setindex(mset.get$name(), mset); 21406 this._members.$setindex(mset.get$name(), mset);
21974 } 21407 }
21975 else { 21408 else {
21976 mset.get$members().add$1(member); 21409 mset.get$members().add$1(member);
21977 } 21410 }
21978 } 21411 }
21979 World.prototype._addTopName = function(named) { 21412 World.prototype._addTopName = function(named) {
21980 var existing = this._topNames.$index(named.get$name()); 21413 var existing = this._topNames.$index(named.get$name());
21981 if ($notnull_bool($ne(existing, null))) { 21414 if ($ne(existing, null)) {
21982 this.info(('mangling matching top level name "' + named.get$name() + '" in ' ) + ('both "' + named.get$library().name + '" and "' + existing.get$library().na me + '"')); 21415 this.info(('mangling matching top level name "' + named.get$name() + '" in ' ) + ('both "' + named.get$library().name + '" and "' + existing.get$library().na me + '"'));
21983 if ($notnull_bool(named.get$isNative())) { 21416 if (named.get$isNative()) {
21984 if ($notnull_bool(existing.get$isNative())) { 21417 if (existing.get$isNative()) {
21985 world.internalError(('conflicting native names "' + named.get$name() + ' " ') + ('(already defined in ' + existing.get$span().get$locationText() + ')'), named.get$span()); 21418 world.internalError(('conflicting native names "' + named.get$name() + ' " ') + ('(already defined in ' + existing.get$span().get$locationText() + ')'), named.get$span());
21986 } 21419 }
21987 else { 21420 else {
21988 this._topNames.$setindex(named.get$name(), named); 21421 this._topNames.$setindex(named.get$name(), named);
21989 this._addJavascriptTopName((existing && existing.is$Named())); 21422 this._addJavascriptTopName(existing);
21990 } 21423 }
21991 } 21424 }
21992 else if ($notnull_bool(named.get$library().get$isCore())) { 21425 else if (named.get$library().get$isCore()) {
21993 if ($notnull_bool(existing.get$library().get$isCore())) { 21426 if (existing.get$library().get$isCore()) {
21994 world.internalError(('conflicting top-level names in core "' + named.get $name() + '" ') + ('(previously defined in ' + existing.get$span().get$locationT ext() + ')'), named.get$span()); 21427 world.internalError(('conflicting top-level names in core "' + named.get $name() + '" ') + ('(previously defined in ' + existing.get$span().get$locationT ext() + ')'), named.get$span());
21995 } 21428 }
21996 else { 21429 else {
21997 this._topNames.$setindex(named.get$name(), named); 21430 this._topNames.$setindex(named.get$name(), named);
21998 this._addJavascriptTopName((existing && existing.is$Named())); 21431 this._addJavascriptTopName(existing);
21999 } 21432 }
22000 } 21433 }
22001 else { 21434 else {
22002 this._addJavascriptTopName(named); 21435 this._addJavascriptTopName(named);
22003 } 21436 }
22004 } 21437 }
22005 else { 21438 else {
22006 this._topNames.$setindex(named.get$name(), named); 21439 this._topNames.$setindex(named.get$name(), named);
22007 } 21440 }
22008 } 21441 }
22009 World.prototype._addJavascriptTopName = function(named) { 21442 World.prototype._addJavascriptTopName = function(named) {
22010 named.set$jsname(('' + named.get$library().get$jsname() + '_' + named.get$name () + '')); 21443 named.set$jsname(('' + named.get$library().get$jsname() + '_' + named.get$name () + ''));
22011 var existing = this._topNames.$index(named.get$jsname()); 21444 var existing = this._topNames.$index(named.get$jsname());
22012 if ($notnull_bool($ne(existing, null)) && $notnull_bool($ne(existing, named))) { 21445 if ($ne(existing, null) && $ne(existing, named)) {
22013 world.internalError(('name mangling failed for "' + named.get$jsname() + '" ') + ('("' + named.get$jsname() + '" defined also in ' + existing.get$span().get $locationText() + ')'), named.get$span()); 21446 world.internalError(('name mangling failed for "' + named.get$jsname() + '" ') + ('("' + named.get$jsname() + '" defined also in ' + existing.get$span().get $locationText() + ')'), named.get$span());
22014 } 21447 }
22015 this._topNames.$setindex(named.get$jsname(), named); 21448 this._topNames.$setindex(named.get$jsname(), named);
22016 } 21449 }
22017 World.prototype._addType = function(type) { 21450 World.prototype._addType = function(type) {
22018 if (!$notnull_bool(type.get$isTop())) this._addTopName(type); 21451 if (!type.get$isTop()) this._addTopName(type);
22019 } 21452 }
22020 World.prototype._addToCoreLib = function(name, isClass) { 21453 World.prototype._addToCoreLib = function(name, isClass) {
22021 var ret = new DefinedType(name, this.corelib, null, isClass); 21454 var ret = new DefinedType(name, this.corelib, null, isClass);
22022 this.corelib.types.$setindex(name, ret); 21455 this.corelib.types.$setindex(name, ret);
22023 return ret; 21456 return ret;
22024 } 21457 }
22025 World.prototype.toJsIdentifier = function(name) { 21458 World.prototype.toJsIdentifier = function(name) {
22026 if (this._jsKeywords == null) { 21459 if (this._jsKeywords == null) {
22027 this._jsKeywords = HashSetImplementation.HashSetImplementation$from$factory( ['break', 'case', 'catch', 'continue', 'debugger', 'default', 'delete', 'do', 'e lse', 'finally', 'for', 'function', 'if', 'in', 'instanceof', 'new', 'return', ' switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'clas s', 'enum', 'export', 'extends', 'import', 'super', 'implements', 'interface', ' let', 'package', 'private', 'protected', 'public', 'static', 'yield', 'native']) ; 21460 this._jsKeywords = HashSetImplementation.HashSetImplementation$from$factory( ['break', 'case', 'catch', 'continue', 'debugger', 'default', 'delete', 'do', 'e lse', 'finally', 'for', 'function', 'if', 'in', 'instanceof', 'new', 'return', ' switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'clas s', 'enum', 'export', 'extends', 'import', 'super', 'implements', 'interface', ' let', 'package', 'private', 'protected', 'public', 'static', 'yield', 'native']) ;
22028 } 21461 }
22029 if (this._jsKeywords.contains(name)) { 21462 if (this._jsKeywords.contains(name)) {
22030 return name + '_'; 21463 return name + '_';
22031 } 21464 }
22032 else { 21465 else {
22033 return name; 21466 return name;
22034 } 21467 }
22035 } 21468 }
22036 World.prototype.compile = function() { 21469 World.prototype.compile = function() {
22037 if (options.dartScript == null) { 21470 if (options.dartScript == null) {
22038 this.fatal('no script provided to compile'); 21471 this.fatal('no script provided to compile');
22039 return false; 21472 return false;
22040 } 21473 }
22041 try { 21474 try {
22042 this.info(('compiling ' + options.dartScript + ' with corelib ' + this.corel ib + '')); 21475 this.info(('compiling ' + options.dartScript + ' with corelib ' + this.corel ib + ''));
22043 if (!$notnull_bool(this.runLeg())) this.runCompilationPhases(); 21476 if (!this.runLeg()) this.runCompilationPhases();
22044 } catch (exc) { 21477 } catch (exc) {
22045 exc = $toDartException(exc); 21478 exc = $toDartException(exc);
22046 if ($notnull_bool(this.get$hasErrors()) && !$notnull_bool(options.throwOnErr ors)) { 21479 if (this.get$hasErrors() && !options.throwOnErrors) {
22047 } 21480 }
22048 else { 21481 else {
22049 throw exc; 21482 throw exc;
22050 } 21483 }
22051 } 21484 }
22052 this.printStatus(); 21485 this.printStatus();
22053 return !$notnull_bool(this.get$hasErrors()); 21486 return !this.get$hasErrors();
22054 } 21487 }
22055 World.prototype.runLeg = function() { 21488 World.prototype.runLeg = function() {
22056 var $this = this; // closure support 21489 var $this = this; // closure support
22057 if (!$notnull_bool(options.enableLeg)) return false; 21490 if (!options.enableLeg) return false;
22058 var res = $assert_bool(this.withTiming('try leg compile', (function () { 21491 var res = this.withTiming('try leg compile', (function () {
22059 return compile($this); 21492 return compile($this);
22060 }) 21493 })
22061 )); 21494 );
22062 if (!$notnull_bool(res) && $notnull_bool(options.legOnly)) { 21495 if (!res && options.legOnly) {
22063 this.fatal(("Leg could not compile " + options.dartScript + "")); 21496 this.fatal(("Leg could not compile " + options.dartScript + ""));
22064 return true; 21497 return true;
22065 } 21498 }
22066 return res; 21499 return res;
22067 } 21500 }
22068 World.prototype.runCompilationPhases = function() { 21501 World.prototype.runCompilationPhases = function() {
22069 var $this = this; // closure support 21502 var $this = this; // closure support
22070 var lib = this.withTiming('first pass', (function () { 21503 var lib = this.withTiming('first pass', (function () {
22071 return $this.processScript(options.dartScript); 21504 return $this.processScript(options.dartScript);
22072 }) 21505 })
22073 ); 21506 );
22074 this.withTiming('resolve top level', (function () { 21507 this.withTiming('resolve top level', (function () {
22075 $this.resolveAll(); 21508 $this.resolveAll();
22076 }) 21509 })
22077 ); 21510 );
22078 this.withTiming('generate code', (function () { 21511 this.withTiming('generate code', (function () {
22079 var mainMembers = lib.topType.resolveMember('main'); 21512 var mainMembers = lib.topType.resolveMember('main');
22080 var main = null; 21513 var main = null;
22081 if ($notnull_bool(mainMembers == null) || mainMembers.get$members().length = = 0) { 21514 if (mainMembers == null || mainMembers.get$members().length == 0) {
22082 $this.fatal('no main method specified'); 21515 $this.fatal('no main method specified');
22083 } 21516 }
22084 else if (mainMembers.get$members().length > 1) { 21517 else if (mainMembers.get$members().length > 1) {
22085 var $list = mainMembers.get$members(); 21518 var $list = mainMembers.get$members();
22086 for (var $i = mainMembers.get$members().iterator$0(); $i.hasNext$0(); ) { 21519 for (var $i = mainMembers.get$members().iterator$0(); $i.hasNext$0(); ) {
22087 var m = $i.next$0(); 21520 var m = $i.next$0();
22088 main = m; 21521 main = m;
22089 $this.error('more than one main member (using last?)', main.get$span()); 21522 $this.error('more than one main member (using last?)', main.get$span());
22090 } 21523 }
22091 } 21524 }
22092 else { 21525 else {
22093 main = mainMembers.get$members().$index(0); 21526 main = mainMembers.get$members().$index(0);
22094 } 21527 }
22095 var codeWriter = new CodeWriter(); 21528 var codeWriter = new CodeWriter();
22096 $this.gen = new WorldGenerator(main, codeWriter); 21529 $this.gen = new WorldGenerator(main, codeWriter);
22097 $this.gen.run(); 21530 $this.gen.run();
22098 $this.jsBytesWritten = codeWriter.get$text().length; 21531 $this.jsBytesWritten = codeWriter.get$text().length;
22099 }) 21532 })
22100 ); 21533 );
22101 } 21534 }
22102 World.prototype.getGeneratedCode = function() { 21535 World.prototype.getGeneratedCode = function() {
22103 if (this.legCode != null) { 21536 if (this.legCode != null) {
22104 $assert(options.enableLeg, "options.enableLeg", "world.dart", 310, 14);
22105 return this.legCode; 21537 return this.legCode;
22106 } 21538 }
22107 else { 21539 else {
22108 return this.gen.writer.get$text(); 21540 return this.gen.writer.get$text();
22109 } 21541 }
22110 } 21542 }
22111 World.prototype.readFile = function(filename) { 21543 World.prototype.readFile = function(filename) {
22112 try { 21544 try {
22113 var sourceFile = this.reader.readFile(filename); 21545 var sourceFile = this.reader.readFile(filename);
22114 this.dartBytesRead += sourceFile.get$text().length; 21546 this.dartBytesRead += sourceFile.get$text().length;
22115 return sourceFile; 21547 return sourceFile;
22116 } catch (e) { 21548 } catch (e) {
22117 e = $toDartException(e); 21549 e = $toDartException(e);
22118 this.warning(('Error reading file: ' + filename + '')); 21550 this.warning(('Error reading file: ' + filename + ''));
22119 return new SourceFile(filename, ''); 21551 return new SourceFile(filename, '');
22120 } 21552 }
22121 } 21553 }
22122 World.prototype.getOrAddLibrary = function(filename) { 21554 World.prototype.getOrAddLibrary = function(filename) {
22123 var $0; 21555 var library = this.libraries.$index(filename);
22124 var library = (($0 = this.libraries.$index(filename)) && $0.is$Library());
22125 if (library == null) { 21556 if (library == null) {
22126 library = new Library(this.readFile(filename)); 21557 library = new Library(this.readFile(filename));
22127 this.info(('read library ' + filename + '')); 21558 this.info(('read library ' + filename + ''));
22128 if (!$notnull_bool(library.get$isCore()) && !library.imports.some((function (li) { 21559 if (!library.get$isCore() && !library.imports.some((function (li) {
22129 return li.get$library().get$isCore(); 21560 return li.get$library().get$isCore();
22130 }) 21561 })
22131 )) { 21562 )) {
22132 library.imports.add(new LibraryImport(this.corelib)); 21563 library.imports.add(new LibraryImport(this.corelib));
22133 } 21564 }
22134 this.libraries.$setindex(filename, library); 21565 this.libraries.$setindex(filename, library);
22135 this._todo.add(library); 21566 this._todo.add(library);
22136 } 21567 }
22137 return library; 21568 return library;
22138 } 21569 }
(...skipping 24 matching lines...) Expand all
22163 if (span != null) { 21594 if (span != null) {
22164 text = span.toMessageString(message); 21595 text = span.toMessageString(message);
22165 } 21596 }
22166 print(text); 21597 print(text);
22167 if (span1 != null) { 21598 if (span1 != null) {
22168 print(span1.toMessageString(message)); 21599 print(span1.toMessageString(message));
22169 } 21600 }
22170 if (span2 != null) { 21601 if (span2 != null) {
22171 print(span2.toMessageString(message)); 21602 print(span2.toMessageString(message));
22172 } 21603 }
22173 if ($notnull_bool(throwing)) { 21604 if (throwing) {
22174 $throw(new CompilerException(message, span)); 21605 $throw(new CompilerException(message, span));
22175 } 21606 }
22176 } 21607 }
22177 World.prototype.error = function(message, span, span1, span2) { 21608 World.prototype.error = function(message, span, span1, span2) {
22178 this.errors++; 21609 this.errors++;
22179 this._message(('error: ' + message + ''), span, span1, span2, options.throwOnE rrors); 21610 this._message(('error: ' + message + ''), span, span1, span2, options.throwOnE rrors);
22180 } 21611 }
22181 World.prototype.warning = function(message, span, span1, span2) { 21612 World.prototype.warning = function(message, span, span1, span2) {
22182 this.warnings++; 21613 this.warnings++;
22183 if ($notnull_bool(options.showWarnings)) { 21614 if (options.showWarnings) {
22184 this._message(('warning: ' + message + ''), span, span1, span2, options.thro wOnWarnings); 21615 this._message(('warning: ' + message + ''), span, span1, span2, options.thro wOnWarnings);
22185 } 21616 }
22186 } 21617 }
22187 World.prototype.fatal = function(message, span, span1, span2) { 21618 World.prototype.fatal = function(message, span, span1, span2) {
22188 this.errors++; 21619 this.errors++;
22189 this.seenFatal = true; 21620 this.seenFatal = true;
22190 this._message(('fatal: ' + message + ''), span, span1, span2, $notnull_bool(op tions.throwOnFatal) || $notnull_bool(options.throwOnErrors)); 21621 this._message(('fatal: ' + message + ''), span, span1, span2, options.throwOnF atal || options.throwOnErrors);
22191 } 21622 }
22192 World.prototype.internalError = function(message, span, span1, span2) { 21623 World.prototype.internalError = function(message, span, span1, span2) {
22193 this._message(('We are sorry, but... ' + message + ''), span, span1, span2, tr ue); 21624 this._message(('We are sorry, but... ' + message + ''), span, span1, span2, tr ue);
22194 } 21625 }
22195 World.prototype.info = function(message, span, span1, span2) { 21626 World.prototype.info = function(message, span, span1, span2) {
22196 if ($notnull_bool(options.showInfo)) { 21627 if (options.showInfo) {
22197 this._message(('info: ' + message + ''), span, span1, span2, false); 21628 this._message(('info: ' + message + ''), span, span1, span2, false);
22198 } 21629 }
22199 } 21630 }
22200 World.prototype.get$hasErrors = function() { 21631 World.prototype.get$hasErrors = function() {
22201 return this.errors > 0; 21632 return this.errors > 0;
22202 } 21633 }
22203 World.prototype.printStatus = function() { 21634 World.prototype.printStatus = function() {
22204 this.info(('compiled ' + this.dartBytesRead + ' bytes Dart -> ' + this.jsBytes Written + ' bytes JS')); 21635 this.info(('compiled ' + this.dartBytesRead + ' bytes Dart -> ' + this.jsBytes Written + ' bytes JS'));
22205 if ($notnull_bool(this.get$hasErrors())) { 21636 if (this.get$hasErrors()) {
22206 print(('compilation failed with ' + this.errors + ' errors')); 21637 print(('compilation failed with ' + this.errors + ' errors'));
22207 } 21638 }
22208 else { 21639 else {
22209 if (this.warnings > 0) { 21640 if (this.warnings > 0) {
22210 this.info(('compilation completed successfully with ' + this.warnings + ' warnings')); 21641 this.info(('compilation completed successfully with ' + this.warnings + ' warnings'));
22211 } 21642 }
22212 else { 21643 else {
22213 this.info('compilation completed sucessfully'); 21644 this.info('compilation completed sucessfully');
22214 } 21645 }
22215 } 21646 }
22216 } 21647 }
22217 World.prototype.withTiming = function(name, f) { 21648 World.prototype.withTiming = function(name, f) {
22218 var sw = new StopwatchImplementation(); 21649 var sw = new StopwatchImplementation();
22219 sw.start(); 21650 sw.start();
22220 var result = f(); 21651 var result = f();
22221 sw.stop(); 21652 sw.stop();
22222 this.info(('' + name + ' in ' + sw.elapsedInMs() + 'msec')); 21653 this.info(('' + name + ' in ' + sw.elapsedInMs() + 'msec'));
22223 return result; 21654 return result;
22224 } 21655 }
22225 // ********** Code for FrogOptions ************** 21656 // ********** Code for FrogOptions **************
22226 function FrogOptions(homedir, args, files) { 21657 function FrogOptions(homedir, args, files) {
22227 var $0;
22228 this.enableLeg = false 21658 this.enableLeg = false
22229 this.legOnly = false 21659 this.legOnly = false
22230 this.enableAsserts = false 21660 this.enableAsserts = false
22231 this.enableTypeChecks = false 21661 this.enableTypeChecks = false
22232 this.verifyImplements = false 21662 this.verifyImplements = false
22233 this.compileAll = false 21663 this.compileAll = false
22234 this.dietParse = false 21664 this.dietParse = false
22235 this.compileOnly = false 21665 this.compileOnly = false
22236 this.throwOnErrors = false 21666 this.throwOnErrors = false
22237 this.throwOnWarnings = false 21667 this.throwOnWarnings = false
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
22310 this.throwOnWarnings = true; 21740 this.throwOnWarnings = true;
22311 continue loop; 21741 continue loop;
22312 21742
22313 case '--compile-only': 21743 case '--compile-only':
22314 21744
22315 this.compileOnly = true; 21745 this.compileOnly = true;
22316 continue loop; 21746 continue loop;
22317 21747
22318 default: 21748 default:
22319 21749
22320 if ($notnull_bool(arg.endsWith$1('.dart'))) { 21750 if (arg.endsWith$1('.dart')) {
22321 this.dartScript = $assert_String(arg); 21751 this.dartScript = arg;
22322 this.childArgs = (($0 = args.getRange(i + 1, args.length - i - 1)) && $0.is$List$String()); 21752 this.childArgs = args.getRange(i + 1, args.length - i - 1);
22323 break loop; 21753 break loop;
22324 } 21754 }
22325 else if ($notnull_bool(arg.startsWith$1('--out='))) { 21755 else if (arg.startsWith$1('--out=')) {
22326 this.outfile = arg.substring$1('--out='.length); 21756 this.outfile = arg.substring$1('--out='.length);
22327 } 21757 }
22328 else if ($notnull_bool(arg.startsWith$1('--libdir='))) { 21758 else if (arg.startsWith$1('--libdir=')) {
22329 this.libDir = $assert_String(arg.substring$1('--libdir='.length)); 21759 this.libDir = arg.substring$1('--libdir='.length);
22330 passedLibDir = true; 21760 passedLibDir = true;
22331 } 21761 }
22332 else { 21762 else {
22333 if (!$notnull_bool(ignoreUnrecognizedFlags)) { 21763 if (!ignoreUnrecognizedFlags) {
22334 print(('unrecognized flag: "' + arg + '"')); 21764 print(('unrecognized flag: "' + arg + '"'));
22335 } 21765 }
22336 } 21766 }
22337 21767
22338 } 21768 }
22339 } 21769 }
22340 if (!$notnull_bool(passedLibDir) && !$notnull_bool(files.fileExists(this.libDi r))) { 21770 if (!passedLibDir && !files.fileExists(this.libDir)) {
22341 var temp = 'frog/lib'; 21771 var temp = 'frog/lib';
22342 if ($notnull_bool(files.fileExists($assert_String(temp)))) { 21772 if (files.fileExists(temp)) {
22343 this.libDir = $assert_String(temp); 21773 this.libDir = temp;
22344 } 21774 }
22345 else { 21775 else {
22346 this.libDir = 'lib'; 21776 this.libDir = 'lib';
22347 } 21777 }
22348 } 21778 }
22349 } 21779 }
22350 // ********** Code for LibraryReader ************** 21780 // ********** Code for LibraryReader **************
22351 function LibraryReader() { 21781 function LibraryReader() {
22352 // Initializers done 21782 // Initializers done
22353 this._specialLibs = $map(['dart:core', joinPaths(options.libDir, 'corelib.dart '), 'dart:coreimpl', joinPaths(options.libDir, 'corelib_impl.dart'), 'dart:html' , joinPaths(options.libDir, '../../client/html/release/html.dart'), 'dart:dom', joinPaths(options.libDir, 'dom/dom.dart'), 'dart:json', joinPaths(options.libDir , 'json.dart')]); 21783 this._specialLibs = $map(['dart:core', joinPaths(options.libDir, 'corelib.dart '), 'dart:coreimpl', joinPaths(options.libDir, 'corelib_impl.dart'), 'dart:html' , joinPaths(options.libDir, '../../client/html/release/html.dart'), 'dart:dom', joinPaths(options.libDir, 'dom/dom.dart'), 'dart:json', joinPaths(options.libDir , 'json.dart')]);
22354 } 21784 }
22355 LibraryReader.prototype.readFile = function(fullname) { 21785 LibraryReader.prototype.readFile = function(fullname) {
22356 var filename = this._specialLibs.$index(fullname); 21786 var filename = this._specialLibs.$index(fullname);
22357 if ($notnull_bool(filename == null)) { 21787 if (filename == null) {
22358 filename = fullname; 21788 filename = fullname;
22359 } 21789 }
22360 if ($notnull_bool(world.files.fileExists($assert_String(filename)))) { 21790 if (world.files.fileExists(filename)) {
22361 return new SourceFile(filename, world.files.readAll($assert_String(filename) )); 21791 return new SourceFile(filename, world.files.readAll(filename));
22362 } 21792 }
22363 else { 21793 else {
22364 world.error(('File not found: ' + filename + '')); 21794 world.error(('File not found: ' + filename + ''));
22365 return new SourceFile(filename, ''); 21795 return new SourceFile(filename, '');
22366 } 21796 }
22367 } 21797 }
22368 // ********** Code for VarMember ************** 21798 // ********** Code for VarMember **************
22369 function VarMember(name) { 21799 function VarMember(name) {
22370 this.name = name; 21800 this.name = name;
22371 // Initializers done 21801 // Initializers done
22372 } 21802 }
22373 VarMember.prototype.is$VarMember = function(){return this;};
22374 VarMember.prototype.get$name = function() { return this.name; }; 21803 VarMember.prototype.get$name = function() { return this.name; };
22375 VarMember.prototype.get$returnType = function() { 21804 VarMember.prototype.get$returnType = function() {
22376 return world.varType; 21805 return world.varType;
22377 } 21806 }
22378 VarMember.prototype.invoke = function(context, node, target, args) { 21807 VarMember.prototype.invoke = function(context, node, target, args) {
22379 return new Value(this.get$returnType(), ('' + target.code + '.' + this.name + '(' + args.getCode() + ')'), node.span, true); 21808 return new Value(this.get$returnType(), ('' + target.code + '.' + this.name + '(' + args.getCode() + ')'), node.span, true);
22380 } 21809 }
22381 VarMember.prototype.generate$1 = function($0) { 21810 VarMember.prototype.generate$1 = function($0) {
22382 return this.generate(($0 && $0.is$CodeWriter())); 21811 return this.generate($0);
22383 }; 21812 };
22384 VarMember.prototype.invoke$4 = function($0, $1, $2, $3) { 21813 VarMember.prototype.invoke$4 = function($0, $1, $2, $3) {
22385 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments())); 21814 return this.invoke($0, $1, $2, $3);
22386 }; 21815 };
22387 // ********** Code for VarFunctionStub ************** 21816 // ********** Code for VarFunctionStub **************
22388 function VarFunctionStub(name, callArgs) { 21817 function VarFunctionStub(name, callArgs) {
22389 this.args = callArgs.toCallStubArgs(); 21818 this.args = callArgs.toCallStubArgs();
22390 VarMember.call(this, name); 21819 VarMember.call(this, name);
22391 // Initializers done 21820 // Initializers done
22392 world.gen.corejs.useGenStub = true; 21821 world.gen.corejs.useGenStub = true;
22393 } 21822 }
22394 $inherits(VarFunctionStub, VarMember); 21823 $inherits(VarFunctionStub, VarMember);
22395 VarFunctionStub.prototype.is$VarFunctionStub = function(){return this;};
22396 VarFunctionStub.prototype.generate = function(code) { 21824 VarFunctionStub.prototype.generate = function(code) {
22397 if ($notnull_bool(this.args.get$hasNames())) { 21825 if (this.args.get$hasNames()) {
22398 this.generateNamed(code); 21826 this.generateNamed(code);
22399 } 21827 }
22400 else { 21828 else {
22401 this.generatePositional(code); 21829 this.generatePositional(code);
22402 } 21830 }
22403 } 21831 }
22404 VarFunctionStub.prototype.generatePositional = function(w) { 21832 VarFunctionStub.prototype.generatePositional = function(w) {
22405 var arity = this.args.get$length(); 21833 var arity = this.args.get$length();
22406 w.enterBlock(('Function.prototype.to\$' + this.name + ' = function() {')); 21834 w.enterBlock(('Function.prototype.to\$' + this.name + ' = function() {'));
22407 w.writeln(('this.' + this.name + ' = this.\$genStub(' + arity + ');')); 21835 w.writeln(('this.' + this.name + ' = this.\$genStub(' + arity + ');'));
22408 w.writeln(('this.to\$' + this.name + ' = function() { return this.' + this.nam e + '; };')); 21836 w.writeln(('this.to\$' + this.name + ' = function() { return this.' + this.nam e + '; };'));
22409 w.writeln(('return this.' + this.name + ';')); 21837 w.writeln(('return this.' + this.name + ';'));
22410 w.exitBlock('};'); 21838 w.exitBlock('};');
22411 var argsCode = this.args.getCode(); 21839 var argsCode = this.args.getCode();
22412 w.enterBlock(('Function.prototype.' + this.name + ' = function(' + argsCode + ') {')); 21840 w.enterBlock(('Function.prototype.' + this.name + ' = function(' + argsCode + ') {'));
22413 w.writeln(('return this.to\$' + this.name + '()(' + argsCode + ');')); 21841 w.writeln(('return this.to\$' + this.name + '()(' + argsCode + ');'));
22414 w.exitBlock('};'); 21842 w.exitBlock('};');
22415 w.writeln(('function to\$' + this.name + '(f) { return f && f.to\$' + this.nam e + '(); }')); 21843 w.writeln(('function to\$' + this.name + '(f) { return f && f.to\$' + this.nam e + '(); }'));
22416 } 21844 }
22417 VarFunctionStub.prototype.generateNamed = function(w) { 21845 VarFunctionStub.prototype.generateNamed = function(w) {
22418 var named = Strings.join(this.args.getNames(), '", "'); 21846 var named = Strings.join(this.args.getNames(), '", "');
22419 var argsCode = this.args.getCode(); 21847 var argsCode = this.args.getCode();
22420 w.enterBlock(('Function.prototype.' + this.name + ' = function(' + argsCode + ') {')); 21848 w.enterBlock(('Function.prototype.' + this.name + ' = function(' + argsCode + ') {'));
22421 w.writeln(('this.' + this.name + ' = this.\$genStub(' + this.args.get$length() + ', ["' + named + '"]);')); 21849 w.writeln(('this.' + this.name + ' = this.\$genStub(' + this.args.get$length() + ', ["' + named + '"]);'));
22422 w.writeln(('return this.' + this.name + '(' + argsCode + ');')); 21850 w.writeln(('return this.' + this.name + '(' + argsCode + ');'));
22423 w.exitBlock('}'); 21851 w.exitBlock('}');
22424 } 21852 }
22425 VarFunctionStub.prototype.generate$1 = function($0) { 21853 VarFunctionStub.prototype.generate$1 = function($0) {
22426 return this.generate(($0 && $0.is$CodeWriter())); 21854 return this.generate($0);
22427 }; 21855 };
22428 // ********** Code for VarMethodStub ************** 21856 // ********** Code for VarMethodStub **************
22429 function VarMethodStub(name, member, args, body) { 21857 function VarMethodStub(name, member, args, body) {
22430 this.member = member; 21858 this.member = member;
22431 this.args = args; 21859 this.args = args;
22432 this.body = body; 21860 this.body = body;
22433 VarMember.call(this, name); 21861 VarMember.call(this, name);
22434 // Initializers done 21862 // Initializers done
22435 } 21863 }
22436 $inherits(VarMethodStub, VarMember); 21864 $inherits(VarMethodStub, VarMember);
22437 VarMethodStub.prototype.get$returnType = function() { 21865 VarMethodStub.prototype.get$returnType = function() {
22438 var $0; 21866 return this.member != null ? this.member.get$returnType() : world.varType;
22439 return (($0 = this.member != null ? this.member.get$returnType() : world.varTy pe) && $0.is$lang_Type());
22440 } 21867 }
22441 VarMethodStub.prototype.get$typeName = function() { 21868 VarMethodStub.prototype.get$typeName = function() {
22442 return this.member != null ? this.member.declaringType.get$jsname() : 'Object' ; 21869 return this.member != null ? this.member.declaringType.get$jsname() : 'Object' ;
22443 } 21870 }
22444 VarMethodStub.prototype.generate = function(code) { 21871 VarMethodStub.prototype.generate = function(code) {
22445 code.write(('' + this.get$typeName() + '.prototype.' + this.name + ' = ')); 21872 code.write(('' + this.get$typeName() + '.prototype.' + this.name + ' = '));
22446 this.generateBody(code, ';'); 21873 this.generateBody(code, ';');
22447 } 21874 }
22448 VarMethodStub.prototype.generateBody = function(code, end) { 21875 VarMethodStub.prototype.generateBody = function(code, end) {
22449 if ($notnull_bool(this._useDirectCall(this.member, this.args))) { 21876 if (this._useDirectCall(this.member, this.args)) {
22450 code.writeln(('' + this.get$typeName() + '.prototype.' + this.member.get$jsn ame() + '' + end + '')); 21877 code.writeln(('' + this.get$typeName() + '.prototype.' + this.member.get$jsn ame() + '' + end + ''));
22451 } 21878 }
22452 else { 21879 else {
22453 code.enterBlock(('function(' + this.args.getCode() + ') {')); 21880 code.enterBlock(('function(' + this.args.getCode() + ') {'));
22454 code.writeln(('return ' + this.body.code + ';')); 21881 code.writeln(('return ' + this.body.code + ';'));
22455 code.exitBlock(('}' + end + '')); 21882 code.exitBlock(('}' + end + ''));
22456 } 21883 }
22457 } 21884 }
22458 VarMethodStub.prototype._useDirectCall = function(member, args) { 21885 VarMethodStub.prototype._useDirectCall = function(member, args) {
22459 if ((member instanceof MethodMember) && $ne(member.declaringType.get$library() , world.get$dom())) { 21886 if ((member instanceof MethodMember) && $ne(member.declaringType.get$library() , world.get$dom())) {
22460 var method = (member && member.is$MethodMember()); 21887 var method = member;
22461 if ($notnull_bool(method.needsArgumentConversion(args))) { 21888 if (method.needsArgumentConversion(args)) {
22462 return false; 21889 return false;
22463 } 21890 }
22464 for (var i = args.get$length(); 21891 for (var i = args.get$length();
22465 i < method.parameters.length; i++) { 21892 i < method.parameters.length; i++) {
22466 if ($notnull_bool($ne(method.parameters.$index(i).get$value().code, 'null' ))) { 21893 if ($ne(method.parameters.$index(i).get$value().code, 'null')) {
22467 return false; 21894 return false;
22468 } 21895 }
22469 } 21896 }
22470 return method.namesInOrder(args); 21897 return method.namesInOrder(args);
22471 } 21898 }
22472 else { 21899 else {
22473 return false; 21900 return false;
22474 } 21901 }
22475 } 21902 }
22476 VarMethodStub.prototype.generate$1 = function($0) { 21903 VarMethodStub.prototype.generate$1 = function($0) {
22477 return this.generate(($0 && $0.is$CodeWriter())); 21904 return this.generate($0);
22478 }; 21905 };
22479 VarMethodStub.prototype.generateBody$2 = function($0, $1) { 21906 VarMethodStub.prototype.generateBody$2 = function($0, $1) {
22480 return this.generateBody(($0 && $0.is$CodeWriter()), $assert_String($1)); 21907 return this.generateBody($0, $1);
22481 }; 21908 };
22482 // ********** Code for VarMethodSet ************** 21909 // ********** Code for VarMethodSet **************
22483 function VarMethodSet(name, members, callArgs, returnType) { 21910 function VarMethodSet(name, members, callArgs, returnType) {
22484 this.members = members; 21911 this.members = members;
22485 this.returnType = returnType; 21912 this.returnType = returnType;
22486 this.args = callArgs.toCallStubArgs(); 21913 this.args = callArgs.toCallStubArgs();
22487 VarMember.call(this, name); 21914 VarMember.call(this, name);
22488 // Initializers done 21915 // Initializers done
22489 } 21916 }
22490 $inherits(VarMethodSet, VarMember); 21917 $inherits(VarMethodSet, VarMember);
22491 VarMethodSet.prototype.get$members = function() { return this.members; }; 21918 VarMethodSet.prototype.get$members = function() { return this.members; };
22492 VarMethodSet.prototype.get$returnType = function() { return this.returnType; }; 21919 VarMethodSet.prototype.get$returnType = function() { return this.returnType; };
22493 VarMethodSet.prototype.get$baseName = function() { 21920 VarMethodSet.prototype.get$baseName = function() {
22494 return $assert_String(this.members.$index(0).get$name()); 21921 return this.members.$index(0).get$name();
22495 } 21922 }
22496 VarMethodSet.prototype.invoke = function(context, node, target, args) { 21923 VarMethodSet.prototype.invoke = function(context, node, target, args) {
22497 this._invokeMembers(context, node); 21924 this._invokeMembers(context, node);
22498 return VarMember.prototype.invoke.call(this, context, node, target, args); 21925 return VarMember.prototype.invoke.call(this, context, node, target, args);
22499 } 21926 }
22500 VarMethodSet.prototype._invokeMembers = function(context, node) { 21927 VarMethodSet.prototype._invokeMembers = function(context, node) {
22501 if (this._fallbackStubs != null) return; 21928 if (this._fallbackStubs != null) return;
22502 var objectStub = null; 21929 var objectStub = null;
22503 this._fallbackStubs = []; 21930 this._fallbackStubs = [];
22504 var $list = this.members; 21931 var $list = this.members;
22505 for (var $i = 0;$i < $list.length; $i++) { 21932 for (var $i = 0;$i < $list.length; $i++) {
22506 var member = $list.$index($i); 21933 var member = $list.$index($i);
22507 var target = new Value(member.declaringType, 'this', node.span, true); 21934 var target = new Value(member.declaringType, 'this', node.span, true);
22508 var result = member.invoke$4$isDynamic(context, node, target, this.args, tru e); 21935 var result = member.invoke$4$isDynamic(context, node, target, this.args, tru e);
22509 var stub = new VarMethodStub(this.name, member, this.args, result); 21936 var stub = new VarMethodStub(this.name, member, this.args, result);
22510 var type = member.declaringType; 21937 var type = member.declaringType;
22511 if ($notnull_bool(type.get$isObject())) { 21938 if (type.get$isObject()) {
22512 objectStub = stub; 21939 objectStub = stub;
22513 } 21940 }
22514 else if ($ne(type.get$library(), world.get$dom())) { 21941 else if ($ne(type.get$library(), world.get$dom())) {
22515 VarMethodSet._addVarStub((type && type.is$lang_Type()), (stub && stub.is$V arMember())); 21942 VarMethodSet._addVarStub(type, stub);
22516 } 21943 }
22517 else { 21944 else {
22518 this._fallbackStubs.add(stub); 21945 this._fallbackStubs.add(stub);
22519 } 21946 }
22520 } 21947 }
22521 if ($notnull_bool(objectStub == null)) { 21948 if (objectStub == null) {
22522 var target = new Value(world.objectType, 'this', node.span, true); 21949 var target = new Value(world.objectType, 'this', node.span, true);
22523 var result = target.invokeNoSuchMethod(context, this.get$baseName(), node, t his.args); 21950 var result = target.invokeNoSuchMethod(context, this.get$baseName(), node, t his.args);
22524 objectStub = new VarMethodStub(this.name, null, this.args, result); 21951 objectStub = new VarMethodStub(this.name, null, this.args, result);
22525 } 21952 }
22526 if (this._fallbackStubs.length == 0) { 21953 if (this._fallbackStubs.length == 0) {
22527 VarMethodSet._addVarStub(world.objectType, (objectStub && objectStub.is$VarM ember())); 21954 VarMethodSet._addVarStub(world.objectType, objectStub);
22528 } 21955 }
22529 else { 21956 else {
22530 this._fallbackStubs.add(objectStub); 21957 this._fallbackStubs.add(objectStub);
22531 world.gen.corejs.useVarMethod = true; 21958 world.gen.corejs.useVarMethod = true;
22532 } 21959 }
22533 } 21960 }
22534 VarMethodSet._addVarStub = function(type, stub) { 21961 VarMethodSet._addVarStub = function(type, stub) {
22535 if (type.varStubs == null) type.varStubs = $map([]); 21962 if (type.varStubs == null) type.varStubs = $map([]);
22536 type.varStubs.$setindex(stub.name, stub); 21963 type.varStubs.$setindex(stub.name, stub);
22537 } 21964 }
22538 VarMethodSet.prototype.generate = function(code) { 21965 VarMethodSet.prototype.generate = function(code) {
22539 if (this._fallbackStubs.length == 0) return; 21966 if (this._fallbackStubs.length == 0) return;
22540 code.enterBlock(('\$varMethod("' + this.name + '", {')); 21967 code.enterBlock(('\$varMethod("' + this.name + '", {'));
22541 var lastOne = this._fallbackStubs.last(); 21968 var lastOne = this._fallbackStubs.last();
22542 var $list = this._fallbackStubs; 21969 var $list = this._fallbackStubs;
22543 for (var $i = 0;$i < $list.length; $i++) { 21970 for (var $i = 0;$i < $list.length; $i++) {
22544 var stub = $list.$index($i); 21971 var stub = $list.$index($i);
22545 code.write(('"' + stub.get$typeName() + '": ')); 21972 code.write(('"' + stub.get$typeName() + '": '));
22546 stub.generateBody$2(code, $notnull_bool($eq(stub, lastOne)) ? '' : ','); 21973 stub.generateBody$2(code, $eq(stub, lastOne) ? '' : ',');
22547 } 21974 }
22548 code.exitBlock('});'); 21975 code.exitBlock('});');
22549 } 21976 }
22550 VarMethodSet.prototype.generate$1 = function($0) { 21977 VarMethodSet.prototype.generate$1 = function($0) {
22551 return this.generate(($0 && $0.is$CodeWriter())); 21978 return this.generate($0);
22552 }; 21979 };
22553 VarMethodSet.prototype.invoke$4 = function($0, $1, $2, $3) { 21980 VarMethodSet.prototype.invoke$4 = function($0, $1, $2, $3) {
22554 return this.invoke(($0 && $0.is$MethodGenerator()), ($1 && $1.is$lang_Node()), ($2 && $2.is$Value()), ($3 && $3.is$Arguments())); 21981 return this.invoke($0, $1, $2, $3);
22555 }; 21982 };
22556 // ********** Code for top level ************** 21983 // ********** Code for top level **************
22557 function map(source, mapper) { 21984 function map(source, mapper) {
22558 var result = new ListFactory(); 21985 var result = new ListFactory();
22559 if (!!(source && source.is$List)) { 21986 if (!!(source && source.is$List)) {
22560 var list = (source && source.is$List()); 21987 var list = source;
22561 result.length = list.length; 21988 result.length = list.length;
22562 for (var i = 0; 21989 for (var i = 0;
22563 i < list.length; i++) { 21990 i < list.length; i++) {
22564 result.$setindex(i, mapper(list.$index(i))); 21991 result.$setindex(i, mapper(list.$index(i)));
22565 } 21992 }
22566 } 21993 }
22567 else { 21994 else {
22568 for (var $i = source.iterator(); $i.hasNext$0(); ) { 21995 for (var $i = source.iterator(); $i.hasNext$0(); ) {
22569 var item = $i.next$0(); 21996 var item = $i.next$0();
22570 result.add(mapper(item)); 21997 result.add(mapper(item));
22571 } 21998 }
22572 } 21999 }
22573 return result; 22000 return result;
22574 } 22001 }
22575 function reduce(source, callback, initialValue) { 22002 function reduce(source, callback, initialValue) {
22576 var i = source.iterator(); 22003 var i = source.iterator();
22577 var current = initialValue; 22004 var current = initialValue;
22578 if ($notnull_bool(current == null) && $notnull_bool(i.hasNext$0())) { 22005 if (current == null && i.hasNext$0()) {
22579 current = i.next$0(); 22006 current = i.next$0();
22580 } 22007 }
22581 while ($notnull_bool(i.hasNext$0())) { 22008 while (i.hasNext$0()) {
22582 current = callback.call$2(current, i.next$0()); 22009 current = callback.call$2(current, i.next$0());
22583 } 22010 }
22584 return current; 22011 return current;
22585 } 22012 }
22586 function orderValuesByKeys(map) { 22013 function orderValuesByKeys(map) {
22587 var $0; 22014 var keys = map.getKeys();
22588 var keys = (($0 = map.getKeys()) && $0.is$List());
22589 keys.sort((function (x, y) { 22015 keys.sort((function (x, y) {
22590 return x.compareTo$1(y); 22016 return x.compareTo$1(y);
22591 }) 22017 })
22592 ); 22018 );
22593 var values = []; 22019 var values = [];
22594 for (var $i = 0;$i < keys.length; $i++) { 22020 for (var $i = 0;$i < keys.length; $i++) {
22595 var k = keys.$index($i); 22021 var k = keys.$index($i);
22596 values.add(map.$index(k)); 22022 values.add(map.$index(k));
22597 } 22023 }
22598 return values; 22024 return values;
22599 } 22025 }
22600 function isMultilineString(text) { 22026 function isMultilineString(text) {
22601 return text.startsWith('"""') || text.startsWith("'''"); 22027 return text.startsWith('"""') || text.startsWith("'''");
22602 } 22028 }
22603 function isRawMultilineString(text) { 22029 function isRawMultilineString(text) {
22604 return text.startsWith('@"""') || text.startsWith("@'''"); 22030 return text.startsWith('@"""') || text.startsWith("@'''");
22605 } 22031 }
22606 function parseStringLiteral(lit) { 22032 function parseStringLiteral(lit) {
22607 if (lit.startsWith('@')) { 22033 if (lit.startsWith('@')) {
22608 if ($notnull_bool(isRawMultilineString(lit))) { 22034 if (isRawMultilineString(lit)) {
22609 return stripLeadingNewline(lit.substring(4, lit.length - 3)); 22035 return stripLeadingNewline(lit.substring(4, lit.length - 3));
22610 } 22036 }
22611 else { 22037 else {
22612 return lit.substring(2, lit.length - 1); 22038 return lit.substring(2, lit.length - 1);
22613 } 22039 }
22614 } 22040 }
22615 else if ($notnull_bool(isMultilineString(lit))) { 22041 else if (isMultilineString(lit)) {
22616 lit = lit.substring(3, lit.length - 3).replaceAll('\\\$', '\$'); 22042 lit = lit.substring(3, lit.length - 3).replaceAll('\\\$', '\$');
22617 return stripLeadingNewline(lit); 22043 return stripLeadingNewline(lit);
22618 } 22044 }
22619 else { 22045 else {
22620 return lit.substring(1, lit.length - 1).replaceAll('\\\$', '\$'); 22046 return lit.substring(1, lit.length - 1).replaceAll('\\\$', '\$');
22621 } 22047 }
22622 } 22048 }
22623 function stripLeadingNewline(text) { 22049 function stripLeadingNewline(text) {
22624 if (text.startsWith('\n')) { 22050 if (text.startsWith('\n')) {
22625 return text.substring(1); 22051 return text.substring(1);
22626 } 22052 }
22627 else if (text.startsWith('\r')) { 22053 else if (text.startsWith('\r')) {
22628 if (text.startsWith('\r\n')) { 22054 if (text.startsWith('\r\n')) {
22629 return text.substring(2); 22055 return text.substring(2);
22630 } 22056 }
22631 else { 22057 else {
22632 return text.substring(1); 22058 return text.substring(1);
22633 } 22059 }
22634 } 22060 }
22635 else { 22061 else {
22636 return text; 22062 return text;
22637 } 22063 }
22638 } 22064 }
22639 var world; 22065 var world;
22640 function initializeWorld(files) { 22066 function initializeWorld(files) {
22641 $assert(world == null, "world == null", "world.dart", 13, 10);
22642 world = new World(files); 22067 world = new World(files);
22643 world.init(); 22068 world.init();
22644 } 22069 }
22645 function lang_compile(homedir, args, files) { 22070 function lang_compile(homedir, args, files) {
22646 parseOptions(homedir, args, files); 22071 parseOptions(homedir, args, files);
22647 initializeWorld(files); 22072 initializeWorld(files);
22648 var success = world.compile(); 22073 var success = world.compile();
22649 if (options.outfile != null) { 22074 if (options.outfile != null) {
22650 if ($notnull_bool(success)) { 22075 if (success) {
22651 var code = world.getGeneratedCode(); 22076 var code = world.getGeneratedCode();
22652 if (!options.outfile.endsWith('.js')) { 22077 if (!options.outfile.endsWith('.js')) {
22653 code = '#!/usr/bin/env node\n' + code; 22078 code = '#!/usr/bin/env node\n' + code;
22654 } 22079 }
22655 world.files.writeString(options.outfile, $assert_String(code)); 22080 world.files.writeString(options.outfile, code);
22656 } 22081 }
22657 else { 22082 else {
22658 world.files.writeString(options.outfile, "throw 'Sorry, but I could not ge nerate reasonable code to run.\\n';"); 22083 world.files.writeString(options.outfile, "throw 'Sorry, but I could not ge nerate reasonable code to run.\\n';");
22659 } 22084 }
22660 } 22085 }
22661 return $assert_bool(success); 22086 return success;
22662 } 22087 }
22663 var options; 22088 var options;
22664 function parseOptions(homedir, args, files) { 22089 function parseOptions(homedir, args, files) {
22665 $assert(options == null, "options == null", "frog_options.dart", 10, 10);
22666 options = new FrogOptions(homedir, args, files); 22090 options = new FrogOptions(homedir, args, files);
22667 } 22091 }
22668 function _getCallStubName(name, args) { 22092 function _getCallStubName(name, args) {
22669 var nameBuilder = new StringBufferImpl(('' + name + '\$' + args.get$bareCount( ) + '')); 22093 var nameBuilder = new StringBufferImpl(('' + name + '\$' + args.get$bareCount( ) + ''));
22670 for (var i = args.get$bareCount(); 22094 for (var i = args.get$bareCount();
22671 i < args.get$length(); i++) { 22095 i < args.get$length(); i++) {
22672 nameBuilder.add('\$').add(args.getName(i)); 22096 nameBuilder.add('\$').add(args.getName(i));
22673 } 22097 }
22674 return nameBuilder.toString(); 22098 return nameBuilder.toString();
22675 } 22099 }
22676 // ********** Library frog ************** 22100 // ********** Library frog **************
22677 // ********** Code for top level ************** 22101 // ********** Code for top level **************
22678 function main() { 22102 function main() {
22679 var homedir = path.dirname(fs.realpathSync($assert_String(process.argv.$index( 1)))); 22103 var homedir = path.dirname(fs.realpathSync(process.argv.$index(1)));
22680 var argv = ListFactory.ListFactory$from$factory(process.argv); 22104 var argv = ListFactory.ListFactory$from$factory(process.argv);
22681 if ($notnull_bool(lang_compile($assert_String(homedir), (argv && argv.is$List$ String()), new NodeFileSystem()))) { 22105 if (lang_compile(homedir, argv, new NodeFileSystem())) {
22682 var code = world.getGeneratedCode(); 22106 var code = world.getGeneratedCode();
22683 if (!$notnull_bool(options.compileOnly)) { 22107 if (!options.compileOnly) {
22684 process.argv = [argv.$index(0), argv.$index(1)]; 22108 process.argv = [argv.$index(0), argv.$index(1)];
22685 process.argv.addAll(options.childArgs); 22109 process.argv.addAll(options.childArgs);
22686 vm.runInNewContext($assert_String(code), createSandbox()); 22110 vm.runInNewContext(code, createSandbox());
22687 } 22111 }
22688 } 22112 }
22689 else { 22113 else {
22690 process.exit(1); 22114 process.exit(1);
22691 } 22115 }
22692 } 22116 }
22693 // ********** Globals ************** 22117 // ********** Globals **************
22694 var const$0 = new NoMoreElementsException()/*const NoMoreElementsException()*/; 22118 var const$0 = new NoMoreElementsException()/*const NoMoreElementsException()*/;
22695 var const$10 = new StringWrapper('String')/*const SourceString('String')*/; 22119 var const$10 = new StringWrapper('String')/*const SourceString('String')*/;
22696 var const$12 = new IllegalAccessException()/*const IllegalAccessException()*/; 22120 var const$12 = new IllegalAccessException()/*const IllegalAccessException()*/;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
22829 INTERFACE, 22253 INTERFACE,
22830 LIBRARY, 22254 LIBRARY,
22831 NATIVE, 22255 NATIVE,
22832 NEGATE, 22256 NEGATE,
22833 OPERATOR, 22257 OPERATOR,
22834 SET, 22258 SET,
22835 SOURCE, 22259 SOURCE,
22836 STATIC, 22260 STATIC,
22837 TYPEDEF ]*/; 22261 TYPEDEF ]*/;
22838 RunEntry(function() {main();}, []); 22262 RunEntry(function() {main();}, []);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698