V8 Project
v8::internal::BackReferenceNode Class Reference

#include <jsregexp.h>

+ Inheritance diagram for v8::internal::BackReferenceNode:
+ Collaboration diagram for v8::internal::BackReferenceNode:

Public Member Functions

 BackReferenceNode (int start_reg, int end_reg, RegExpNode *on_success)
 
virtual void Accept (NodeVisitor *visitor)
 
int start_register ()
 
int end_register ()
 
virtual void Emit (RegExpCompiler *compiler, Trace *trace)
 
virtual int EatsAtLeast (int still_to_find, int recursion_depth, bool not_at_start)
 
virtual void GetQuickCheckDetails (QuickCheckDetails *details, RegExpCompiler *compiler, int characters_filled_in, bool not_at_start)
 
virtual void FillInBMInfo (int offset, int budget, BoyerMooreLookahead *bm, bool not_at_start)
 
- Public Member Functions inherited from v8::internal::SeqRegExpNode
 SeqRegExpNode (RegExpNode *on_success)
 
RegExpNodeon_success ()
 
void set_on_success (RegExpNode *node)
 
virtual RegExpNodeFilterOneByte (int depth, bool ignore_case)
 
- Public Member Functions inherited from v8::internal::RegExpNode
 RegExpNode (Zone *zone)
 
virtual ~RegExpNode ()
 
bool EmitQuickCheck (RegExpCompiler *compiler, Trace *bounds_check_trace, Trace *trace, bool preload_has_checked_bounds, Label *on_possible_success, QuickCheckDetails *details_return, bool fall_through_on_failure)
 
virtual int GreedyLoopTextLength ()
 
virtual RegExpNodeGetSuccessorOfOmnivorousTextNode (RegExpCompiler *compiler)
 
RegExpNodereplacement ()
 
RegExpNodeset_replacement (RegExpNode *replacement)
 
void SaveBMInfo (BoyerMooreLookahead *bm, bool not_at_start, int offset)
 
Label * label ()
 
NodeInfoinfo ()
 
BoyerMooreLookaheadbm_info (bool not_at_start)
 
Zonezone () const
 
- Public Member Functions inherited from v8::internal::ZoneObject
 INLINE (void *operator new(size_t size, Zone *zone))
 
void operator delete (void *, size_t)
 
void operator delete (void *pointer, Zone *zone)
 

Private Attributes

int start_reg_
 
int end_reg_
 

Additional Inherited Members

- Static Public Attributes inherited from v8::internal::RegExpNode
static const int kNodeIsTooComplexForGreedyLoops = -1
 
static const int kRecursionBudget = 200
 
static const int kMaxCopiesCodeGenerated = 10
 
- Protected Types inherited from v8::internal::RegExpNode
enum  LimitResult { DONE , CONTINUE }
 
- Protected Member Functions inherited from v8::internal::SeqRegExpNode
RegExpNodeFilterSuccessor (int depth, bool ignore_case)
 
- Protected Member Functions inherited from v8::internal::RegExpNode
LimitResult LimitVersions (RegExpCompiler *compiler, Trace *trace)
 
void set_bm_info (bool not_at_start, BoyerMooreLookahead *bm)
 
- Protected Attributes inherited from v8::internal::RegExpNode
RegExpNodereplacement_
 

Detailed Description

Definition at line 932 of file jsregexp.h.

Constructor & Destructor Documentation

◆ BackReferenceNode()

v8::internal::BackReferenceNode::BackReferenceNode ( int  start_reg,
int  end_reg,
RegExpNode on_success 
)
inline

Definition at line 934 of file jsregexp.h.

938  start_reg_(start_reg),
939  end_reg_(end_reg) { }
RegExpNode * on_success()
Definition: jsregexp.h:727
SeqRegExpNode(RegExpNode *on_success)
Definition: jsregexp.h:725

Member Function Documentation

◆ Accept()

virtual void v8::internal::BackReferenceNode::Accept ( NodeVisitor visitor)
virtual

◆ EatsAtLeast()

int v8::internal::BackReferenceNode::EatsAtLeast ( int  still_to_find,
int  recursion_depth,
bool  not_at_start 
)
virtual

Implements v8::internal::RegExpNode.

Definition at line 2324 of file jsregexp.cc.

2326  {
2327  if (budget <= 0) return 0;
2328  return on_success()->EatsAtLeast(still_to_find,
2329  budget - 1,
2330  not_at_start);
2331 }
virtual int EatsAtLeast(int still_to_find, int budget, bool not_at_start)=0

◆ Emit()

void v8::internal::BackReferenceNode::Emit ( RegExpCompiler compiler,
Trace trace 
)
virtual

Implements v8::internal::RegExpNode.

Definition at line 4356 of file jsregexp.cc.

4356  {
4357  RegExpMacroAssembler* assembler = compiler->macro_assembler();
4358  if (!trace->is_trivial()) {
4359  trace->Flush(compiler, this);
4360  return;
4361  }
4362 
4363  LimitResult limit_result = LimitVersions(compiler, trace);
4364  if (limit_result == DONE) return;
4365  DCHECK(limit_result == CONTINUE);
4366 
4367  RecursionCheck rc(compiler);
4368 
4370  if (compiler->ignore_case()) {
4371  assembler->CheckNotBackReferenceIgnoreCase(start_reg_,
4372  trace->backtrack());
4373  } else {
4374  assembler->CheckNotBackReference(start_reg_, trace->backtrack());
4375  }
4376  on_success()->Emit(compiler, trace);
4377 }
LimitResult LimitVersions(RegExpCompiler *compiler, Trace *trace)
Definition: jsregexp.cc:2229
virtual void Emit(RegExpCompiler *compiler, Trace *trace)=0
#define DCHECK(condition)
Definition: logging.h:205
#define DCHECK_EQ(v1, v2)
Definition: logging.h:206

References v8::internal::Trace::backtrack(), v8::internal::RegExpMacroAssembler::CheckNotBackReference(), v8::internal::RegExpMacroAssembler::CheckNotBackReferenceIgnoreCase(), v8::internal::RegExpNode::CONTINUE, DCHECK, DCHECK_EQ, v8::internal::RegExpNode::DONE, v8::internal::RegExpNode::Emit(), end_reg_, v8::internal::Trace::Flush(), v8::internal::RegExpCompiler::ignore_case(), v8::internal::Trace::is_trivial(), v8::internal::RegExpNode::LimitVersions(), v8::internal::RegExpCompiler::macro_assembler(), v8::internal::SeqRegExpNode::on_success(), and start_reg_.

+ Here is the call graph for this function:

◆ end_register()

int v8::internal::BackReferenceNode::end_register ( )
inline

Definition at line 942 of file jsregexp.h.

942 { return end_reg_; }

References end_reg_.

◆ FillInBMInfo()

void v8::internal::BackReferenceNode::FillInBMInfo ( int  offset,
int  budget,
BoyerMooreLookahead bm,
bool  not_at_start 
)
virtual

Reimplemented from v8::internal::SeqRegExpNode.

Definition at line 5821 of file jsregexp.cc.

5824  {
5825  // Working out the set of characters that a backreference can match is too
5826  // hard, so we just say that any character can match.
5827  bm->SetRest(offset);
5828  SaveBMInfo(bm, not_at_start, offset);
5829 }
void SaveBMInfo(BoyerMooreLookahead *bm, bool not_at_start, int offset)
Definition: jsregexp.h:650

References v8::internal::RegExpNode::SaveBMInfo(), and v8::internal::BoyerMooreLookahead::SetRest().

+ Here is the call graph for this function:

◆ GetQuickCheckDetails()

virtual void v8::internal::BackReferenceNode::GetQuickCheckDetails ( QuickCheckDetails details,
RegExpCompiler compiler,
int  characters_filled_in,
bool  not_at_start 
)
inlinevirtual

Implements v8::internal::RegExpNode.

Definition at line 947 of file jsregexp.h.

950  {
951  return;
952  }

◆ start_register()

int v8::internal::BackReferenceNode::start_register ( )
inline

Definition at line 941 of file jsregexp.h.

941 { return start_reg_; }

References start_reg_.

Member Data Documentation

◆ end_reg_

int v8::internal::BackReferenceNode::end_reg_
private

Definition at line 960 of file jsregexp.h.

Referenced by Emit(), and end_register().

◆ start_reg_

int v8::internal::BackReferenceNode::start_reg_
private

Definition at line 959 of file jsregexp.h.

Referenced by Emit(), and start_register().


The documentation for this class was generated from the following files: