Пример #1
0
/**
 * 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 */
Пример #2
0
/**
 * 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 */
Пример #3
0
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 */
Пример #4
0
/**
 * 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 */