Implement IgnoreCase in RegExp engine

JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com
This commit is contained in:
László Langó
2015-07-28 18:27:53 +02:00
committed by Dániel Bátyai
parent 1b05cc47ff
commit f48ed52209
@@ -286,7 +286,39 @@ re_match_regexp (re_matcher_ctx_t *re_ctx_p, /**< RegExp matcher context */
ecma_char_t ch2 = lit_utf8_iterator_read_next (&iter);
JERRY_DDLOG ("Character matching %d to %d: ", ch1, ch2);
if (ch1 != ch2)
if (re_ctx_p->flags & RE_FLAG_IGNORE_CASE)
{
ecma_char_t ch1_buffer[LIT_MAXIMUM_OTHER_CASE_LENGTH];
ecma_char_t ch2_buffer[LIT_MAXIMUM_OTHER_CASE_LENGTH];
lit_utf8_size_t ch1_length = lit_char_to_lower_case (ch1,
ch1_buffer,
LIT_MAXIMUM_OTHER_CASE_LENGTH);
lit_utf8_size_t ch2_length = lit_char_to_lower_case (ch2,
ch2_buffer,
LIT_MAXIMUM_OTHER_CASE_LENGTH);
JERRY_ASSERT (ch1_length >= 1 && ch1_length <= LIT_MAXIMUM_OTHER_CASE_LENGTH);
JERRY_ASSERT (ch2_length >= 1 && ch2_length <= LIT_MAXIMUM_OTHER_CASE_LENGTH);
if (ch1_length != ch2_length)
{
JERRY_DDLOG ("fail\n");
re_ctx_p->recursion_depth--;
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE); /* fail */
}
for (lit_utf8_size_t i = 0; i < ch1_length; i++)
{
if (ch1_buffer[i] != ch2_buffer[i])
{
JERRY_DDLOG ("fail\n");
re_ctx_p->recursion_depth--;
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE); /* fail */
}
}
}
else if (ch1 != ch2)
{
JERRY_DDLOG ("fail\n");
re_ctx_p->recursion_depth--;