Warning fixes.

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
This commit is contained in:
Robert Sipka
2016-02-15 17:19:18 +01:00
parent 7dc065842b
commit 80811c8332
22 changed files with 149 additions and 144 deletions
+2 -2
View File
@@ -269,8 +269,8 @@ project (Jerry C ASM)
endforeach() endforeach()
endmacro() endmacro()
add_jerry_compile_warnings(all extra format-nonliteral init-self conversion sign-conversion format-security missing-declarations) add_jerry_compile_warnings(all extra format-nonliteral init-self conversion sign-conversion format-security missing-declarations pedantic)
add_jerry_compile_flags(-pedantic -Wno-stack-protector -Wno-attributes) add_jerry_compile_flags(-Wno-stack-protector -Wno-attributes)
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
add_jerry_compile_warnings(logical-op) add_jerry_compile_warnings(logical-op)
else() else()
+9 -9
View File
@@ -294,8 +294,8 @@ typedef enum
*/ */
typedef struct typedef struct
{ {
mem_cpointer_t getter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to getter object */ __extension__ 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 setter_p : ECMA_POINTER_FIELD_WIDTH; /**< pointer to setter object */
} ecma_getter_setter_pointers_t; } ecma_getter_setter_pointers_t;
/** /**
@@ -307,7 +307,7 @@ typedef struct __attr_packed___ ecma_property_t
unsigned int type : 2; unsigned int type : 2;
/** Compressed pointer to next property */ /** 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) */ /** Property's details (depending on Type) */
union union
@@ -316,10 +316,10 @@ typedef struct __attr_packed___ ecma_property_t
struct __attr_packed___ ecma_named_data_property_t struct __attr_packed___ ecma_named_data_property_t
{ {
/** Value */ /** 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) */ /** 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 */ /** Flag indicating whether the property is registered in LCache */
unsigned int is_lcached : 1; unsigned int is_lcached : 1;
@@ -338,7 +338,7 @@ typedef struct __attr_packed___ ecma_property_t
struct __attr_packed___ ecma_named_accessor_property_t struct __attr_packed___ ecma_named_accessor_property_t
{ {
/** Compressed pointer to property's name (pointer to String) */ /** 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) */ /** Attribute 'Enumerable' (ecma_property_enumerable_value_t) */
unsigned int enumerable : 1; unsigned int enumerable : 1;
@@ -350,7 +350,7 @@ typedef struct __attr_packed___ ecma_property_t
unsigned int is_lcached : 1; unsigned int is_lcached : 1;
/** Compressed pointer to pair of pointers - to property's getter and setter */ /** 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; } named_accessor_property;
/** Description of internal property */ /** Description of internal property */
@@ -795,10 +795,10 @@ typedef struct ecma_string_t
lit_cpointer_t lit_cp; lit_cpointer_t lit_cp;
/** Compressed pointer to an ecma_collection_header_t */ /** 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 */ /** 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-represented number placed locally in the descriptor */
uint32_t uint32_number; uint32_t uint32_number;
+1 -1
View File
@@ -978,7 +978,7 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
{ {
case ECMA_STRING_CONTAINER_LIT_TABLE: 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; return false;
} }
case ECMA_STRING_CONTAINER_MAGIC_STRING: case ECMA_STRING_CONTAINER_MAGIC_STRING:
+1 -1
View File
@@ -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++) 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, ecma_compiled_code_t *bytecode_literal_p = ECMA_GET_NON_NULL_POINTER (ecma_compiled_code_t,
bytecode_cpointer); bytecode_cpointer);
@@ -138,7 +138,7 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function
indx++) indx++)
{ {
// i. // i.
if (literal_p[indx].packed_value == MEM_CP_NULL) if (literal_p[indx].u.packed_value == MEM_CP_NULL)
{ {
continue; continue;
} }
+1 -1
View File
@@ -37,7 +37,7 @@ typedef struct
ecma_value_t base; ecma_value_t base;
/** referenced name */ /** 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 */ /** strict reference flag */
unsigned int is_strict : 1; unsigned int is_strict : 1;
+4 -6
View File
@@ -118,12 +118,10 @@ typedef struct jerry_api_value_t
uint32_t v_uint32; /**< number converted 32-bit unsigned integer */ 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; } jerry_api_value_t;
/** /**
+3 -3
View File
@@ -26,9 +26,9 @@ typedef struct
{ {
uint32_t last_compiled_code_offset; /**< offset of the last compiled code */ uint32_t last_compiled_code_offset; /**< offset of the last compiled code */
uint32_t lit_table_size; /**< size of literal table */ uint32_t lit_table_size; /**< size of literal table */
uint32_t is_run_global : 1; /**< flag, indicating whether the snapshot __extension__ uint32_t is_run_global : 1; /**< flag, indicating whether the snapshot
* was dumped as 'Global scope'-mode code (true) * was dumped as 'Global scope'-mode code (true)
* or as eval-mode code (false) */ * or as eval-mode code (false) */
} jerry_snapshot_header_t; } jerry_snapshot_header_t;
/** /**
+34 -34
View File
@@ -205,7 +205,7 @@ jerry_api_value_is_object (const jerry_api_value_t *value_p) /**< pointer to api
bool bool
jerry_api_value_is_function (const jerry_api_value_t *value_p) /**< pointer to api value */ 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 */ } /* 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_api_get_boolean_value (const jerry_api_value_t *value_p) /**< pointer to api value */
{ {
JERRY_ASSERT (jerry_api_value_is_boolean (value_p)); 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 */ } /* 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)); JERRY_ASSERT (jerry_api_value_is_number (value_p));
if (value_p->type == JERRY_API_DATA_TYPE_UINT32) 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) else if (value_p->type == JERRY_API_DATA_TYPE_FLOAT32)
{ {
return value_p->v_float32; return value_p->u.v_float32;
} }
else else
{ {
return value_p->v_float64; return value_p->u.v_float64;
} }
} /* jerry_api_get_number_value */ } /* 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_api_get_string_value (const jerry_api_value_t *value_p) /**< pointer to api value */
{ {
JERRY_ASSERT (jerry_api_value_is_string (value_p)); 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 */ } /* 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_api_get_object_value (const jerry_api_value_t *value_p) /**< pointer to api value */
{ {
JERRY_ASSERT (jerry_api_value_is_object (value_p)); 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 */ } /* 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_api_value_t jerry_val;
jerry_val.type = JERRY_API_DATA_TYPE_BOOLEAN; jerry_val.type = JERRY_API_DATA_TYPE_BOOLEAN;
jerry_val.v_bool = value; jerry_val.u.v_bool = value;
return jerry_val; return jerry_val;
} /* jerry_api_create_boolean_value */ } /* 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_api_value_t jerry_val;
jerry_val.type = JERRY_API_DATA_TYPE_FLOAT64; jerry_val.type = JERRY_API_DATA_TYPE_FLOAT64;
jerry_val.v_float64 = value; jerry_val.u.v_float64 = value;
return jerry_val; return jerry_val;
} /* jerry_api_create_number_value */ } /* 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_api_value_t jerry_val;
jerry_val.type = JERRY_API_DATA_TYPE_OBJECT; jerry_val.type = JERRY_API_DATA_TYPE_OBJECT;
jerry_val.v_object = value; jerry_val.u.v_object = value;
return jerry_val; return jerry_val;
} /* jerry_api_create_object_value */ } /* 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_api_value_t jerry_val;
jerry_val.type = JERRY_API_DATA_TYPE_STRING; jerry_val.type = JERRY_API_DATA_TYPE_STRING;
jerry_val.v_string = value; jerry_val.u.v_string = value;
return jerry_val; return jerry_val;
} /* jerry_api_create_string_value */ } /* 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)) else if (ecma_is_value_boolean (value))
{ {
out_value_p->type = JERRY_API_DATA_TYPE_BOOLEAN; 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)) 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 #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
out_value_p->type = JERRY_API_DATA_TYPE_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 #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
out_value_p->type = JERRY_API_DATA_TYPE_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 */ #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
} }
else if (ecma_is_value_string (value)) 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); ecma_string_t *str = ecma_get_string_from_value (value);
out_value_p->type = JERRY_API_DATA_TYPE_STRING; 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)) 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); ecma_ref_object (obj);
out_value_p->type = JERRY_API_DATA_TYPE_OBJECT; out_value_p->type = JERRY_API_DATA_TYPE_OBJECT;
out_value_p->v_object = obj; out_value_p->u.v_object = obj;
} }
else 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: 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; break;
} }
case JERRY_API_DATA_TYPE_FLOAT32: case JERRY_API_DATA_TYPE_FLOAT32:
{ {
ecma_number_t *num = ecma_alloc_number (); 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); *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: case JERRY_API_DATA_TYPE_FLOAT64:
{ {
ecma_number_t *num = ecma_alloc_number (); 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); *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: case JERRY_API_DATA_TYPE_UINT32:
{ {
ecma_number_t *num = ecma_alloc_number (); 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); *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: 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); *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: 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); 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) 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) 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 */ } /* 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; 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++; 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; 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 = ECMA_GET_NON_NULL_POINTER (compiled_code_map_entry_t,
current_p->next_cp); 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; 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++; 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++) 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) if (literal_offset == offset)
{ {
/* Self reference */ /* 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); bytecode_p);
} }
else else
@@ -2344,7 +2344,7 @@ snapshot_load_compiled_code (const uint8_t *snapshot_data_p, /**< snapshot data
lit_map_p, lit_map_p,
copy_bytecode); 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); literal_bytecode_p);
} }
} }
+4
View File
@@ -42,6 +42,10 @@
# define __attr_pure___ __attribute__((pure)) # define __attr_pure___ __attribute__((pure))
#endif /* !__attr_pure___ */ #endif /* !__attr_pure___ */
#ifndef __GNUC__
#define __extension__
#endif /* !__GNUC__ */
/** /**
* Constants * Constants
*/ */
+1 -1
View File
@@ -570,7 +570,7 @@ lit_literal_exists (lit_literal_t lit) /**< literal to check for existence */
lit_literal_t lit_literal_t
lit_get_literal_by_cp (rcs_cpointer_t lit_cp) /**< compressed pointer to literal */ 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); lit_literal_t lit = rcs_cpointer_decompress (lit_cp);
JERRY_ASSERT (lit_literal_exists (lit)); JERRY_ASSERT (lit_literal_exists (lit));
+1 -1
View File
@@ -99,7 +99,7 @@
*/ */
typedef struct 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 bool is_non_bmp_middle: 1; /** flag indicating that current position of the iterator is the middle of
* 4-byte char */ * 4-byte char */
} lit_utf8_iterator_pos_t; } lit_utf8_iterator_pos_t;
+1 -1
View File
@@ -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 ((MEM_HEAP_CHUNK_SIZE & (MEM_HEAP_CHUNK_SIZE - 1u)) == 0);
JERRY_STATIC_ASSERT (((uintptr_t) mem_heap.area % MEM_HEAP_CHUNK_SIZE) == 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 = (uintptr_t) ptr;
uintptr_t uintptr_chunk_aligned = JERRY_ALIGNDOWN (uintptr, MEM_HEAP_CHUNK_SIZE); uintptr_t uintptr_chunk_aligned = JERRY_ALIGNDOWN (uintptr, MEM_HEAP_CHUNK_SIZE);
+1 -1
View File
@@ -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) while ((literal_p = (lexer_literal_t *) parser_list_iterator_next (&literal_iterator)) != NULL)
{ {
if (literal_p->type == LEXER_NUMBER_LITERAL 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.literal_p = literal_p;
context_p->lit_object.index = (uint16_t) literal_index; context_p->lit_object.index = (uint16_t) literal_index;
+3 -3
View File
@@ -535,7 +535,7 @@ parser_generate_initializers (parser_context_t *context_p, /**< context */
else if ((literal_p->type == LEXER_FUNCTION_LITERAL) else if ((literal_p->type == LEXER_FUNCTION_LITERAL)
|| (literal_p->type == LEXER_REGEXP_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); literal_p->u.bytecode_p);
} }
else else
@@ -579,7 +579,7 @@ parser_generate_initializers (parser_context_t *context_p, /**< context */
JERRY_ASSERT (literal_p != NULL JERRY_ASSERT (literal_p != NULL
&& literal_p->type == LEXER_FUNCTION_LITERAL); && literal_p->type == LEXER_FUNCTION_LITERAL);
init_index = literal_p->prop.index; 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); 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) 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); compiled_code_p);
} }
+8 -8
View File
@@ -26,17 +26,17 @@ rcs_cpointer_t
rcs_cpointer_compress (rcs_record_t *pointer) /**< pointer to compress */ rcs_cpointer_compress (rcs_record_t *pointer) /**< pointer to compress */
{ {
rcs_cpointer_t cpointer; rcs_cpointer_t cpointer;
cpointer.packed_value = 0; cpointer.u.packed_value = 0;
uintptr_t base_pointer = JERRY_ALIGNDOWN ((uintptr_t) pointer, MEM_ALIGNMENT); uintptr_t base_pointer = JERRY_ALIGNDOWN ((uintptr_t) pointer, MEM_ALIGNMENT);
if ((void *) base_pointer == NULL) if ((void *) base_pointer == NULL)
{ {
cpointer.value.base_cp = MEM_CP_NULL; cpointer.u.value.base_cp = MEM_CP_NULL;
} }
else 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 #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, RCS_DYN_STORAGE_LENGTH_UNIT_LOG,
MEM_ALIGNMENT_LOG - 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 */ #endif /* MEM_ALIGNMENT > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */
JERRY_ASSERT (rcs_cpointer_decompress (cpointer) == pointer); 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; 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; uintptr_t diff = 0;
@@ -84,7 +84,7 @@ rcs_cpointer_decompress (rcs_cpointer_t compressed_pointer) /**< recordset-speci
* rcs_cpointer_compress * 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 */ #endif /* MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */
rcs_record_t *rec_p = (rcs_record_t *) (base_pointer + diff); 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 rcs_cpointer_null_cp (void)
{ {
rcs_cpointer_t cp; rcs_cpointer_t cp;
cp.packed_value = MEM_CP_NULL; cp.u.packed_value = MEM_CP_NULL;
return cp; return cp;
} /* rcs_cpointer_null_cp */ } /* rcs_cpointer_null_cp */
+6 -6
View File
@@ -34,16 +34,16 @@ typedef struct
{ {
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 #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 __extension__ uint16_t ext : (MEM_ALIGNMENT_LOG - RCS_DYN_STORAGE_LENGTH_UNIT_LOG); /**< extension of the basic
* compressed pointer * compressed pointer
* used for more detailed * used for more detailed
* addressing */ * addressing */
#endif /* MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */ #endif /* MEM_ALIGNMENT_LOG > RCS_DYN_STORAGE_LENGTH_UNIT_LOG */
} value; } value;
uint16_t packed_value; uint16_t packed_value;
}; } u;
} rcs_cpointer_t; } rcs_cpointer_t;
extern rcs_cpointer_t rcs_cpointer_compress (rcs_record_t *); extern rcs_cpointer_t rcs_cpointer_compress (rcs_record_t *);
+6 -6
View File
@@ -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_t it_ctx = rcs_iterator_create (rec_sec_p, rec_p);
rcs_iterator_skip (&it_ctx, RCS_DYN_STORAGE_LENGTH_UNIT); 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; 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_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 */ } /* 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); 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 (cpointer) == sizeof (cpointer.u.value));
JERRY_ASSERT (sizeof (value) == sizeof (cpointer.value)); JERRY_ASSERT (sizeof (value) == sizeof (cpointer.u.value));
cpointer.packed_value = value; cpointer.u.packed_value = value;
return rcs_cpointer_decompress (cpointer); return rcs_cpointer_decompress (cpointer);
} /* rcs_record_get_pointer */ } /* 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_t it_ctx = rcs_iterator_create (rec_sec_p, rec_p);
rcs_iterator_skip (&it_ctx, RCS_DYN_STORAGE_LENGTH_UNIT); 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); return rcs_cpointer_decompress (cpointer);
} }
+2 -1
View File
@@ -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, ecma_collection_chunk_t *chunk_p = MEM_CP_GET_NON_NULL_POINTER (ecma_collection_chunk_t,
current); 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; current = chunk_p->next_chunk_cp;
ecma_dealloc_collection_chunk (chunk_p); ecma_dealloc_collection_chunk (chunk_p);
+5 -3
View File
@@ -281,7 +281,7 @@ vm_construct_literal_object (vm_frame_ctx_t *frame_ctx_p, /**< frame context */
lit_cpointer_t lit_cp) /**< literal */ lit_cpointer_t lit_cp) /**< literal */
{ {
ecma_compiled_code_t *bytecode_p = ECMA_GET_NON_NULL_POINTER (ecma_compiled_code_t, 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); bool is_function = ((bytecode_p->status_flags & CBC_CODE_FLAGS_FUNCTION) != 0);
if (is_function) 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); 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; context_top_p[-2] = chunk_p->next_chunk_cp;
ecma_dealloc_collection_chunk (chunk_p); 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_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]), if (ecma_op_object_get_property (ecma_get_object_from_value (stack_top_p[-3]),
prop_name_p) == NULL) prop_name_p) == NULL)
+4 -4
View File
@@ -177,7 +177,7 @@ assert_handler (const jerry_api_object_t *function_obj_p __attr_unused___, /** <
{ {
if (args_cnt == 1 if (args_cnt == 1
&& args_p[0].type == JERRY_API_DATA_TYPE_BOOLEAN && args_p[0].type == JERRY_API_DATA_TYPE_BOOLEAN
&& args_p[0].v_bool == true) && args_p[0].u.v_bool == true)
{ {
return 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_object_t *assert_func_p = jerry_api_create_external_function (assert_handler);
jerry_api_value_t assert_value; jerry_api_value_t assert_value;
assert_value.type = JERRY_API_DATA_TYPE_OBJECT; 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, bool is_assert_added = jerry_api_set_object_field_value (global_obj_p,
(jerry_api_char_t *) "assert", (jerry_api_char_t *) "assert",
@@ -476,7 +476,7 @@ main (int argc,
return JERRY_STANDALONE_EXIT_CODE_FAIL; 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; return JERRY_STANDALONE_EXIT_CODE_FAIL;
} }
@@ -516,7 +516,7 @@ main (int argc,
// print return value // print return value
const jerry_api_value_t args[] = {ret_val}; const jerry_api_value_t args[] = {ret_val};
jerry_api_value_t ret_val_print; 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); jerry_api_release_value (&ret_val_print);
} }
+51 -51
View File
@@ -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 */ bool v) /**< boolean value to initialize with */
{ {
out_value_p->type = JERRY_API_DATA_TYPE_BOOLEAN; 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 */ } /* 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 */ double v) /**< float64 value to initialize with */
{ {
out_value_p->type = JERRY_API_DATA_TYPE_FLOAT64; 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 */ } /* 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 */ const char *v) /**< string value to initialize with */
{ {
out_value_p->type = JERRY_API_DATA_TYPE_STRING; 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 */ } /* 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); jerry_api_acquire_object (v);
out_value_p->type = JERRY_API_DATA_TYPE_OBJECT; 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 */ } /* test_api_init_api_value_object */
static bool static bool
@@ -123,14 +123,14 @@ handler (const jerry_api_object_t *function_obj_p,
JERRY_ASSERT (args_cnt == 2); JERRY_ASSERT (args_cnt == 2);
JERRY_ASSERT (args_p[0].type == JERRY_API_DATA_TYPE_STRING); 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); 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 (sz == 1);
JERRY_ASSERT (!strncmp (buffer, "1", (size_t) sz)); JERRY_ASSERT (!strncmp (buffer, "1", (size_t) sz));
JERRY_ASSERT (args_p[1].type == JERRY_API_DATA_TYPE_BOOLEAN); 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"); 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_cnt == 1);
JERRY_ASSERT (args_p[0].type == JERRY_API_DATA_TYPE_BOOLEAN); 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, (uintptr_t) 0x0000000000000000ull,
handler_construct_freecb); handler_construct_freecb);
uintptr_t ptr; 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); JERRY_ASSERT (is_ok && ptr == (uintptr_t) 0x0000000000000000ull);
/* check if setting handle for second time is handled correctly */ /* 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, (uintptr_t) 0x0012345678abcdefull,
handler_construct_freecb); handler_construct_freecb);
@@ -249,13 +249,13 @@ static bool foreach (const jerry_api_string_t *name,
JERRY_ASSERT (value->v_float32 == 32.0f); JERRY_ASSERT (value->v_float32 == 32.0f);
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_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 */ #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
} }
else if (!strncmp (str_buf_p, "bravo", (size_t)sz)) else if (!strncmp (str_buf_p, "bravo", (size_t)sz))
{ {
JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_BOOLEAN); 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)) 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); JERRY_ASSERT (value->v_float32 == 123.45f);
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 #elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_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 */ #endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
} }
else if (!strncmp (str_buf_p, "echo", (size_t)sz)) else if (!strncmp (str_buf_p, "echo", (size_t)sz))
{ {
JERRY_ASSERT (value->type == JERRY_API_DATA_TYPE_STRING); 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'; str_buf_p[echo_sz] = '\0';
JERRY_ASSERT (!strncmp (str_buf_p, "foobar", (size_t)echo_sz)); 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 corner case for jerry_api_string_to_char_buffer
test_api_init_api_value_string (&args[0], ""); 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_ASSERT (sz == 0);
jerry_api_release_value (&args[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); is_ok = jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *)"t", &val_t);
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_t.type == JERRY_API_DATA_TYPE_FLOAT64 && 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); jerry_api_release_value (&val_t);
// Get global.foo // Get global.foo
@@ -364,10 +364,10 @@ main (void)
// Call foo (4, 2) // Call foo (4, 2)
test_api_init_api_value_float64 (&args[0], 4); test_api_init_api_value_float64 (&args[0], 4);
test_api_init_api_value_float64 (&args[1], 2); 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 JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_FLOAT64 && res.type == JERRY_API_DATA_TYPE_FLOAT64
&& res.v_float64 == 1.0); && res.u.v_float64 == 1.0);
jerry_api_release_value (&res); jerry_api_release_value (&res);
// Get global.bar // Get global.bar
@@ -376,10 +376,10 @@ main (void)
&& val_bar.type == JERRY_API_DATA_TYPE_OBJECT); && val_bar.type == JERRY_API_DATA_TYPE_OBJECT);
// Call bar (4, 2) // 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 JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_FLOAT64 && 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 (&res);
jerry_api_release_value (&val_bar); jerry_api_release_value (&val_bar);
@@ -392,12 +392,12 @@ main (void)
jerry_api_release_value (&args[0]); jerry_api_release_value (&args[0]);
// Call foo (4, 2) // 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 JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_STRING); && 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); 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_ASSERT (sz == 4);
jerry_api_release_value (&res); jerry_api_release_value (&res);
JERRY_ASSERT (!strncmp (buffer, "abcd", (size_t) sz)); JERRY_ASSERT (!strncmp (buffer, "abcd", (size_t) sz));
@@ -408,9 +408,9 @@ main (void)
&& val_A.type == JERRY_API_DATA_TYPE_OBJECT); && val_A.type == JERRY_API_DATA_TYPE_OBJECT);
// Get A.prototype // 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); 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", (jerry_api_char_t *) "prototype",
&val_A_prototype); &val_A_prototype);
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
@@ -418,7 +418,7 @@ main (void)
jerry_api_release_value (&val_A); jerry_api_release_value (&val_A);
// Set A.prototype.foo = global.foo // 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", (jerry_api_char_t *) "foo",
&val_foo); &val_foo);
JERRY_ASSERT (is_ok); JERRY_ASSERT (is_ok);
@@ -431,40 +431,40 @@ main (void)
&& val_a.type == JERRY_API_DATA_TYPE_OBJECT); && val_a.type == JERRY_API_DATA_TYPE_OBJECT);
// Get a.t // 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 JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_FLOAT64 && 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 (&res);
// foreach properties // foreach properties
jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "p", &val_p); 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); JERRY_ASSERT (is_ok);
// break foreach at third element // break foreach at third element
int count = 0; 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 (is_ok);
JERRY_ASSERT (count == 3); JERRY_ASSERT (count == 3);
jerry_api_release_value (&val_p); jerry_api_release_value (&val_p);
// foreach with throw test // foreach with throw test
jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "np", &val_np); 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_ASSERT (is_ok);
jerry_api_release_value (&val_np); jerry_api_release_value (&val_np);
// Get a.foo // 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 JERRY_ASSERT (is_ok
&& val_a_foo.type == JERRY_API_DATA_TYPE_OBJECT); && val_a_foo.type == JERRY_API_DATA_TYPE_OBJECT);
// Call a.foo () // 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 JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_FLOAT64 && 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 (&res);
jerry_api_release_value (&val_a_foo); 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); is_ok = jerry_api_get_object_field_value (global_obj_p, (jerry_api_char_t *) "call_external", &val_call_external);
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_call_external.type == JERRY_API_DATA_TYPE_OBJECT); && 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, global_obj_p,
&res, &res,
NULL, 0); NULL, 0);
jerry_api_release_value (&val_call_external); jerry_api_release_value (&val_call_external);
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_STRING); && 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); 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_ASSERT (sz == 19);
jerry_api_release_value (&res); jerry_api_release_value (&res);
JERRY_ASSERT (!strncmp (buffer, "string from handler", (size_t) sz)); 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); is_ok = jerry_api_construct_object (external_construct_p, &res, args, 1);
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_OBJECT); && 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", (jerry_api_char_t *)"value_field",
&val_value_field); &val_value_field);
// Get 'value_field' of constructed object // Get 'value_field' of constructed object
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_value_field.type == JERRY_API_DATA_TYPE_BOOLEAN && 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); jerry_api_release_value (&val_value_field);
uintptr_t ptr; 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 JERRY_ASSERT (is_ok
&& ptr == (uintptr_t) 0x0012345678abcdefull); && ptr == (uintptr_t) 0x0012345678abcdefull);
@@ -556,7 +556,7 @@ main (void)
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_t.type == JERRY_API_DATA_TYPE_OBJECT); && 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, global_obj_p,
&res, &res,
NULL, 0); NULL, 0);
@@ -569,7 +569,7 @@ main (void)
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_t.type == JERRY_API_DATA_TYPE_OBJECT); && 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, global_obj_p,
&res, &res,
NULL, 0); NULL, 0);
@@ -602,7 +602,7 @@ main (void)
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& val_t.type == JERRY_API_DATA_TYPE_OBJECT); && 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, &res,
NULL, 0); NULL, 0);
is_exception = !is_ok; is_exception = !is_ok;
@@ -638,7 +638,7 @@ main (void)
jerry_api_value_t v_out; jerry_api_value_t v_out;
jerry_api_get_array_index_value (array_obj_p, 5, &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); jerry_api_release_object (array_obj_p);
@@ -652,15 +652,15 @@ main (void)
&val_t); &val_t);
JERRY_ASSERT (status == JERRY_COMPLETION_CODE_OK); JERRY_ASSERT (status == JERRY_COMPLETION_CODE_OK);
JERRY_ASSERT (val_t.type == JERRY_API_DATA_TYPE_OBJECT); 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, NULL,
&res, &res,
NULL, 0); NULL, 0);
JERRY_ASSERT (is_ok); JERRY_ASSERT (is_ok);
JERRY_ASSERT (res.type == JERRY_API_DATA_TYPE_FLOAT64 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 (&res);
jerry_api_release_value (&val_t); jerry_api_release_value (&val_t);
@@ -737,9 +737,9 @@ main (void)
JERRY_ASSERT (is_ok JERRY_ASSERT (is_ok
&& res.type == JERRY_API_DATA_TYPE_STRING); && 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); 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_ASSERT (sz == 20);
jerry_api_release_value (&res); jerry_api_release_value (&res);
JERRY_ASSERT (!strncmp (buffer, "string from snapshot", (size_t) sz)); JERRY_ASSERT (!strncmp (buffer, "string from snapshot", (size_t) sz));