17be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# Copyright 2006-2009 the V8 project authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# Redistribution and use in source and binary forms, with or without
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# modification, are permitted provided that the following conditions are
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# met:
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#     * Redistributions of source code must retain the above copyright
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       notice, this list of conditions and the following disclaimer.
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#     * Redistributions in binary form must reproduce the above
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       copyright notice, this list of conditions and the following
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       disclaimer in the documentation and/or other materials provided
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       with the distribution.
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#     * Neither the name of Google Inc. nor the names of its
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       contributors may be used to endorse or promote products derived
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#       from this software without specific prior written permission.
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# Dictionary that is passed as defines for js2c.py.
292efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org# Used for defines that must be defined for all native JS files.
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst NONE        = 0;
3241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst READ_ONLY   = 1;
3341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst DONT_ENUM   = 2;
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst DONT_DELETE = 4;
3532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgconst NEW_ONE_BYTE_STRING = true;
3632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgconst NEW_TWO_BYTE_STRING = false;
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen# Constants used for getter and setter operations.
3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst GETTER = 0;
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst SETTER = 1;
4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42212ac23f8231d169b4aa6737d762099993020826kasper.lund# These definitions must match the index of the properties in objects.h.
4304921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgconst kApiTagOffset                 = 0;
4404921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgconst kApiPropertyListOffset        = 1;
453d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.orgconst kApiSerialNumberOffset        = 3;
463d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.orgconst kApiConstructorOffset         = 3;
4704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgconst kApiPrototypeTemplateOffset   = 5;
4804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgconst kApiParentTemplateOffset      = 6;
492c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.orgconst kApiFlagOffset                = 14;
5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst NO_HINT     = 0;
5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst NUMBER_HINT = 1;
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst STRING_HINT = 2;
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kFunctionTag  = 0;
5641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kNewObjectTag = 1;
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# For date.js.
5941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst HoursPerDay      = 24;
6041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst MinutesPerHour   = 60;
6141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst SecondsPerMinute = 60;
6241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst msPerSecond      = 1000;
6341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst msPerMinute      = 60000;
6441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst msPerHour        = 3600000;
6541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst msPerDay         = 86400000;
66eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgconst msPerMonth       = 2592000000;
6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
683291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org# For apinatives.js
693291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgconst kUninitialized = -1;
70662436e7b124b3535773535c671c53db322070b5verwaest@chromium.orgconst kReadOnlyPrototypeBit = 3;
71662436e7b124b3535773535c671c53db322070b5verwaest@chromium.orgconst kRemovePrototypeBit = 4;  # For FunctionTemplateInfo, matches objects.h
72639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgconst kDoNotCacheBit = 5;  # For FunctionTemplateInfo, matches objects.h
733291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org
7441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Note: kDayZeroInJulianDay = ToJulianDay(1970, 0, 1).
7541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kInvalidDate        = 'Invalid Date';
7641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kDayZeroInJulianDay = 2440588;
7741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kMonthMask          = 0x1e0;
7841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kDayMask            = 0x01f;
7941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kYearShift          = 9;
8041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgconst kMonthShift         = 5;
8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
82ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org# Limits for parts of the date, so that we support all the dates that
83ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org# ECMA 262 - 15.9.1.1 requires us to, but at the same time be sure that
84ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org# the date (days since 1970) is in SMI range.
85ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgconst kMinYear  = -1000000;
86ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgconst kMaxYear  = 1000000;
87ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgconst kMinMonth = -10000000;
88ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgconst kMaxMonth = 10000000;
89ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org
908496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org# Strict mode flags for passing to %SetProperty
918496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgconst kSloppyMode = 0;
928496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgconst kStrictMode = 1;
938496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org
94c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org# Native cache ids.
95c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgconst STRING_TO_REGEXP_CACHE_ID = 0;
96c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org
9741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Type query macros.
98b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#
99b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org# Note: We have special support for typeof(foo) === 'bar' in the compiler.
100b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#       It will *not* generate a runtime typeof call for the most important
101b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#       values of 'bar'.
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NULL(arg)              = (arg === null);
10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NULL_OR_UNDEFINED(arg) = (arg == null);
1048496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgmacro IS_UNDEFINED(arg)         = (arg === (void 0));
10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NUMBER(arg)            = (typeof(arg) === 'number');
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_STRING(arg)            = (typeof(arg) === 'string');
10743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_BOOLEAN(arg)           = (typeof(arg) === 'boolean');
108f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgmacro IS_SYMBOL(arg)            = (typeof(arg) === 'symbol');
1096141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.orgmacro IS_OBJECT(arg)            = (%_IsObject(arg));
1102abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ARRAY(arg)             = (%_IsArray(arg));
1116141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.orgmacro IS_FUNCTION(arg)          = (%_IsFunction(arg));
112b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro IS_REGEXP(arg)            = (%_IsRegExp(arg));
113fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_SET(arg)               = (%_ClassOf(arg) === 'Set');
114fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_MAP(arg)               = (%_ClassOf(arg) === 'Map');
115fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_WEAKMAP(arg)           = (%_ClassOf(arg) === 'WeakMap');
116ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgmacro IS_WEAKSET(arg)           = (%_ClassOf(arg) === 'WeakSet');
1172abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_DATE(arg)              = (%_ClassOf(arg) === 'Date');
1182abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_NUMBER_WRAPPER(arg)    = (%_ClassOf(arg) === 'Number');
1192abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_STRING_WRAPPER(arg)    = (%_ClassOf(arg) === 'String');
120f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgmacro IS_SYMBOL_WRAPPER(arg)    = (%_ClassOf(arg) === 'Symbol');
1212abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_BOOLEAN_WRAPPER(arg)   = (%_ClassOf(arg) === 'Boolean');
1222abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ERROR(arg)             = (%_ClassOf(arg) === 'Error');
1232abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_SCRIPT(arg)            = (%_ClassOf(arg) === 'Script');
1242abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ARGUMENTS(arg)         = (%_ClassOf(arg) === 'Arguments');
1252abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_GLOBAL(arg)            = (%_ClassOf(arg) === 'global');
126f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgmacro IS_ARRAYBUFFER(arg)       = (%_ClassOf(arg) === 'ArrayBuffer');
1271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgmacro IS_DATAVIEW(arg)          = (%_ClassOf(arg) === 'DataView');
128b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.orgmacro IS_GENERATOR(arg)         = (%_ClassOf(arg) === 'Generator');
129196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgmacro IS_SET_ITERATOR(arg)      = (%_ClassOf(arg) === 'Set Iterator');
130196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgmacro IS_MAP_ITERATOR(arg)      = (%_ClassOf(arg) === 'Map Iterator');
131b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgmacro IS_UNDETECTABLE(arg)      = (%_IsUndetectableObject(arg));
1320c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.orgmacro FLOOR(arg)                = $floor(arg);
13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
134dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org# Macro for ECMAScript 5 queries of the type:
135dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org# "Type(O) is object."
13634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# This is the same as being either a function or an object in V8 terminology
13734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# (including proxies).
1384980dff4208f9b77bc5320af43d7cc4b2a3d9688ricow@chromium.org# In addition, an undetectable object is also included by this.
13934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgmacro IS_SPEC_OBJECT(arg)   = (%_IsSpecObject(arg));
14034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
14134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# Macro for ECMAScript 5 queries of the type:
14234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# "IsCallable(O)"
14334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# We assume here that this is the same as being either a function or a function
14434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# proxy. That ignores host objects with [[Call]] methods, but in most situations
14534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# we cannot handle those anyway.
14634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgmacro IS_SPEC_FUNCTION(arg) = (%_ClassOf(arg) === 'Function');
147dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org
148bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org# Macro for ES6 CheckObjectCoercible
149bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org# Will throw a TypeError of the form "[functionName] called on null or undefined".
150bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.orgmacro CHECK_OBJECT_COERCIBLE(arg, functionName) = if (IS_NULL_OR_UNDEFINED(arg) && !IS_UNDETECTABLE(arg)) throw MakeTypeError('called_on_null_or_undefined', [functionName]);
151bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org
152394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com# Indices in bound function info retrieved by %BoundFunctionGetBindings(...).
153394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundFunctionIndex = 0;
154394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundThisIndex = 1;
155394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundArgumentsStartIndex = 2;
156394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
15741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
15841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgmacro NUMBER_IS_NAN(arg) = (!%_IsSmi(%IS_VAR(arg)) && !(arg == arg));
159486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.orgmacro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || ((arg == arg) && (arg != 1/0) && (arg != -1/0)));
16065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgmacro TO_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToInteger(ToNumber(arg)));
161e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.orgmacro TO_INTEGER_FOR_SIDE_EFFECT(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : ToNumber(arg));
16269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgmacro TO_INTEGER_MAP_MINUS_ZERO(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToIntegerMapMinusZero(ToNumber(arg)));
163b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_INT32(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : (arg >> 0));
164b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_UINT32(arg) = (arg >>> 0);
165b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_STRING_INLINE(arg) = (IS_STRING(%IS_VAR(arg)) ? arg : NonStringToString(arg));
166d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgmacro TO_NUMBER_INLINE(arg) = (IS_NUMBER(%IS_VAR(arg)) ? arg : NonNumberToNumber(arg));
1677304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgmacro TO_OBJECT_INLINE(arg) = (IS_SPEC_OBJECT(%IS_VAR(arg)) ? arg : ToObject(arg));
168d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgmacro JSON_NUMBER_TO_STRING(arg) = ((%_IsSmi(%IS_VAR(arg)) || arg - arg == 0) ? %_NumberToString(arg) : "null");
169a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgmacro HAS_OWN_PROPERTY(obj, index) = (%_CallFunction(obj, index, ObjectHasOwnProperty));
17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1710cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org# Private names.
1726a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org# GET_PRIVATE should only be used if the property is known to exists on obj
1736a4d394882dba70a85567fb90ffd4f428a9eb170machenbach@chromium.org# itself (it should really use %GetOwnProperty, but that would be way slower).
174e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgmacro GLOBAL_PRIVATE(name) = (%CreateGlobalPrivateOwnSymbol(name));
175b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.orgmacro NEW_PRIVATE_OWN(name) = (%CreatePrivateOwnSymbol(name));
176034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.orgmacro IS_PRIVATE(sym) = (%SymbolIsPrivate(sym));
177fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgmacro HAS_PRIVATE(obj, sym) = (%HasOwnProperty(obj, sym));
178e2a8937454723a720c81acc3f9e4162b18999b43machenbach@chromium.orgmacro HAS_DEFINED_PRIVATE(obj, sym) = (!IS_UNDEFINED(obj[sym]));
1790cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro GET_PRIVATE(obj, sym) = (obj[sym]);
1800cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro SET_PRIVATE(obj, sym, val) = (obj[sym] = val);
1810cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro DELETE_PRIVATE(obj, sym) = (delete obj[sym]);
1820cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
183690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org# Constants.  The compiler constant folds them.
184690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst NAN = $NaN;
185690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst INFINITY = (1/0);
186690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst UNDEFINED = (void 0);
187690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org
18841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Macros implemented in Python.
18941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgpython macro CHAR_CODE(str) = ord(str[1]);
19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# Constants used on an array to implement the properties of the RegExp object.
1927be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgconst REGEXP_NUMBER_OF_CAPTURES = 0;
193bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst REGEXP_FIRST_CAPTURE = 3;
1947be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
1957be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# We can't put macros in macros so we use constants here.
1967be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# REGEXP_NUMBER_OF_CAPTURES
1977be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgmacro NUMBER_OF_CAPTURES(array) = ((array)[0]);
1987be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
1995d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org# Limit according to ECMA 262 15.9.1.1
2005d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgconst MAX_TIME_MS = 8640000000000000;
2015f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org# Limit which is MAX_TIME_MS + msPerMonth.
2025f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgconst MAX_TIME_BEFORE_UTC = 8640002592000000;
2035d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org
2042abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org# Gets the value of a Date object. If arg is not a Date object
2052abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org# a type error is thrown.
2064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro CHECK_DATE(arg) = if (%_ClassOf(arg) !== 'Date') ThrowDateTypeError();
2074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DATE_VALUE(arg) = (%_DateField(arg, 0) + %_DateField(arg, 21));
2084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DATE_VALUE(arg)    = (%_DateField(arg, 0));
2094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_YEAR(arg)        = (%_DateField(arg, 1));
2114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MONTH(arg)       = (%_DateField(arg, 2));
2124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DAY(arg)         = (%_DateField(arg, 3));
2134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_WEEKDAY(arg)     = (%_DateField(arg, 4));
2144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_HOUR(arg)        = (%_DateField(arg, 5));
2154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MIN(arg)         = (%_DateField(arg, 6));
2164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_SEC(arg)         = (%_DateField(arg, 7));
2174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MS(arg)          = (%_DateField(arg, 8));
2184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DAYS(arg)        = (%_DateField(arg, 9));
2194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_TIME_IN_DAY(arg) = (%_DateField(arg, 10));
2204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_YEAR(arg)        = (%_DateField(arg, 11));
2224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MONTH(arg)       = (%_DateField(arg, 12));
2234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DAY(arg)         = (%_DateField(arg, 13));
2244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_WEEKDAY(arg)     = (%_DateField(arg, 14));
2254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_HOUR(arg)        = (%_DateField(arg, 15));
2264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MIN(arg)         = (%_DateField(arg, 16));
2274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_SEC(arg)         = (%_DateField(arg, 17));
2284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MS(arg)          = (%_DateField(arg, 18));
2294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DAYS(arg)        = (%_DateField(arg, 19));
2304efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_TIME_IN_DAY(arg) = (%_DateField(arg, 20));
2314efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro TIMEZONE_OFFSET(arg)   = (%_DateField(arg, 21));
2334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro SET_UTC_DATE_VALUE(arg, value) = (%DateSetValue(arg, value, 1));
2354efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro SET_LOCAL_DATE_VALUE(arg, value) = (%DateSetValue(arg, value, 0));
2362abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
2379d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com# Last input and last subject of regexp matches.
238efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgconst LAST_SUBJECT_INDEX = 1;
239bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro LAST_SUBJECT(array) = ((array)[1]);
240bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro LAST_INPUT(array) = ((array)[2]);
2417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
2427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# REGEXP_FIRST_CAPTURE
243bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro CAPTURE(index) = (3 + (index));
244bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst CAPTURE0 = 3;
245bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst CAPTURE1 = 4;
24630ce411529579186181838984710b0b0980857aaricow@chromium.org
247ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# For the regexp capture override array.  This has the same
248ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# format as the arguments to a function called from
249ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# String.prototype.replace.
250ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_MATCH(override) = ((override)[0]);
251ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_POS(override) = ((override)[(override).length - 2]);
252ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_SUBJECT(override) = ((override)[(override).length - 1]);
253ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# 1-based so index of 1 returns the first capture
254ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_CAPTURE(override, index) = ((override)[(index)]);
255ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
2561805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# PropertyDescriptor return value indices - must match
25730ce411529579186181838984710b0b0980857aaricow@chromium.org# PropertyDescriptorIndices in runtime.cc.
25830ce411529579186181838984710b0b0980857aaricow@chromium.orgconst IS_ACCESSOR_INDEX = 0;
25930ce411529579186181838984710b0b0980857aaricow@chromium.orgconst VALUE_INDEX = 1;
26030ce411529579186181838984710b0b0980857aaricow@chromium.orgconst GETTER_INDEX = 2;
26130ce411529579186181838984710b0b0980857aaricow@chromium.orgconst SETTER_INDEX = 3;
26230ce411529579186181838984710b0b0980857aaricow@chromium.orgconst WRITABLE_INDEX = 4;
26330ce411529579186181838984710b0b0980857aaricow@chromium.orgconst ENUMERABLE_INDEX = 5;
26430ce411529579186181838984710b0b0980857aaricow@chromium.orgconst CONFIGURABLE_INDEX = 6;
2651805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2661805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# For messages.js
2671805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Script::Type from objects.h
2681805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_NATIVE = 0;
2691805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_EXTENSION = 1;
2701805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_NORMAL = 2;
2711805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2721805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Script::CompilationType from objects.h
2731805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_HOST = 0;
2741805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_EVAL = 1;
2751805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_JSON = 2;
2761805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2771805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Messages::kNoLineNumberInfo from v8.h
2781805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst kNoLineNumberInfo = 0;
279034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.org
280034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.org# Matches PropertyAttributes from property-details.h
281034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.orgconst PROPERTY_ATTRIBUTES_NONE = 0;
282034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.orgconst PROPERTY_ATTRIBUTES_STRING = 8;
283034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.orgconst PROPERTY_ATTRIBUTES_SYMBOLIC = 16;
284034539689f9600e463cd5273725c6269d0f3b8cbmachenbach@chromium.orgconst PROPERTY_ATTRIBUTES_PRIVATE_SYMBOL = 32;
2854ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
2864ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org# Use for keys, values and entries iterators.
2874ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgconst ITERATOR_KIND_KEYS = 1;
2884ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgconst ITERATOR_KIND_VALUES = 2;
2894ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgconst ITERATOR_KIND_ENTRIES = 3;
290975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org
291975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.org# Check whether debug is active.
292975b940441085887fc02bebf8877d5ec97e1e06cmachenbach@chromium.orgconst DEBUG_IS_ACTIVE = (%_DebugIsActive() != 0);
293