michael@0: /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * vim: set ts=8 sts=4 et sw=4 tw=99: michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: // Specialized .h file to be used by both JS and C++ code. michael@0: michael@0: #ifndef builtin_SelfHostingDefines_h michael@0: #define builtin_SelfHostingDefines_h michael@0: michael@0: // Utility macros. michael@0: #define TO_INT32(x) ((x) | 0) michael@0: #define TO_UINT32(x) ((x) >>> 0) michael@0: #define IS_UINT32(x) ((x) >>> 0 === (x)) michael@0: michael@0: // Assertions. michael@0: #ifdef DEBUG michael@0: #define assert(b, info) if (!(b)) AssertionFailed(info) michael@0: #else michael@0: #define assert(b, info) // Elided assertion. michael@0: #endif michael@0: michael@0: // Unforgeable versions of ARRAY.push(ELEMENT) and ARRAY.slice. michael@0: #define ARRAY_PUSH(ARRAY, ELEMENT) \ michael@0: callFunction(std_Array_push, ARRAY, ELEMENT); michael@0: #define ARRAY_SLICE(ARRAY, ELEMENT) \ michael@0: callFunction(std_Array_slice, ARRAY, ELEMENT); michael@0: michael@0: // Property descriptor attributes. michael@0: #define ATTR_ENUMERABLE 0x01 michael@0: #define ATTR_CONFIGURABLE 0x02 michael@0: #define ATTR_WRITABLE 0x04 michael@0: michael@0: #define ATTR_NONENUMERABLE 0x08 michael@0: #define ATTR_NONCONFIGURABLE 0x10 michael@0: #define ATTR_NONWRITABLE 0x20 michael@0: michael@0: #endif