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
90c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org# Native cache ids.
91c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgconst STRING_TO_REGEXP_CACHE_ID = 0;
92c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org
9341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Type query macros.
94b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#
95b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org# Note: We have special support for typeof(foo) === 'bar' in the compiler.
96b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#       It will *not* generate a runtime typeof call for the most important
97b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org#       values of 'bar'.
9843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NULL(arg)              = (arg === null);
9943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NULL_OR_UNDEFINED(arg) = (arg == null);
10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_UNDEFINED(arg)         = (typeof(arg) === 'undefined');
10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_NUMBER(arg)            = (typeof(arg) === 'number');
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_STRING(arg)            = (typeof(arg) === 'string');
10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenmacro IS_BOOLEAN(arg)           = (typeof(arg) === 'boolean');
104f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgmacro IS_SYMBOL(arg)            = (typeof(arg) === 'symbol');
1056141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.orgmacro IS_OBJECT(arg)            = (%_IsObject(arg));
1062abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ARRAY(arg)             = (%_IsArray(arg));
1076141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.orgmacro IS_FUNCTION(arg)          = (%_IsFunction(arg));
108b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro IS_REGEXP(arg)            = (%_IsRegExp(arg));
109fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_SET(arg)               = (%_ClassOf(arg) === 'Set');
110fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_MAP(arg)               = (%_ClassOf(arg) === 'Map');
111fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgmacro IS_WEAKMAP(arg)           = (%_ClassOf(arg) === 'WeakMap');
112ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgmacro IS_WEAKSET(arg)           = (%_ClassOf(arg) === 'WeakSet');
1132abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_DATE(arg)              = (%_ClassOf(arg) === 'Date');
1142abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_NUMBER_WRAPPER(arg)    = (%_ClassOf(arg) === 'Number');
1152abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_STRING_WRAPPER(arg)    = (%_ClassOf(arg) === 'String');
116f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgmacro IS_SYMBOL_WRAPPER(arg)    = (%_ClassOf(arg) === 'Symbol');
1172abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_BOOLEAN_WRAPPER(arg)   = (%_ClassOf(arg) === 'Boolean');
1182abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ERROR(arg)             = (%_ClassOf(arg) === 'Error');
1192abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_SCRIPT(arg)            = (%_ClassOf(arg) === 'Script');
1202abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_ARGUMENTS(arg)         = (%_ClassOf(arg) === 'Arguments');
1212abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.orgmacro IS_GLOBAL(arg)            = (%_ClassOf(arg) === 'global');
122f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgmacro IS_ARRAYBUFFER(arg)       = (%_ClassOf(arg) === 'ArrayBuffer');
1231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgmacro IS_DATAVIEW(arg)          = (%_ClassOf(arg) === 'DataView');
124b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.orgmacro IS_GENERATOR(arg)         = (%_ClassOf(arg) === 'Generator');
125b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgmacro IS_UNDETECTABLE(arg)      = (%_IsUndetectableObject(arg));
1260c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.orgmacro FLOOR(arg)                = $floor(arg);
12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
128dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org# Macro for ECMAScript 5 queries of the type:
129dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org# "Type(O) is object."
13034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# This is the same as being either a function or an object in V8 terminology
13134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# (including proxies).
1324980dff4208f9b77bc5320af43d7cc4b2a3d9688ricow@chromium.org# In addition, an undetectable object is also included by this.
13334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgmacro IS_SPEC_OBJECT(arg)   = (%_IsSpecObject(arg));
13434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
13534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# Macro for ECMAScript 5 queries of the type:
13634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# "IsCallable(O)"
13734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# We assume here that this is the same as being either a function or a function
13834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# proxy. That ignores host objects with [[Call]] methods, but in most situations
13934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org# we cannot handle those anyway.
14034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgmacro IS_SPEC_FUNCTION(arg) = (%_ClassOf(arg) === 'Function');
141dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org
142394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com# Indices in bound function info retrieved by %BoundFunctionGetBindings(...).
143394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundFunctionIndex = 0;
144394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundThisIndex = 1;
145394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comconst kBoundArgumentsStartIndex = 2;
146394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
14741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
14841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgmacro NUMBER_IS_NAN(arg) = (!%_IsSmi(%IS_VAR(arg)) && !(arg == arg));
149486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.orgmacro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || ((arg == arg) && (arg != 1/0) && (arg != -1/0)));
15065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgmacro TO_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToInteger(ToNumber(arg)));
151e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.orgmacro TO_INTEGER_FOR_SIDE_EFFECT(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : ToNumber(arg));
15269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgmacro TO_INTEGER_MAP_MINUS_ZERO(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToIntegerMapMinusZero(ToNumber(arg)));
153b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_INT32(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : (arg >> 0));
154b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_UINT32(arg) = (arg >>> 0);
155b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.orgmacro TO_STRING_INLINE(arg) = (IS_STRING(%IS_VAR(arg)) ? arg : NonStringToString(arg));
156d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgmacro TO_NUMBER_INLINE(arg) = (IS_NUMBER(%IS_VAR(arg)) ? arg : NonNumberToNumber(arg));
1577304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgmacro TO_OBJECT_INLINE(arg) = (IS_SPEC_OBJECT(%IS_VAR(arg)) ? arg : ToObject(arg));
158d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgmacro JSON_NUMBER_TO_STRING(arg) = ((%_IsSmi(%IS_VAR(arg)) || arg - arg == 0) ? %_NumberToString(arg) : "null");
15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1600cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org# Private names.
1610cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro NEW_PRIVATE(name) = (%CreatePrivateSymbol(name));
1620cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro HAS_PRIVATE(obj, sym) = (sym in obj);
1630cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro GET_PRIVATE(obj, sym) = (obj[sym]);
1640cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro SET_PRIVATE(obj, sym, val) = (obj[sym] = val);
1650cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgmacro DELETE_PRIVATE(obj, sym) = (delete obj[sym]);
1660cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org
167690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org# Constants.  The compiler constant folds them.
168690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst NAN = $NaN;
169690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst INFINITY = (1/0);
170690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.orgconst UNDEFINED = (void 0);
171690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org
17241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org# Macros implemented in Python.
17341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgpython macro CHAR_CODE(str) = ord(str[1]);
17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1757be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# Constants used on an array to implement the properties of the RegExp object.
1767be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgconst REGEXP_NUMBER_OF_CAPTURES = 0;
177bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst REGEXP_FIRST_CAPTURE = 3;
1787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
1797be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# We can't put macros in macros so we use constants here.
1807be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# REGEXP_NUMBER_OF_CAPTURES
1817be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgmacro NUMBER_OF_CAPTURES(array) = ((array)[0]);
1827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
1835d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org# Limit according to ECMA 262 15.9.1.1
1845d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgconst MAX_TIME_MS = 8640000000000000;
1855f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org# Limit which is MAX_TIME_MS + msPerMonth.
1865f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgconst MAX_TIME_BEFORE_UTC = 8640002592000000;
1875d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org
1882abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org# Gets the value of a Date object. If arg is not a Date object
1892abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org# a type error is thrown.
1904efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro CHECK_DATE(arg) = if (%_ClassOf(arg) !== 'Date') ThrowDateTypeError();
1914efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DATE_VALUE(arg) = (%_DateField(arg, 0) + %_DateField(arg, 21));
1924efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DATE_VALUE(arg)    = (%_DateField(arg, 0));
1934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
1944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_YEAR(arg)        = (%_DateField(arg, 1));
1954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MONTH(arg)       = (%_DateField(arg, 2));
1964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DAY(arg)         = (%_DateField(arg, 3));
1974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_WEEKDAY(arg)     = (%_DateField(arg, 4));
1984efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_HOUR(arg)        = (%_DateField(arg, 5));
1994efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MIN(arg)         = (%_DateField(arg, 6));
2004efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_SEC(arg)         = (%_DateField(arg, 7));
2014efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_MS(arg)          = (%_DateField(arg, 8));
2024efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_DAYS(arg)        = (%_DateField(arg, 9));
2034efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro LOCAL_TIME_IN_DAY(arg) = (%_DateField(arg, 10));
2044efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_YEAR(arg)        = (%_DateField(arg, 11));
2064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MONTH(arg)       = (%_DateField(arg, 12));
2074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DAY(arg)         = (%_DateField(arg, 13));
2084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_WEEKDAY(arg)     = (%_DateField(arg, 14));
2094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_HOUR(arg)        = (%_DateField(arg, 15));
2104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MIN(arg)         = (%_DateField(arg, 16));
2114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_SEC(arg)         = (%_DateField(arg, 17));
2124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_MS(arg)          = (%_DateField(arg, 18));
2134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_DAYS(arg)        = (%_DateField(arg, 19));
2144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro UTC_TIME_IN_DAY(arg) = (%_DateField(arg, 20));
2154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro TIMEZONE_OFFSET(arg)   = (%_DateField(arg, 21));
2174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
2184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro SET_UTC_DATE_VALUE(arg, value) = (%DateSetValue(arg, value, 1));
2194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgmacro SET_LOCAL_DATE_VALUE(arg, value) = (%DateSetValue(arg, value, 0));
2202abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
2219d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com# Last input and last subject of regexp matches.
222efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.orgconst LAST_SUBJECT_INDEX = 1;
223bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro LAST_SUBJECT(array) = ((array)[1]);
224bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro LAST_INPUT(array) = ((array)[2]);
2257be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
2267be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org# REGEXP_FIRST_CAPTURE
227bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgmacro CAPTURE(index) = (3 + (index));
228bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst CAPTURE0 = 3;
229bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgconst CAPTURE1 = 4;
23030ce411529579186181838984710b0b0980857aaricow@chromium.org
231ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# For the regexp capture override array.  This has the same
232ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# format as the arguments to a function called from
233ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# String.prototype.replace.
234ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_MATCH(override) = ((override)[0]);
235ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_POS(override) = ((override)[(override).length - 2]);
236ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_SUBJECT(override) = ((override)[(override).length - 1]);
237ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com# 1-based so index of 1 returns the first capture
238ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.commacro OVERRIDE_CAPTURE(override, index) = ((override)[(index)]);
239ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
2401805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# PropertyDescriptor return value indices - must match
24130ce411529579186181838984710b0b0980857aaricow@chromium.org# PropertyDescriptorIndices in runtime.cc.
24230ce411529579186181838984710b0b0980857aaricow@chromium.orgconst IS_ACCESSOR_INDEX = 0;
24330ce411529579186181838984710b0b0980857aaricow@chromium.orgconst VALUE_INDEX = 1;
24430ce411529579186181838984710b0b0980857aaricow@chromium.orgconst GETTER_INDEX = 2;
24530ce411529579186181838984710b0b0980857aaricow@chromium.orgconst SETTER_INDEX = 3;
24630ce411529579186181838984710b0b0980857aaricow@chromium.orgconst WRITABLE_INDEX = 4;
24730ce411529579186181838984710b0b0980857aaricow@chromium.orgconst ENUMERABLE_INDEX = 5;
24830ce411529579186181838984710b0b0980857aaricow@chromium.orgconst CONFIGURABLE_INDEX = 6;
2491805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2501805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# For messages.js
2511805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Script::Type from objects.h
2521805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_NATIVE = 0;
2531805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_EXTENSION = 1;
2541805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst TYPE_NORMAL = 2;
2551805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2561805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Script::CompilationType from objects.h
2571805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_HOST = 0;
2581805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_EVAL = 1;
2591805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst COMPILATION_TYPE_JSON = 2;
2601805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
2611805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org# Matches Messages::kNoLineNumberInfo from v8.h
2621805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgconst kNoLineNumberInfo = 0;
263