diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 0755b4463..05f1f55b0 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -137,12 +137,13 @@ free_string_literal_copy (string_literal_copy *str_lit_descr_p) /**< string lite static bool do_strict_eval_arguments_check (ecma_reference_t ref) /**< ECMA-reference */ { - FIXME (Replace strcmp with ecma_char_t[] comparator); + const ecma_char_t* magic_string_eval = ecma_get_magic_string (ECMA_MAGIC_STRING_EVAL); + const ecma_char_t* magic_string_arguments = ecma_get_magic_string (ECMA_MAGIC_STRING_ARGUMENTS); return (ref.is_strict - && (__strcmp ((char*) ref.referenced_name_p, - (char*) ecma_get_magic_string (ECMA_MAGIC_STRING_EVAL)) == 0 - || __strcmp ((char*) ref.referenced_name_p, - (char*) ecma_get_magic_string (ECMA_MAGIC_STRING_ARGUMENTS)) == 0) + && (ecma_compare_zt_string_to_zt_string (ref.referenced_name_p, + magic_string_eval) == 0 + || ecma_compare_zt_string_to_zt_string (ref.referenced_name_p, + magic_string_arguments) == 0) && (ref.base.value_type == ECMA_TYPE_OBJECT) && (ECMA_GET_POINTER (ref.base.value) != NULL) && (((ecma_object_t*) ECMA_GET_POINTER (ref.base.value))->is_lexical_environment)); diff --git a/src/libecmaobjects/ecma-helpers.c b/src/libecmaobjects/ecma-helpers.c index 640ec6548..ab50312cb 100644 --- a/src/libecmaobjects/ecma-helpers.c +++ b/src/libecmaobjects/ecma-helpers.c @@ -678,6 +678,22 @@ ecma_compare_ecma_string_to_ecma_string (const ecma_array_first_chunk_t *string1 return true; } /* ecma_compare_ecma_string_to_ecma_string */ +/** + * Compare zero-terminated string to zero-terminated string + * + * @return 0 - if strings are equal; + * -1 - if first string is lexicographically less than second; + * 1 - otherwise. + */ +int32_t +ecma_compare_zt_string_to_zt_string (const ecma_char_t *string1_p, /**< zero-terminated string */ + const ecma_char_t *string2_p) /**< zero-terminated string */ +{ + TODO (Implement comparison that supports UTF-16); + + return __strcmp ( (char*)string1_p, (char*)string2_p); +} /* ecma_compare_zt_string_to_zt_string */ + /** * Compare zero-terminated string to ecma-string * diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index c84c36e1f..d368b023e 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -131,6 +131,7 @@ extern ssize_t ecma_copy_ecma_string_chars_to_buffer (ecma_array_first_chunk_t * uint8_t *buffer_p, size_t buffer_size); extern ecma_array_first_chunk_t* ecma_duplicate_ecma_string (ecma_array_first_chunk_t *first_chunk_p); +extern int32_t ecma_compare_zt_string_to_zt_string (const ecma_char_t *string1_p, const ecma_char_t *string2_p); extern bool ecma_compare_zt_string_to_ecma_string (const ecma_char_t *string_p, const ecma_array_first_chunk_t *ecma_string_p); extern bool ecma_compare_ecma_string_to_ecma_string (const ecma_array_first_chunk_t *string1_p,