4434 {
4443 flags_)
4444 : AssertionNode::AtBoundary(on_success);
4447 ? BoundaryAssertionAsLookaround(
compiler, on_success,
4449 : AssertionNode::AtNonBoundary(on_success);
4453
4454
4455
4456 intptr_t stack_pointer_register =
compiler->AllocateRegister();
4457 intptr_t position_register =
compiler->AllocateRegister();
4458
4459 ChoiceNode*
result =
new ChoiceNode(2, on_success->zone());
4460
4461 ZoneGrowableArray<CharacterRange>* newline_ranges =
4462 new ZoneGrowableArray<CharacterRange>(3);
4464 RegExpCharacterClass* newline_atom =
4465 new RegExpCharacterClass('n', RegExpFlags());
4466 TextNode* newline_matcher =
4467 new TextNode(newline_atom, false,
4469 stack_pointer_register, position_register,
4470 0,
4471 -1,
4472 on_success));
4473
4475 stack_pointer_register, position_register, newline_matcher);
4476
4477 GuardedAlternative eol_alternative(end_of_line);
4478 result->AddAlternative(eol_alternative);
4480 result->AddAlternative(end_alternative);
4482 }
4483 default:
4485 }
4486 return on_success;
4487}
static ActionNode * BeginSubmatch(intptr_t stack_pointer_reg, intptr_t position_reg, RegExpNode *on_success)
static ActionNode * PositiveSubmatchSuccess(intptr_t stack_pointer_reg, intptr_t restore_reg, intptr_t clear_capture_count, intptr_t clear_capture_from, RegExpNode *on_success)
static AssertionNode * AfterNewline(RegExpNode *on_success)
static AssertionNode * AtStart(RegExpNode *on_success)
static AssertionNode * AtEnd(RegExpNode *on_success)
static void AddClassEscape(uint16_t type, ZoneGrowableArray< CharacterRange > *ranges)
bool NeedsUnicodeCaseEquivalents()