/** * Check if two literals are equal * * @return true if equal * false otherwise */ bool lit_literal_equal (literal_t lit1, /**< first literal */ literal_t lit2) /**< second literal */ { switch (lit2->get_type ()) { case lit_literal_storage_t::LIT_STR: { return lit_literal_equal_charset_rec (lit1, static_cast<lit_charset_record_t *>(lit2)); } case lit_literal_storage_t::LIT_MAGIC_STR: { lit_magic_string_id_t magic_str_id = lit_magic_record_get_magic_str_id (lit2); return lit_literal_equal_utf8 (lit1, lit_get_magic_string_utf8 (magic_str_id), lit_get_magic_string_size (magic_str_id)); } case lit_literal_storage_t::LIT_MAGIC_STR_EX: { lit_magic_string_ex_id_t magic_str_ex_id = lit_magic_record_ex_get_magic_str_id (lit2); return lit_literal_equal_utf8 (lit1, lit_get_magic_string_ex_utf8 (magic_str_ex_id), lit_get_magic_string_ex_size (magic_str_ex_id)); } case lit_literal_storage_t::LIT_NUMBER: { return lit_literal_equal_num (lit1, static_cast<lit_number_record_t *>(lit2)->get_number ()); } default: { JERRY_UNREACHABLE (); } } } /* lit_literal_equal */
/** * Check if literal contains the string equal to the passed number * * @return true if equal * false otherwise */ bool lit_literal_equal_num (lit_literal_t lit, /**< literal to check */ ecma_number_t num) /**< number to compare with */ { lit_utf8_byte_t buff[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER]; lit_utf8_size_t copied = ecma_number_to_utf8_string (num, buff, sizeof (buff)); return lit_literal_equal_utf8 (lit, buff, copied); } /* lit_literal_equal_num */
/** * Check if two literals are equal * * @return true if equal * false otherwise */ bool lit_literal_equal (lit_literal_t lit1, /**< first literal */ lit_literal_t lit2) /**< second literal */ { switch (lit2->type) { case LIT_RECORD_TYPE_CHARSET: { return lit_literal_equal_charset_rec (lit1, lit2); } case LIT_RECORD_TYPE_MAGIC_STR: { lit_magic_string_id_t magic_str_id = lit_magic_literal_get_magic_str_id (lit2); return lit_literal_equal_utf8 (lit1, lit_get_magic_string_utf8 (magic_str_id), lit_get_magic_string_size (magic_str_id)); } case LIT_RECORD_TYPE_MAGIC_STR_EX: { lit_magic_string_ex_id_t magic_str_ex_id = lit_magic_literal_get_magic_str_ex_id (lit2); return lit_literal_equal_utf8 (lit1, lit_get_magic_string_ex_utf8 (magic_str_ex_id), lit_get_magic_string_ex_size (magic_str_ex_id)); } case LIT_RECORD_TYPE_NUMBER: { ecma_number_t num = lit_number_literal_get_number (lit2); return lit_literal_equal_num (lit1, num); } default: { JERRY_UNREACHABLE (); break; } } JERRY_UNREACHABLE (); return 0; } /* lit_literal_equal */
/** * Check if literal equals to utf-8 string. * Check that literal is a string literal before performing detailed comparison. * * @return true if equal * false otherwise */ bool lit_literal_equal_type_utf8 (lit_literal_t lit, /**< literal to compare */ const lit_utf8_byte_t *str_p, /**< utf-8 string */ lit_utf8_size_t str_size) /**< string size */ { const lit_record_type_t type = (const lit_record_type_t) lit->type; if (type == LIT_RECORD_TYPE_NUMBER || type == LIT_RECORD_TYPE_FREE) { return false; } return lit_literal_equal_utf8 (lit, str_p, str_size); } /* lit_literal_equal_type_utf8 */
/** * Check if literal equals to utf-8 string. * Check that literal is a string literal before performing detailed comparison. * * @return true if equal * false otherwise */ bool lit_literal_equal_type_utf8 (literal_t lit, /**< literal to compare */ const lit_utf8_byte_t *str_p, /**< utf-8 string */ lit_utf8_size_t str_size) /**< string size */ { if (lit->get_type () != LIT_STR_T && lit->get_type () != LIT_MAGIC_STR_T && lit->get_type () != LIT_MAGIC_STR_EX_T) { return false; } return lit_literal_equal_utf8 (lit, str_p, str_size); } /* lit_literal_equal_type_utf8 */