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

Side by Side Diff: frog/minfrog

Issue 9110027: Some cleanups to Frog to avoid looking up its builtin types too much (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: removed dead files Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View 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 function $throw(e) { 4 function $throw(e) {
5 // If e is not a value, we can use V8's captureStackTrace utility method. 5 // If e is not a value, we can use V8's captureStackTrace utility method.
6 // TODO(jmesserly): capture the stack trace on other JS engines. 6 // TODO(jmesserly): capture the stack trace on other JS engines.
7 if (e && (typeof e == 'object') && Error.captureStackTrace) { 7 if (e && (typeof e == 'object') && Error.captureStackTrace) {
8 // TODO(jmesserly): this will clobber the e.stack property 8 // TODO(jmesserly): this will clobber the e.stack property
9 Error.captureStackTrace(e, $throw); 9 Error.captureStackTrace(e, $throw);
10 } 10 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 }; 93 };
94 Object.prototype._set$4 = function($0, $1, $2, $3) { 94 Object.prototype._set$4 = function($0, $1, $2, $3) {
95 return this.noSuchMethod("_set", [$0, $1, $2, $3]); 95 return this.noSuchMethod("_set", [$0, $1, $2, $3]);
96 }; 96 };
97 Object.prototype._set$4$isDynamic = function($0, $1, $2, $3, isDynamic) { 97 Object.prototype._set$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
98 return this.noSuchMethod("_set", [$0, $1, $2, $3, isDynamic]); 98 return this.noSuchMethod("_set", [$0, $1, $2, $3, isDynamic]);
99 }; 99 };
100 Object.prototype._set$5 = function($0, $1, $2, $3, $4) { 100 Object.prototype._set$5 = function($0, $1, $2, $3, $4) {
101 return this.noSuchMethod("_set", [$0, $1, $2, $3, $4]); 101 return this.noSuchMethod("_set", [$0, $1, $2, $3, $4]);
102 }; 102 };
103 Object.prototype._wrapDomCallback$2 = function($0, $1) {
104 return this.noSuchMethod("_wrapDomCallback", [$0, $1]);
105 };
106 Object.prototype.add$1 = function($0) { 103 Object.prototype.add$1 = function($0) {
107 return this.noSuchMethod("add", [$0]); 104 return this.noSuchMethod("add", [$0]);
108 }; 105 };
109 Object.prototype.addAll$1 = function($0) { 106 Object.prototype.addAll$1 = function($0) {
110 return this.noSuchMethod("addAll", [$0]); 107 return this.noSuchMethod("addAll", [$0]);
111 }; 108 };
112 Object.prototype.addDirectSubtype$1 = function($0) { 109 Object.prototype.addDirectSubtype$1 = function($0) {
113 return this.noSuchMethod("addDirectSubtype", [$0]); 110 return this.noSuchMethod("addDirectSubtype", [$0]);
114 }; 111 };
115 Object.prototype.addMethod$2 = function($0, $1) { 112 Object.prototype.addMethod$2 = function($0, $1) {
(...skipping 16 matching lines...) Expand all
132 }; 129 };
133 Object.prototype.computeValue$0 = function() { 130 Object.prototype.computeValue$0 = function() {
134 return this.noSuchMethod("computeValue", []); 131 return this.noSuchMethod("computeValue", []);
135 }; 132 };
136 Object.prototype.contains$1 = function($0) { 133 Object.prototype.contains$1 = function($0) {
137 return this.noSuchMethod("contains", [$0]); 134 return this.noSuchMethod("contains", [$0]);
138 }; 135 };
139 Object.prototype.containsKey$1 = function($0) { 136 Object.prototype.containsKey$1 = function($0) {
140 return this.noSuchMethod("containsKey", [$0]); 137 return this.noSuchMethod("containsKey", [$0]);
141 }; 138 };
139 Object.prototype.convertTo$2 = function($0, $1) {
140 return this.noSuchMethod("convertTo", [$0, $1]);
141 };
142 Object.prototype.convertTo$3 = function($0, $1, $2) { 142 Object.prototype.convertTo$3 = function($0, $1, $2) {
143 return this.noSuchMethod("convertTo", [$0, $1, $2]); 143 return this.noSuchMethod("convertTo", [$0, $1, $2]);
144 }; 144 };
145 Object.prototype.convertTo$4 = function($0, $1, $2, $3) {
146 return this.noSuchMethod("convertTo", [$0, $1, $2, $3]);
147 };
148 Object.prototype.copyWithNewType$2 = function($0, $1) { 145 Object.prototype.copyWithNewType$2 = function($0, $1) {
149 return this.noSuchMethod("copyWithNewType", [$0, $1]); 146 return this.noSuchMethod("copyWithNewType", [$0, $1]);
150 }; 147 };
151 Object.prototype.end$0 = function() { 148 Object.prototype.end$0 = function() {
152 return this.noSuchMethod("end", []); 149 return this.noSuchMethod("end", []);
153 }; 150 };
154 Object.prototype.endsWith$1 = function($0) { 151 Object.prototype.endsWith$1 = function($0) {
155 return this.noSuchMethod("endsWith", [$0]); 152 return this.noSuchMethod("endsWith", [$0]);
156 }; 153 };
157 Object.prototype.ensureSubtypeOf$3 = function($0, $1, $2) { 154 Object.prototype.ensureSubtypeOf$3 = function($0, $1, $2) {
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 function tmp() {}; 634 function tmp() {};
638 tmp.prototype = parent.prototype; 635 tmp.prototype = parent.prototype;
639 child.prototype = new tmp(); 636 child.prototype = new tmp();
640 child.prototype.constructor = child; 637 child.prototype.constructor = child;
641 } 638 }
642 } 639 }
643 $inherits(ImmutableList, ListFactory_E); 640 $inherits(ImmutableList, ListFactory_E);
644 function ImmutableList(length) { 641 function ImmutableList(length) {
645 this._length = length; 642 this._length = length;
646 // Initializers done 643 // Initializers done
647 ListFactory_E.call(this, length); 644 Array.call(this, length);
648 } 645 }
649 ImmutableList.ImmutableList$from$factory = function(other) { 646 ImmutableList.ImmutableList$from$factory = function(other) {
650 var list = new ImmutableList(other.get$length()); 647 var list = new ImmutableList(other.get$length());
651 for (var i = 0; 648 for (var i = 0;
652 i < other.get$length(); i++) { 649 i < other.get$length(); i++) {
653 list._setindex(i, other.$index(i)); 650 list._setindex(i, other.$index(i));
654 } 651 }
655 return list; 652 return list;
656 } 653 }
657 ImmutableList.prototype.get$length = function() { 654 ImmutableList.prototype.get$length = function() {
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 this._numberOfEntries++; 849 this._numberOfEntries++;
853 } 850 }
854 this._keys.$setindex(index, key); 851 this._keys.$setindex(index, key);
855 this._values.$setindex(index, value); 852 this._values.$setindex(index, value);
856 } 853 }
857 HashMapImplementation.prototype.$index = function(key) { 854 HashMapImplementation.prototype.$index = function(key) {
858 var index = this._probeForLookup(key); 855 var index = this._probeForLookup(key);
859 if (index < 0) return null; 856 if (index < 0) return null;
860 return this._values.$index(index); 857 return this._values.$index(index);
861 } 858 }
859 HashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
860 var index = this._probeForLookup(key);
861 if (index >= 0) return this._values.$index(index);
862 var value = ifAbsent();
863 this.$setindex(key, value);
864 return value;
865 }
862 HashMapImplementation.prototype.remove = function(key) { 866 HashMapImplementation.prototype.remove = function(key) {
863 var index = this._probeForLookup(key); 867 var index = this._probeForLookup(key);
864 if (index >= 0) { 868 if (index >= 0) {
865 this._numberOfEntries--; 869 this._numberOfEntries--;
866 var value = this._values.$index(index); 870 var value = this._values.$index(index);
867 this._values.$setindex(index); 871 this._values.$setindex(index);
868 this._keys.$setindex(index, const$2/*HashMapImplementation._DELETED_KEY*/); 872 this._keys.$setindex(index, const$2/*HashMapImplementation._DELETED_KEY*/);
869 this._numberOfDeleted++; 873 this._numberOfDeleted++;
870 return value; 874 return value;
871 } 875 }
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 else { 1246 else {
1243 this._list.addLast(new KeyValuePair_K$V(key, value)); 1247 this._list.addLast(new KeyValuePair_K$V(key, value));
1244 this._map.$setindex(key, this._list.lastEntry()); 1248 this._map.$setindex(key, this._list.lastEntry());
1245 } 1249 }
1246 } 1250 }
1247 LinkedHashMapImplementation.prototype.$index = function(key) { 1251 LinkedHashMapImplementation.prototype.$index = function(key) {
1248 var entry = this._map.$index(key); 1252 var entry = this._map.$index(key);
1249 if (entry == null) return null; 1253 if (entry == null) return null;
1250 return entry.get$element().get$value(); 1254 return entry.get$element().get$value();
1251 } 1255 }
1256 LinkedHashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
1257 var value = this.$index(key);
1258 if ((this.$index(key) == null) && !(this.containsKey(key))) {
1259 value = ifAbsent();
1260 this.$setindex(key, value);
1261 }
1262 return value;
1263 }
1252 LinkedHashMapImplementation.prototype.getKeys = function() { 1264 LinkedHashMapImplementation.prototype.getKeys = function() {
1253 var list = new Array(this.get$length()); 1265 var list = new Array(this.get$length());
1254 var index = 0; 1266 var index = 0;
1255 this._list.forEach(function _(entry) { 1267 this._list.forEach(function _(entry) {
1256 list.$setindex(index++, entry.key); 1268 list.$setindex(index++, entry.key);
1257 } 1269 }
1258 ); 1270 );
1259 return list; 1271 return list;
1260 } 1272 }
1261 LinkedHashMapImplementation.prototype.getValues = function() { 1273 LinkedHashMapImplementation.prototype.getValues = function() {
(...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after
2208 } 2220 }
2209 if (this.useWrap1) { 2221 if (this.useWrap1) {
2210 w.writeln("function $wrap_call$1(fn) { return fn; }"/*null._EMPTY_WRAP_CAL L1_FUNCTION*/); 2222 w.writeln("function $wrap_call$1(fn) { return fn; }"/*null._EMPTY_WRAP_CAL L1_FUNCTION*/);
2211 } 2223 }
2212 } 2224 }
2213 var $$list = orderValuesByKeys(this._usedOperators); 2225 var $$list = orderValuesByKeys(this._usedOperators);
2214 for (var $$i = 0;$$i < $$list.get$length(); $$i++) { 2226 for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
2215 var opImpl = $$list.$index($$i); 2227 var opImpl = $$list.$index($$i);
2216 w.writeln(opImpl); 2228 w.writeln(opImpl);
2217 } 2229 }
2230 if ($globals.world.dom != null) {
2231 this.ensureTypeNameOf();
2232 w.writeln('Object.prototype.get\$typeName = Object.prototype.\$typeNameOf;' /*'Object.prototype.get\$typeName = ' +
2233 ' Object.prototype.\$typeNameOf;'*/);
2234 }
2218 } 2235 }
2219 CoreJs.prototype.generate$1 = CoreJs.prototype.generate; 2236 CoreJs.prototype.generate$1 = CoreJs.prototype.generate;
2220 // ********** Code for Element ************** 2237 // ********** Code for Element **************
2221 function Element(name, _enclosingElement) { 2238 function Element(name, _enclosingElement) {
2222 this.name = name; 2239 this.name = name;
2223 this._enclosingElement = _enclosingElement; 2240 this._enclosingElement = _enclosingElement;
2224 // Initializers done 2241 // Initializers done
2225 this._jsname = $globals.world.toJsIdentifier(this.name); 2242 this._jsname = $globals.world.toJsIdentifier(this.name);
2226 } 2243 }
2227 Element.prototype.get$name = function() { return this.name; }; 2244 Element.prototype.get$name = function() { return this.name; };
2228 Element.prototype.set$name = function(value) { return this.name = value; }; 2245 Element.prototype.set$name = function(value) { return this.name = value; };
2229 Element.prototype.get$_jsname = function() { return this._jsname; }; 2246 Element.prototype.get$_jsname = function() { return this._jsname; };
2230 Element.prototype.set$_jsname = function(value) { return this._jsname = value; } ; 2247 Element.prototype.set$_jsname = function(value) { return this._jsname = value; } ;
2231 Element.prototype.get$library = function() { 2248 Element.prototype.get$library = function() {
2232 return null; 2249 return null;
2233 } 2250 }
2234 Element.prototype.get$span = function() { 2251 Element.prototype.get$span = function() {
2235 return null; 2252 return null;
2236 } 2253 }
2237 Element.prototype.get$isNative = function() { 2254 Element.prototype.get$isNative = function() {
2238 return false; 2255 return false;
2239 } 2256 }
2240 Element.prototype.hashCode = function() { 2257 Element.prototype.hashCode = function() {
2241 return this.name.hashCode(); 2258 return this.name.hashCode();
2242 } 2259 }
2243 Element.prototype.get$jsname = function() { 2260 Element.prototype.get$jsname = function() {
2244 return this._jsname; 2261 return this._jsname;
2245 } 2262 }
2246 Element.prototype.get$nativeName = function() { 2263 Element.prototype.get$nativeName = function() {
2247 return null; 2264 return this._jsname;
2248 } 2265 }
2249 Element.prototype.get$avoidNativeName = function() { 2266 Element.prototype.get$avoidNativeName = function() {
2250 return false; 2267 return false;
2251 } 2268 }
2252 Element.prototype.get$jsnamePriority = function() { 2269 Element.prototype.get$jsnamePriority = function() {
2253 return this.get$isNative() ? 2 : (this.get$library().get$isCore() ? 1 : 0); 2270 return this.get$isNative() ? 2 : (this.get$library().get$isCore() ? 1 : 0);
2254 } 2271 }
2255 Element.prototype.resolve = function() { 2272 Element.prototype.resolve = function() {
2256 2273
2257 } 2274 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2331 this.globals = new HashMapImplementation(); 2348 this.globals = new HashMapImplementation();
2332 this.corejs = new CoreJs(); 2349 this.corejs = new CoreJs();
2333 // Initializers done 2350 // Initializers done
2334 } 2351 }
2335 WorldGenerator.prototype.run = function() { 2352 WorldGenerator.prototype.run = function() {
2336 var metaGen = new MethodGenerator(this.main, null); 2353 var metaGen = new MethodGenerator(this.main, null);
2337 var mainTarget = new Value.type$ctor(this.main.declaringType, this.main.get$sp an()); 2354 var mainTarget = new Value.type$ctor(this.main.declaringType, this.main.get$sp an());
2338 var mainCall = this.main.invoke(metaGen, null, mainTarget, Arguments.get$EMPTY (), false); 2355 var mainCall = this.main.invoke(metaGen, null, mainTarget, Arguments.get$EMPTY (), false);
2339 this.main.declaringType.markUsed(); 2356 this.main.declaringType.markUsed();
2340 if ($globals.options.compileAll) { 2357 if ($globals.options.compileAll) {
2341 this.markLibrariesUsed([$globals.world.get$coreimpl(), $globals.world.coreli b, this.main.declaringType.get$library()]); 2358 this.markLibrariesUsed([$globals.world.coreimpl, $globals.world.corelib, thi s.main.declaringType.get$library()]);
2342 } 2359 }
2343 if ($globals.world.corelib.types.$index('Isolate').get$isUsed() || $globals.wo rld.get$coreimpl().types.$index('ReceivePortImpl').get$isUsed()) { 2360 if ($globals.world.corelib.types.$index('Isolate').get$isUsed() || $globals.wo rld.coreimpl.types.$index('ReceivePortImpl').get$isUsed()) {
2344 if (this.corejs.useWrap0 || this.corejs.useWrap1) { 2361 if (this.corejs.useWrap0 || this.corejs.useWrap1) {
2345 this.genMethod($globals.world.get$coreimpl().types.$index('IsolateContext' ).getMember$1('eval')); 2362 this.genMethod($globals.world.coreimpl.types.$index('IsolateContext').getM ember$1('eval'));
2346 this.genMethod($globals.world.get$coreimpl().types.$index('EventLoop').get Member$1('run')); 2363 this.genMethod($globals.world.coreimpl.types.$index('EventLoop').getMember $1('run'));
2347 } 2364 }
2348 this.corejs.useIsolates = true; 2365 this.corejs.useIsolates = true;
2349 var isolateMain = $globals.world.get$coreimpl().topType.resolveMember('start RootIsolate').members.$index(0); 2366 var isolateMain = $globals.world.coreimpl.topType.resolveMember('startRootIs olate').members.$index(0);
2350 var isolateMainTarget = new Value.type$ctor($globals.world.get$coreimpl().to pType, this.main.get$span()); 2367 var isolateMainTarget = new Value.type$ctor($globals.world.coreimpl.topType, this.main.get$span());
2351 mainCall = isolateMain.invoke(metaGen, null, isolateMainTarget, new Argument s(null, [this.main._get(metaGen, this.main.definition, null, false)]), false); 2368 mainCall = isolateMain.invoke(metaGen, null, isolateMainTarget, new Argument s(null, [this.main._get(metaGen, this.main.definition, null, false)]), false);
2352 } 2369 }
2353 this.writeTypes($globals.world.get$coreimpl()); 2370 this.writeTypes($globals.world.coreimpl);
2354 this.writeTypes($globals.world.corelib); 2371 this.writeTypes($globals.world.corelib);
2355 this.writeTypes(this.main.declaringType.get$library()); 2372 this.writeTypes(this.main.declaringType.get$library());
2356 if (this._mixins != null) this.writer.write(this._mixins.get$text()); 2373 if (this._mixins != null) this.writer.write(this._mixins.get$text());
2357 this.writeDynamicDispatchMetadata(); 2374 this.writeDynamicDispatchMetadata();
2358 this.writeGlobals(); 2375 this.writeGlobals();
2359 this.writer.writeln(('' + mainCall.get$code() + ';')); 2376 this.writer.writeln(('' + mainCall.get$code() + ';'));
2360 } 2377 }
2361 WorldGenerator.prototype.markLibrariesUsed = function(libs) { 2378 WorldGenerator.prototype.markLibrariesUsed = function(libs) {
2362 return this.getAllTypes(libs).forEach(this.get$markTypeUsed()); 2379 return this.getAllTypes(libs).forEach(this.get$markTypeUsed());
2363 } 2380 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2445 for (var $$i = 0;$$i < $$list.get$length(); $$i++) { 2462 for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
2446 var file = $$list.$index($$i); 2463 var file = $$list.$index($$i);
2447 var filename = basename(file.get$filename()); 2464 var filename = basename(file.get$filename());
2448 this.writer.comment(('// ********** Natives ' + filename + ' ************** ')); 2465 this.writer.comment(('// ********** Natives ' + filename + ' ************** '));
2449 this.writer.writeln(file.get$text()); 2466 this.writer.writeln(file.get$text());
2450 } 2467 }
2451 lib.topType.markUsed(); 2468 lib.topType.markUsed();
2452 var $$list = this._orderValues(lib.types); 2469 var $$list = this._orderValues(lib.types);
2453 for (var $$i = 0;$$i < $$list.get$length(); $$i++) { 2470 for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
2454 var type = $$list.$index($$i); 2471 var type = $$list.$index($$i);
2455 if ((type.get$isUsed() || $eq(type.get$library(), $globals.world.get$dom()) || type.get$isHiddenNativeType()) && type.get$isClass()) { 2472 if ((type.get$isUsed() || type.get$library().get$isDom() || type.get$isHidde nNativeType()) && type.get$isClass()) {
2456 this.writeType(type); 2473 this.writeType(type);
2457 if (type.get$isGeneric()) { 2474 if (type.get$isGeneric()) {
2458 var $list0 = this._orderValues(type.get$_concreteTypes()); 2475 var $list0 = this._orderValues(type.get$_concreteTypes());
2459 for (var $i0 = 0;$i0 < $list0.get$length(); $i0++) { 2476 for (var $i0 = 0;$i0 < $list0.get$length(); $i0++) {
2460 var ct = $list0.$index($i0); 2477 var ct = $list0.$index($i0);
2461 this.writeType(ct); 2478 this.writeType(ct);
2462 } 2479 }
2463 } 2480 }
2464 } 2481 }
2465 else if (type.get$isFunction() && type.get$varStubs().get$length() > 0) { 2482 else if (type.get$isFunction() && type.get$varStubs().get$length() > 0) {
(...skipping 27 matching lines...) Expand all
2493 var isSubtype = onType.isSubtypeOf(checkType); 2510 var isSubtype = onType.isSubtypeOf(checkType);
2494 if (checkType.isTested) { 2511 if (checkType.isTested) {
2495 this.writer.writeln(this._prototypeOf(onType, ('is\$' + checkType.get$jsname ())) + (' = function(){return ' + isSubtype + '};')); 2512 this.writer.writeln(this._prototypeOf(onType, ('is\$' + checkType.get$jsname ())) + (' = function(){return ' + isSubtype + '};'));
2496 } 2513 }
2497 if (checkType.isChecked) { 2514 if (checkType.isChecked) {
2498 var body = 'return this'; 2515 var body = 'return this';
2499 var checkName = ('assert\$' + checkType.get$jsname()); 2516 var checkName = ('assert\$' + checkType.get$jsname());
2500 if (!isSubtype) { 2517 if (!isSubtype) {
2501 body = $globals.world.objectType.varStubs.$index(checkName).get$body(); 2518 body = $globals.world.objectType.varStubs.$index(checkName).get$body();
2502 } 2519 }
2503 else if (onType.name == 'StringImplementation' || onType.name == 'NumImpleme ntation') { 2520 else if ($eq(onType, $globals.world.stringImplType) || $eq(onType, $globals. world.numImplType)) {
2504 body = ('return ' + onType.get$nativeType().name + '(this)'); 2521 body = ('return ' + onType.get$nativeType().name + '(this)');
2505 } 2522 }
2506 this.writer.writeln(this._prototypeOf(onType, checkName) + (' = function(){' + body + '};')); 2523 this.writer.writeln(this._prototypeOf(onType, checkName) + (' = function(){' + body + '};'));
2507 } 2524 }
2508 } 2525 }
2509 WorldGenerator.prototype.writeType = function(type) { 2526 WorldGenerator.prototype.writeType = function(type) {
2510 if (type.isWritten) return; 2527 if (type.isWritten) return;
2511 type.isWritten = true; 2528 type.isWritten = true;
2512 if (type.get$parent() != null && !type.get$isNative()) { 2529 if (type.get$parent() != null && !type.get$isNative()) {
2513 this.writeType(type.get$parent()); 2530 this.writeType(type.get$parent());
2514 } 2531 }
2515 if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$librar y(), $globals.world.get$coreimpl()) && type.name.startsWith('ListFactory')) { 2532 if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$librar y(), $globals.world.coreimpl) && type.name.startsWith('ListFactory')) {
2516 this.writer.writeln(('' + type.get$jsname() + ' = ' + type.get$genericType() .get$jsname() + ';')); 2533 this.writer.writeln(('' + type.get$jsname() + ' = ' + type.get$genericType() .get$jsname() + ';'));
2517 return; 2534 return;
2518 } 2535 }
2519 var typeName = type.get$jsname() != null ? type.get$jsname() : 'top level'; 2536 var typeName = type.get$jsname() != null ? type.get$jsname() : 'top level';
2520 this.writer.comment(('// ********** Code for ' + typeName + ' **************') ); 2537 this.writer.comment(('// ********** Code for ' + typeName + ' **************') );
2521 if (type.get$isNative() && !type.get$isTop()) { 2538 if (type.get$isNative() && !type.get$isTop()) {
2522 var nativeName = type.get$definition().get$nativeType().get$name(); 2539 var nativeName = type.get$definition().get$nativeType().get$name();
2523 if ($eq(nativeName, '')) { 2540 if ($eq(nativeName, '')) {
2524 this.writer.writeln(('function ' + type.get$jsname() + '() {}')); 2541 this.writer.writeln(('function ' + type.get$jsname() + '() {}'));
2525 } 2542 }
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
2738 } 2755 }
2739 } 2756 }
2740 WorldGenerator.prototype._usedDynamicDispatchOnType = function(type) { 2757 WorldGenerator.prototype._usedDynamicDispatchOnType = function(type) {
2741 if (this.typesWithDynamicDispatch == null) this.typesWithDynamicDispatch = new HashSetImplementation(); 2758 if (this.typesWithDynamicDispatch == null) this.typesWithDynamicDispatch = new HashSetImplementation();
2742 this.typesWithDynamicDispatch.add(type); 2759 this.typesWithDynamicDispatch.add(type);
2743 } 2760 }
2744 WorldGenerator.prototype.writeDynamicDispatchMetadata = function() { 2761 WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
2745 var $this = this; // closure support 2762 var $this = this; // closure support
2746 if (this.typesWithDynamicDispatch == null) return; 2763 if (this.typesWithDynamicDispatch == null) return;
2747 this.writer.comment(('// ' + this.typesWithDynamicDispatch.get$length() + ' dy namic types.')); 2764 this.writer.comment(('// ' + this.typesWithDynamicDispatch.get$length() + ' dy namic types.'));
2748 function typeTag(type) {
2749 return type.get$definition().get$nativeType().get$name();
2750 }
2751 var seen = new HashSetImplementation(); 2765 var seen = new HashSetImplementation();
2752 var types = []; 2766 var types = [];
2753 function visit(type) { 2767 function visit(type) {
2754 if (seen.contains$1(type)) return; 2768 if (seen.contains$1(type)) return;
2755 seen.add$1(type); 2769 seen.add$1(type);
2756 var $$list = $this._orderCollectionValues(type.get$directSubtypes()); 2770 var $$list = $this._orderCollectionValues(type.get$directSubtypes());
2757 for (var $$i = 0;$$i < $$list.get$length(); $$i++) { 2771 for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
2758 var subtype = $$list.$index($$i); 2772 var subtype = $$list.$index($$i);
2759 visit(subtype); 2773 visit(subtype);
2760 } 2774 }
(...skipping 11 matching lines...) Expand all
2772 this.writer.comment(('// ' + types.get$length() + ' types')); 2786 this.writer.comment(('// ' + types.get$length() + ' types'));
2773 this.writer.comment(('// ' + types.filter$1((function (t) { 2787 this.writer.comment(('// ' + types.filter$1((function (t) {
2774 return !t.get$directSubtypes().isEmpty$0(); 2788 return !t.get$directSubtypes().isEmpty$0();
2775 }) 2789 })
2776 ).get$length() + ' !leaf')); 2790 ).get$length() + ' !leaf'));
2777 var varNames = []; 2791 var varNames = [];
2778 var varDefns = new HashMapImplementation(); 2792 var varDefns = new HashMapImplementation();
2779 var tagDefns = new HashMapImplementation(); 2793 var tagDefns = new HashMapImplementation();
2780 function makeExpression(type) { 2794 function makeExpression(type) {
2781 var expressions = []; 2795 var expressions = [];
2782 var subtags = [typeTag(type)]; 2796 var subtags = [type.get$nativeName()];
2783 function walk(type) { 2797 function walk(type) {
2784 var $$list = $this._orderCollectionValues(type.get$directSubtypes()); 2798 var $$list = $this._orderCollectionValues(type.get$directSubtypes());
2785 for (var $$i = 0;$$i < $$list.get$length(); $$i++) { 2799 for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
2786 var subtype = $$list.$index($$i); 2800 var subtype = $$list.$index($$i);
2787 var tag = typeTag(subtype); 2801 var tag = subtype.get$nativeName();
2788 var existing = tagDefns.$index(tag); 2802 var existing = tagDefns.$index(tag);
2789 if (existing == null) { 2803 if (existing == null) {
2790 subtags.add$1(tag); 2804 subtags.add$1(tag);
2791 walk(subtype); 2805 walk(subtype);
2792 } 2806 }
2793 else { 2807 else {
2794 if (varDefns.containsKey$1(existing)) { 2808 if (varDefns.containsKey$1(existing)) {
2795 expressions.add$1(existing); 2809 expressions.add$1(existing);
2796 } 2810 }
2797 else { 2811 else {
(...skipping 13 matching lines...) Expand all
2811 if ($eq(expressions.get$length(), 1)) { 2825 if ($eq(expressions.get$length(), 1)) {
2812 expression = expressions.$index(0); 2826 expression = expressions.$index(0);
2813 } 2827 }
2814 else { 2828 else {
2815 expression = ("[" + Strings.join(expressions, ',') + "].join('|')"); 2829 expression = ("[" + Strings.join(expressions, ',') + "].join('|')");
2816 } 2830 }
2817 return expression; 2831 return expression;
2818 } 2832 }
2819 for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) { 2833 for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
2820 var type = $$i.next$0(); 2834 var type = $$i.next$0();
2821 tagDefns.$setindex(typeTag(type), makeExpression(type)); 2835 tagDefns.$setindex(type.get$nativeName(), makeExpression(type));
2822 } 2836 }
2823 if (!tagDefns.isEmpty$0()) { 2837 if (!tagDefns.isEmpty$0()) {
2824 this.writer.enterBlock('(function(){'); 2838 this.writer.enterBlock('(function(){');
2825 for (var $$i = varNames.iterator$0(); $$i.hasNext$0(); ) { 2839 for (var $$i = varNames.iterator$0(); $$i.hasNext$0(); ) {
2826 var varName = $$i.next$0(); 2840 var varName = $$i.next$0();
2827 this.writer.writeln(('var ' + varName + ' = ' + varDefns.$index(varName) + ';')); 2841 this.writer.writeln(('var ' + varName + ' = ' + varDefns.$index(varName) + ';'));
2828 } 2842 }
2829 this.writer.enterBlock('var table = ['); 2843 this.writer.enterBlock('var table = [');
2830 this.writer.comment('// [dynamic-dispatch-tag, tags of classes implementing dynamic-dispatch-tag]'/*'// [dynamic-dispatch-tag, ' 2844 this.writer.comment('// [dynamic-dispatch-tag, tags of classes implementing dynamic-dispatch-tag]'/*'// [dynamic-dispatch-tag, '
2831 + 'tags of classes implementing dynamic-dispatch-tag]'*/); 2845 + 'tags of classes implementing dynamic-dispatch-tag]'*/);
2832 for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) { 2846 for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
2833 var type0 = $$i.next$0(); 2847 var type0 = $$i.next$0();
2834 this.writer.writeln(("['" + typeTag(type0) + "', " + tagDefns.$index(typeT ag(type0)) + "],")); 2848 this.writer.writeln(("['" + type0.get$nativeName() + "', " + tagDefns.$ind ex(type0.get$nativeName()) + "],"));
2835 } 2849 }
2836 this.writer.exitBlock('];'); 2850 this.writer.exitBlock('];');
2837 this.writer.writeln('\$dynamicSetMetadata(table);'); 2851 this.writer.writeln('\$dynamicSetMetadata(table);');
2838 this.writer.exitBlock('})();'); 2852 this.writer.exitBlock('})();');
2839 } 2853 }
2840 } 2854 }
2841 WorldGenerator.prototype._orderValues = function(map) { 2855 WorldGenerator.prototype._orderValues = function(map) {
2842 var values = map.getValues(); 2856 var values = map.getValues();
2843 values.sort(this.get$_compareMembers()); 2857 values.sort(this.get$_compareMembers());
2844 return values; 2858 return values;
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
3370 this._scope = this._scope.parent; 3384 this._scope = this._scope.parent;
3371 } 3385 }
3372 MethodGenerator.prototype._makeLambdaMethod = function(name, func) { 3386 MethodGenerator.prototype._makeLambdaMethod = function(name, func) {
3373 var meth = new MethodMember(name, this.method.declaringType, func); 3387 var meth = new MethodMember(name, this.method.declaringType, func);
3374 meth.set$isLambda(true); 3388 meth.set$isLambda(true);
3375 meth.set$enclosingElement(this.method); 3389 meth.set$enclosingElement(this.method);
3376 meth.resolve$0(); 3390 meth.resolve$0();
3377 return meth; 3391 return meth;
3378 } 3392 }
3379 MethodGenerator.prototype.visitBool = function(node) { 3393 MethodGenerator.prototype.visitBool = function(node) {
3380 return this.visitValue(node).convertTo$3(this, $globals.world.nonNullBool, nod e); 3394 return this.visitValue(node).convertTo$2(this, $globals.world.nonNullBool);
3381 } 3395 }
3382 MethodGenerator.prototype.visitValue = function(node) { 3396 MethodGenerator.prototype.visitValue = function(node) {
3383 if (node == null) return null; 3397 if (node == null) return null;
3384 var value = node.visit(this); 3398 var value = node.visit(this);
3385 value.checkFirstClass$1(node.span); 3399 value.checkFirstClass$1(node.span);
3386 return value; 3400 return value;
3387 } 3401 }
3388 MethodGenerator.prototype.visitTypedValue = function(node, expectedType) { 3402 MethodGenerator.prototype.visitTypedValue = function(node, expectedType) {
3389 var val = this.visitValue(node); 3403 var val = this.visitValue(node);
3390 return expectedType == null ? val : val.convertTo$3(this, expectedType, node); 3404 return expectedType == null ? val : val.convertTo$2(this, expectedType);
3391 } 3405 }
3392 MethodGenerator.prototype.visitVoid = function(node) { 3406 MethodGenerator.prototype.visitVoid = function(node) {
3393 if ((node instanceof PostfixExpression)) { 3407 if ((node instanceof PostfixExpression)) {
3394 var value = this.visitPostfixExpression(node, true); 3408 var value = this.visitPostfixExpression(node, true);
3395 value.checkFirstClass$1(node.span); 3409 value.checkFirstClass$1(node.span);
3396 return value; 3410 return value;
3397 } 3411 }
3398 else if ((node instanceof BinaryExpression)) { 3412 else if ((node instanceof BinaryExpression)) {
3399 var value = this.visitBinaryExpression(node, true); 3413 var value = this.visitBinaryExpression(node, true);
3400 value.checkFirstClass$1(node.span); 3414 value.checkFirstClass$1(node.span);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3433 var val = this._scope.create(name, thisType, node.names.$index(i).get$span() , isFinal, false); 3447 var val = this._scope.create(name, thisType, node.names.$index(i).get$span() , isFinal, false);
3434 if (value == null) { 3448 if (value == null) {
3435 if (this._scope.reentrant) { 3449 if (this._scope.reentrant) {
3436 this.writer.write(('' + val.get$code() + ' = null')); 3450 this.writer.write(('' + val.get$code() + ' = null'));
3437 } 3451 }
3438 else { 3452 else {
3439 this.writer.write(('' + val.get$code())); 3453 this.writer.write(('' + val.get$code()));
3440 } 3454 }
3441 } 3455 }
3442 else { 3456 else {
3443 value = value.convertTo$3(this, type, node.values.$index(i)); 3457 value = value.convertTo$2(this, type);
3444 this.writer.write(('' + val.get$code() + ' = ' + value.get$code())); 3458 this.writer.write(('' + val.get$code() + ' = ' + value.get$code()));
3445 } 3459 }
3446 } 3460 }
3447 this.writer.writeln(';'); 3461 this.writer.writeln(';');
3448 return false; 3462 return false;
3449 } 3463 }
3450 MethodGenerator.prototype.visitFunctionDefinition = function(node) { 3464 MethodGenerator.prototype.visitFunctionDefinition = function(node) {
3451 var meth = this._makeLambdaMethod(node.name.name, node); 3465 var meth = this._makeLambdaMethod(node.name.name, node);
3452 var funcValue = this._scope.create(meth.get$name(), meth.get$functionType(), t his.method.get$definition().get$span(), true, false); 3466 var funcValue = this._scope.create(meth.get$name(), meth.get$functionType(), t his.method.get$definition().get$span(), true, false);
3453 $globals.world.gen.genMethod(meth, this); 3467 $globals.world.gen.genMethod(meth, this);
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
3999 return members._set$4(this, position, x, y); 4013 return members._set$4(this, position, x, y);
4000 } 4014 }
4001 else { 4015 else {
4002 x = members._get$3(this, position, x); 4016 x = members._get$3(this, position, x);
4003 } 4017 }
4004 } 4018 }
4005 } 4019 }
4006 if (x.get$isFinal()) { 4020 if (x.get$isFinal()) {
4007 $globals.world.error(('final variable "' + x.get$code() + '" is not assignab le'), position.span); 4021 $globals.world.error(('final variable "' + x.get$code() + '" is not assignab le'), position.span);
4008 } 4022 }
4009 y = y.convertTo$3(this, x.get$type(), yn); 4023 y = y.convertTo$2(this, x.get$type());
4010 if (kind == 0) { 4024 if (kind == 0) {
4011 x = captureOriginal(x); 4025 x = captureOriginal(x);
4012 return new Value(y.get$type(), ('' + x.get$code() + ' = ' + y.get$code()), p osition.span, true); 4026 return new Value(y.get$type(), ('' + x.get$code() + ' = ' + y.get$code()), p osition.span, true);
4013 } 4027 }
4014 else if (x.get$type().get$isNum() && y.get$type().get$isNum() && (kind != 46/* TokenKind.TRUNCDIV*/)) { 4028 else if (x.get$type().get$isNum() && y.get$type().get$isNum() && (kind != 46/* TokenKind.TRUNCDIV*/)) {
4015 x = captureOriginal(x); 4029 x = captureOriginal(x);
4016 var op = TokenKind.kindToString(kind); 4030 var op = TokenKind.kindToString(kind);
4017 return new Value(y.get$type(), ('' + x.get$code() + ' ' + op + '= ' + y.get$ code()), position.span, true); 4031 return new Value(y.get$type(), ('' + x.get$code() + ' ' + op + '= ' + y.get$ code()), position.span, true);
4018 } 4032 }
4019 else { 4033 else {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
4081 return new Value(assignValue.get$type(), ('(' + assignValue.get$code() + ')'), node.span, true); 4095 return new Value(assignValue.get$type(), ('(' + assignValue.get$code() + ')'), node.span, true);
4082 } 4096 }
4083 4097
4084 case 19/*TokenKind.NOT*/: 4098 case 19/*TokenKind.NOT*/:
4085 4099
4086 if (value.get$type().get$isBool() && value.get$isConst()) { 4100 if (value.get$type().get$isBool() && value.get$isConst()) {
4087 var newVal = !value.get$actualValue(); 4101 var newVal = !value.get$actualValue();
4088 return EvaluatedValue.EvaluatedValue$factory(value.get$type(), newVal, ( '' + newVal), node.span); 4102 return EvaluatedValue.EvaluatedValue$factory(value.get$type(), newVal, ( '' + newVal), node.span);
4089 } 4103 }
4090 else { 4104 else {
4091 var newVal = value.convertTo$3(this, $globals.world.nonNullBool, node); 4105 var newVal = value.convertTo$2(this, $globals.world.nonNullBool);
4092 return new Value(newVal.get$type(), ('!' + newVal.get$code()), node.span , true); 4106 return new Value(newVal.get$type(), ('!' + newVal.get$code()), node.span , true);
4093 } 4107 }
4094 4108
4095 case 42/*TokenKind.ADD*/: 4109 case 42/*TokenKind.ADD*/:
4096 4110
4097 return value.convertTo$3(this, $globals.world.numType, node); 4111 return value.convertTo$2(this, $globals.world.numType);
4098 4112
4099 case 43/*TokenKind.SUB*/: 4113 case 43/*TokenKind.SUB*/:
4100 case 18/*TokenKind.BIT_NOT*/: 4114 case 18/*TokenKind.BIT_NOT*/:
4101 4115
4102 if (node.op.kind == 18/*TokenKind.BIT_NOT*/) { 4116 if (node.op.kind == 18/*TokenKind.BIT_NOT*/) {
4103 return value.invoke$4(this, ':bit_not', node, Arguments.get$EMPTY()); 4117 return value.invoke$4(this, ':bit_not', node, Arguments.get$EMPTY());
4104 } 4118 }
4105 else if (node.op.kind == 43/*TokenKind.SUB*/) { 4119 else if (node.op.kind == 43/*TokenKind.SUB*/) {
4106 return value.invoke$4(this, ':negate', node, Arguments.get$EMPTY()); 4120 return value.invoke$4(this, ':negate', node, Arguments.get$EMPTY());
4107 } 4121 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
4216 argsCode.add$1(arg.get$code()); 4230 argsCode.add$1(arg.get$code());
4217 } 4231 }
4218 else { 4232 else {
4219 argsCode.add$1(arg.get$canonicalCode()); 4233 argsCode.add$1(arg.get$canonicalCode());
4220 } 4234 }
4221 } 4235 }
4222 else { 4236 else {
4223 argsCode.add$1(arg.get$code()); 4237 argsCode.add$1(arg.get$code());
4224 } 4238 }
4225 } 4239 }
4226 $globals.world.get$coreimpl().types.$index('ListFactory').markUsed$0(); 4240 $globals.world.listFactoryType.markUsed();
4227 var code = ('[' + Strings.join(argsCode, ", ") + ']'); 4241 var code = ('[' + Strings.join(argsCode, ", ") + ']');
4228 var value = new Value($globals.world.listType, code, node.span, true); 4242 var value = new Value($globals.world.listType, code, node.span, true);
4229 if (node.isConst) { 4243 if (node.isConst) {
4230 var immutableList = $globals.world.get$coreimpl().types.$index('ImmutableLis t'); 4244 var immutableList = $globals.world.immutableListType;
4231 var immutableListCtor = immutableList.getConstructor$1('from'); 4245 var immutableListCtor = immutableList.getConstructor('from');
4232 var result = immutableListCtor.invoke$4(this, node, new Value.type$ctor(valu e.get$type(), node.span), new Arguments(null, [value])); 4246 var result = immutableListCtor.invoke$4(this, node, new Value.type$ctor(valu e.get$type(), node.span), new Arguments(null, [value]));
4233 value = $globals.world.gen.globalForConst(ConstListValue.ConstListValue$fact ory(immutableList, argValues, ('const ' + code), result.get$code(), node.span), argValues); 4247 value = $globals.world.gen.globalForConst(ConstListValue.ConstListValue$fact ory(immutableList, argValues, ('const ' + code), result.get$code(), node.span), argValues);
4234 } 4248 }
4235 return value; 4249 return value;
4236 } 4250 }
4237 MethodGenerator.prototype.visitMapExpression = function(node) { 4251 MethodGenerator.prototype.visitMapExpression = function(node) {
4238 if (node.items.get$length() == 0 && !node.isConst) { 4252 if (node.items.get$length() == 0 && !node.isConst) {
4239 return $globals.world.mapType.getConstructor('').invoke$4(this, node, new Va lue.type$ctor($globals.world.mapType, node.span), Arguments.get$EMPTY()); 4253 return $globals.world.mapType.getConstructor('').invoke$4(this, node, new Va lue.type$ctor($globals.world.mapType, node.span), Arguments.get$EMPTY());
4240 } 4254 }
4241 var argValues = []; 4255 var argValues = [];
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
4350 if (this._expressionNeedsParens(item)) { 4364 if (this._expressionNeedsParens(item)) {
4351 code = ('(' + code + ')'); 4365 code = ('(' + code + ')');
4352 } 4366 }
4353 if ($eq(items.get$length(), 0) || ($ne(code, "''") && $ne(code, '""'))) { 4367 if ($eq(items.get$length(), 0) || ($ne(code, "''") && $ne(code, '""'))) {
4354 items.add$1(code); 4368 items.add$1(code);
4355 } 4369 }
4356 } 4370 }
4357 return new Value(type, ('(' + Strings.join(items, " + ") + ')'), node.span, true); 4371 return new Value(type, ('(' + Strings.join(items, " + ") + ')'), node.span, true);
4358 } 4372 }
4359 if ((typeof(node.value) == 'number')) { 4373 if ((typeof(node.value) == 'number')) {
4360 $globals.world.get$coreimpl().types.$index('NumImplementation').markUsed$0() ; 4374 $globals.world.numImplType.markUsed();
4361 } 4375 }
4362 var text = node.text; 4376 var text = node.text;
4363 if (type.get$isString()) { 4377 if (type.get$isString()) {
4364 $globals.world.get$coreimpl().types.$index('StringImplementation').markUsed$ 0(); 4378 $globals.world.stringImplType.markUsed();
4365 if (text.startsWith$1('@')) { 4379 if (text.startsWith$1('@')) {
4366 text = MethodGenerator._escapeString(parseStringLiteral(text)); 4380 text = MethodGenerator._escapeString(parseStringLiteral(text));
4367 text = ('"' + text + '"'); 4381 text = ('"' + text + '"');
4368 } 4382 }
4369 else if (isMultilineString(text)) { 4383 else if (isMultilineString(text)) {
4370 text = parseStringLiteral(text); 4384 text = parseStringLiteral(text);
4371 text = text.replaceAll$2('\n', '\\n'); 4385 text = text.replaceAll$2('\n', '\\n');
4372 text = toDoubleQuote(text); 4386 text = toDoubleQuote(text);
4373 text = ('"' + text + '"'); 4387 text = ('"' + text + '"');
4374 } 4388 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
4525 Library.prototype.get$library = function() { 4539 Library.prototype.get$library = function() {
4526 return this; 4540 return this;
4527 } 4541 }
4528 Library.prototype.get$isNative = function() { 4542 Library.prototype.get$isNative = function() {
4529 return this.topType.isNative; 4543 return this.topType.isNative;
4530 } 4544 }
4531 Library.prototype.get$isCore = function() { 4545 Library.prototype.get$isCore = function() {
4532 return $eq(this, $globals.world.corelib); 4546 return $eq(this, $globals.world.corelib);
4533 } 4547 }
4534 Library.prototype.get$isCoreImpl = function() { 4548 Library.prototype.get$isCoreImpl = function() {
4535 return $eq(this, $globals.world.get$coreimpl()); 4549 return $eq(this, $globals.world.coreimpl);
4550 }
4551 Library.prototype.get$isDom = function() {
4552 return $eq(this, $globals.world.dom);
4536 } 4553 }
4537 Library.prototype.get$span = function() { 4554 Library.prototype.get$span = function() {
4538 return new SourceSpan(this.baseSource, 0, 0); 4555 return new SourceSpan(this.baseSource, 0, 0);
4539 } 4556 }
4540 Library.prototype.makeFullPath = function(filename) { 4557 Library.prototype.makeFullPath = function(filename) {
4541 if (filename.startsWith('dart:')) return filename; 4558 if (filename.startsWith('dart:')) return filename;
4542 if (filename.startsWith('/')) return filename; 4559 if (filename.startsWith('/')) return filename;
4543 if (filename.startsWith('file:///')) return filename; 4560 if (filename.startsWith('file:///')) return filename;
4544 if (filename.startsWith('http://')) return filename; 4561 if (filename.startsWith('http://')) return filename;
4545 return joinPaths(this.sourceDir, filename); 4562 return joinPaths(this.sourceDir, filename);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4595 type.addMethod(':call', func); 4612 type.addMethod(':call', func);
4596 var m = type.members.$index(':call'); 4613 var m = type.members.$index(':call');
4597 m.set$enclosingElement(enclosingElement); 4614 m.set$enclosingElement(enclosingElement);
4598 m.resolve$0(); 4615 m.resolve$0();
4599 type.interfaces = [$globals.world.functionType]; 4616 type.interfaces = [$globals.world.functionType];
4600 return type; 4617 return type;
4601 } 4618 }
4602 Library.prototype.addType = function(name, definition, isClass) { 4619 Library.prototype.addType = function(name, definition, isClass) {
4603 if (this.types.containsKey(name)) { 4620 if (this.types.containsKey(name)) {
4604 var existingType = this.types.$index(name); 4621 var existingType = this.types.$index(name);
4605 if (this.get$isCore() && existingType.get$definition() == null) { 4622 if ((this.get$isCore() || this.get$isCoreImpl()) && existingType.get$definit ion() == null) {
4606 existingType.setDefinition$1(definition); 4623 existingType.setDefinition$1(definition);
4607 } 4624 }
4608 else { 4625 else {
4609 $globals.world.warning(('duplicate definition of ' + name), definition.spa n, existingType.get$span()); 4626 $globals.world.warning(('duplicate definition of ' + name), definition.spa n, existingType.get$span());
4610 } 4627 }
4611 } 4628 }
4612 else { 4629 else {
4613 this.types.$setindex(name, new DefinedType(name, this, definition, isClass)) ; 4630 this.types.$setindex(name, new DefinedType(name, this, definition, isClass)) ;
4614 } 4631 }
4615 return this.types.$index(name); 4632 return this.types.$index(name);
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
4984 } 5001 }
4985 Parameter.prototype.genValue = function(method, context) { 5002 Parameter.prototype.genValue = function(method, context) {
4986 if (this.definition.value == null || this.value != null) return; 5003 if (this.definition.value == null || this.value != null) return;
4987 if (context == null) { 5004 if (context == null) {
4988 context = new MethodGenerator(method, null); 5005 context = new MethodGenerator(method, null);
4989 } 5006 }
4990 this.value = this.definition.value.visit(context); 5007 this.value = this.definition.value.visit(context);
4991 if (!this.value.get$isConst()) { 5008 if (!this.value.get$isConst()) {
4992 $globals.world.error('default parameter values must be constant', this.value .span); 5009 $globals.world.error('default parameter values must be constant', this.value .span);
4993 } 5010 }
4994 this.value = this.value.convertTo(context, this.type, this.definition.value, f alse); 5011 this.value = this.value.convertTo(context, this.type, false);
4995 } 5012 }
4996 Parameter.prototype.copyWithNewType = function(newMethod, newType) { 5013 Parameter.prototype.copyWithNewType = function(newMethod, newType) {
4997 var ret = new Parameter(this.definition, newMethod); 5014 var ret = new Parameter(this.definition, newMethod);
4998 ret.set$type(newType); 5015 ret.set$type(newType);
4999 ret.set$name(this.name); 5016 ret.set$name(this.name);
5000 ret.set$isInitializer(this.isInitializer); 5017 ret.set$isInitializer(this.isInitializer);
5001 return ret; 5018 return ret;
5002 } 5019 }
5003 Parameter.prototype.get$isOptional = function() { 5020 Parameter.prototype.get$isOptional = function() {
5004 return this.definition != null && this.definition.value != null; 5021 return this.definition != null && this.definition.value != null;
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
5327 } 5344 }
5328 } 5345 }
5329 if (this.isStatic) { 5346 if (this.isStatic) {
5330 this.declaringType.markUsed(); 5347 this.declaringType.markUsed();
5331 var cv = this.computeValue(); 5348 var cv = this.computeValue();
5332 if (this.isFinal) { 5349 if (this.isFinal) {
5333 return cv; 5350 return cv;
5334 } 5351 }
5335 $globals.world.gen.hasStatics = true; 5352 $globals.world.gen.hasStatics = true;
5336 if (this.declaringType.get$isTop()) { 5353 if (this.declaringType.get$isTop()) {
5337 if ($eq(this.declaringType.get$library(), $globals.world.get$dom())) { 5354 if (this.declaringType.get$library().get$isDom()) {
5338 return new Value(this.type, ('' + this.get$jsname()), node.span, true); 5355 return new Value(this.type, ('' + this.get$jsname()), node.span, true);
5339 } 5356 }
5340 else { 5357 else {
5341 return new Value(this.type, ('\$globals.' + this.get$jsname()), node.spa n, true); 5358 return new Value(this.type, ('\$globals.' + this.get$jsname()), node.spa n, true);
5342 } 5359 }
5343 } 5360 }
5344 else if (this.declaringType.get$isNative()) { 5361 else if (this.declaringType.get$isNative()) {
5345 if (this.declaringType.get$isHiddenNativeType()) { 5362 if (this.declaringType.get$isHiddenNativeType()) {
5346 $globals.world.error('static field of hidden native type is inaccessible ', node.span); 5363 $globals.world.error('static field of hidden native type is inaccessible ', node.span);
5347 } 5364 }
5348 return new Value(this.type, ('' + this.declaringType.get$jsname() + '.' + this.get$jsname()), node.span, true); 5365 return new Value(this.type, ('' + this.declaringType.get$jsname() + '.' + this.get$jsname()), node.span, true);
5349 } 5366 }
5350 else { 5367 else {
5351 return new Value(this.type, ('\$globals.' + this.declaringType.get$jsname( ) + '_' + this.get$jsname()), node.span, true); 5368 return new Value(this.type, ('\$globals.' + this.declaringType.get$jsname( ) + '_' + this.get$jsname()), node.span, true);
5352 } 5369 }
5353 } 5370 }
5354 else if (target.get$isConst() && this.isFinal) { 5371 else if (target.get$isConst() && this.isFinal) {
5355 var constTarget = (target instanceof GlobalValue) ? target.get$dynamic().get $exp() : target; 5372 var constTarget = (target instanceof GlobalValue) ? target.get$dynamic().get $exp() : target;
5356 if ((constTarget instanceof ConstObjectValue)) { 5373 if ((constTarget instanceof ConstObjectValue)) {
5357 return constTarget.get$fields().$index(this.name); 5374 return constTarget.get$fields().$index(this.name);
5358 } 5375 }
5359 else if ($eq(constTarget.get$type(), $globals.world.stringType) && this.name == 'length') { 5376 else if ($eq(constTarget.get$type(), $globals.world.stringType) && this.name == 'length') {
5360 return new Value(this.type, ('' + constTarget.get$actualValue().get$length ()), node.span, true); 5377 return new Value(this.type, ('' + constTarget.get$actualValue().get$length ()), node.span, true);
5361 } 5378 }
5362 } 5379 }
5363 return new Value(this.type, ('' + target.code + '.' + this.get$jsname()), node .span, true); 5380 return new Value(this.type, ('' + target.code + '.' + this.get$jsname()), node .span, true);
5364 } 5381 }
5365 FieldMember.prototype._set = function(context, node, target, value, isDynamic) { 5382 FieldMember.prototype._set = function(context, node, target, value, isDynamic) {
5366 var lhs = this._get(context, node, target, isDynamic); 5383 var lhs = this._get(context, node, target, isDynamic);
5367 value = value.convertTo(context, this.type, node, isDynamic); 5384 value = value.convertTo(context, this.type, isDynamic);
5368 return new Value(this.type, ('' + lhs.get$code() + ' = ' + value.code), node.s pan, true); 5385 return new Value(this.type, ('' + lhs.get$code() + ' = ' + value.code), node.s pan, true);
5369 } 5386 }
5370 FieldMember.prototype._get$3 = function($0, $1, $2) { 5387 FieldMember.prototype._get$3 = function($0, $1, $2) {
5371 return this._get($0, $1, $2, false); 5388 return this._get($0, $1, $2, false);
5372 }; 5389 };
5373 FieldMember.prototype._get$3$isDynamic = FieldMember.prototype._get; 5390 FieldMember.prototype._get$3$isDynamic = FieldMember.prototype._get;
5374 FieldMember.prototype._get$4 = FieldMember.prototype._get; 5391 FieldMember.prototype._get$4 = FieldMember.prototype._get;
5375 FieldMember.prototype._set$4 = function($0, $1, $2, $3) { 5392 FieldMember.prototype._set$4 = function($0, $1, $2, $3) {
5376 return this._set($0, $1, $2, $3, false); 5393 return this._set($0, $1, $2, $3, false);
5377 }; 5394 };
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
5862 argsCode.add$1('this'); 5879 argsCode.add$1('this');
5863 } 5880 }
5864 var bareCount = args.get$bareCount(); 5881 var bareCount = args.get$bareCount();
5865 for (var i = 0; 5882 for (var i = 0;
5866 i < bareCount; i++) { 5883 i < bareCount; i++) {
5867 var arg = args.values.$index(i); 5884 var arg = args.values.$index(i);
5868 if (i >= this.parameters.get$length()) { 5885 if (i >= this.parameters.get$length()) {
5869 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.get $length(), false); 5886 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.get $length(), false);
5870 return this._argError(context, node, target, args, msg, i); 5887 return this._argError(context, node, target, args, msg, i);
5871 } 5888 }
5872 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, i sDynamic); 5889 arg = arg.convertTo$3(context, this.parameters.$index(i).get$type(), isDynam ic);
5873 if (this.isConst && arg.get$isConst()) { 5890 if (this.isConst && arg.get$isConst()) {
5874 argsCode.add$1(arg.get$canonicalCode()); 5891 argsCode.add$1(arg.get$canonicalCode());
5875 } 5892 }
5876 else { 5893 else {
5877 argsCode.add$1(arg.get$code()); 5894 argsCode.add$1(arg.get$code());
5878 } 5895 }
5879 } 5896 }
5880 var namedArgsUsed = 0; 5897 var namedArgsUsed = 0;
5881 if (bareCount < this.parameters.get$length()) { 5898 if (bareCount < this.parameters.get$length()) {
5882 this.genParameterValues(); 5899 this.genParameterValues();
5883 for (var i = bareCount; 5900 for (var i = bareCount;
5884 i < this.parameters.get$length(); i++) { 5901 i < this.parameters.get$length(); i++) {
5885 var arg = args.getValue(this.parameters.$index(i).get$name()); 5902 var arg = args.getValue(this.parameters.$index(i).get$name());
5886 if (arg == null) { 5903 if (arg == null) {
5887 arg = this.parameters.$index(i).get$value(); 5904 arg = this.parameters.$index(i).get$value();
5888 } 5905 }
5889 else { 5906 else {
5890 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), nod e, isDynamic); 5907 arg = arg.convertTo$3(context, this.parameters.$index(i).get$type(), isD ynamic);
5891 namedArgsUsed++; 5908 namedArgsUsed++;
5892 } 5909 }
5893 if (arg == null || !this.parameters.$index(i).get$isOptional()) { 5910 if (arg == null || !this.parameters.$index(i).get$isOptional()) {
5894 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true); 5911 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true);
5895 return this._argError(context, node, target, args, msg, i); 5912 return this._argError(context, node, target, args, msg, i);
5896 } 5913 }
5897 else { 5914 else {
5898 argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode () : arg.get$code()); 5915 argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode () : arg.get$code());
5899 } 5916 }
5900 } 5917 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
5947 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) { 5964 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) {
5948 code = ('' + target.get$dynamic().get$values().get$length()); 5965 code = ('' + target.get$dynamic().get$values().get$length());
5949 } 5966 }
5950 } 5967 }
5951 else if (this.name == 'isEmpty') { 5968 else if (this.name == 'isEmpty') {
5952 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) { 5969 if ((target instanceof ConstListValue) || (target instanceof ConstMapValue )) {
5953 code = ('' + target.get$dynamic().get$values().isEmpty$0()); 5970 code = ('' + target.get$dynamic().get$values().isEmpty$0());
5954 } 5971 }
5955 } 5972 }
5956 } 5973 }
5957 if (this.name == 'get:typeName' && $eq(this.declaringType.get$library(), $glob als.world.get$dom())) { 5974 if (this.name == 'get:typeName' && this.declaringType.get$library().get$isDom( )) {
5958 $globals.world.gen.corejs.ensureTypeNameOf(); 5975 $globals.world.gen.corejs.ensureTypeNameOf();
5959 } 5976 }
5960 return new Value(this.get$inferredResult(), code, node.span, true); 5977 return new Value(this.get$inferredResult(), code, node.span, true);
5961 } 5978 }
5962 MethodMember.prototype._invokeConstructor = function(context, node, target, args , argsString) { 5979 MethodMember.prototype._invokeConstructor = function(context, node, target, args , argsString) {
5963 this.declaringType.markUsed(); 5980 this.declaringType.markUsed();
5981 var ctor = this.get$constructorName();
5982 if (ctor != '') ctor = ('.' + ctor + '\$ctor');
5964 if (!target.isType) { 5983 if (!target.isType) {
5965 var code = (this.get$constructorName() != '') ? ('' + this.declaringType.get $jsname() + '.' + this.get$constructorName() + '\$ctor.call(' + argsString + ')' ) : ('' + this.declaringType.get$jsname() + '.call(' + argsString + ')'); 5984 var code = ('' + this.declaringType.get$nativeName() + ctor + '.call(' + arg sString + ')');
5966 return new Value(target.get$type(), code, node.span, true); 5985 return new Value(target.get$type(), code, node.span, true);
5967 } 5986 }
5968 else { 5987 else {
5969 var typeName = this.declaringType.get$isNative() ? this.declaringType.get$na tiveType().name : this.declaringType.get$jsname(); 5988 var code = ('new ' + this.declaringType.get$nativeName() + ctor + '(' + args String + ')');
5970 var code = (this.get$constructorName() != '') ? ('new ' + typeName + '.' + t his.get$constructorName() + '\$ctor(' + argsString + ')') : ('new ' + typeName + '(' + argsString + ')');
5971 if (this.isConst && (node instanceof NewExpression) && node.get$dynamic().ge t$isConst()) { 5989 if (this.isConst && (node instanceof NewExpression) && node.get$dynamic().ge t$isConst()) {
5972 return this._invokeConstConstructor(node, code, target, args); 5990 return this._invokeConstConstructor(node, code, target, args);
5973 } 5991 }
5974 else { 5992 else {
5975 return new Value(target.get$type(), code, node.span, true); 5993 var span = node != null ? node.span : target.span;
5994 return new Value(target.get$type(), code, span, true);
5976 } 5995 }
5977 } 5996 }
5978 } 5997 }
5979 MethodMember.prototype._invokeConstConstructor = function(node, code, target, ar gs) { 5998 MethodMember.prototype._invokeConstConstructor = function(node, code, target, ar gs) {
5980 var fields = new HashMapImplementation(); 5999 var fields = new HashMapImplementation();
5981 for (var i = 0; 6000 for (var i = 0;
5982 i < this.parameters.get$length(); i++) { 6001 i < this.parameters.get$length(); i++) {
5983 var param = this.parameters.$index(i); 6002 var param = this.parameters.$index(i);
5984 if (param.get$isInitializer()) { 6003 if (param.get$isInitializer()) {
5985 var value = null; 6004 var value = null;
(...skipping 5165 matching lines...) Expand 10 before | Expand all | Expand 10 after
11151 Type.prototype.get$interfaces = function() { 11170 Type.prototype.get$interfaces = function() {
11152 return null; 11171 return null;
11153 } 11172 }
11154 Type.prototype.get$parent = function() { 11173 Type.prototype.get$parent = function() {
11155 return null; 11174 return null;
11156 } 11175 }
11157 Type.prototype.getAllMembers = function() { 11176 Type.prototype.getAllMembers = function() {
11158 return new HashMapImplementation(); 11177 return new HashMapImplementation();
11159 } 11178 }
11160 Type.prototype.get$nativeName = function() { 11179 Type.prototype.get$nativeName = function() {
11161 return this.get$isNative() ? this.get$definition().get$nativeType().get$name() : null; 11180 return this.get$isNative() ? this.get$definition().get$nativeType().get$name() : this.get$jsname();
11162 } 11181 }
11163 Type.prototype.get$avoidNativeName = function() { 11182 Type.prototype.get$avoidNativeName = function() {
11164 return this.get$isHiddenNativeType(); 11183 return this.get$isHiddenNativeType();
11165 } 11184 }
11166 Type.prototype.get$hasNativeSubtypes = function() { 11185 Type.prototype.get$hasNativeSubtypes = function() {
11167 if (this._hasNativeSubtypes == null) { 11186 if (this._hasNativeSubtypes == null) {
11168 this._hasNativeSubtypes = this.get$subtypes().some((function (t) { 11187 this._hasNativeSubtypes = this.get$subtypes().some((function (t) {
11169 return t.get$isNative(); 11188 return t.get$isNative();
11170 }) 11189 })
11171 ); 11190 );
(...skipping 1311 matching lines...) Expand 10 before | Expand all | Expand 10 after
12483 Value.prototype.checkFirstClass = function(span) { 12502 Value.prototype.checkFirstClass = function(span) {
12484 if (this.isType) { 12503 if (this.isType) {
12485 $globals.world.error('Types are not first class', span); 12504 $globals.world.error('Types are not first class', span);
12486 } 12505 }
12487 } 12506 }
12488 Value.prototype._varCall = function(context, node, args) { 12507 Value.prototype._varCall = function(context, node, args) {
12489 var stub = $globals.world.functionType.getCallStub(args); 12508 var stub = $globals.world.functionType.getCallStub(args);
12490 return stub.invoke$4(context, node, this, args); 12509 return stub.invoke$4(context, node, this, args);
12491 } 12510 }
12492 Value.prototype.needsConversion = function(toType) { 12511 Value.prototype.needsConversion = function(toType) {
12493 var callMethod = toType.getCallMethod(); 12512 return $ne(this, this.convertTo(null, toType, true));
12494 if (callMethod != null) {
12495 var arity = callMethod.get$parameters().get$length();
12496 var myCall = this.get$type().getCallMethod();
12497 if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
12498 return true;
12499 }
12500 }
12501 if ($globals.options.enableTypeChecks) {
12502 var fromType = this.get$type();
12503 if (this.get$type().get$isVar() && (this.code != 'null' || !toType.get$isNul lable())) {
12504 fromType = $globals.world.objectType;
12505 }
12506 var bothNum = this.get$type().get$isNum() && toType.get$isNum();
12507 return !(fromType.isSubtypeOf(toType) || bothNum);
12508 }
12509 return false;
12510 } 12513 }
12511 Value.prototype.convertTo = function(context, toType, node, isDynamic) { 12514 Value.prototype.convertTo = function(context, toType, isDynamic) {
12512 var checked = !isDynamic; 12515 var checked = !isDynamic;
12513 var callMethod = toType.getCallMethod(); 12516 var callMethod = toType.getCallMethod();
12514 if (callMethod != null) { 12517 if (callMethod != null) {
12515 if (checked && !toType.isAssignable(this.get$type())) { 12518 if (checked && !toType.isAssignable(this.get$type())) {
12516 this.convertWarning(toType, node); 12519 this.convertWarning(toType);
12517 } 12520 }
12518 var arity = callMethod.get$parameters().get$length(); 12521 return this._maybeWrapFunction(toType, callMethod);
12519 var myCall = this.get$type().getCallMethod();
12520 if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
12521 var stub = $globals.world.functionType.getCallStub(Arguments.Arguments$bar e$factory(arity));
12522 var val = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), node.span, true);
12523 return this._isDomCallback(toType) && !this._isDomCallback(this.get$type() ) ? val._wrapDomCallback$2(toType, arity) : val;
12524 }
12525 else if (this._isDomCallback(toType) && !this._isDomCallback(this.get$type() )) {
12526 return this._wrapDomCallback(toType, arity);
12527 }
12528 } 12522 }
12529 var fromType = this.get$type(); 12523 var fromType = this.get$type();
12530 if (this.get$type().get$isVar() && (this.code != 'null' || !toType.get$isNulla ble())) { 12524 if (this.get$type().get$isVar() && (this.code != 'null' || !toType.get$isNulla ble())) {
12531 fromType = $globals.world.objectType; 12525 fromType = $globals.world.objectType;
12532 } 12526 }
12533 var bothNum = this.get$type().get$isNum() && toType.get$isNum(); 12527 var bothNum = this.get$type().get$isNum() && toType.get$isNum();
12534 if (fromType.isSubtypeOf(toType) || bothNum) { 12528 if (fromType.isSubtypeOf(toType) || bothNum) {
12535 return this; 12529 return this;
12536 } 12530 }
12537 if (checked && !toType.isSubtypeOf(this.get$type())) { 12531 if (checked && !toType.isSubtypeOf(this.get$type())) {
12538 this.convertWarning(toType, node); 12532 this.convertWarning(toType);
12539 } 12533 }
12540 if ($globals.options.enableTypeChecks) { 12534 if ($globals.options.enableTypeChecks) {
12541 return this._typeAssert(context, toType, node, isDynamic); 12535 if (context == null && isDynamic) {
12536 return null;
12537 }
12538 return this._typeAssert(context, toType, isDynamic);
12542 } 12539 }
12543 else { 12540 else {
12544 return this; 12541 return this;
12545 } 12542 }
12546 } 12543 }
12547 Value.prototype._isDomCallback = function(toType) { 12544 Value.prototype._maybeWrapFunction = function(toType, callMethod) {
12548 return ((toType.get$definition() instanceof FunctionTypeDefinition) && $eq(toT ype.get$library(), $globals.world.get$dom())); 12545 var arity = callMethod.parameters.get$length();
12546 var myCall = this.get$type().getCallMethod();
12547 var result = this;
12548 if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
12549 var stub = $globals.world.functionType.getCallStub(Arguments.Arguments$bare$ factory(arity));
12550 result = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), thi s.span, true);
12551 }
12552 if (toType.get$library().get$isDom() && !this.get$type().get$library().get$isD om()) {
12553 if (arity == 0) {
12554 $globals.world.gen.corejs.useWrap0 = true;
12555 }
12556 else {
12557 $globals.world.gen.corejs.useWrap1 = true;
12558 }
12559 result = new Value(toType, ('\$wrap_call\$' + arity + '(' + result.code + ') '), this.span, true);
12560 }
12561 return result;
12549 } 12562 }
12550 Value.prototype._wrapDomCallback = function(toType, arity) { 12563 Value.prototype._typeAssert = function(context, toType, isDynamic) {
12551 if (arity == 0) {
12552 $globals.world.gen.corejs.useWrap0 = true;
12553 }
12554 else {
12555 $globals.world.gen.corejs.useWrap1 = true;
12556 }
12557 return new Value(toType, ('\$wrap_call\$' + arity + '(' + this.code + ')'), th is.span, true);
12558 }
12559 Value.prototype._typeAssert = function(context, toType, node, isDynamic) {
12560 if ((toType instanceof ParameterType)) { 12564 if ((toType instanceof ParameterType)) {
12561 var p = toType; 12565 var p = toType;
12562 toType = p.extendsType; 12566 toType = p.extendsType;
12563 } 12567 }
12564 if (toType.get$isObject() || toType.get$isVar()) { 12568 if (toType.get$isObject() || toType.get$isVar()) {
12565 $globals.world.internalError(('We thought ' + this.get$type().name + ' is no t a subtype of ' + toType.name + '?')); 12569 $globals.world.internalError(('We thought ' + this.get$type().name + ' is no t a subtype of ' + toType.name + '?'));
12566 } 12570 }
12567 function throwTypeError(paramName) { 12571 function throwTypeError(paramName) {
12568 return $globals.world.withoutForceDynamic((function () { 12572 return $globals.world.withoutForceDynamic((function () {
12569 var typeError = $globals.world.corelib.types.$index('TypeError'); 12573 var typeErrorCtor = $globals.world.typeErrorType.getConstructor('_internal ');
12570 var typeErrorCtor = typeError.getConstructor$1('_internal');
12571 $globals.world.gen.corejs.ensureTypeNameOf(); 12574 $globals.world.gen.corejs.ensureTypeNameOf();
12572 var result = typeErrorCtor.invoke$5(context, node, new Value.type$ctor(typ eError, null), new Arguments(null, [new Value($globals.world.objectType, paramNa me, null, true), new Value($globals.world.stringType, ('"' + toType.name + '"'), null, true)]), isDynamic); 12575 var result = typeErrorCtor.invoke$5(context, null, new Value.type$ctor($gl obals.world.typeErrorType, null), new Arguments(null, [new Value($globals.world. objectType, paramName, null, true), new Value($globals.world.stringType, ('"' + toType.name + '"'), null, true)]), isDynamic);
12573 $globals.world.gen.corejs.useThrow = true; 12576 $globals.world.gen.corejs.useThrow = true;
12574 return ('\$throw(' + result.get$code() + ')'); 12577 return ('\$throw(' + result.get$code() + ')');
12575 }) 12578 })
12576 ); 12579 );
12577 } 12580 }
12578 if (toType.get$isNum()) toType = $globals.world.numType; 12581 if (toType.get$isNum()) toType = $globals.world.numType;
12579 var check; 12582 var check;
12580 if (toType.get$isVoid()) { 12583 if (toType.get$isVoid()) {
12581 check = ('\$assert_void(' + this.code + ')'); 12584 check = ('\$assert_void(' + this.code + ')');
12582 if (toType.typeCheckCode == null) { 12585 if (toType.typeCheckCode == null) {
(...skipping 10 matching lines...) Expand all
12593 toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if ( x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n " + throwTypeError("x") + "\n}"); 12596 toType.typeCheckCode = ("function $assert_" + toType.name + "(x) {\n if ( x == null || typeof(x) == \"" + toType.get$typeofName() + "\") return x;\n " + throwTypeError("x") + "\n}");
12594 } 12597 }
12595 } 12598 }
12596 else { 12599 else {
12597 toType.isChecked = true; 12600 toType.isChecked = true;
12598 var checkName = 'assert\$' + toType.get$jsname(); 12601 var checkName = 'assert\$' + toType.get$jsname();
12599 var temp = context.getTemp(this); 12602 var temp = context.getTemp(this);
12600 check = ('(' + context.assignTemp(temp, this).code + ' == null ? null :'); 12603 check = ('(' + context.assignTemp(temp, this).code + ' == null ? null :');
12601 check = check + (' ' + temp.get$code() + '.' + checkName + '())'); 12604 check = check + (' ' + temp.get$code() + '.' + checkName + '())');
12602 if ($ne(this, temp)) context.freeTemp(temp); 12605 if ($ne(this, temp)) context.freeTemp(temp);
12603 if (!$globals.world.objectType.varStubs.containsKey(checkName)) { 12606 $globals.world.objectType.varStubs.putIfAbsent(checkName, (function () {
12604 $globals.world.objectType.varStubs.$setindex(checkName, new VarMethodStub( checkName, null, Arguments.get$EMPTY(), throwTypeError('this'))); 12607 return new VarMethodStub(checkName, null, Arguments.get$EMPTY(), throwType Error('this'));
12605 } 12608 })
12609 );
12606 } 12610 }
12607 return new Value(toType, check, this.span, true); 12611 return new Value(toType, check, this.span, true);
12608 } 12612 }
12609 Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck) { 12613 Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck) {
12610 if (toType.get$isVar()) { 12614 if (toType.get$isVar()) {
12611 $globals.world.error('can not resolve type', span); 12615 $globals.world.error('can not resolve type', span);
12612 } 12616 }
12613 var testCode = null; 12617 var testCode = null;
12614 if (toType.get$isVar() || toType.get$isObject() || (toType instanceof Paramete rType)) { 12618 if (toType.get$isVar() || toType.get$isObject() || (toType instanceof Paramete rType)) {
12615 if (this.needsTemp) { 12619 if (this.needsTemp) {
(...skipping 28 matching lines...) Expand all
12644 else { 12648 else {
12645 testCode = '!' + testCode; 12649 testCode = '!' + testCode;
12646 } 12650 }
12647 if ($ne(this, temp)) context.freeTemp(temp); 12651 if ($ne(this, temp)) context.freeTemp(temp);
12648 if (!$globals.world.objectType.varStubs.containsKey(checkName)) { 12652 if (!$globals.world.objectType.varStubs.containsKey(checkName)) {
12649 $globals.world.objectType.varStubs.$setindex(checkName, new VarMethodStub( checkName, null, Arguments.get$EMPTY(), 'return false')); 12653 $globals.world.objectType.varStubs.$setindex(checkName, new VarMethodStub( checkName, null, Arguments.get$EMPTY(), 'return false'));
12650 } 12654 }
12651 } 12655 }
12652 return new Value($globals.world.nonNullBool, testCode, span, true); 12656 return new Value($globals.world.nonNullBool, testCode, span, true);
12653 } 12657 }
12654 Value.prototype.convertWarning = function(toType, node) { 12658 Value.prototype.convertWarning = function(toType) {
12655 $globals.world.warning(('type "' + this.get$type().name + '" is not assignable to "' + toType.name + '"'), node.span); 12659 $globals.world.warning(('type "' + this.get$type().name + '" is not assignable to "' + toType.name + '"'), this.span);
12656 } 12660 }
12657 Value.prototype.invokeNoSuchMethod = function(context, name, node, args) { 12661 Value.prototype.invokeNoSuchMethod = function(context, name, node, args) {
12658 var pos = ''; 12662 var pos = '';
12659 if (args != null) { 12663 if (args != null) {
12660 var argsCode = []; 12664 var argsCode = [];
12661 for (var i = 0; 12665 for (var i = 0;
12662 i < args.get$length(); i++) { 12666 i < args.get$length(); i++) {
12663 argsCode.add$1(args.values.$index(i).get$code()); 12667 argsCode.add$1(args.values.$index(i).get$code());
12664 } 12668 }
12665 pos = Strings.join(argsCode, ", "); 12669 pos = Strings.join(argsCode, ", ");
12666 } 12670 }
12667 var noSuchArgs = [new Value($globals.world.stringType, ('"' + name + '"'), nod e.span, true), new Value($globals.world.listType, ('[' + pos + ']'), node.span, true)]; 12671 var noSuchArgs = [new Value($globals.world.stringType, ('"' + name + '"'), nod e.span, true), new Value($globals.world.listType, ('[' + pos + ']'), node.span, true)];
12668 return this._resolveMember(context, 'noSuchMethod', node, false).invoke$4(cont ext, node, this, new Arguments(null, noSuchArgs)); 12672 return this._resolveMember(context, 'noSuchMethod', node, false).invoke$4(cont ext, node, this, new Arguments(null, noSuchArgs));
12669 } 12673 }
12670 Value.prototype._wrapDomCallback$2 = Value.prototype._wrapDomCallback;
12671 Value.prototype.checkFirstClass$1 = Value.prototype.checkFirstClass; 12674 Value.prototype.checkFirstClass$1 = Value.prototype.checkFirstClass;
12672 Value.prototype.convertTo$3 = function($0, $1, $2) { 12675 Value.prototype.convertTo$2 = function($0, $1) {
12673 return this.convertTo($0, $1, $2, false); 12676 return this.convertTo($0, $1, false);
12674 }; 12677 };
12675 Value.prototype.convertTo$4 = Value.prototype.convertTo; 12678 Value.prototype.convertTo$3 = Value.prototype.convertTo;
12676 Value.prototype.get_$3 = Value.prototype.get_; 12679 Value.prototype.get_$3 = Value.prototype.get_;
12677 Value.prototype.instanceOf$3$isTrue$forceCheck = Value.prototype.instanceOf; 12680 Value.prototype.instanceOf$3$isTrue$forceCheck = Value.prototype.instanceOf;
12678 Value.prototype.instanceOf$4 = function($0, $1, $2, $3) { 12681 Value.prototype.instanceOf$4 = function($0, $1, $2, $3) {
12679 return this.instanceOf($0, $1, $2, $3, false); 12682 return this.instanceOf($0, $1, $2, $3, false);
12680 }; 12683 };
12681 Value.prototype.invoke$4 = function($0, $1, $2, $3) { 12684 Value.prototype.invoke$4 = function($0, $1, $2, $3) {
12682 return this.invoke($0, $1, $2, $3, false); 12685 return this.invoke($0, $1, $2, $3, false);
12683 }; 12686 };
12684 Value.prototype.invoke$4$isDynamic = Value.prototype.invoke; 12687 Value.prototype.invoke$4$isDynamic = Value.prototype.invoke;
12685 Value.prototype.invoke$5 = Value.prototype.invoke; 12688 Value.prototype.invoke$5 = Value.prototype.invoke;
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
12911 this.jsBytesWritten = 0 12914 this.jsBytesWritten = 0
12912 this.seenFatal = false 12915 this.seenFatal = false
12913 this.files = files; 12916 this.files = files;
12914 this.libraries = new HashMapImplementation(); 12917 this.libraries = new HashMapImplementation();
12915 this._todo = []; 12918 this._todo = [];
12916 this._members = new HashMapImplementation(); 12919 this._members = new HashMapImplementation();
12917 this._topNames = new HashMapImplementation(); 12920 this._topNames = new HashMapImplementation();
12918 this.reader = new LibraryReader(); 12921 this.reader = new LibraryReader();
12919 // Initializers done 12922 // Initializers done
12920 } 12923 }
12921 World.prototype.get$coreimpl = function() {
12922 return this.libraries.$index('dart:coreimpl');
12923 }
12924 World.prototype.get$dom = function() {
12925 return this.libraries.$index('dart:dom');
12926 }
12927 World.prototype.get$functionType = function() { return this.functionType; }; 12924 World.prototype.get$functionType = function() { return this.functionType; };
12928 World.prototype.set$functionType = function(value) { return this.functionType = value; }; 12925 World.prototype.set$functionType = function(value) { return this.functionType = value; };
12929 World.prototype.init = function() { 12926 World.prototype.init = function() {
12930 this.corelib = new Library(this.readFile('dart:core')); 12927 this.corelib = new Library(this.readFile('dart:core'));
12931 this.libraries.$setindex('dart:core', this.corelib); 12928 this.libraries.$setindex('dart:core', this.corelib);
12932 this._todo.add(this.corelib); 12929 this._todo.add(this.corelib);
12933 this.voidType = this._addToCoreLib('void', false); 12930 this.coreimpl = this.getOrAddLibrary('dart:coreimpl');
12934 this.dynamicType = this._addToCoreLib('Dynamic', false); 12931 this.voidType = this.corelib.addType('void', null, false);
12932 this.dynamicType = this.corelib.addType('Dynamic', null, false);
12935 this.varType = this.dynamicType; 12933 this.varType = this.dynamicType;
12936 this.objectType = this._addToCoreLib('Object', true); 12934 this.objectType = this.corelib.addType('Object', null, true);
12937 this.numType = this._addToCoreLib('num', false); 12935 this.numType = this.corelib.addType('num', null, false);
12938 this.intType = this._addToCoreLib('int', false); 12936 this.intType = this.corelib.addType('int', null, false);
12939 this.doubleType = this._addToCoreLib('double', false); 12937 this.doubleType = this.corelib.addType('double', null, false);
12940 this.boolType = this._addToCoreLib('bool', false); 12938 this.boolType = this.corelib.addType('bool', null, false);
12941 this.stringType = this._addToCoreLib('String', false); 12939 this.stringType = this.corelib.addType('String', null, false);
12942 this.listType = this._addToCoreLib('List', false); 12940 this.listType = this.corelib.addType('List', null, false);
12943 this.mapType = this._addToCoreLib('Map', false); 12941 this.mapType = this.corelib.addType('Map', null, false);
12944 this.functionType = this._addToCoreLib('Function', false); 12942 this.functionType = this.corelib.addType('Function', null, false);
12943 this.typeErrorType = this.corelib.addType('TypeError', null, false);
12944 this.numImplType = this.coreimpl.addType('NumImplementation', null, true);
12945 this.stringImplType = this.coreimpl.addType('StringImplementation', null, true );
12946 this.immutableListType = this.coreimpl.addType('ImmutableList', null, true);
12947 this.listFactoryType = this.coreimpl.addType('ListFactory', null, true);
12948 this.functionImplType = this.coreimpl.addType('_FunctionImplementation', null, true);
12945 this.nonNullBool = new NonNullableType(this.boolType); 12949 this.nonNullBool = new NonNullableType(this.boolType);
12946 } 12950 }
12947 World.prototype._addMember = function(member) { 12951 World.prototype._addMember = function(member) {
12948 if (member.get$isStatic()) { 12952 if (member.get$isStatic()) {
12949 if (member.declaringType.get$isTop()) { 12953 if (member.declaringType.get$isTop()) {
12950 this._addTopName(member); 12954 this._addTopName(member);
12951 } 12955 }
12952 return; 12956 return;
12953 } 12957 }
12954 var mset = this._members.$index(member.name); 12958 var mset = this._members.$index(member.name);
12955 if (mset == null) { 12959 if (mset == null) {
12956 mset = new MemberSet(member, true); 12960 mset = new MemberSet(member, true);
12957 this._members.$setindex(mset.get$name(), mset); 12961 this._members.$setindex(mset.get$name(), mset);
12958 } 12962 }
12959 else { 12963 else {
12960 mset.get$members().add$1(member); 12964 mset.get$members().add$1(member);
12961 } 12965 }
12962 } 12966 }
12963 World.prototype._addTopName = function(named) { 12967 World.prototype._addTopName = function(named) {
12964 if (named.get$nativeName() != null) { 12968 if ((named instanceof Type) && named.get$isNative()) {
12965 this._addJavascriptTopName(named, named.get$nativeName()); 12969 this._addJavascriptTopName(named, named.get$nativeName());
12966 } 12970 }
12967 this._addJavascriptTopName(named, named.get$jsname()); 12971 this._addJavascriptTopName(named, named.get$jsname());
12968 } 12972 }
12969 World.prototype._addJavascriptTopName = function(named, name) { 12973 World.prototype._addJavascriptTopName = function(named, name) {
12970 var existing = this._topNames.$index(name); 12974 var existing = this._topNames.$index(name);
12971 if (existing === named) { 12975 if (existing === named) {
12972 if (named.get$avoidNativeName()) { 12976 if (named.get$avoidNativeName()) {
12973 this._renameJavascriptTopName(named); 12977 this._renameJavascriptTopName(named);
12974 } 12978 }
(...skipping 26 matching lines...) Expand all
13001 named._jsname = ('' + named.get$library().get$jsname() + '_' + named.get$jsnam e()); 13005 named._jsname = ('' + named.get$library().get$jsname() + '_' + named.get$jsnam e());
13002 var existing = this._topNames.$index(named.get$jsname()); 13006 var existing = this._topNames.$index(named.get$jsname());
13003 if (existing != null && $ne(existing, named)) { 13007 if (existing != null && $ne(existing, named)) {
13004 $globals.world.internalError(('name mangling failed for "' + named.get$jsnam e() + '" ') + ('("' + named.get$jsname() + '" defined also in ' + existing.get$s pan().get$locationText() + ')'), named.get$span()); 13008 $globals.world.internalError(('name mangling failed for "' + named.get$jsnam e() + '" ') + ('("' + named.get$jsname() + '" defined also in ' + existing.get$s pan().get$locationText() + ')'), named.get$span());
13005 } 13009 }
13006 this._topNames.$setindex(named.get$jsname(), named); 13010 this._topNames.$setindex(named.get$jsname(), named);
13007 } 13011 }
13008 World.prototype._addType = function(type) { 13012 World.prototype._addType = function(type) {
13009 if (!type.get$isTop()) this._addTopName(type); 13013 if (!type.get$isTop()) this._addTopName(type);
13010 } 13014 }
13011 World.prototype._addToCoreLib = function(name, isClass) {
13012 var ret = new DefinedType(name, this.corelib, null, isClass);
13013 this.corelib.types.$setindex(name, ret);
13014 return ret;
13015 }
13016 World.prototype.toJsIdentifier = function(name) { 13015 World.prototype.toJsIdentifier = function(name) {
13017 if (name == null) return null; 13016 if (name == null) return null;
13018 if (this._jsKeywords == null) { 13017 if (this._jsKeywords == null) {
13019 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']) ; 13018 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']) ;
13020 } 13019 }
13021 if (this._jsKeywords.contains(name)) { 13020 if (this._jsKeywords.contains(name)) {
13022 return name + '_'; 13021 return name + '_';
13023 } 13022 }
13024 else { 13023 else {
13025 return name.replaceAll("$", "$$").replaceAll(':', "$"); 13024 return name.replaceAll("$", "$$").replaceAll(':', "$");
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
13117 library = new Library(this.readFile(filename)); 13116 library = new Library(this.readFile(filename));
13118 this.info(('read library ' + filename)); 13117 this.info(('read library ' + filename));
13119 if (!library.get$isCore() && !library.imports.some((function (li) { 13118 if (!library.get$isCore() && !library.imports.some((function (li) {
13120 return li.get$library().get$isCore(); 13119 return li.get$library().get$isCore();
13121 }) 13120 })
13122 )) { 13121 )) {
13123 library.imports.add(new LibraryImport(this.corelib)); 13122 library.imports.add(new LibraryImport(this.corelib));
13124 } 13123 }
13125 this.libraries.$setindex(filename, library); 13124 this.libraries.$setindex(filename, library);
13126 this._todo.add(library); 13125 this._todo.add(library);
13126 if (filename == 'dart:dom') {
13127 this.dom = library;
13128 }
13127 } 13129 }
13128 return library; 13130 return library;
13129 } 13131 }
13130 World.prototype.process = function() { 13132 World.prototype.process = function() {
13131 while (this._todo.get$length() > 0) { 13133 while (this._todo.get$length() > 0) {
13132 var todo = this._todo; 13134 var todo = this._todo;
13133 this._todo = []; 13135 this._todo = [];
13134 for (var $$i = 0;$$i < todo.get$length(); $$i++) { 13136 for (var $$i = 0;$$i < todo.get$length(); $$i++) {
13135 var lib = todo.$index($$i); 13137 var lib = todo.$index($$i);
13136 lib.visitSources$0(); 13138 lib.visitSources$0();
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
13461 return new Value(this.get$returnType(), ('' + target.code + '.' + this.name + '(' + args.getCode() + ')'), node.span, true); 13463 return new Value(this.get$returnType(), ('' + target.code + '.' + this.name + '(' + args.getCode() + ')'), node.span, true);
13462 } 13464 }
13463 VarMember.prototype.generate$1 = VarMember.prototype.generate; 13465 VarMember.prototype.generate$1 = VarMember.prototype.generate;
13464 VarMember.prototype.invoke$4 = VarMember.prototype.invoke; 13466 VarMember.prototype.invoke$4 = VarMember.prototype.invoke;
13465 // ********** Code for VarFunctionStub ************** 13467 // ********** Code for VarFunctionStub **************
13466 $inherits(VarFunctionStub, VarMember); 13468 $inherits(VarFunctionStub, VarMember);
13467 function VarFunctionStub(name, callArgs) { 13469 function VarFunctionStub(name, callArgs) {
13468 this.args = callArgs.toCallStubArgs(); 13470 this.args = callArgs.toCallStubArgs();
13469 // Initializers done 13471 // Initializers done
13470 VarMember.call(this, name); 13472 VarMember.call(this, name);
13471 var funcImpl = $globals.world.get$coreimpl().types.$index('_FunctionImplementa tion'); 13473 $globals.world.functionImplType.markUsed();
13472 funcImpl.markUsed$0(); 13474 $globals.world.gen.genMethod($globals.world.functionImplType.getMember('_genSt ub'));
13473 $globals.world.gen.genMethod(funcImpl.getMember$1('_genStub'));
13474 } 13475 }
13475 VarFunctionStub.prototype.invoke = function(context, node, target, args) { 13476 VarFunctionStub.prototype.invoke = function(context, node, target, args) {
13476 return VarMember.prototype.invoke.call(this, context, node, target, args); 13477 return VarMember.prototype.invoke.call(this, context, node, target, args);
13477 } 13478 }
13478 VarFunctionStub.prototype.generate = function(code) { 13479 VarFunctionStub.prototype.generate = function(code) {
13479 this.isGenerated = true; 13480 this.isGenerated = true;
13480 if (this.args.get$hasNames()) { 13481 if (this.args.get$hasNames()) {
13481 this.generateNamed(code); 13482 this.generateNamed(code);
13482 } 13483 }
13483 else { 13484 else {
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
13796 $globals._RED_COLOR = '\u001b[31m'; 13797 $globals._RED_COLOR = '\u001b[31m';
13797 } 13798 }
13798 var const$1 = new EmptyQueueException()/*const EmptyQueueException()*/; 13799 var const$1 = new EmptyQueueException()/*const EmptyQueueException()*/;
13799 var const$126 = new IllegalAccessException()/*const IllegalAccessException()*/; 13800 var const$126 = new IllegalAccessException()/*const IllegalAccessException()*/;
13800 var const$127 = ImmutableList.ImmutableList$from$factory([])/*const []*/; 13801 var const$127 = ImmutableList.ImmutableList$from$factory([])/*const []*/;
13801 var const$2 = new _DeletedKeySentinel()/*const _DeletedKeySentinel()*/; 13802 var const$2 = new _DeletedKeySentinel()/*const _DeletedKeySentinel()*/;
13802 var const$7 = new NoMoreElementsException()/*const NoMoreElementsException()*/; 13803 var const$7 = new NoMoreElementsException()/*const NoMoreElementsException()*/;
13803 var $globals = {}; 13804 var $globals = {};
13804 $static_init(); 13805 $static_init();
13805 main(); 13806 main();
OLDNEW
« frog/member.dart ('K') | « frog/member.dart ('k') | frog/type.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698