Skip to content

Commit

Permalink
Warning fixes.
Browse files Browse the repository at this point in the history
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.

JerryScript-DCO-1.0-Signed-off-by: Robert Sipka [email protected]
  • Loading branch information
robertsipka committed Feb 15, 2016
1 parent 977bfa5 commit fba0fb3
Show file tree
Hide file tree
Showing 15 changed files with 72 additions and 71 deletions.
2 changes: 1 addition & 1 deletion jerry-core/ecma/base/ecma-helpers-string.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/ecma/base/ecma-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
2 changes: 1 addition & 1 deletion jerry-core/ecma/operations/ecma-objects-arguments.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
10 changes: 4 additions & 6 deletions jerry-core/jerry-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down
66 changes: 33 additions & 33 deletions jerry-core/jerry.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

/**
Expand All @@ -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 */

/**
Expand All @@ -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 */

Expand All @@ -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 */

/**
Expand All @@ -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 */

/**
Expand Down Expand Up @@ -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 */

Expand All @@ -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 */

Expand All @@ -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 */

Expand All @@ -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 */

Expand Down Expand Up @@ -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))
{
Expand All @@ -402,23 +402,23 @@ jerry_api_convert_ecma_value_to_api_value (jerry_api_value_t *out_value_p, /**<
out_value_p->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))
{
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))
{
ecma_object_t *obj = ecma_get_object_from_value (value);
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
{
Expand Down Expand Up @@ -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);

Expand All @@ -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);

Expand All @@ -478,23 +478,23 @@ 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);

break;
}
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);

break;
}
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);

Expand Down Expand Up @@ -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 */

Expand Down Expand Up @@ -2040,28 +2040,28 @@ 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;
}
}

for (uint32_t i = const_literal_end; i < literal_end; i++)
{
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;
}
}

Expand Down Expand Up @@ -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++;
}
Expand All @@ -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
Expand All @@ -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);
}
}
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/lit/lit-literal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down
2 changes: 1 addition & 1 deletion jerry-core/mem/mem-heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/parser/js/js-lexer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions jerry-core/parser/js/js-parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
}

Expand Down
Loading

0 comments on commit fba0fb3

Please sign in to comment.