/** * Check if literal equals to utf-8 string * * @return true if equal * false otherwise */ bool lit_literal_equal_utf8 (lit_literal_t lit, /**< literal to compare */ const lit_utf8_byte_t *str_p, /**< utf-8 string to compare */ lit_utf8_size_t str_size) /**< string size in bytes */ { switch (lit->type) { case LIT_RECORD_TYPE_CHARSET: { if (lit_charset_literal_get_size (lit) != str_size) { return 0; } return !strncmp ((const char *) lit_charset_literal_get_charset (lit), (const char *) str_p, str_size); } case LIT_RECORD_TYPE_MAGIC_STR: { lit_magic_string_id_t magic_id = lit_magic_literal_get_magic_str_id (lit); return lit_compare_utf8_string_and_magic_string (str_p, str_size, magic_id); } case LIT_RECORD_TYPE_MAGIC_STR_EX: { lit_magic_string_ex_id_t magic_id = lit_magic_literal_get_magic_str_ex_id (lit); return lit_compare_utf8_string_and_magic_string_ex (str_p, str_size, magic_id); } case LIT_RECORD_TYPE_NUMBER: { ecma_number_t num = lit_number_literal_get_number (lit); lit_utf8_byte_t num_buf[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER]; lit_utf8_size_t num_size = ecma_number_to_utf8_string (num, num_buf, sizeof (num_buf)); return lit_compare_utf8_strings (str_p, str_size, num_buf, num_size); } default: { JERRY_UNREACHABLE (); } } } /* lit_literal_equal_utf8 */
/** * Check if passed utf-8 string equals to one of external magic strings * and if equal magic string was found, return it's id in 'out_id_p' argument. * * @return true - if external magic string equal to passed string was found, * false - otherwise. */ bool lit_is_ex_utf8_string_magic (const lit_utf8_byte_t *string_p, /**< utf-8 string */ lit_utf8_size_t string_size, /**< string size in bytes */ lit_magic_string_ex_id_t *out_id_p) /**< out: magic string's id */ { TODO (Improve performance of search); for (lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) 0; id < lit_magic_string_ex_count; id = (lit_magic_string_ex_id_t) (id + 1)) { if (lit_compare_utf8_string_and_magic_string_ex (string_p, string_size, id)) { *out_id_p = id; return true; } } *out_id_p = lit_magic_string_ex_count; return false; } /* lit_is_ex_utf8_string_magic */
static bool compare_utf8_string_and_string_literal (const lit_utf8_byte_t *str_p, lit_utf8_size_t str_size, lit_literal_t lit) { if (LIT_RECORD_IS_CHARSET (lit)) { lit_utf8_byte_t *lit_str_p = lit_charset_literal_get_charset (lit); lit_utf8_size_t lit_str_size = lit_charset_literal_get_size (lit); return lit_compare_utf8_strings (str_p, str_size, lit_str_p, lit_str_size); } else if (LIT_RECORD_IS_MAGIC_STR (lit)) { lit_magic_string_id_t magic_id = lit_magic_literal_get_magic_str_id (lit); return lit_compare_utf8_string_and_magic_string (str_p, str_size, magic_id); } else if (LIT_RECORD_IS_MAGIC_STR_EX (lit)) { lit_magic_string_ex_id_t magic_id = lit_magic_literal_get_magic_str_ex_id (lit); return lit_compare_utf8_string_and_magic_string_ex (str_p, str_size, magic_id); } return false; } /* compare_utf8_string_and_string_literal */
/** * Check if literal equals to utf-8 string * * @return true if equal * false otherwise */ bool lit_literal_equal_utf8 (literal_t lit, /**< literal to compare */ const lit_utf8_byte_t *str_p, /**< utf-8 string to compare */ lit_utf8_size_t str_size) /**< string size in bytes */ { switch (lit->get_type ()) { case LIT_STR_T: { return static_cast<lit_charset_record_t *>(lit)->is_equal_utf8_string (str_p, str_size); } case LIT_MAGIC_STR_T: { lit_magic_string_id_t magic_id = lit_magic_record_get_magic_str_id (lit); return lit_compare_utf8_string_and_magic_string (str_p, str_size, magic_id); } case LIT_MAGIC_STR_EX_T: { lit_magic_string_ex_id_t magic_id = lit_magic_record_ex_get_magic_str_id (lit); return lit_compare_utf8_string_and_magic_string_ex (str_p, str_size, magic_id); } case LIT_NUMBER_T: { lit_utf8_byte_t num_buf[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER]; lit_utf8_size_t num_size = ecma_number_to_utf8_string (static_cast<lit_number_record_t *>(lit)->get_number (), num_buf, sizeof (num_buf)); return lit_compare_utf8_strings (str_p, str_size, num_buf, num_size); } default: { JERRY_UNREACHABLE (); } } } /* lit_literal_equal_utf8 */