From 80811c83324398138a0897e579321bed2fc4b489 Mon Sep 17 00:00:00 2001 From: Robert Sipka Date: Mon, 15 Feb 2016 17:19:18 +0100 Subject: [PATCH] Warning fixes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ISO C99 doesn’t support unnamed structs/unions. Comparison of distinct pointer types lacks a cast. Dereferencing type-punned pointer will break strict-aliasing rules. Type of bit-field ‘ext’ is a GCC extension. JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com --- CMakeLists.txt | 4 +- jerry-core/ecma/base/ecma-globals.h | 18 ++-- jerry-core/ecma/base/ecma-helpers-string.c | 2 +- jerry-core/ecma/base/ecma-helpers.c | 2 +- .../ecma/operations/ecma-objects-arguments.c | 2 +- jerry-core/ecma/operations/ecma-reference.h | 2 +- jerry-core/jerry-api.h | 10 +- jerry-core/jerry-snapshot.h | 6 +- jerry-core/jerry.c | 68 ++++++------ jerry-core/jrt/jrt.h | 4 + jerry-core/lit/lit-literal.c | 2 +- jerry-core/lit/lit-strings.h | 2 +- jerry-core/mem/mem-heap.c | 2 +- jerry-core/parser/js/js-lexer.c | 2 +- jerry-core/parser/js/js-parser.c | 6 +- jerry-core/rcs/rcs-cpointer.c | 16 +-- jerry-core/rcs/rcs-cpointer.h | 12 +-- jerry-core/rcs/rcs-records.c | 12 +-- jerry-core/vm/vm-stack.c | 3 +- jerry-core/vm/vm.c | 8 +- main-unix.c | 8 +- tests/unit/test-api.c | 102 +++++++++--------- 22 files changed, 149 insertions(+), 144 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55dfa82909..42ad5d329b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,8 +269,8 @@ project (Jerry C ASM) endforeach() endmacro() - add_jerry_compile_warnings(all extra format-nonliteral init-self conversion sign-conversion format-security missing-declarations) - add_jerry_compile_flags(-pedantic -Wno-stack-protector -Wno-attributes) + add_jerry_compile_warnings(all extra format-nonliteral init-self conversion sign-conversion format-security missing-declarations pedantic) + add_jerry_compile_flags(-Wno-stack-protector -Wno-attributes) if(CMAKE_COMPILER_IS_GNUCC) add_jerry_compile_warnings(logical-op) else() diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h index 65de09b2c2..e806191d7f 100644 --- a/jerry-core/ecma/base/ecma-globals.h +++ b/jerry-core/ecma/base/ecma-globals.h @@ -294,8 +294,8 @@ typedef enum */ typedef struct { - mem_cpointer_t getter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to getter object */ - mem_cpointer_t setter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to setter object */ + __extension__ mem_cpointer_t getter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to getter object */ + __extension__ mem_cpointer_t setter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to setter object */ } ecma_getter_setter_pointers_t; /** @@ -307,7 +307,7 @@ typedef struct __attr_packed___ ecma_property_t unsigned int type : 2; /** Compressed pointer to next property */ - mem_cpointer_t next_property_p : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t next_property_p : ECMA_POINTER_FIELD_WIDTH; /** Property's details (depending on Type) */ union @@ -316,10 +316,10 @@ typedef struct __attr_packed___ ecma_property_t struct __attr_packed___ ecma_named_data_property_t { /** Value */ - ecma_value_t value : ECMA_VALUE_SIZE; + __extension__ ecma_value_t value : ECMA_VALUE_SIZE; /** Compressed pointer to property's name (pointer to String) */ - mem_cpointer_t name_p : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t name_p : ECMA_POINTER_FIELD_WIDTH; /** Flag indicating whether the property is registered in LCache */ unsigned int is_lcached : 1; @@ -338,7 +338,7 @@ typedef struct __attr_packed___ ecma_property_t struct __attr_packed___ ecma_named_accessor_property_t { /** Compressed pointer to property's name (pointer to String) */ - mem_cpointer_t name_p : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t name_p : ECMA_POINTER_FIELD_WIDTH; /** Attribute 'Enumerable' (ecma_property_enumerable_value_t) */ unsigned int enumerable : 1; @@ -350,7 +350,7 @@ typedef struct __attr_packed___ ecma_property_t unsigned int is_lcached : 1; /** Compressed pointer to pair of pointers - to property's getter and setter */ - mem_cpointer_t getter_setter_pair_cp : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t getter_setter_pair_cp : ECMA_POINTER_FIELD_WIDTH; } named_accessor_property; /** Description of internal property */ @@ -795,10 +795,10 @@ typedef struct ecma_string_t lit_cpointer_t lit_cp; /** Compressed pointer to an ecma_collection_header_t */ - mem_cpointer_t collection_cp : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t collection_cp : ECMA_POINTER_FIELD_WIDTH; /** Compressed pointer to an ecma_number_t */ - mem_cpointer_t number_cp : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t number_cp : ECMA_POINTER_FIELD_WIDTH; /** UInt32-represented number placed locally in the descriptor */ uint32_t uint32_number; diff --git a/jerry-core/ecma/base/ecma-helpers-string.c b/jerry-core/ecma/base/ecma-helpers-string.c index cf46e63087..f989dcb4d5 100644 --- a/jerry-core/ecma/base/ecma-helpers-string.c +++ b/jerry-core/ecma/base/ecma-helpers-string.c @@ -978,7 +978,7 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri { case ECMA_STRING_CONTAINER_LIT_TABLE: { - JERRY_ASSERT (string1_p->u.lit_cp.packed_value != string2_p->u.lit_cp.packed_value); + JERRY_ASSERT (string1_p->u.lit_cp.u.packed_value != string2_p->u.lit_cp.u.packed_value); return false; } case ECMA_STRING_CONTAINER_MAGIC_STRING: diff --git a/jerry-core/ecma/base/ecma-helpers.c b/jerry-core/ecma/base/ecma-helpers.c index b96c19eea6..f8f34bbbfa 100644 --- a/jerry-core/ecma/base/ecma-helpers.c +++ b/jerry-core/ecma/base/ecma-helpers.c @@ -1388,7 +1388,7 @@ ecma_bytecode_deref (ecma_compiled_code_t *bytecode_p) /**< byte code pointer */ for (uint32_t i = const_literal_end; i < literal_end; i++) { - mem_cpointer_t bytecode_cpointer = literal_start_p[i].value.base_cp; + mem_cpointer_t bytecode_cpointer = literal_start_p[i].u.value.base_cp; ecma_compiled_code_t *bytecode_literal_p = ECMA_GET_NON_NULL_POINTER (ecma_compiled_code_t, bytecode_cpointer); diff --git a/jerry-core/ecma/operations/ecma-objects-arguments.c b/jerry-core/ecma/operations/ecma-objects-arguments.c index a0a3198fcf..4483269fb3 100644 --- a/jerry-core/ecma/operations/ecma-objects-arguments.c +++ b/jerry-core/ecma/operations/ecma-objects-arguments.c @@ -138,7 +138,7 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function indx++) { // i. - if (literal_p[indx].packed_value == MEM_CP_NULL) + if (literal_p[indx].u.packed_value == MEM_CP_NULL) { continue; } diff --git a/jerry-core/ecma/operations/ecma-reference.h b/jerry-core/ecma/operations/ecma-reference.h index 1cfd4838ec..9b25eb1715 100644 --- a/jerry-core/ecma/operations/ecma-reference.h +++ b/jerry-core/ecma/operations/ecma-reference.h @@ -37,7 +37,7 @@ typedef struct ecma_value_t base; /** referenced name */ - mem_cpointer_t referenced_name_cp : ECMA_POINTER_FIELD_WIDTH; + __extension__ mem_cpointer_t referenced_name_cp : ECMA_POINTER_FIELD_WIDTH; /** strict reference flag */ unsigned int is_strict : 1; diff --git a/jerry-core/jerry-api.h b/jerry-core/jerry-api.h index 5a76eee675..0913a01f21 100644 --- a/jerry-core/jerry-api.h +++ b/jerry-core/jerry-api.h @@ -118,12 +118,10 @@ typedef struct jerry_api_value_t uint32_t v_uint32; /**< number converted 32-bit unsigned integer */ - union - { - jerry_api_string_t *v_string; /**< pointer to a JS string */ - jerry_api_object_t *v_object; /**< pointer to a JS object */ - }; - }; + jerry_api_string_t *v_string; /**< pointer to a JS string */ + jerry_api_object_t *v_object; /**< pointer to a JS object */ + + } u; } jerry_api_value_t; /** diff --git a/jerry-core/jerry-snapshot.h b/jerry-core/jerry-snapshot.h index 5b35af3bf5..9c9ce316b4 100644 --- a/jerry-core/jerry-snapshot.h +++ b/jerry-core/jerry-snapshot.h @@ -26,9 +26,9 @@ typedef struct { uint32_t last_compiled_code_offset; /**< offset of the last compiled code */ uint32_t lit_table_size; /**< size of literal table */ - uint32_t is_run_global : 1; /**< flag, indicating whether the snapshot - * was dumped as 'Global scope'-mode code (true) - * or as eval-mode code (false) */ + __extension__ uint32_t is_run_global : 1; /**< flag, indicating whether the snapshot + * was dumped as 'Global scope'-mode code (true) + * or as eval-mode code (false) */ } jerry_snapshot_header_t; /** diff --git a/jerry-core/jerry.c b/jerry-core/jerry.c index 7a9006a816..7ad48c02a1 100644 --- a/jerry-core/jerry.c +++ b/jerry-core/jerry.c @@ -205,7 +205,7 @@ jerry_api_value_is_object (const jerry_api_value_t *value_p) /**< pointer to api bool jerry_api_value_is_function (const jerry_api_value_t *value_p) /**< pointer to api value */ { - return jerry_api_value_is_object (value_p) && jerry_api_is_function (value_p->v_object); + return jerry_api_value_is_object (value_p) && jerry_api_is_function (value_p->u.v_object); } /* jerry_api_value_is_function */ /** @@ -217,7 +217,7 @@ bool jerry_api_get_boolean_value (const jerry_api_value_t *value_p) /**< pointer to api value */ { JERRY_ASSERT (jerry_api_value_is_boolean (value_p)); - return value_p->v_bool; + return value_p->u.v_bool; } /* jerry_api_get_boolean_value */ /** @@ -237,15 +237,15 @@ jerry_api_get_number_value (const jerry_api_value_t *value_p) /**< pointer to ap JERRY_ASSERT (jerry_api_value_is_number (value_p)); if (value_p->type == JERRY_API_DATA_TYPE_UINT32) { - return value_p->v_uint32; + return value_p->u.v_uint32; } else if (value_p->type == JERRY_API_DATA_TYPE_FLOAT32) { - return value_p->v_float32; + return value_p->u.v_float32; } else { - return value_p->v_float64; + return value_p->u.v_float64; } } /* jerry_api_get_number_value */ @@ -258,7 +258,7 @@ jerry_api_string_t * jerry_api_get_string_value (const jerry_api_value_t *value_p) /**< pointer to api value */ { JERRY_ASSERT (jerry_api_value_is_string (value_p)); - return value_p->v_string; + return value_p->u.v_string; } /* jerry_api_get_string_value */ /** @@ -270,7 +270,7 @@ jerry_api_object_t * jerry_api_get_object_value (const jerry_api_value_t *value_p) /**< pointer to api value */ { JERRY_ASSERT (jerry_api_value_is_object (value_p)); - return value_p->v_object; + return value_p->u.v_object; } /* jerry_api_get_object_value */ /** @@ -318,7 +318,7 @@ jerry_api_create_boolean_value (bool value) /**< bool value from which a jerry_a { jerry_api_value_t jerry_val; jerry_val.type = JERRY_API_DATA_TYPE_BOOLEAN; - jerry_val.v_bool = value; + jerry_val.u.v_bool = value; return jerry_val; } /* jerry_api_create_boolean_value */ @@ -332,7 +332,7 @@ jerry_api_create_number_value (double value) /**< double value from which a jerr { jerry_api_value_t jerry_val; jerry_val.type = JERRY_API_DATA_TYPE_FLOAT64; - jerry_val.v_float64 = value; + jerry_val.u.v_float64 = value; return jerry_val; } /* jerry_api_create_number_value */ @@ -345,7 +345,7 @@ jerry_api_create_object_value (jerry_api_object_t *value) /**< jerry_api_object_ { jerry_api_value_t jerry_val; jerry_val.type = JERRY_API_DATA_TYPE_OBJECT; - jerry_val.v_object = value; + jerry_val.u.v_object = value; return jerry_val; } /* jerry_api_create_object_value */ @@ -358,7 +358,7 @@ jerry_api_create_string_value (jerry_api_string_t *value) /**< jerry_api_string_ { jerry_api_value_t jerry_val; jerry_val.type = JERRY_API_DATA_TYPE_STRING; - jerry_val.v_string = value; + jerry_val.u.v_string = value; return jerry_val; } /* jerry_api_create_string_value */ @@ -391,7 +391,7 @@ jerry_api_convert_ecma_value_to_api_value (jerry_api_value_t *out_value_p, /**< else if (ecma_is_value_boolean (value)) { out_value_p->type = JERRY_API_DATA_TYPE_BOOLEAN; - out_value_p->v_bool = ecma_is_value_true (value); + out_value_p->u.v_bool = ecma_is_value_true (value); } else if (ecma_is_value_number (value)) { @@ -399,10 +399,10 @@ jerry_api_convert_ecma_value_to_api_value (jerry_api_value_t *out_value_p, /**< #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 out_value_p->type = JERRY_API_DATA_TYPE_FLOAT32; - out_value_p->v_float32 = *num; + out_value_p->u.v_float32 = *num; #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 out_value_p->type = JERRY_API_DATA_TYPE_FLOAT64; - out_value_p->v_float64 = *num; + out_value_p->u.v_float64 = *num; #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ } else if (ecma_is_value_string (value)) @@ -410,7 +410,7 @@ jerry_api_convert_ecma_value_to_api_value (jerry_api_value_t *out_value_p, /**< ecma_string_t *str = ecma_get_string_from_value (value); out_value_p->type = JERRY_API_DATA_TYPE_STRING; - out_value_p->v_string = ecma_copy_or_ref_ecma_string (str); + out_value_p->u.v_string = ecma_copy_or_ref_ecma_string (str); } else if (ecma_is_value_object (value)) { @@ -418,7 +418,7 @@ jerry_api_convert_ecma_value_to_api_value (jerry_api_value_t *out_value_p, /**< ecma_ref_object (obj); out_value_p->type = JERRY_API_DATA_TYPE_OBJECT; - out_value_p->v_object = obj; + out_value_p->u.v_object = obj; } else { @@ -453,14 +453,14 @@ jerry_api_convert_api_value_to_ecma_value (ecma_value_t *out_value_p, /**< out: } case JERRY_API_DATA_TYPE_BOOLEAN: { - *out_value_p = ecma_make_simple_value (api_value_p->v_bool ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); + *out_value_p = ecma_make_simple_value (api_value_p->u.v_bool ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); break; } case JERRY_API_DATA_TYPE_FLOAT32: { ecma_number_t *num = ecma_alloc_number (); - *num = (ecma_number_t) (api_value_p->v_float32); + *num = (ecma_number_t) (api_value_p->u.v_float32); *out_value_p = ecma_make_number_value (num); @@ -469,7 +469,7 @@ jerry_api_convert_api_value_to_ecma_value (ecma_value_t *out_value_p, /**< out: case JERRY_API_DATA_TYPE_FLOAT64: { ecma_number_t *num = ecma_alloc_number (); - *num = (ecma_number_t) (api_value_p->v_float64); + *num = (ecma_number_t) (api_value_p->u.v_float64); *out_value_p = ecma_make_number_value (num); @@ -478,7 +478,7 @@ jerry_api_convert_api_value_to_ecma_value (ecma_value_t *out_value_p, /**< out: case JERRY_API_DATA_TYPE_UINT32: { ecma_number_t *num = ecma_alloc_number (); - *num = (ecma_number_t) (api_value_p->v_uint32); + *num = (ecma_number_t) (api_value_p->u.v_uint32); *out_value_p = ecma_make_number_value (num); @@ -486,7 +486,7 @@ jerry_api_convert_api_value_to_ecma_value (ecma_value_t *out_value_p, /**< out: } case JERRY_API_DATA_TYPE_STRING: { - ecma_string_t *str_p = ecma_copy_or_ref_ecma_string (api_value_p->v_string); + ecma_string_t *str_p = ecma_copy_or_ref_ecma_string (api_value_p->u.v_string); *out_value_p = ecma_make_string_value (str_p); @@ -494,7 +494,7 @@ jerry_api_convert_api_value_to_ecma_value (ecma_value_t *out_value_p, /**< out: } case JERRY_API_DATA_TYPE_OBJECT: { - ecma_object_t *obj_p = api_value_p->v_object; + ecma_object_t *obj_p = api_value_p->u.v_object; ecma_ref_object (obj_p); @@ -654,11 +654,11 @@ jerry_api_release_value (jerry_api_value_t *value_p) /**< API value */ if (value_p->type == JERRY_API_DATA_TYPE_STRING) { - jerry_api_release_string (value_p->v_string); + jerry_api_release_string (value_p->u.v_string); } else if (value_p->type == JERRY_API_DATA_TYPE_OBJECT) { - jerry_api_release_object (value_p->v_object); + jerry_api_release_object (value_p->u.v_object); } } /* jerry_api_release_value */ @@ -2040,14 +2040,14 @@ jerry_snapshot_set_offsets (uint8_t *buffer_p, /**< buffer */ { lit_mem_to_snapshot_id_map_entry_t *current_p = lit_map_p; - if (literal_start_p[i].packed_value != MEM_CP_NULL) + if (literal_start_p[i].u.packed_value != MEM_CP_NULL) { - while (current_p->literal_id.packed_value != literal_start_p[i].packed_value) + while (current_p->literal_id.u.packed_value != literal_start_p[i].u.packed_value) { current_p++; } - literal_start_p[i].packed_value = (uint16_t) current_p->literal_offset; + literal_start_p[i].u.packed_value = (uint16_t) current_p->literal_offset; } } @@ -2055,13 +2055,13 @@ jerry_snapshot_set_offsets (uint8_t *buffer_p, /**< buffer */ { compiled_code_map_entry_t *current_p = snapshot_map_entries_p; - while (current_p->compiled_code_cp != literal_start_p[i].value.base_cp) + while (current_p->compiled_code_cp != literal_start_p[i].u.value.base_cp) { current_p = ECMA_GET_NON_NULL_POINTER (compiled_code_map_entry_t, current_p->next_cp); } - literal_start_p[i].packed_value = (uint16_t) current_p->offset; + literal_start_p[i].u.packed_value = (uint16_t) current_p->offset; } } @@ -2315,9 +2315,9 @@ snapshot_load_compiled_code (const uint8_t *snapshot_data_p, /**< snapshot data { lit_mem_to_snapshot_id_map_entry_t *current_p = lit_map_p; - if (literal_start_p[i].packed_value != 0) + if (literal_start_p[i].u.packed_value != 0) { - while (current_p->literal_offset != literal_start_p[i].packed_value) + while (current_p->literal_offset != literal_start_p[i].u.packed_value) { current_p++; } @@ -2328,12 +2328,12 @@ snapshot_load_compiled_code (const uint8_t *snapshot_data_p, /**< snapshot data for (uint32_t i = const_literal_end; i < literal_end; i++) { - size_t literal_offset = ((size_t) literal_start_p[i].packed_value) << MEM_ALIGNMENT_LOG; + size_t literal_offset = ((size_t) literal_start_p[i].u.packed_value) << MEM_ALIGNMENT_LOG; if (literal_offset == offset) { /* Self reference */ - ECMA_SET_NON_NULL_POINTER (literal_start_p[i].value.base_cp, + ECMA_SET_NON_NULL_POINTER (literal_start_p[i].u.value.base_cp, bytecode_p); } else @@ -2344,7 +2344,7 @@ snapshot_load_compiled_code (const uint8_t *snapshot_data_p, /**< snapshot data lit_map_p, copy_bytecode); - ECMA_SET_NON_NULL_POINTER (literal_start_p[i].value.base_cp, + ECMA_SET_NON_NULL_POINTER (literal_start_p[i].u.value.base_cp, literal_bytecode_p); } } diff --git a/jerry-core/jrt/jrt.h b/jerry-core/jrt/jrt.h index 2c67f67c25..6f0603ad70 100644 --- a/jerry-core/jrt/jrt.h +++ b/jerry-core/jrt/jrt.h @@ -42,6 +42,10 @@ # define __attr_pure___ __attribute__((pure)) #endif /* !__attr_pure___ */ +#ifndef __GNUC__ +#define __extension__ +#endif /* !__GNUC__ */ + /** * Constants */ diff --git a/jerry-core/lit/lit-literal.c b/jerry-core/lit/lit-literal.c index 02df11324b..ec1bdb5736 100644 --- a/jerry-core/lit/lit-literal.c +++ b/jerry-core/lit/lit-literal.c @@ -570,7 +570,7 @@ lit_literal_exists (lit_literal_t lit) /**< literal to check for existence */ lit_literal_t lit_get_literal_by_cp (rcs_cpointer_t lit_cp) /**< compressed pointer to literal */ { - JERRY_ASSERT (lit_cp.packed_value != MEM_CP_NULL); + JERRY_ASSERT (lit_cp.u.packed_value != MEM_CP_NULL); lit_literal_t lit = rcs_cpointer_decompress (lit_cp); JERRY_ASSERT (lit_literal_exists (lit)); diff --git a/jerry-core/lit/lit-strings.h b/jerry-core/lit/lit-strings.h index bb101d0a42..84baeca6d2 100644 --- a/jerry-core/lit/lit-strings.h +++ b/jerry-core/lit/lit-strings.h @@ -99,7 +99,7 @@ */ typedef struct { - lit_utf8_size_t offset : LIT_ITERATOR_OFFSET_WIDTH; /** offset to utf-8 char */ + __extension__ lit_utf8_size_t offset : LIT_ITERATOR_OFFSET_WIDTH; /** offset to utf-8 char */ bool is_non_bmp_middle: 1; /** flag indicating that current position of the iterator is the middle of * 4-byte char */ } lit_utf8_iterator_pos_t; diff --git a/jerry-core/mem/mem-heap.c b/jerry-core/mem/mem-heap.c index 6b76a566c7..7655484288 100644 --- a/jerry-core/mem/mem-heap.c +++ b/jerry-core/mem/mem-heap.c @@ -760,7 +760,7 @@ mem_heap_get_chunked_block_start (void *ptr) /**< pointer into a block */ JERRY_STATIC_ASSERT ((MEM_HEAP_CHUNK_SIZE & (MEM_HEAP_CHUNK_SIZE - 1u)) == 0); JERRY_STATIC_ASSERT (((uintptr_t) mem_heap.area % MEM_HEAP_CHUNK_SIZE) == 0); - JERRY_ASSERT (mem_heap.area <= ptr && ptr < (uint8_t *) mem_heap.area + MEM_HEAP_AREA_SIZE); + JERRY_ASSERT (mem_heap.area <= (uint8_t *) ptr && (uint8_t *) ptr < (uint8_t *) mem_heap.area + MEM_HEAP_AREA_SIZE); uintptr_t uintptr = (uintptr_t) ptr; uintptr_t uintptr_chunk_aligned = JERRY_ALIGNDOWN (uintptr, MEM_HEAP_CHUNK_SIZE); diff --git a/jerry-core/parser/js/js-lexer.c b/jerry-core/parser/js/js-lexer.c index 52fbc9541b..d8fe4e8cd4 100644 --- a/jerry-core/parser/js/js-lexer.c +++ b/jerry-core/parser/js/js-lexer.c @@ -1572,7 +1572,7 @@ lexer_construct_number_object (parser_context_t *context_p, /**< context */ while ((literal_p = (lexer_literal_t *) parser_list_iterator_next (&literal_iterator)) != NULL) { if (literal_p->type == LEXER_NUMBER_LITERAL - && literal_p->u.value.value.base_cp == lit_cp.value.base_cp) + && literal_p->u.value.u.value.base_cp == lit_cp.u.value.base_cp) { context_p->lit_object.literal_p = literal_p; context_p->lit_object.index = (uint16_t) literal_index; diff --git a/jerry-core/parser/js/js-parser.c b/jerry-core/parser/js/js-parser.c index 894eda96d1..c62ce6d5fd 100644 --- a/jerry-core/parser/js/js-parser.c +++ b/jerry-core/parser/js/js-parser.c @@ -535,7 +535,7 @@ parser_generate_initializers (parser_context_t *context_p, /**< context */ else if ((literal_p->type == LEXER_FUNCTION_LITERAL) || (literal_p->type == LEXER_REGEXP_LITERAL)) { - ECMA_SET_NON_NULL_POINTER (literal_pool_p[literal_p->prop.index].value.base_cp, + ECMA_SET_NON_NULL_POINTER (literal_pool_p[literal_p->prop.index].u.value.base_cp, literal_p->u.bytecode_p); } else @@ -579,7 +579,7 @@ parser_generate_initializers (parser_context_t *context_p, /**< context */ JERRY_ASSERT (literal_p != NULL && literal_p->type == LEXER_FUNCTION_LITERAL); init_index = literal_p->prop.index; - ECMA_SET_NON_NULL_POINTER (literal_pool_p[literal_p->prop.index].value.base_cp, + ECMA_SET_NON_NULL_POINTER (literal_pool_p[literal_p->prop.index].u.value.base_cp, literal_p->u.bytecode_p); } @@ -1775,7 +1775,7 @@ parser_post_processing (parser_context_t *context_p) /**< context */ if (context_p->status_flags & PARSER_NAMED_FUNCTION_EXP) { - ECMA_SET_NON_NULL_POINTER (literal_pool_p[const_literal_end].value.base_cp, + ECMA_SET_NON_NULL_POINTER (literal_pool_p[const_literal_end].u.value.base_cp, compiled_code_p); } diff --git a/jerry-core/rcs/rcs-cpointer.c b/jerry-core/rcs/rcs-cpointer.c index 3e98325fb1..b0a805ec23 100644 --- a/jerry-core/rcs/rcs-cpointer.c +++ b/jerry-core/rcs/rcs-cpointer.c @@ -26,17 +26,17 @@ rcs_cpointer_t rcs_cpointer_compress (rcs_record_t *pointer) /**< pointer to compress */ { rcs_cpointer_t cpointer; - cpointer.packed_value = 0; + cpointer.u.packed_value = 0; uintptr_t base_pointer = JERRY_ALIGNDOWN ((uintptr_t) pointer, MEM_ALIGNMENT); if ((void *) base_pointer == NULL) { - cpointer.value.base_cp = MEM_CP_NULL; + cpointer.u.value.base_cp = MEM_CP_NULL; } else { - cpointer.value.base_cp = mem_compress_pointer ((void *) base_pointer) & MEM_CP_MASK; + cpointer.u.value.base_cp = mem_compress_pointer ((void *) base_pointer) & MEM_CP_MASK; } #if MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG @@ -55,7 +55,7 @@ rcs_cpointer_compress (rcs_record_t *pointer) /**< pointer to compress */ RCS_DYN_STORAGE_LENGTH_UNIT_LOG, MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG); - cpointer.value.ext = ext_part & ((1ull << (MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG)) - 1); + cpointer.u.value.ext = ext_part & ((1ull << (MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG)) - 1); #endif /* MEM_ALIGNMENT > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */ JERRY_ASSERT (rcs_cpointer_decompress (cpointer) == pointer); @@ -72,9 +72,9 @@ rcs_cpointer_decompress (rcs_cpointer_t compressed_pointer) /**< recordset-speci { uint8_t *base_pointer = NULL; - if (compressed_pointer.value.base_cp != MEM_CP_NULL) + if (compressed_pointer.u.value.base_cp != MEM_CP_NULL) { - base_pointer = (uint8_t *) mem_decompress_pointer (compressed_pointer.value.base_cp); + base_pointer = (uint8_t *) mem_decompress_pointer (compressed_pointer.u.value.base_cp); } uintptr_t diff = 0; @@ -84,7 +84,7 @@ rcs_cpointer_decompress (rcs_cpointer_t compressed_pointer) /**< recordset-speci * rcs_cpointer_compress */ - diff = (uintptr_t) compressed_pointer.value.ext << RCS_DYN_STORAGE_LENGTH_UNIT_LOG; + diff = (uintptr_t) compressed_pointer.u.value.ext << RCS_DYN_STORAGE_LENGTH_UNIT_LOG; #endif /* MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */ rcs_record_t *rec_p = (rcs_record_t *) (base_pointer + diff); @@ -99,6 +99,6 @@ rcs_cpointer_decompress (rcs_cpointer_t compressed_pointer) /**< recordset-speci rcs_cpointer_t rcs_cpointer_null_cp (void) { rcs_cpointer_t cp; - cp.packed_value = MEM_CP_NULL; + cp.u.packed_value = MEM_CP_NULL; return cp; } /* rcs_cpointer_null_cp */ diff --git a/jerry-core/rcs/rcs-cpointer.h b/jerry-core/rcs/rcs-cpointer.h index cf9339a24e..f8ba22ee6b 100644 --- a/jerry-core/rcs/rcs-cpointer.h +++ b/jerry-core/rcs/rcs-cpointer.h @@ -34,16 +34,16 @@ typedef struct { struct { - mem_cpointer_t base_cp : MEM_CP_WIDTH; /**< pointer to base of addressed area */ + __extension__ mem_cpointer_t base_cp : MEM_CP_WIDTH; /**< pointer to base of addressed area */ #if MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG - uint16_t ext : (MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG); /**< extension of the basic - * compressed pointer - * used for more detailed - * addressing */ + __extension__ uint16_t ext : (MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG); /**< extension of the basic + * compressed pointer + * used for more detailed + * addressing */ #endif /* MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */ } value; uint16_t packed_value; - }; + } u; } rcs_cpointer_t; extern rcs_cpointer_t rcs_cpointer_compress (rcs_record_t *); diff --git a/jerry-core/rcs/rcs-records.c b/jerry-core/rcs/rcs-records.c index de9cf09bd0..50332cf87f 100644 --- a/jerry-core/rcs/rcs-records.c +++ b/jerry-core/rcs/rcs-records.c @@ -68,7 +68,7 @@ rcs_record_set_prev (rcs_record_set_t *rec_sec_p, /**< recordset */ rcs_iterator_t it_ctx = rcs_iterator_create (rec_sec_p, rec_p); rcs_iterator_skip (&it_ctx, RCS_DYN_STORAGE_LENGTH_UNIT); - rcs_iterator_write (&it_ctx, &prev_cpointer.packed_value, sizeof (uint16_t)); + rcs_iterator_write (&it_ctx, &prev_cpointer.u.packed_value, sizeof (uint16_t)); return; } @@ -95,7 +95,7 @@ rcs_record_set_prev (rcs_record_set_t *rec_sec_p, /**< recordset */ } rcs_cpointer_t cpointer = rcs_cpointer_compress (prev_p); - rcs_record_set_field (rec_p, begin_pos, RCS_CPOINTER_WIDTH, cpointer.packed_value); + rcs_record_set_field (rec_p, begin_pos, RCS_CPOINTER_WIDTH, cpointer.u.packed_value); } /* rcs_record_set_prev */ /** @@ -239,10 +239,10 @@ rcs_record_get_pointer (rcs_record_t *rec_p, /**< record */ uint16_t value = (uint16_t) rcs_record_get_field (rec_p, field_pos, field_width); - JERRY_ASSERT (sizeof (cpointer) == sizeof (cpointer.value)); - JERRY_ASSERT (sizeof (value) == sizeof (cpointer.value)); + JERRY_ASSERT (sizeof (cpointer) == sizeof (cpointer.u.value)); + JERRY_ASSERT (sizeof (value) == sizeof (cpointer.u.value)); - cpointer.packed_value = value; + cpointer.u.packed_value = value; return rcs_cpointer_decompress (cpointer); } /* rcs_record_get_pointer */ @@ -279,7 +279,7 @@ rcs_record_get_prev (rcs_record_set_t *rec_sec_p, /**< recordset */ rcs_iterator_t it_ctx = rcs_iterator_create (rec_sec_p, rec_p); rcs_iterator_skip (&it_ctx, RCS_DYN_STORAGE_LENGTH_UNIT); - rcs_iterator_read (&it_ctx, &cpointer.packed_value, sizeof (uint16_t)); + rcs_iterator_read (&it_ctx, &cpointer.u.packed_value, sizeof (uint16_t)); return rcs_cpointer_decompress (cpointer); } diff --git a/jerry-core/vm/vm-stack.c b/jerry-core/vm/vm-stack.c index 7fbd081eaf..f2066584d1 100644 --- a/jerry-core/vm/vm-stack.c +++ b/jerry-core/vm/vm-stack.c @@ -75,7 +75,8 @@ vm_stack_context_abort (vm_frame_ctx_t *frame_ctx_p, /**< frame context */ ecma_collection_chunk_t *chunk_p = MEM_CP_GET_NON_NULL_POINTER (ecma_collection_chunk_t, current); - ecma_free_value (*(ecma_value_t *) chunk_p->data, true); + lit_utf8_byte_t *data_ptr = chunk_p->data; + ecma_free_value (*(ecma_value_t *) data_ptr, true); current = chunk_p->next_chunk_cp; ecma_dealloc_collection_chunk (chunk_p); diff --git a/jerry-core/vm/vm.c b/jerry-core/vm/vm.c index 8d10080d2c..104c7c3022 100644 --- a/jerry-core/vm/vm.c +++ b/jerry-core/vm/vm.c @@ -281,7 +281,7 @@ vm_construct_literal_object (vm_frame_ctx_t *frame_ctx_p, /**< frame context */ lit_cpointer_t lit_cp) /**< literal */ { ecma_compiled_code_t *bytecode_p = ECMA_GET_NON_NULL_POINTER (ecma_compiled_code_t, - lit_cp.value.base_cp); + lit_cp.u.value.base_cp); bool is_function = ((bytecode_p->status_flags & CBC_CODE_FLAGS_FUNCTION) != 0); if (is_function) @@ -1859,7 +1859,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ JERRY_ASSERT (VM_GET_CONTEXT_TYPE (context_top_p[-1]) == VM_CONTEXT_FOR_IN); - result = *(ecma_value_t *) chunk_p->data; + lit_utf8_byte_t *data_ptr = chunk_p->data; + result = *(ecma_value_t *) data_ptr; context_top_p[-2] = chunk_p->next_chunk_cp; ecma_dealloc_collection_chunk (chunk_p); @@ -1882,7 +1883,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ ecma_collection_chunk_t *chunk_p = MEM_CP_GET_NON_NULL_POINTER (ecma_collection_chunk_t, stack_top_p[-2]); - ecma_string_t *prop_name_p = ecma_get_string_from_value (*(ecma_value_t *) chunk_p->data); + lit_utf8_byte_t *data_ptr = chunk_p->data; + ecma_string_t *prop_name_p = ecma_get_string_from_value (*(ecma_value_t *) data_ptr); if (ecma_op_object_get_property (ecma_get_object_from_value (stack_top_p[-3]), prop_name_p) == NULL) diff --git a/main-unix.c b/main-unix.c index ed4382dd81..29b066a7f2 100644 --- a/main-unix.c +++ b/main-unix.c @@ -177,7 +177,7 @@ assert_handler (const jerry_api_object_t *function_obj_p __attr_unused___, /** < { if (args_cnt == 1 && args_p[0].type == JERRY_API_DATA_TYPE_BOOLEAN - && args_p[0].v_bool == true) + && args_p[0].u.v_bool == true) { return true; } @@ -368,7 +368,7 @@ main (int argc, jerry_api_object_t *assert_func_p = jerry_api_create_external_function (assert_handler); jerry_api_value_t assert_value; assert_value.type = JERRY_API_DATA_TYPE_OBJECT; - assert_value.v_object = assert_func_p; + assert_value.u.v_object = assert_func_p; bool is_assert_added = jerry_api_set_object_field_value (global_obj_p, (jerry_api_char_t *) "assert", @@ -476,7 +476,7 @@ main (int argc, return JERRY_STANDALONE_EXIT_CODE_FAIL; } - if (!jerry_api_is_function (print_function.v_object)) + if (!jerry_api_is_function (print_function.u.v_object)) { return JERRY_STANDALONE_EXIT_CODE_FAIL; } @@ -516,7 +516,7 @@ main (int argc, // print return value const jerry_api_value_t args[] = {ret_val}; jerry_api_value_t ret_val_print; - if (jerry_api_call_function (print_function.v_object, NULL, &ret_val_print, args, 1)) + if (jerry_api_call_function (print_function.u.v_object, NULL, &ret_val_print, args, 1)) { jerry_api_release_value (&ret_val_print); } diff --git a/tests/unit/test-api.c b/tests/unit/test-api.c index 7cb230bf7a..73481fbf04 100644 --- a/tests/unit/test-api.c +++ b/tests/unit/test-api.c @@ -70,7 +70,7 @@ test_api_init_api_value_bool (jerry_api_value_t *out_value_p, /**< out: API valu bool v) /**< boolean value to initialize with */ { out_value_p->type = JERRY_API_DATA_TYPE_BOOLEAN; - out_value_p->v_bool = v; + out_value_p->u.v_bool = v; } /* test_api_init_api_value_bool */ /** @@ -81,7 +81,7 @@ test_api_init_api_value_float64 (jerry_api_value_t *out_value_p, /**< out: API v double v) /**< float64 value to initialize with */ { out_value_p->type = JERRY_API_DATA_TYPE_FLOAT64; - out_value_p->v_float64 = v; + out_value_p->u.v_float64 = v; } /* test_api_init_api_value_float64 */ /** @@ -92,7 +92,7 @@ test_api_init_api_value_string (jerry_api_value_t *out_value_p, /**< out: API va const char *v) /**< string value to initialize with */ { out_value_p->type = JERRY_API_DATA_TYPE_STRING; - out_value_p->v_string = jerry_api_create_string ((jerry_api_char_t *) v); + out_value_p->u.v_string = jerry_api_create_string ((jerry_api_char_t *) v); } /* test_api_init_api_value_string */ /** @@ -105,7 +105,7 @@ test_api_init_api_value_object (jerry_api_value_t *out_value_p, /**< out: API va jerry_api_acquire_object (v); out_value_p->type = JERRY_API_DATA_TYPE_OBJECT; - out_value_p->v_object = v; + out_value_p->u.v_object = v; } /* test_api_init_api_value_object */ static bool @@ -123,14 +123,14 @@ handler (const jerry_api_object_t *function_obj_p, JERRY_ASSERT (args_cnt == 2); JERRY_ASSERT (args_p[0].type == JERRY_API_DATA_TYPE_STRING); - sz = jerry_api_string_to_char_buffer (args_p[0].v_string, NULL, 0); + sz = jerry_api_string_to_char_buffer (args_p[0].u.v_string, NULL, 0); JERRY_ASSERT (sz == -1); - sz = jerry_api_string_to_char_buffer (args_p[0].v_string, (jerry_api_char_t *) buffer, -sz); + sz = jerry_api_string_to_char_buffer (args_p[0].u.v_string, (jerry_api_char_t *) buffer, -sz); JERRY_ASSERT (sz == 1); JERRY_ASSERT (!strncmp (buffer, "1", (size_t) sz)); JERRY_ASSERT (args_p[1].type == JERRY_API_DATA_TYPE_BOOLEAN); - JERRY_ASSERT (args_p[1].v_bool == true); + JERRY_ASSERT (args_p[1].u.v_bool == true); test_api_init_api_value_string (ret_val_p, "string from handler"); @@ -179,20 +179,20 @@ handler_construct (const jerry_api_object_t *function_obj_p, JERRY_ASSERT (args_cnt == 1); JERRY_ASSERT (args_p[0].type == JERRY_API_DATA_TYPE_BOOLEAN); - JERRY_ASSERT (args_p[0].v_bool == true); + JERRY_ASSERT (args_p[0].u.v_bool == true); - jerry_api_set_object_field_value (this_p->v_object, (jerry_api_char_t *) "value_field", &args_p[0]); + jerry_api_set_object_field_value (this_p->u.v_object, (jerry_api_char_t *) "value_field", &args_p[0]); - jerry_api_set_object_native_handle (this_p->v_object, + jerry_api_set_object_native_handle (this_p->u.v_object, (uintptr_t) 0x0000000000000000ull, handler_construct_freecb); uintptr_t ptr; - bool is_ok = jerry_api_get_object_native_handle (this_p->v_object, &ptr); + bool is_ok = jerry_api_get_object_native_handle (this_p->u.v_object, &ptr); JERRY_ASSERT (is_ok && ptr == (uintptr_t) 0x0000000000000000ull); /* check if setting handle for second time is handled correctly */ - jerry_api_set_object_native_handle (this_p->v_object, + jerry_api_set_object_native_handle (this_p->u.v_object, (uintptr_t) 0x0012345678abcdefull, handler_construct_freecb); @@ -249,13 +249,13 @@ static bool foreach (const jerry_api_string_t *name, JERRY_ASSERT (value->v_float32 == 32.0f); #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_FLOAT64); - JERRY_ASSERT (value->v_float64 == 32.0); + JERRY_ASSERT (value->u.v_float64 == 32.0); #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ } else if (!strncmp (str_buf_p, "bravo", (size_t)sz)) { JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_BOOLEAN); - JERRY_ASSERT (value->v_bool == false); + JERRY_ASSERT (value->u.v_bool == false); } else if (!strncmp (str_buf_p, "charlie", (size_t)sz)) { @@ -268,13 +268,13 @@ static bool foreach (const jerry_api_string_t *name, JERRY_ASSERT (value->v_float32 == 123.45f); #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_FLOAT64); - JERRY_ASSERT (value->v_float64 == 123.45); + JERRY_ASSERT (value->u.v_float64 == 123.45); #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ } else if (!strncmp (str_buf_p, "echo", (size_t)sz)) { JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_STRING); - ssize_t echo_sz = jerry_api_string_to_char_buffer (value->v_string, (jerry_api_char_t *)str_buf_p, 128); + ssize_t echo_sz = jerry_api_string_to_char_buffer (value->u.v_string, (jerry_api_char_t *)str_buf_p, 128); str_buf_p[echo_sz] = '\0'; JERRY_ASSERT (!strncmp (str_buf_p, "foobar", (size_t)echo_sz)); } @@ -345,7 +345,7 @@ main (void) // Test corner case for jerry_api_string_to_char_buffer test_api_init_api_value_string (&args[0], ""); - sz = jerry_api_string_to_char_buffer (args[0].v_string, NULL, 0); + sz = jerry_api_string_to_char_buffer (args[0].u.v_string, NULL, 0); JERRY_ASSERT (sz == 0); jerry_api_release_value (&args[0]); @@ -353,7 +353,7 @@ main (void) is_ok = jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *)"t", &val_t); JERRY_ASSERT (is_ok && val_t.type == JERRY_API_DATA_TYPE_FLOAT64 - && val_t.v_float64 == 1.0); + && val_t.u.v_float64 == 1.0); jerry_api_release_value (&val_t); // Get global.foo @@ -364,10 +364,10 @@ main (void) // Call foo (4, 2) test_api_init_api_value_float64 (&args[0], 4); test_api_init_api_value_float64 (&args[1], 2); - is_ok = jerry_api_call_function (val_foo.v_object, NULL, &res, args, 2); + is_ok = jerry_api_call_function (val_foo.u.v_object, NULL, &res, args, 2); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_FLOAT64 - && res.v_float64 == 1.0); + && res.u.v_float64 == 1.0); jerry_api_release_value (&res); // Get global.bar @@ -376,10 +376,10 @@ main (void) && val_bar.type == JERRY_API_DATA_TYPE_OBJECT); // Call bar (4, 2) - is_ok = jerry_api_call_function (val_bar.v_object, NULL, &res, args, 2); + is_ok = jerry_api_call_function (val_bar.u.v_object, NULL, &res, args, 2); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_FLOAT64 - && res.v_float64 == 5.0); + && res.u.v_float64 == 5.0); jerry_api_release_value (&res); jerry_api_release_value (&val_bar); @@ -392,12 +392,12 @@ main (void) jerry_api_release_value (&args[0]); // Call foo (4, 2) - is_ok = jerry_api_call_function (val_foo.v_object, NULL, &res, args, 2); + is_ok = jerry_api_call_function (val_foo.u.v_object, NULL, &res, args, 2); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_STRING); - sz = jerry_api_string_to_char_buffer (res.v_string, NULL, 0); + sz = jerry_api_string_to_char_buffer (res.u.v_string, NULL, 0); JERRY_ASSERT (sz == -4); - sz = jerry_api_string_to_char_buffer (res.v_string, (jerry_api_char_t *) buffer, -sz); + sz = jerry_api_string_to_char_buffer (res.u.v_string, (jerry_api_char_t *) buffer, -sz); JERRY_ASSERT (sz == 4); jerry_api_release_value (&res); JERRY_ASSERT (!strncmp (buffer, "abcd", (size_t) sz)); @@ -408,9 +408,9 @@ main (void) && val_A.type == JERRY_API_DATA_TYPE_OBJECT); // Get A.prototype - is_ok = jerry_api_is_constructor (val_A.v_object); + is_ok = jerry_api_is_constructor (val_A.u.v_object); JERRY_ASSERT (is_ok); - is_ok = jerry_api_get_object_field_value (val_A.v_object, + is_ok = jerry_api_get_object_field_value (val_A.u.v_object, (jerry_api_char_t *) "prototype", &val_A_prototype); JERRY_ASSERT (is_ok @@ -418,7 +418,7 @@ main (void) jerry_api_release_value (&val_A); // Set A.prototype.foo = global.foo - is_ok = jerry_api_set_object_field_value (val_A_prototype.v_object, + is_ok = jerry_api_set_object_field_value (val_A_prototype.u.v_object, (jerry_api_char_t *) "foo", &val_foo); JERRY_ASSERT (is_ok); @@ -431,40 +431,40 @@ main (void) && val_a.type == JERRY_API_DATA_TYPE_OBJECT); // Get a.t - is_ok = jerry_api_get_object_field_value (val_a.v_object, (jerry_api_char_t *) "t", &res); + is_ok = jerry_api_get_object_field_value (val_a.u.v_object, (jerry_api_char_t *) "t", &res); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_FLOAT64 - && res.v_float64 == 12.0); + && res.u.v_float64 == 12.0); jerry_api_release_value (&res); // foreach properties jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "p", &val_p); - is_ok = jerry_api_foreach_object_field (val_p.v_object, foreach, (void*)"user_data"); + is_ok = jerry_api_foreach_object_field (val_p.u.v_object, foreach, (void*)"user_data"); JERRY_ASSERT (is_ok); // break foreach at third element int count = 0; - is_ok = jerry_api_foreach_object_field (val_p.v_object, foreach_subset, &count); + is_ok = jerry_api_foreach_object_field (val_p.u.v_object, foreach_subset, &count); JERRY_ASSERT (is_ok); JERRY_ASSERT (count == 3); jerry_api_release_value (&val_p); // foreach with throw test jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "np", &val_np); - is_ok = !jerry_api_foreach_object_field (val_np.v_object, foreach_exception, NULL); + is_ok = !jerry_api_foreach_object_field (val_np.u.v_object, foreach_exception, NULL); JERRY_ASSERT (is_ok); jerry_api_release_value (&val_np); // Get a.foo - is_ok = jerry_api_get_object_field_value (val_a.v_object, (jerry_api_char_t *) "foo", &val_a_foo); + is_ok = jerry_api_get_object_field_value (val_a.u.v_object, (jerry_api_char_t *) "foo", &val_a_foo); JERRY_ASSERT (is_ok && val_a_foo.type == JERRY_API_DATA_TYPE_OBJECT); // Call a.foo () - is_ok = jerry_api_call_function (val_a_foo.v_object, val_a.v_object, &res, NULL, 0); + is_ok = jerry_api_call_function (val_a_foo.u.v_object, val_a.u.v_object, &res, NULL, 0); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_FLOAT64 - && res.v_float64 == 12.0); + && res.u.v_float64 == 12.0); jerry_api_release_value (&res); jerry_api_release_value (&val_a_foo); @@ -488,16 +488,16 @@ main (void) is_ok = jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "call_external", &val_call_external); JERRY_ASSERT (is_ok && val_call_external.type == JERRY_API_DATA_TYPE_OBJECT); - is_ok = jerry_api_call_function (val_call_external.v_object, + is_ok = jerry_api_call_function (val_call_external.u.v_object, global_obj_p, &res, NULL, 0); jerry_api_release_value (&val_call_external); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_STRING); - sz = jerry_api_string_to_char_buffer (res.v_string, NULL, 0); + sz = jerry_api_string_to_char_buffer (res.u.v_string, NULL, 0); JERRY_ASSERT (sz == -19); - sz = jerry_api_string_to_char_buffer (res.v_string, (jerry_api_char_t *) buffer, -sz); + sz = jerry_api_string_to_char_buffer (res.u.v_string, (jerry_api_char_t *) buffer, -sz); JERRY_ASSERT (sz == 19); jerry_api_release_value (&res); JERRY_ASSERT (!strncmp (buffer, "string from handler", (size_t) sz)); @@ -521,18 +521,18 @@ main (void) is_ok = jerry_api_construct_object (external_construct_p, &res, args, 1); JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_OBJECT); - is_ok = jerry_api_get_object_field_value (res.v_object, + is_ok = jerry_api_get_object_field_value (res.u.v_object, (jerry_api_char_t *)"value_field", &val_value_field); // Get 'value_field' of constructed object JERRY_ASSERT (is_ok && val_value_field.type == JERRY_API_DATA_TYPE_BOOLEAN - && val_value_field.v_bool == true); + && val_value_field.u.v_bool == true); jerry_api_release_value (&val_value_field); uintptr_t ptr; - is_ok = jerry_api_get_object_native_handle (res.v_object, &ptr); + is_ok = jerry_api_get_object_native_handle (res.u.v_object, &ptr); JERRY_ASSERT (is_ok && ptr == (uintptr_t) 0x0012345678abcdefull); @@ -556,7 +556,7 @@ main (void) JERRY_ASSERT (is_ok && val_t.type == JERRY_API_DATA_TYPE_OBJECT); - is_ok = jerry_api_call_function (val_t.v_object, + is_ok = jerry_api_call_function (val_t.u.v_object, global_obj_p, &res, NULL, 0); @@ -569,7 +569,7 @@ main (void) JERRY_ASSERT (is_ok && val_t.type == JERRY_API_DATA_TYPE_OBJECT); - is_ok = jerry_api_call_function (val_t.v_object, + is_ok = jerry_api_call_function (val_t.u.v_object, global_obj_p, &res, NULL, 0); @@ -602,7 +602,7 @@ main (void) JERRY_ASSERT (is_ok && val_t.type == JERRY_API_DATA_TYPE_OBJECT); - is_ok = jerry_api_construct_object (val_t.v_object, + is_ok = jerry_api_construct_object (val_t.u.v_object, &res, NULL, 0); is_exception = !is_ok; @@ -638,7 +638,7 @@ main (void) jerry_api_value_t v_out; jerry_api_get_array_index_value (array_obj_p, 5, &v_out); - JERRY_ASSERT (v_out.type == JERRY_API_DATA_TYPE_FLOAT64 && v_out.v_float64 == 10.5); + JERRY_ASSERT (v_out.type == JERRY_API_DATA_TYPE_FLOAT64 && v_out.u.v_float64 == 10.5); jerry_api_release_object (array_obj_p); @@ -652,15 +652,15 @@ main (void) &val_t); JERRY_ASSERT (status == JERRY_COMPLETION_CODE_OK); JERRY_ASSERT (val_t.type == JERRY_API_DATA_TYPE_OBJECT); - JERRY_ASSERT (jerry_api_is_function (val_t.v_object)); + JERRY_ASSERT (jerry_api_is_function (val_t.u.v_object)); - is_ok = jerry_api_call_function (val_t.v_object, + is_ok = jerry_api_call_function (val_t.u.v_object, NULL, &res, NULL, 0); JERRY_ASSERT (is_ok); JERRY_ASSERT (res.type == JERRY_API_DATA_TYPE_FLOAT64 - && res.v_float64 == 123.0); + && res.u.v_float64 == 123.0); jerry_api_release_value (&res); jerry_api_release_value (&val_t); @@ -737,9 +737,9 @@ main (void) JERRY_ASSERT (is_ok && res.type == JERRY_API_DATA_TYPE_STRING); - sz = jerry_api_string_to_char_buffer (res.v_string, NULL, 0); + sz = jerry_api_string_to_char_buffer (res.u.v_string, NULL, 0); JERRY_ASSERT (sz == -20); - sz = jerry_api_string_to_char_buffer (res.v_string, (jerry_api_char_t *) buffer, -sz); + sz = jerry_api_string_to_char_buffer (res.u.v_string, (jerry_api_char_t *) buffer, -sz); JERRY_ASSERT (sz == 20); jerry_api_release_value (&res); JERRY_ASSERT (!strncmp (buffer, "string from snapshot", (size_t) sz));