Example #1
0
/* 13.1, 15.3.2 */
void
syntax_check_for_syntax_errors_in_formal_param_list (bool is_strict, locus loc __attr_unused___)
{
  if (STACK_SIZE (props) - STACK_TOP (U8) < 2 || !is_strict)
  {
    STACK_DROP (U8, 1);
    return;
  }
  for (uint8_t i = (uint8_t) (STACK_TOP (U8) + 1); i < STACK_SIZE (props); i = (uint8_t) (i + 1))
  {
    JERRY_ASSERT (STACK_ELEMENT (props, i).type == VARG);
    literal_t previous = STACK_ELEMENT (props, i).lit;
    JERRY_ASSERT (previous->get_type () == LIT_STR_T
                  || previous->get_type () == LIT_MAGIC_STR_T
                  || previous->get_type () == LIT_MAGIC_STR_EX_T);
    for (uint8_t j = STACK_TOP (U8); j < i; j = (uint8_t) (j + 1))
    {
      JERRY_ASSERT (STACK_ELEMENT (props, j).type == VARG);
      literal_t current = STACK_ELEMENT (props, j).lit;
      JERRY_ASSERT (current->get_type () == LIT_STR_T
                    || current->get_type () == LIT_MAGIC_STR_T
                    || current->get_type () == LIT_MAGIC_STR_EX_T);
      if (lit_literal_equal_type (previous, current))
      {
        PARSE_ERROR_VARG ("Duplication of literal '%s' in FormalParameterList is not allowed in strict mode",
                          loc, lit_literal_to_str_internal_buf (previous));
      }
    }
  }

  STACK_DROP (props, (uint8_t) (STACK_SIZE (props) - STACK_TOP (U8)));
  STACK_DROP (U8, 1);
}
Example #2
0
/* 13.1, 15.3.2 */
void
jsp_early_error_check_for_syntax_errors_in_formal_param_list (bool is_strict, locus loc __attr_unused___)
{
  if (is_strict
      && STACK_SIZE (props) - STACK_TOP (size_t_stack) >= 2)
  {
    for (size_t i = (STACK_TOP (size_t_stack) + 1u); i < STACK_SIZE (props); i++)
    {
      JERRY_ASSERT (STACK_ELEMENT (props, i).type == VARG);
      literal_t previous = STACK_ELEMENT (props, i).lit;
      JERRY_ASSERT (previous->get_type () == LIT_STR_T
                    || previous->get_type () == LIT_MAGIC_STR_T
                    || previous->get_type () == LIT_MAGIC_STR_EX_T);
      for (size_t j = STACK_TOP (size_t_stack); j < i; j++)
      {
        JERRY_ASSERT (STACK_ELEMENT (props, j).type == VARG);
        literal_t current = STACK_ELEMENT (props, j).lit;
        JERRY_ASSERT (current->get_type () == LIT_STR_T
                      || current->get_type () == LIT_MAGIC_STR_T
                      || current->get_type () == LIT_MAGIC_STR_EX_T);
        if (lit_literal_equal_type (previous, current))
        {
          PARSE_ERROR_VARG (JSP_EARLY_ERROR_SYNTAX,
                            "Duplication of literal '%s' in FormalParameterList is not allowed in strict mode",
                            loc, lit_literal_to_str_internal_buf (previous));
        }
      }
    }
  }

  STACK_DROP (props, (size_t) (STACK_SIZE (props) - STACK_TOP (size_t_stack)));
  STACK_DROP (size_t_stack, 1);
}