| Index: compiler/lib/implementation/core.js
|
| diff --git a/compiler/lib/implementation/core.js b/compiler/lib/implementation/core.js
|
| deleted file mode 100644
|
| index 6240556c9a685fdae5344247bb04b21be48ba6da..0000000000000000000000000000000000000000
|
| --- a/compiler/lib/implementation/core.js
|
| +++ /dev/null
|
| @@ -1,528 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -/**
|
| - * Helpers for lazy static initialization.
|
| - */
|
| -var static$uninitialized = {};
|
| -var static$initializing = {};
|
| -
|
| -function $maybeBindRtt(fun, fRtt, thisObj) {
|
| - if (fRtt) {
|
| - fun.$lookupRTT = function() {
|
| - return fRtt.call(thisObj);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Optimized versions of closure bindings.
|
| -// Name convention: $bind<number-of-scopes>_<number-of-arguments>(fn, this, scopes, args)
|
| -function $bind0_0(fn, fRtt, thisObj) {
|
| - var fun = function() {
|
| - return fn.call(thisObj);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind0_1(fn, fRtt, thisObj) {
|
| - var fun = function(arg) {
|
| - return fn.call(thisObj, arg);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind0_2(fn, fRtt, thisObj) {
|
| - var fun = function(arg1, arg2) {
|
| - return fn.call(thisObj, arg1, arg2);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind0_3(fn, fRtt, thisObj) {
|
| - var fun = function(arg1, arg2, arg3) {
|
| - return fn.call(thisObj, arg1, arg2, arg3);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind0_4(fn, fRtt, thisObj) {
|
| - var fun = function(arg1, arg2, arg3, arg4) {
|
| - return fn.call(thisObj, arg1, arg2, arg3, arg4);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind0_5(fn, fRtt, thisObj) {
|
| - var fun = function(arg1, arg2, arg3, arg4, arg5) {
|
| - return fn.call(thisObj, arg1, arg2, arg3, arg4, arg5);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -
|
| -function $bind1_0(fn, fRtt, thisObj, scope) {
|
| - var fun = function() {
|
| - return fn.call(thisObj, scope);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind1_1(fn, fRtt, thisObj, scope) {
|
| - var fun = function(arg) {
|
| - return fn.call(thisObj, scope, arg);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind1_2(fn, fRtt, thisObj, scope) {
|
| - var fun = function(arg1, arg2) {
|
| - return fn.call(thisObj, scope, arg1, arg2);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind1_3(fn, fRtt, thisObj, scope) {
|
| - var fun = function(arg1, arg2, arg3) {
|
| - return fn.call(thisObj, scope, arg1, arg2, arg3);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind1_4(fn, fRtt, thisObj, scope) {
|
| - var fun = function(arg1, arg2, arg3, arg4) {
|
| - return fn.call(thisObj, scope, arg1, arg2, arg3, arg4);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind1_5(fn, fRtt, thisObj, scope) {
|
| - var fun = function(arg1, arg2, arg3, arg4, arg5) {
|
| - return fn.call(thisObj, scope, arg1, arg2, arg3, arg4, arg5);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -
|
| -function $bind2_0(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function() {
|
| - return fn.call(thisObj, scope1, scope2);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind2_1(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function(arg) {
|
| - return fn.call(thisObj, scope1, scope2, arg);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind2_2(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function(arg1, arg2) {
|
| - return fn.call(thisObj, scope1, scope2, arg1, arg2);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind2_3(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function(arg1, arg2, arg3) {
|
| - return fn.call(thisObj, scope1, scope2, arg1, arg2, arg3);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind2_4(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function(arg1, arg2, arg3, arg4) {
|
| - return fn.call(thisObj, scope1, scope2, arg1, arg2, arg3, arg4);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind2_5(fn, fRtt, thisObj, scope1, scope2) {
|
| - var fun = function(arg1, arg2, arg3, arg4, arg5) {
|
| - return fn.call(thisObj, scope1, scope2, arg1, arg2, arg3, arg4, arg5);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -
|
| -function $bind3_0(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function() {
|
| - return fn.call(thisObj, scope1, scope2, scope3);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind3_1(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function(arg) {
|
| - return fn.call(thisObj, scope1, scope2, scope3, arg);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind3_2(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function(arg1, arg2) {
|
| - return fn.call(thisObj, scope1, scope2, scope3, arg1, arg2);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind3_3(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function(arg1, arg2, arg3) {
|
| - return fn.call(thisObj, scope1, scope2, scope3, arg1, arg2, arg3);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind3_4(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function(arg1, arg2, arg3, arg4) {
|
| - return fn.call(thisObj, scope1, scope2, scope3, arg1, arg2, arg3, arg4);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -function $bind3_5(fn, fRtt, thisObj, scope1, scope2, scope3) {
|
| - var fun = function(arg1, arg2, arg3, arg4, arg5) {
|
| - return fn.call(thisObj, scope1, scope2, scope3, arg1, arg2, arg3, arg4, arg5);
|
| - }
|
| - $maybeBindRtt(fun, fRtt, thisObj);
|
| - return fun;
|
| -}
|
| -
|
| -/**
|
| - * Implements extends for dart classes on javascript prototypes.
|
| - * @param {Function} child
|
| - * @param {Function} parent
|
| - */
|
| -function $inherits(child, parent) {
|
| - if (child.prototype.__proto__) {
|
| - child.prototype.__proto__ = parent.prototype;
|
| - } else {
|
| - function tmp() {};
|
| - tmp.prototype = parent.prototype;
|
| - child.prototype = new tmp();
|
| - child.prototype.constructor = child;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @param {Function} fn
|
| - * @param {Function=} fRtt
|
| - * @param {Object|undefined} thisObj
|
| - * @param {...*} var_args
|
| - */
|
| -function $bind(fn, fRtt, thisObj, var_args) {
|
| - var func;
|
| - if (arguments.length > 3) {
|
| - var boundArgs = Array.prototype.slice.call(arguments, 3);
|
| - func = function() {
|
| - // Prepend the bound arguments to the current arguments.
|
| - var newArgs = Array.prototype.slice.call(arguments);
|
| - Array.prototype.unshift.apply(newArgs, boundArgs);
|
| - return fn.apply(thisObj, newArgs);
|
| - };
|
| - } else {
|
| - func = function() {
|
| - return fn.apply(thisObj, arguments);
|
| - };
|
| - }
|
| - if(fRtt) {
|
| - func.$lookupRTT = function() {
|
| - return fRtt.apply(thisObj, arguments);
|
| - };
|
| - }
|
| - return func;
|
| -}
|
| -
|
| -/**
|
| - * Dart null object that should be used by JS implementation to test for
|
| - * Dart null.
|
| - *
|
| - * TODO(ngeoffray): update dartc to generate this variable instead of
|
| - * undefined.
|
| - * @const
|
| - */
|
| -var $Dart$Null = void 0;
|
| -
|
| -function assert(expr) {
|
| - var val = typeof(expr) == 'function' ? $dartcall(expr, []) : expr;
|
| - if (val !== true) {
|
| - $Dart$ThrowException(native_ExceptionHelper_createAssertionError());
|
| - }
|
| -}
|
| -
|
| -function BIT_OR$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 | val2
|
| - : val1.BIT_OR$operator(val2);
|
| -}
|
| -
|
| -function BIT_XOR$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 ^ val2
|
| - : val1.BIT_XOR$operator(val2);
|
| -}
|
| -
|
| -function BIT_AND$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 & val2
|
| - : val1.BIT_AND$operator(val2);
|
| -}
|
| -
|
| -function BIT_NOT$operator(val) {
|
| - return (typeof(val) == 'number') ? ~val : val.BIT_NOT$operator();
|
| -}
|
| -
|
| -function SHL$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 << val2
|
| - : val1.SHL$operator(val2);
|
| -}
|
| -
|
| -function SAR$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 >> val2
|
| - : val1.SAR$operator(val2);
|
| -}
|
| -
|
| -function SHR$operator(val1, val2) {
|
| - return val1.SHR$operator(val2);
|
| -}
|
| -
|
| -function ADD$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 + val2
|
| - : val1.ADD$operator(val2);
|
| -}
|
| -
|
| -function SUB$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 - val2
|
| - : val1.SUB$operator(val2);
|
| -}
|
| -
|
| -function MUL$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 * val2
|
| - : val1.MUL$operator(val2);
|
| -}
|
| -
|
| -function DIV$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 / val2
|
| - : val1.DIV$operator(val2);
|
| -}
|
| -
|
| -function MOD$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? number$euclideanModulo(val1, val2)
|
| - : val1.MOD$operator(val2);
|
| -}
|
| -
|
| -function TRUNC$operator(val1, val2) {
|
| - if (typeof(val1) == 'number' && typeof(val2) == 'number') {
|
| - var tmp = val1 / val2;
|
| - return (tmp < 0) ? Math.ceil(tmp) : Math.floor(tmp);
|
| - } else {
|
| - return val1.TRUNC$operator(val2);
|
| - }
|
| -}
|
| -
|
| -function negate$operator(val) {
|
| - return (typeof(val) == 'number') ? -val : val.negate$operator();
|
| -}
|
| -
|
| -function EQ$operator(val1, val2) {
|
| - return (typeof val1 != 'object')
|
| - ? val1 === val2
|
| - : val1.EQ$operator(val2);
|
| -}
|
| -
|
| -function NE$operator(val1, val2) {
|
| - return (typeof val1 != 'object')
|
| - ? val1 !== val2
|
| - : !val1.EQ$operator(val2);
|
| -}
|
| -
|
| -function LT$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 < val2
|
| - : val1.LT$operator(val2);
|
| -}
|
| -
|
| -function GT$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 > val2
|
| - : val1.GT$operator(val2);
|
| -}
|
| -
|
| -function LTE$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 <= val2
|
| - : val1.LTE$operator(val2);
|
| -}
|
| -
|
| -function GTE$operator(val1, val2) {
|
| - return (typeof(val1) == 'number' && typeof(val2) == 'number')
|
| - ? val1 >= val2
|
| - : val1.GTE$operator(val2);
|
| -}
|
| -
|
| -// The following operator-functions are not called from Dart-generated code, but
|
| -// only from handwritten JS code.
|
| -function INDEX$operator(obj, index) {
|
| - return obj.INDEX$operator(index);
|
| -}
|
| -
|
| -function ASSIGN_INDEX$operator(obj, index, newVal) {
|
| - obj.ASSIGN_INDEX$operator(index, newVal);
|
| -}
|
| -
|
| -function $Dart$ThrowException(e) {
|
| - // If e is not a value, we can use V8's captureStackTrace utility method.
|
| - if (e && (typeof e == "object") && Error.captureStackTrace) {
|
| - Error.captureStackTrace(e);
|
| - }
|
| - throw e;
|
| -}
|
| -
|
| -function $toString(x) {
|
| - return native__StringJsUtil_toDartString(x);
|
| -}
|
| -
|
| -// Translate a JavaScript exception to a Dart exception
|
| -// TODO(zundel): cross browser support. This is Chrome specific.
|
| -function $transformBrowserException(e) {
|
| - if (e instanceof TypeError) {
|
| - switch(e.type) {
|
| - case "property_not_function":
|
| - case "called_non_callable":
|
| - if (e.arguments[0] == "undefined") {
|
| - return native_ExceptionHelper_createNullPointerException();
|
| - }
|
| - return native_ExceptionHelper_createObjectNotClosureException();
|
| - case "non_object_property_call":
|
| - case "non_object_property_load":
|
| - return native_ExceptionHelper_createNullPointerException();
|
| - case "undefined_method":
|
| - if (e.arguments[0] == "call" || e.arguments[0] == "apply") {
|
| - return native_ExceptionHelper_createObjectNotClosureException();
|
| - }
|
| - return native_ExceptionHelper_createNoSuchMethodException(
|
| - "", e.arguments[0], []);
|
| - }
|
| - }
|
| - return e;
|
| -}
|
| -
|
| -// Throws a NoSuchMethodException (used by named-parameter trampolines).
|
| -function $nsme() {
|
| - var e = native_ExceptionHelper_createNoSuchMethodException("", "", []);
|
| - $Dart$ThrowException(e);
|
| -}
|
| -
|
| -// Throws a NoSuchMethodException (used when instantiating via a non-existent class or ctor).
|
| -function $nsme2(name, args) {
|
| - var e = native_ExceptionHelper_createNoSuchMethodException(name, name, args);
|
| - $Dart$ThrowException(e);
|
| -}
|
| -
|
| -// Shared named-argument object used by call-sites with no named arguments.
|
| -/** @const */
|
| -var $noargs = {count:0};
|
| -
|
| -// Used for invoking dart functions from js.
|
| -function $dartcall(fn, args) {
|
| - args.unshift(args.length, $noargs);
|
| - fn.apply(null, args);
|
| -}
|
| -
|
| -//
|
| -// The following methods are used to create canonical constants.
|
| -//
|
| -
|
| -function native_ConstHelper_getConstId(o) {
|
| - return $dart_const_id(o);
|
| -}
|
| -
|
| -// compile time const canonicalization helpers
|
| -function $dart_const_id(o) {
|
| - if (o === $Dart$Null) return "";
|
| - if (typeof o === "number") return "n" + o;
|
| - if (typeof o === "boolean") return "b" + ((o) ? 1 : 0);
|
| - if (typeof o === "string") return $dart_const_string_id(o);
|
| - if (typeof o === "function") throw "a function is not a constant expression";
|
| - var result = o.$dartConstId;
|
| - if (result === undefined) {
|
| - throw "internal error: reference to non-canonical constant";
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -// Array ids have the form: "aID,ID,ID"
|
| -function $dart_const_array_id(o) {
|
| - var ids = [];
|
| - for (var i=o.length-1; i>=0; i--) {
|
| - ids.push($dart_const_id(o[i]));
|
| - }
|
| - return "a" + ids.join(",");
|
| -}
|
| -
|
| -var $CONST_MAP_PREFIX = ":"
|
| -
|
| -// String ids have the form "sID"
|
| -var $string_id = 0;
|
| -var $string_id_cache = {};
|
| -function $dart_const_string_id(s) {
|
| - var key = $CONST_MAP_PREFIX + s;
|
| - var id = $string_id_cache[key];
|
| - if (!id) {
|
| - id = "s" + (++$string_id);
|
| - $string_id_cache[key] = id;
|
| - }
|
| - return id;
|
| -}
|
| -
|
| -// A place to store the canonical consts
|
| -var $consts = {};
|
| -
|
| -function $isDartMap(o) {
|
| - return !!(o && o.$implements$Map$Dart);
|
| -}
|
| -
|
| -// Intern const object "o"
|
| -function $intern(o, type_args) {
|
| - var id;
|
| - // Maps and arrays need special handling
|
| - // TODO(johnlenz): This array check may not be sufficient across iframes.
|
| - if (o instanceof Array) {
|
| - // Dart array literals are implemented as JavaScript native arrays.
|
| - id = $dart_const_array_id(o);
|
| - } else if ($isDartMap(o)) {
|
| - // Dart map literals are currently implemented by a non-const Dart class.
|
| - id = native_ConstHelper_getConstMapId(o);
|
| - } else {
|
| - id = "o" + o.$const_id();
|
| - }
|
| - if (type_args != null) {
|
| - id += '<';
|
| - for (var i=type_args.length-1; i >= 0; i--) {
|
| - id += type_args[i];
|
| - id += ","
|
| - }
|
| - id += '>';
|
| - }
|
| - var key = $CONST_MAP_PREFIX + id;
|
| - var match = $consts[key];
|
| - if (match != null) {
|
| - return match;
|
| - }
|
| - o.$dartConstId = id;
|
| - $consts[key] = o;
|
| - return o;
|
| -}
|
| -
|
| -function $Dart$MapLiteralFactory() {
|
| - return native__CoreJsUtil__newMapLiteral();
|
| -}
|
|
|