Skip to content

Commit d1e0e3b

Browse files
committed
Don't use pointer compression where the ecma_value can store pointer value directly.
This changes affects those internal properties where the property value type is an ecma_object_t ptr. JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com
1 parent 02ba19f commit d1e0e3b

File tree

5 files changed

+52
-25
lines changed

5 files changed

+52
-25
lines changed

jerry-core/ecma/base/ecma-gc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ ecma_gc_mark_property (ecma_property_t *property_p) /**< property */
315315
case ECMA_INTERNAL_PROPERTY_SCOPE: /* a lexical environment */
316316
case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP: /* an object */
317317
{
318-
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t, property_value);
318+
ecma_object_t *obj_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t, property_value);
319319

320320
ecma_gc_set_object_visited (obj_p, true);
321321

jerry-core/ecma/base/ecma-helpers.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,35 @@
7171
utf8_ptr ## must_be_freed = true; \
7272
}
7373

74+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
75+
76+
/**
77+
* Set an internal property value of pointer
78+
*/
79+
#define ECMA_SET_INTERNAL_VALUE_POINTER(field, pointer) field = (ecma_value_t) pointer;
80+
81+
/**
82+
* Get an internal property value of pointer
83+
*/
84+
#define ECMA_GET_INTERNAL_VALUE_POINTER(type, field) (type *) field;
85+
86+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
87+
88+
/**
89+
* Set an internal property value of non-null pointer so that it will correspond
90+
* to specified non_compressed_pointer.
91+
*/
92+
#define ECMA_SET_INTERNAL_VALUE_POINTER(field, non_compressed_pointer) \
93+
ECMA_SET_NON_NULL_POINTER(field, non_compressed_pointer)
94+
95+
/**
96+
* Get an internal property value of pointer from specified non-null compressed pointer.
97+
*/
98+
#define ECMA_GET_INTERNAL_VALUE_POINTER(type, field) \
99+
ECMA_GET_NON_NULL_POINTER (type, field)
100+
101+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
102+
74103
/**
75104
* Free the cesu-8 string buffer allocated by 'ECMA_STRING_TO_UTF8_STRING'
76105
*/

jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar
247247
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
248248

249249
ecma_object_t *this_arg_obj_p = ecma_get_object_from_value (this_arg);
250-
ECMA_SET_NON_NULL_POINTER (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value, this_arg_obj_p);
250+
ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value, this_arg_obj_p);
251251

252252
/* 8. */
253253
ecma_property_t *bound_this_prop_p;

jerry-core/ecma/operations/ecma-function-object.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ ecma_op_create_function_object (ecma_object_t *scope_p, /**< function's scope */
168168

169169
// 9.
170170
ecma_property_t *scope_prop_p = ecma_create_internal_property (f, ECMA_INTERNAL_PROPERTY_SCOPE);
171-
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, scope_p);
171+
ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, scope_p);
172172

173173
// 10., 11., 12.
174174
ecma_property_t *bytecode_prop_p = ecma_create_internal_property (f, ECMA_INTERNAL_PROPERTY_CODE_BYTECODE);
@@ -529,8 +529,8 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object *
529529
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
530530

531531
ecma_object_t *target_func_obj_p;
532-
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
533-
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
532+
target_func_obj_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
533+
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
534534

535535
/* 3. */
536536
ret_value = ecma_op_object_has_instance (target_func_obj_p, value);
@@ -576,8 +576,8 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
576576
ecma_property_t *scope_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_SCOPE);
577577
ecma_property_t *bytecode_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_CODE_BYTECODE);
578578

579-
ecma_object_t *scope_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
580-
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
579+
ecma_object_t *scope_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
580+
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
581581

582582
// 8.
583583
ecma_value_t this_binding;
@@ -685,8 +685,8 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
685685
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
686686

687687
ecma_object_t *target_func_obj_p;
688-
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
689-
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
688+
target_func_obj_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
689+
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
690690

691691
/* 4. */
692692
ecma_property_t *bound_args_prop_p;
@@ -870,8 +870,8 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
870870
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
871871

872872
ecma_object_t *target_func_obj_p;
873-
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
874-
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
873+
target_func_obj_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
874+
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
875875

876876
/* 2. */
877877
if (!ecma_is_constructor (ecma_make_object_value (target_func_obj_p)))

jerry-core/ecma/operations/ecma-objects-arguments.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function
174174

175175
ecma_property_t *parameters_map_prop_p = ecma_create_internal_property (obj_p,
176176
ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
177-
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (parameters_map_prop_p)->value, map_p);
177+
ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (parameters_map_prop_p)->value, map_p);
178178

179179
ecma_property_t *scope_prop_p = ecma_create_internal_property (map_p,
180180
ECMA_INTERNAL_PROPERTY_SCOPE);
181-
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, lex_env_p);
181+
ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, lex_env_p);
182182

183183
ecma_deref_object (map_p);
184184
}
@@ -285,8 +285,8 @@ ecma_arguments_get_mapped_arg_value (ecma_object_t *map_p, /**< [[ParametersMap]
285285
equal to mapped argument's name */
286286
{
287287
ecma_property_t *scope_prop_p = ecma_get_internal_property (map_p, ECMA_INTERNAL_PROPERTY_SCOPE);
288-
ecma_object_t *lex_env_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
289-
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
288+
ecma_object_t *lex_env_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
289+
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
290290
JERRY_ASSERT (lex_env_p != NULL
291291
&& ecma_is_lexical_environment (lex_env_p));
292292

@@ -316,8 +316,8 @@ ecma_op_arguments_object_get (ecma_object_t *obj_p, /**< the object */
316316
{
317317
// 1.
318318
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
319-
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
320-
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
319+
ecma_object_t *map_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
320+
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
321321

322322
// 2.
323323
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
@@ -362,8 +362,8 @@ ecma_op_arguments_object_get_own_property (ecma_object_t *obj_p, /**< the object
362362

363363
// 3.
364364
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
365-
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
366-
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
365+
ecma_object_t *map_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
366+
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
367367

368368
// 4.
369369
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
@@ -402,8 +402,7 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
402402
{
403403
// 1.
404404
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
405-
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
406-
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
405+
ecma_object_t *map_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t, ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
407406

408407
// 2.
409408
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
@@ -443,8 +442,8 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
443442
{
444443
/* emulating execution of function described by MakeArgSetter */
445444
ecma_property_t *scope_prop_p = ecma_get_internal_property (map_p, ECMA_INTERNAL_PROPERTY_SCOPE);
446-
ecma_object_t *lex_env_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
447-
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
445+
ecma_object_t *lex_env_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t,
446+
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
448447

449448
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
450449
ecma_value_t arg_name_prop_value = ecma_get_named_data_property_value (mapped_prop_p);
@@ -500,8 +499,7 @@ ecma_op_arguments_object_delete (ecma_object_t *obj_p, /**< the object */
500499
{
501500
// 1.
502501
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
503-
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
504-
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
502+
ecma_object_t *map_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t, ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
505503

506504
// 2.
507505
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);

0 commit comments

Comments
 (0)