33
33
34
34
/**
35
35
* Assert that specified object type value is valid
36
+ *
37
+ * @param object's implementation-defined type
36
38
*/
37
- static void
38
- ecma_assert_object_type_is_valid (ecma_object_type_t type ) /**< object's implementation-defined type */
39
- {
40
- JERRY_ASSERT (type == ECMA_OBJECT_TYPE_GENERAL
41
- || type == ECMA_OBJECT_TYPE_ARRAY
42
- || type == ECMA_OBJECT_TYPE_FUNCTION
43
- || type == ECMA_OBJECT_TYPE_BOUND_FUNCTION
44
- || type == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION
45
- || type == ECMA_OBJECT_TYPE_STRING
46
- || type == ECMA_OBJECT_TYPE_ARGUMENTS
39
+ #ifndef JERRY_NDEBUG
40
+ #define JERRY_ASSERT_OBJECT_TYPE_IS_VALID (type ) \
41
+ JERRY_ASSERT (type == ECMA_OBJECT_TYPE_GENERAL \
42
+ || type == ECMA_OBJECT_TYPE_ARRAY \
43
+ || type == ECMA_OBJECT_TYPE_FUNCTION \
44
+ || type == ECMA_OBJECT_TYPE_BOUND_FUNCTION \
45
+ || type == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION \
46
+ || type == ECMA_OBJECT_TYPE_STRING \
47
+ || type == ECMA_OBJECT_TYPE_ARGUMENTS \
47
48
|| type == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION);
48
- } /* ecma_assert_object_type_is_valid */
49
-
49
+ #else /* JERRY_NDEBUG */
50
+ #define JERRY_ASSERT_OBJECT_TYPE_IS_VALID (type )
51
+ #endif /* !JERRY_NDEBUG */
50
52
/**
51
53
* [[Get]] ecma object's operation
52
54
*
@@ -65,7 +67,6 @@ ecma_op_object_get (ecma_object_t *obj_p, /**< the object */
65
67
JERRY_ASSERT (property_name_p != NULL );
66
68
67
69
const ecma_object_type_t type = ecma_get_object_type (obj_p );
68
- ecma_assert_object_type_is_valid (type );
69
70
70
71
switch (type )
71
72
{
@@ -84,11 +85,13 @@ ecma_op_object_get (ecma_object_t *obj_p, /**< the object */
84
85
{
85
86
return ecma_op_arguments_object_get (obj_p , property_name_p );
86
87
}
87
- }
88
-
89
- JERRY_ASSERT (false);
88
+ default :
89
+ {
90
+ JERRY_ASSERT (false);
90
91
91
- return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
92
+ return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
93
+ }
94
+ }
92
95
} /* ecma_op_object_get */
93
96
94
97
/**
@@ -102,8 +105,6 @@ ecma_op_object_get_own_property_longpath (ecma_object_t *obj_p, /**< the object
102
105
ecma_string_t * property_name_p ) /**< property name */
103
106
{
104
107
const ecma_object_type_t type = ecma_get_object_type (obj_p );
105
- ecma_assert_object_type_is_valid (type );
106
-
107
108
const bool is_builtin = ecma_get_object_is_builtin (obj_p );
108
109
109
110
ecma_property_t * prop_p = NULL ;
@@ -141,6 +142,11 @@ ecma_op_object_get_own_property_longpath (ecma_object_t *obj_p, /**< the object
141
142
142
143
break ;
143
144
}
145
+ default :
146
+ {
147
+ JERRY_UNREACHABLE ();
148
+ break ;
149
+ }
144
150
}
145
151
146
152
if (unlikely (prop_p == NULL ))
@@ -200,8 +206,7 @@ ecma_op_object_get_property (ecma_object_t *obj_p, /**< the object */
200
206
&& !ecma_is_lexical_environment (obj_p ));
201
207
JERRY_ASSERT (property_name_p != NULL );
202
208
203
- const ecma_object_type_t type = ecma_get_object_type (obj_p );
204
- ecma_assert_object_type_is_valid (type );
209
+ JERRY_ASSERT_OBJECT_TYPE_IS_VALID (ecma_get_object_type (obj_p ));
205
210
206
211
/*
207
212
* typedef ecma_property_t * (*get_property_ptr_t) (ecma_object_t *, ecma_string_t *);
@@ -242,8 +247,7 @@ ecma_op_object_put (ecma_object_t *obj_p, /**< the object */
242
247
&& !ecma_is_lexical_environment (obj_p ));
243
248
JERRY_ASSERT (property_name_p != NULL );
244
249
245
- const ecma_object_type_t type = ecma_get_object_type (obj_p );
246
- ecma_assert_object_type_is_valid (type );
250
+ JERRY_ASSERT_OBJECT_TYPE_IS_VALID (ecma_get_object_type (obj_p ));
247
251
248
252
/*
249
253
* typedef ecma_property_t * (*put_ptr_t) (ecma_object_t *, ecma_string_t *);
@@ -282,8 +286,7 @@ ecma_op_object_can_put (ecma_object_t *obj_p, /**< the object */
282
286
&& !ecma_is_lexical_environment (obj_p ));
283
287
JERRY_ASSERT (property_name_p != NULL );
284
288
285
- const ecma_object_type_t type = ecma_get_object_type (obj_p );
286
- ecma_assert_object_type_is_valid (type );
289
+ JERRY_ASSERT_OBJECT_TYPE_IS_VALID (ecma_get_object_type (obj_p ));
287
290
288
291
/*
289
292
* typedef ecma_property_t * (*can_put_ptr_t) (ecma_object_t *, ecma_string_t *);
@@ -324,7 +327,6 @@ ecma_op_object_delete (ecma_object_t *obj_p, /**< the object */
324
327
JERRY_ASSERT (property_name_p != NULL );
325
328
326
329
const ecma_object_type_t type = ecma_get_object_type (obj_p );
327
- ecma_assert_object_type_is_valid (type );
328
330
329
331
switch (type )
330
332
{
@@ -347,11 +349,13 @@ ecma_op_object_delete (ecma_object_t *obj_p, /**< the object */
347
349
property_name_p ,
348
350
is_throw );
349
351
}
350
- }
351
-
352
- JERRY_ASSERT (false);
352
+ default :
353
+ {
354
+ JERRY_ASSERT (false);
353
355
354
- return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
356
+ return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
357
+ }
358
+ }
355
359
} /* ecma_op_object_delete */
356
360
357
361
/**
@@ -370,8 +374,7 @@ ecma_op_object_default_value (ecma_object_t *obj_p, /**< the object */
370
374
JERRY_ASSERT (obj_p != NULL
371
375
&& !ecma_is_lexical_environment (obj_p ));
372
376
373
- const ecma_object_type_t type = ecma_get_object_type (obj_p );
374
- ecma_assert_object_type_is_valid (type );
377
+ JERRY_ASSERT_OBJECT_TYPE_IS_VALID (ecma_get_object_type (obj_p ));
375
378
376
379
/*
377
380
* typedef ecma_property_t * (*default_value_ptr_t) (ecma_object_t *, ecma_string_t *);
@@ -414,7 +417,6 @@ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */
414
417
JERRY_ASSERT (property_name_p != NULL );
415
418
416
419
const ecma_object_type_t type = ecma_get_object_type (obj_p );
417
- ecma_assert_object_type_is_valid (type );
418
420
419
421
switch (type )
420
422
{
@@ -446,11 +448,13 @@ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */
446
448
property_desc_p ,
447
449
is_throw );
448
450
}
449
- }
450
-
451
- JERRY_ASSERT (false);
451
+ default :
452
+ {
453
+ JERRY_ASSERT (false);
452
454
453
- return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
455
+ return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY );
456
+ }
457
+ }
454
458
} /* ecma_op_object_define_own_property */
455
459
456
460
/**
@@ -467,7 +471,6 @@ ecma_op_object_has_instance (ecma_object_t *obj_p, /**< the object */
467
471
&& !ecma_is_lexical_environment (obj_p ));
468
472
469
473
const ecma_object_type_t type = ecma_get_object_type (obj_p );
470
- ecma_assert_object_type_is_valid (type );
471
474
472
475
switch (type )
473
476
{
@@ -486,9 +489,12 @@ ecma_op_object_has_instance (ecma_object_t *obj_p, /**< the object */
486
489
{
487
490
return ecma_op_function_has_instance (obj_p , value );
488
491
}
492
+ default :
493
+ {
494
+ JERRY_UNREACHABLE ();
495
+ break ;
496
+ }
489
497
}
490
-
491
- JERRY_UNREACHABLE ();
492
498
} /* ecma_op_object_has_instance */
493
499
494
500
/**
@@ -547,7 +553,7 @@ ecma_op_object_get_property_names (ecma_object_t *obj_p, /**< object */
547
553
ecma_collection_header_t * skipped_non_enumerable_p = ecma_new_strings_collection (NULL , 0 );
548
554
549
555
const ecma_object_type_t type = ecma_get_object_type (obj_p );
550
- ecma_assert_object_type_is_valid ( type );
556
+ const bool obj_is_builtin = ecma_get_object_is_builtin ( obj_p );
551
557
552
558
const size_t bitmap_row_size = sizeof (uint32_t ) * JERRY_BITSINBYTE ;
553
559
uint32_t names_hashes_bitmap [(1u << LIT_STRING_HASH_BITS ) / bitmap_row_size ];
@@ -564,7 +570,7 @@ ecma_op_object_get_property_names (ecma_object_t *obj_p, /**< object */
564
570
565
571
ecma_collection_header_t * prop_names_p = ecma_new_strings_collection (NULL , 0 );
566
572
567
- if (ecma_get_object_is_builtin ( obj_p ) )
573
+ if (obj_is_builtin )
568
574
{
569
575
ecma_builtin_list_lazy_property_names (obj_p ,
570
576
is_enumerable_only ,
@@ -601,6 +607,11 @@ ecma_op_object_get_property_names (ecma_object_t *obj_p, /**< object */
601
607
{
602
608
break ;
603
609
}
610
+ default :
611
+ {
612
+ JERRY_UNREACHABLE ();
613
+ break ;
614
+ }
604
615
}
605
616
}
606
617
0 commit comments