Lines Matching defs:compiler
5 #include "src/regexp/regexp-compiler.h"
229 explicit RecursionCheck(RegExpCompiler* compiler) : compiler_(compiler) {
230 compiler->IncrementRecursionDepth();
525 void Trace::Flush(RegExpCompiler* compiler, RegExpNode* successor) {
526 RegExpMacroAssembler* assembler = compiler->macro_assembler();
537 successor->Emit(compiler, &new_state);
552 FindAffectedRegisters(&affected_registers, compiler->zone());
557 compiler->zone());
565 if (successor->KeepRecursing(compiler)) {
567 successor->Emit(compiler, &new_state);
569 compiler->AddWork(successor);
585 void NegativeSubmatchSuccess::Emit(RegExpCompiler* compiler, Trace* trace) {
586 RegExpMacroAssembler* assembler = compiler->macro_assembler();
611 void EndNode::Emit(RegExpCompiler* compiler, Trace* trace) {
613 trace->Flush(compiler, this);
616 RegExpMacroAssembler* assembler = compiler->macro_assembler();
815 inline bool EmitSimpleCharacter(Isolate* isolate, RegExpCompiler* compiler,
818 RegExpMacroAssembler* assembler = compiler->macro_assembler();
830 inline bool EmitAtomNonLetter(Isolate* isolate, RegExpCompiler* compiler,
833 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
834 bool one_byte = compiler->one_byte();
890 inline bool EmitAtomLetter(Isolate* isolate, RegExpCompiler* compiler,
893 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
894 bool one_byte = compiler->one_byte();
1320 RegExpNode::LimitResult RegExpNode::LimitVersions(RegExpCompiler* compiler,
1327 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
1329 if (label_.is_bound() || on_work_list() || !KeepRecursing(compiler)) {
1335 compiler->AddWork(this);
1346 if (KeepRecursing(compiler) && compiler->optimize() &&
1354 bool was_limiting = compiler->limiting_recursion();
1355 compiler->set_limiting_recursion(true);
1356 trace->Flush(compiler, this);
1357 compiler->set_limiting_recursion(was_limiting);
1361 bool RegExpNode::KeepRecursing(RegExpCompiler* compiler) {
1362 return !compiler->limiting_recursion() &&
1363 compiler->recursion_depth() <= RegExpCompiler::kMaxRecursion;
1379 RegExpCompiler* compiler, int filled_in,
1382 on_success()->GetQuickCheckDetailsFromLoopEntry(details, compiler,
1385 on_success()->GetQuickCheckDetails(details, compiler, filled_in,
1399 QuickCheckDetails* details, RegExpCompiler* compiler, int filled_in,
1402 return node->GetQuickCheckDetails(details, compiler, filled_in, not_at_start);
1452 RegExpCompiler* compiler,
1503 bool RegExpNode::EmitQuickCheck(RegExpCompiler* compiler,
1512 GetQuickCheckDetails(details, compiler, 0,
1515 if (!details->Rationalize(compiler->one_byte())) return false;
1517 compiler->macro_assembler()->CanReadUnaligned());
1521 RegExpMacroAssembler* assembler = compiler->macro_assembler();
1543 const uint32_t char_mask = CharMask(compiler->one_byte());
1551 if (details->characters() == 2 && compiler->one_byte()) {
1553 } else if (details->characters() == 1 && !compiler->one_byte()) {
1585 RegExpCompiler* compiler,
1591 Isolate* isolate = compiler->macro_assembler()->isolate();
1594 const uint32_t char_mask = CharMask(compiler->one_byte());
1603 if (IsIgnoreCase(compiler->flags())) {
1606 isolate, c, compiler->one_byte(), chars, 4);
1727 on_success()->GetQuickCheckDetails(details, compiler, characters_filled_in,
2011 RegExpCompiler* compiler,
2026 loop_node_->GetQuickCheckDetails(details, compiler, characters_filled_in,
2032 ChoiceNode::GetQuickCheckDetails(details, compiler, characters_filled_in,
2038 QuickCheckDetails* details, RegExpCompiler* compiler,
2047 GetQuickCheckDetails(details, compiler, characters_filled_in, not_at_start);
2055 GetQuickCheckDetails(details, compiler, characters_filled_in, not_at_start);
2071 RegExpCompiler* compiler,
2078 details, compiler, characters_filled_in, not_at_start);
2082 node->GetQuickCheckDetails(&new_details, compiler, characters_filled_in,
2116 void EmitHat(RegExpCompiler* compiler, RegExpNode* on_success, Trace* trace) {
2117 RegExpMacroAssembler* assembler = compiler->macro_assembler();
2145 if (!compiler->one_byte()) {
2152 on_success->Emit(compiler, &new_trace);
2158 void AssertionNode::EmitBoundaryCheck(RegExpCompiler* compiler, Trace* trace) {
2159 RegExpMacroAssembler* assembler = compiler->macro_assembler();
2169 zone()->New<BoyerMooreLookahead>(eats_at_least, compiler, zone());
2191 BacktrackIfPrevious(compiler, trace, at_boundary ? kIsNonWord : kIsWord);
2195 BacktrackIfPrevious(compiler, trace, at_boundary ? kIsWord : kIsNonWord);
2198 BacktrackIfPrevious(compiler, trace, at_boundary ? kIsWord : kIsNonWord);
2201 BacktrackIfPrevious(compiler, trace, at_boundary ? kIsNonWord : kIsWord);
2206 RegExpCompiler* compiler, Trace* trace,
2208 RegExpMacroAssembler* assembler = compiler->macro_assembler();
2239 on_success()->Emit(compiler, &new_trace);
2243 RegExpCompiler* compiler,
2249 return on_success()->GetQuickCheckDetails(details, compiler, filled_in,
2253 void AssertionNode::Emit(RegExpCompiler* compiler, Trace* trace) {
2254 RegExpMacroAssembler* assembler = compiler->macro_assembler();
2272 on_success()->Emit(compiler, &at_start_trace);
2277 EmitHat(compiler, on_success(), trace);
2281 EmitBoundaryCheck(compiler, trace);
2285 on_success()->Emit(compiler, trace);
2333 void TextNode::TextEmitPass(RegExpCompiler* compiler, TextEmitPassType pass,
2336 RegExpMacroAssembler* assembler = compiler->macro_assembler();
2338 bool one_byte = compiler->one_byte();
2347 if (SkipPass(pass, IsIgnoreCase(compiler->flags()))) continue;
2353 if (IsIgnoreCase(compiler->flags())) {
2372 EmitAtomNonLetter(isolate, compiler, quark, backtrack,
2376 bounds_checked = EmitSimpleCharacter(isolate, compiler, quark,
2382 EmitAtomLetter(isolate, compiler, quark, backtrack,
2464 void TextNode::Emit(RegExpCompiler* compiler, Trace* trace) {
2465 LimitResult limit_result = LimitVersions(compiler, trace);
2470 compiler->SetRegExpTooBig();
2474 if (compiler->one_byte()) {
2476 TextEmitPass(compiler, NON_LATIN1_MATCH, false, trace, false, &dummy);
2487 TextEmitPass(compiler, static_cast<TextEmitPassType>(pass), true, trace,
2494 TextEmitPass(compiler, static_cast<TextEmitPassType>(pass), false, trace,
2501 read_backward() ? -Length() : Length(), compiler);
2504 RecursionCheck rc(compiler);
2505 on_success()->Emit(compiler, &successor_trace);
2510 void Trace::AdvanceCurrentPositionInTrace(int by, RegExpCompiler* compiler) {
2518 quick_check_performed_.Advance(by, compiler->one_byte());
2521 compiler->SetRegExpTooBig();
2551 RegExpCompiler* compiler) {
2563 const base::uc32 max_char = MaxCodeUnit(compiler->one_byte());
2614 void LoopChoiceNode::Emit(RegExpCompiler* compiler, Trace* trace) {
2615 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
2630 trace->Flush(compiler, this);
2633 ChoiceNode::Emit(compiler, trace);
2636 int ChoiceNode::CalculatePreloadCharacters(RegExpCompiler* compiler,
2640 if (compiler->macro_assembler()->CanReadUnaligned()) {
2641 bool one_byte = compiler->one_byte();
2780 BoyerMooreLookahead::BoyerMooreLookahead(int length, RegExpCompiler* compiler,
2783 compiler_(compiler),
2784 max_char_(MaxCodeUnit(compiler->one_byte())) {
3057 void ChoiceNode::SetUpPreLoad(RegExpCompiler* compiler, Trace* current_trace,
3065 CalculatePreloadCharacters(compiler, state->eats_at_least_);
3072 void ChoiceNode::Emit(RegExpCompiler* compiler, Trace* trace) {
3076 alternatives_->at(0).node()->Emit(compiler, trace);
3082 LimitResult limit_result = LimitVersions(compiler, trace);
3089 trace->Flush(compiler, this);
3093 RecursionCheck rc(compiler);
3103 trace = EmitGreedyLoop(compiler, trace, &alt_gens, &preload,
3109 compiler->macro_assembler()->Bind(&second_choice);
3111 preload.eats_at_least_ = EmitOptimizedUnanchoredSearch(compiler, trace);
3113 EmitChoices(compiler, &alt_gens, 0, trace, &preload);
3131 EmitOutOfLineContinuation(compiler, &new_trace, alternatives_->at(i),
3137 Trace* ChoiceNode::EmitGreedyLoop(RegExpCompiler* compiler, Trace* trace,
3142 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
3160 alternatives_->at(0).node()->Emit(compiler, &greedy_match_trace);
3168 EmitChoices(compiler, alt_gens, 1, new_trace, preload);
3179 int ChoiceNode::EmitOptimizedUnanchoredSearch(RegExpCompiler* compiler,
3189 if (eats_anything_node->GetSuccessorOfOmnivorousTextNode(compiler) != this) {
3201 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
3214 bm = zone()->New<BoyerMooreLookahead>(eats_at_least, compiler, zone());
3225 void ChoiceNode::EmitChoices(RegExpCompiler* compiler,
3229 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
3230 SetUpPreLoad(compiler, trace, preload);
3259 if (compiler->optimize() &&
3262 compiler, trace, &new_trace, preload->preload_has_checked_bounds_,
3301 alternative.node()->Emit(compiler, &new_trace);
3308 void ChoiceNode::EmitOutOfLineContinuation(RegExpCompiler* compiler,
3316 RegExpMacroAssembler* macro_assembler = compiler->macro_assembler();
3330 alternative.node()->Emit(compiler, &out_of_line_trace);
3343 alternative.node()->Emit(compiler, &out_of_line_trace);
3347 void ActionNode::Emit(RegExpCompiler* compiler, Trace* trace) {
3348 RegExpMacroAssembler* assembler = compiler->macro_assembler();
3349 LimitResult limit_result = LimitVersions(compiler, trace);
3353 RecursionCheck rc(compiler);
3362 on_success()->Emit(compiler, &new_trace);
3370 on_success()->Emit(compiler, &new_trace);
3378 on_success()->Emit(compiler, &new_trace);
3386 on_success()->Emit(compiler, &new_trace);
3392 trace->Flush(compiler, this);
3398 on_success()->Emit(compiler, trace);
3414 on_success()->Emit(compiler, trace);
3416 trace->Flush(compiler, this);
3430 on_success()->Emit(compiler, trace);
3436 trace->Flush(compiler, this);
3445 on_success()->Emit(compiler, trace);
3452 on_success()->Emit(compiler, &new_trace);
3467 void BackReferenceNode::Emit(RegExpCompiler* compiler, Trace* trace) {
3468 RegExpMacroAssembler* assembler = compiler->macro_assembler();
3470 trace->Flush(compiler, this);
3474 LimitResult limit_result = LimitVersions(compiler, trace);
3478 RecursionCheck rc(compiler);
3493 if (IsUnicode(flags_) && !compiler->one_byte()) {
3496 on_success()->Emit(compiler, trace);
3846 if (IsIgnoreCase(bm->compiler()->flags())) {