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_TypedObjectConstants_h michael@0: #define builtin_TypedObjectConstants_h michael@0: michael@0: /////////////////////////////////////////////////////////////////////////// michael@0: // Slots for typed prototypes michael@0: michael@0: #define JS_TYPROTO_SLOT_DESCR 0 michael@0: #define JS_TYPROTO_SLOTS 1 michael@0: michael@0: /////////////////////////////////////////////////////////////////////////// michael@0: // Slots for type objects michael@0: // michael@0: // Some slots apply to all type objects and some are specific to michael@0: // particular kinds of type objects. For simplicity we use the same michael@0: // number of slots no matter what kind of type descriptor we are michael@0: // working with, even though this is mildly wasteful. michael@0: michael@0: // Slots on all type objects michael@0: #define JS_DESCR_SLOT_KIND 0 // Atomized string representation michael@0: #define JS_DESCR_SLOT_STRING_REPR 1 // Atomized string representation michael@0: #define JS_DESCR_SLOT_ALIGNMENT 2 // Alignment in bytes michael@0: #define JS_DESCR_SLOT_SIZE 3 // Size in bytes, if sized, else 0 michael@0: #define JS_DESCR_SLOT_OPAQUE 4 // Atomized string representation michael@0: #define JS_DESCR_SLOT_TYPROTO 5 // Prototype for instances, if any michael@0: michael@0: // Slots on scalars, references, and x4s michael@0: #define JS_DESCR_SLOT_TYPE 6 // Type code michael@0: michael@0: // Slots on all array descriptors michael@0: #define JS_DESCR_SLOT_ARRAY_ELEM_TYPE 6 michael@0: michael@0: // Slots on sized array descriptors michael@0: #define JS_DESCR_SLOT_SIZED_ARRAY_LENGTH 7 michael@0: michael@0: // Slots on struct type objects michael@0: #define JS_DESCR_SLOT_STRUCT_FIELD_NAMES 6 michael@0: #define JS_DESCR_SLOT_STRUCT_FIELD_TYPES 7 michael@0: #define JS_DESCR_SLOT_STRUCT_FIELD_OFFSETS 8 michael@0: michael@0: // Maximum number of slots for any descriptor michael@0: #define JS_DESCR_SLOTS 9 michael@0: michael@0: // These constants are for use exclusively in JS code. In C++ code, michael@0: // prefer TypeRepresentation::Scalar etc, which allows you to michael@0: // write a switch which will receive a warning if you omit a case. michael@0: #define JS_TYPEREPR_UNSIZED_ARRAY_KIND 0 michael@0: #define JS_TYPEREPR_MAX_UNSIZED_KIND 0 // Unsized kinds go above here michael@0: #define JS_TYPEREPR_SCALAR_KIND 1 michael@0: #define JS_TYPEREPR_REFERENCE_KIND 2 michael@0: #define JS_TYPEREPR_STRUCT_KIND 3 michael@0: #define JS_TYPEREPR_SIZED_ARRAY_KIND 4 michael@0: #define JS_TYPEREPR_X4_KIND 5 michael@0: michael@0: // These constants are for use exclusively in JS code. In C++ code, michael@0: // prefer ScalarTypeRepresentation::TYPE_INT8 etc, which allows michael@0: // you to write a switch which will receive a warning if you omit a michael@0: // case. michael@0: #define JS_SCALARTYPEREPR_INT8 0 michael@0: #define JS_SCALARTYPEREPR_UINT8 1 michael@0: #define JS_SCALARTYPEREPR_INT16 2 michael@0: #define JS_SCALARTYPEREPR_UINT16 3 michael@0: #define JS_SCALARTYPEREPR_INT32 4 michael@0: #define JS_SCALARTYPEREPR_UINT32 5 michael@0: #define JS_SCALARTYPEREPR_FLOAT32 6 michael@0: #define JS_SCALARTYPEREPR_FLOAT64 7 michael@0: #define JS_SCALARTYPEREPR_UINT8_CLAMPED 8 michael@0: michael@0: // These constants are for use exclusively in JS code. In C++ code, michael@0: // prefer ReferenceTypeRepresentation::TYPE_ANY etc, which allows michael@0: // you to write a switch which will receive a warning if you omit a michael@0: // case. michael@0: #define JS_REFERENCETYPEREPR_ANY 0 michael@0: #define JS_REFERENCETYPEREPR_OBJECT 1 michael@0: #define JS_REFERENCETYPEREPR_STRING 2 michael@0: michael@0: // These constants are for use exclusively in JS code. In C++ code, michael@0: // prefer X4TypeRepresentation::TYPE_INT32 etc, since that allows michael@0: // you to write a switch which will receive a warning if you omit a michael@0: // case. michael@0: #define JS_X4TYPEREPR_INT32 0 michael@0: #define JS_X4TYPEREPR_FLOAT32 1 michael@0: michael@0: /////////////////////////////////////////////////////////////////////////// michael@0: // Slots for typed objects michael@0: michael@0: #define JS_TYPEDOBJ_SLOT_BYTEOFFSET 0 michael@0: #define JS_TYPEDOBJ_SLOT_BYTELENGTH 1 michael@0: #define JS_TYPEDOBJ_SLOT_OWNER 2 michael@0: #define JS_TYPEDOBJ_SLOT_NEXT_VIEW 3 michael@0: michael@0: #define JS_DATAVIEW_SLOTS 4 // Number of slots for data views michael@0: michael@0: #define JS_TYPEDOBJ_SLOT_LENGTH 4 // Length of array (see (*) below) michael@0: #define JS_TYPEDOBJ_SLOT_TYPE_DESCR 5 // For typed objects, type descr michael@0: michael@0: #define JS_TYPEDOBJ_SLOT_DATA 7 // private slot, based on alloc kind michael@0: #define JS_TYPEDOBJ_SLOTS 6 // Number of slots for typed objs michael@0: michael@0: // (*) The JS_TYPEDOBJ_SLOT_LENGTH slot stores the length for typed objects of michael@0: // sized and unsized array type. The slot contains 0 for non-arrays. michael@0: // The slot also contains 0 for *unattached* typed objects, no matter what michael@0: // type they have. michael@0: michael@0: #endif