Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
dart::IrregexpCompilationPipeline Class Reference

#include <compiler.h>

Inheritance diagram for dart::IrregexpCompilationPipeline:
dart::CompilationPipeline dart::ZoneAllocated

Public Member Functions

 IrregexpCompilationPipeline ()
 
void ParseFunction (ParsedFunction *parsed_function) override
 
FlowGraphBuildFlowGraph (Zone *zone, ParsedFunction *parsed_function, ZoneGrowableArray< const ICData * > *ic_data_array, intptr_t osr_id, bool optimized) override
 
- Public Member Functions inherited from dart::CompilationPipeline
virtual ~CompilationPipeline ()
 
- Public Member Functions inherited from dart::ZoneAllocated
 ZoneAllocated ()
 
void * operator new (size_t size)
 
void * operator new (size_t size, Zone *zone)
 
void operator delete (void *pointer)
 

Additional Inherited Members

- Static Public Member Functions inherited from dart::CompilationPipeline
static CompilationPipelineNew (Zone *zone, const Function &function)
 

Detailed Description

Definition at line 55 of file compiler.h.

Constructor & Destructor Documentation

◆ IrregexpCompilationPipeline()

dart::IrregexpCompilationPipeline::IrregexpCompilationPipeline ( )
inline

Definition at line 57 of file compiler.h.

57: backtrack_goto_(nullptr) {}

Member Function Documentation

◆ BuildFlowGraph()

FlowGraph * dart::IrregexpCompilationPipeline::BuildFlowGraph ( Zone zone,
ParsedFunction parsed_function,
ZoneGrowableArray< const ICData * > *  ic_data_array,
intptr_t  osr_id,
bool  optimized 
)
overridevirtual

Implements dart::CompilationPipeline.

Definition at line 170 of file compiler.cc.

175 {
176 // Compile to the dart IR.
177 RegExpEngine::CompilationResult result =
178 RegExpEngine::CompileIR(parsed_function->regexp_compile_data(),
179 parsed_function, *ic_data_array, osr_id);
180 if (result.error_message != nullptr) {
182 LanguageError::New(String::Handle(String::New(result.error_message)))));
183 }
184 backtrack_goto_ = result.backtrack_goto;
185
186 // Allocate variables now that we know the number of locals.
187 parsed_function->AllocateIrregexpVariables(result.num_stack_locals);
188
189 // When compiling for OSR, use a depth first search to find the OSR
190 // entry and make graph entry jump to it instead of normal entry.
191 // Catch entries are always considered reachable, even if they
192 // become unreachable after OSR.
193 if (osr_id != Compiler::kNoOSRDeoptId) {
194 result.graph_entry->RelinkToOsrEntry(zone, result.num_blocks);
195 }
196 PrologueInfo prologue_info(-1, -1);
197 return new (zone)
198 FlowGraph(*parsed_function, result.graph_entry, result.num_blocks,
199 prologue_info, FlowGraph::CompilationModeFrom(optimized));
200}
static constexpr intptr_t kNoOSRDeoptId
Definition compiler.h:73
static constexpr CompilationMode CompilationModeFrom(bool is_optimizing)
Definition flow_graph.h:587
static Object & Handle()
Definition object.h:407
static CompilationResult CompileIR(RegExpCompileData *input, const ParsedFunction *parsed_function, const ZoneGrowableArray< const ICData * > &ic_data_array, intptr_t osr_id)
Definition regexp.cc:5298
static DART_NORETURN void LongJump(const Error &error)
Definition report.cc:86
static StringPtr New(const char *cstr, Heap::Space space=Heap::kNew)
Definition object.cc:23777
GAsyncResult * result

◆ ParseFunction()

void dart::IrregexpCompilationPipeline::ParseFunction ( ParsedFunction parsed_function)
overridevirtual

Implements dart::CompilationPipeline.

Definition at line 144 of file compiler.cc.

145 {
146 VMTagScope tagScope(parsed_function->thread(),
147 VMTag::kCompileParseRegExpTagId);
148 Zone* zone = parsed_function->zone();
149 RegExp& regexp = RegExp::Handle(parsed_function->function().regexp());
150
151 const String& pattern = String::Handle(regexp.pattern());
152
153 RegExpCompileData* compile_data = new (zone) RegExpCompileData();
154 // Parsing failures are handled in the RegExp factory constructor.
155 RegExpParser::ParseRegExp(pattern, regexp.flags(), compile_data);
156
157 regexp.set_num_bracket_expressions(compile_data->capture_count);
158 regexp.set_capture_name_map(compile_data->capture_name_map);
159 if (compile_data->simple) {
160 regexp.set_is_simple();
161 } else {
162 regexp.set_is_complex();
163 }
164
165 parsed_function->SetRegExpCompileData(compile_data);
166
167 // Variables are allocated after compilation.
168}
static void ParseRegExp(const String &input, RegExpFlags regexp_flags, RegExpCompileData *result)

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