5555 */
5656typedef enum
5757{
58- ECMA_TYPE_SIMPLE , /**< simple value */
59- ECMA_TYPE_NUMBER , /**< 64- bit integer */
58+ ECMA_TYPE_DIRECT , /**< directly encoded value, a 28 bit signed integer or a simple value */
59+ ECMA_TYPE_FLOAT , /**< pointer to a 64 or 32 bit floating point number */
6060 ECMA_TYPE_STRING , /**< pointer to description of a string */
6161 ECMA_TYPE_OBJECT , /**< pointer to description of an object */
6262 ECMA_TYPE___MAX = ECMA_TYPE_OBJECT /** highest value for ecma types */
@@ -68,10 +68,10 @@ typedef enum
6868typedef enum
6969{
7070 /**
71- * Empty value is implementation defined value, used for:
72- * - representing empty value in completion values (see also: ECMA-262 v5, 8.9 Completion specification type);
73- * - values of uninitialized immutable bindings;
74- * - values of empty register variables.
71+ * Empty value is implementation defined value, used for representing :
72+ * - empty (uninitialized) values
73+ * - immutable binding values
74+ * - special register or stack values for vm
7575 */
7676 ECMA_SIMPLE_VALUE_EMPTY ,
7777 ECMA_SIMPLE_VALUE_UNDEFINED , /**< undefined value */
@@ -90,6 +90,11 @@ typedef enum
9090 */
9191typedef uint32_t ecma_value_t ;
9292
93+ /**
94+ * Type for directly encoded integer numbers in JerryScript.
95+ */
96+ typedef int32_t ecma_integer_value_t ;
97+
9398#if UINTPTR_MAX <= UINT32_MAX
9499
95100/**
@@ -114,6 +119,36 @@ typedef uint32_t ecma_value_t;
114119 */
115120#define ECMA_VALUE_SHIFT 3
116121
122+ /**
123+ * Mask for directly encoded values
124+ */
125+ #define ECMA_DIRECT_TYPE_MASK ((1u << ECMA_VALUE_SHIFT) | ECMA_VALUE_TYPE_MASK)
126+
127+ /**
128+ * Ecma integer value type
129+ */
130+ #define ECMA_DIRECT_TYPE_INTEGER_VALUE ((0u << ECMA_VALUE_SHIFT) | ECMA_TYPE_DIRECT)
131+
132+ /**
133+ * Ecma simple value type
134+ */
135+ #define ECMA_DIRECT_TYPE_SIMPLE_VALUE ((1u << ECMA_VALUE_SHIFT) | ECMA_TYPE_DIRECT)
136+
137+ /**
138+ * Shift for directly encoded values in ecma_value_t
139+ */
140+ #define ECMA_DIRECT_SHIFT 4
141+
142+ /**
143+ * Maximum integer number for an ecma value
144+ */
145+ #define ECMA_INTEGER_NUMBER_MAX 0x7ffffff
146+
147+ /**
148+ * Minimum integer number for an ecma value
149+ */
150+ #define ECMA_INTEGER_NUMBER_MIN -0x8000000
151+
117152/**
118153 * Internal properties' identifiers.
119154 */
0 commit comments