Index: src/runtime.js |
diff --git a/src/runtime.js b/src/runtime.js |
deleted file mode 100644 |
index 5a4c75a42a4db01b24f76044654640977f9a561d..0000000000000000000000000000000000000000 |
--- a/src/runtime.js |
+++ /dev/null |
@@ -1,253 +0,0 @@ |
-// Copyright 2006-2008 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// This files contains runtime support implemented in JavaScript. |
- |
-// CAUTION: Some of the functions specified in this file are called |
-// directly from compiled code. These are the functions with names in |
-// ALL CAPS. The compiled code passes the first argument in 'this'. |
- |
- |
-// The following declarations are shared with other native JS files. |
-// They are all declared at this one spot to avoid redeclaration errors. |
-var $NaN; |
-var $sameValue; |
-var $sameValueZero; |
-var $toPositiveInteger; |
- |
-var harmony_tolength = false; |
- |
-(function(global, utils) { |
- |
-%CheckIsBootstrapping(); |
- |
-var GlobalArray = global.Array; |
-var GlobalBoolean = global.Boolean; |
-var GlobalString = global.String; |
-var isConcatSpreadableSymbol = |
- utils.ImportNow("is_concat_spreadable_symbol"); |
- |
-// ---------------------------------------------------------------------------- |
- |
-/* ----------------------------- |
- - - - H e l p e r s - - - |
- ----------------------------- |
-*/ |
- |
-function APPLY_PREPARE(args) { |
- var length; |
- |
- // First check that the receiver is callable. |
- if (!IS_CALLABLE(this)) { |
- throw %make_type_error(kApplyNonFunction, TO_STRING(this), typeof this); |
- } |
- |
- // First check whether length is a positive Smi and args is an |
- // array. This is the fast case. If this fails, we do the slow case |
- // that takes care of more eventualities. |
- if (IS_ARRAY(args)) { |
- length = args.length; |
- if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) { |
- return length; |
- } |
- } |
- |
- length = (args == null) ? 0 : TO_UINT32(args.length); |
- |
- // We can handle any number of apply arguments if the stack is |
- // big enough, but sanity check the value to avoid overflow when |
- // multiplying with pointer size. |
- if (length > kSafeArgumentsLength) throw %make_range_error(kStackOverflow); |
- |
- // Make sure the arguments list has the right type. |
- if (args != null && !IS_SPEC_OBJECT(args)) { |
- throw %make_type_error(kWrongArgs, "Function.prototype.apply"); |
- } |
- |
- // Return the length which is the number of arguments to copy to the |
- // stack. It is guaranteed to be a small integer at this point. |
- return length; |
-} |
- |
- |
-function REFLECT_APPLY_PREPARE(args) { |
- var length; |
- |
- // First check that the receiver is callable. |
- if (!IS_CALLABLE(this)) { |
- throw %make_type_error(kApplyNonFunction, TO_STRING(this), typeof this); |
- } |
- |
- // First check whether length is a positive Smi and args is an |
- // array. This is the fast case. If this fails, we do the slow case |
- // that takes care of more eventualities. |
- if (IS_ARRAY(args)) { |
- length = args.length; |
- if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) { |
- return length; |
- } |
- } |
- |
- if (!IS_SPEC_OBJECT(args)) { |
- throw %make_type_error(kWrongArgs, "Reflect.apply"); |
- } |
- |
- length = TO_LENGTH(args.length); |
- |
- // We can handle any number of apply arguments if the stack is |
- // big enough, but sanity check the value to avoid overflow when |
- // multiplying with pointer size. |
- if (length > kSafeArgumentsLength) throw %make_range_error(kStackOverflow); |
- |
- // Return the length which is the number of arguments to copy to the |
- // stack. It is guaranteed to be a small integer at this point. |
- return length; |
-} |
- |
- |
-function REFLECT_CONSTRUCT_PREPARE( |
- args, newTarget) { |
- var length; |
- var ctorOk = IS_CALLABLE(this) && %IsConstructor(this); |
- var newTargetOk = IS_CALLABLE(newTarget) && %IsConstructor(newTarget); |
- |
- // First check whether length is a positive Smi and args is an |
- // array. This is the fast case. If this fails, we do the slow case |
- // that takes care of more eventualities. |
- if (IS_ARRAY(args)) { |
- length = args.length; |
- if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength && |
- ctorOk && newTargetOk) { |
- return length; |
- } |
- } |
- |
- if (!ctorOk) { |
- if (!IS_CALLABLE(this)) { |
- throw %make_type_error(kCalledNonCallable, TO_STRING(this)); |
- } else { |
- throw %make_type_error(kNotConstructor, TO_STRING(this)); |
- } |
- } |
- |
- if (!newTargetOk) { |
- if (!IS_CALLABLE(newTarget)) { |
- throw %make_type_error(kCalledNonCallable, TO_STRING(newTarget)); |
- } else { |
- throw %make_type_error(kNotConstructor, TO_STRING(newTarget)); |
- } |
- } |
- |
- if (!IS_SPEC_OBJECT(args)) { |
- throw %make_type_error(kWrongArgs, "Reflect.construct"); |
- } |
- |
- length = TO_LENGTH(args.length); |
- |
- // We can handle any number of apply arguments if the stack is |
- // big enough, but sanity check the value to avoid overflow when |
- // multiplying with pointer size. |
- if (length > kSafeArgumentsLength) throw %make_range_error(kStackOverflow); |
- |
- // Return the length which is the number of arguments to copy to the |
- // stack. It is guaranteed to be a small integer at this point. |
- return length; |
-} |
- |
- |
-function CONCAT_ITERABLE_TO_ARRAY(iterable) { |
- return %concat_iterable_to_array(this, iterable); |
-}; |
- |
- |
-/* ------------------------------------- |
- - - - C o n v e r s i o n s - - - |
- ------------------------------------- |
-*/ |
- |
-// ES5, section 9.12 |
-function SameValue(x, y) { |
- if (typeof x != typeof y) return false; |
- if (IS_NUMBER(x)) { |
- if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; |
- // x is +0 and y is -0 or vice versa. |
- if (x === 0 && y === 0 && %_IsMinusZero(x) != %_IsMinusZero(y)) { |
- return false; |
- } |
- } |
- if (IS_SIMD_VALUE(x)) return %SimdSameValue(x, y); |
- return x === y; |
-} |
- |
- |
-// ES6, section 7.2.4 |
-function SameValueZero(x, y) { |
- if (typeof x != typeof y) return false; |
- if (IS_NUMBER(x)) { |
- if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; |
- } |
- if (IS_SIMD_VALUE(x)) return %SimdSameValueZero(x, y); |
- return x === y; |
-} |
- |
- |
-function ConcatIterableToArray(target, iterable) { |
- var index = target.length; |
- for (var element of iterable) { |
- %AddElement(target, index++, element); |
- } |
- return target; |
-} |
- |
- |
-/* --------------------------------- |
- - - - U t i l i t i e s - - - |
- --------------------------------- |
-*/ |
- |
- |
-// ES6, draft 10-14-14, section 22.1.3.1.1 |
-function IsConcatSpreadable(O) { |
- if (!IS_SPEC_OBJECT(O)) return false; |
- var spreadable = O[isConcatSpreadableSymbol]; |
- if (IS_UNDEFINED(spreadable)) return IS_ARRAY(O); |
- return TO_BOOLEAN(spreadable); |
-} |
- |
- |
-function ToPositiveInteger(x, rangeErrorIndex) { |
- var i = TO_INTEGER_MAP_MINUS_ZERO(x); |
- if (i < 0) throw MakeRangeError(rangeErrorIndex); |
- return i; |
-} |
- |
-//---------------------------------------------------------------------------- |
- |
-// NOTE: Setting the prototype for Array must take place as early as |
-// possible due to code generation for array literals. When |
-// generating code for a array literal a boilerplate array is created |
-// that is cloned when running the code. It is essential that the |
-// boilerplate gets the right prototype. |
-%FunctionSetPrototype(GlobalArray, new GlobalArray(0)); |
- |
-// ---------------------------------------------------------------------------- |
-// Exports |
- |
-$NaN = %GetRootNaN(); |
-$sameValue = SameValue; |
-$sameValueZero = SameValueZero; |
-$toPositiveInteger = ToPositiveInteger; |
- |
-%InstallToContext([ |
- "apply_prepare_builtin", APPLY_PREPARE, |
- "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, |
- "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, |
- "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, |
-]); |
- |
-%InstallToContext([ |
- "concat_iterable_to_array", ConcatIterableToArray, |
-]); |
- |
-}) |