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