Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Unified Diff: runtime/vm/kernel_binary_flowgraph.h

Issue 2972343002: [kernel] Insert kernel bodies into VM heap (Closed)
Patch Set: Review comments Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_binary_flowgraph.h
diff --git a/runtime/vm/kernel_binary_flowgraph.h b/runtime/vm/kernel_binary_flowgraph.h
index 1b000abaa4f16fac1ead9f0c0db18e375a377864..e183a4db4e6339480e0814394d6c2d50d088d6f1 100644
--- a/runtime/vm/kernel_binary_flowgraph.h
+++ b/runtime/vm/kernel_binary_flowgraph.h
@@ -51,38 +51,30 @@ class StreamingDartTypeTranslator {
class TypeParameterScope {
public:
TypeParameterScope(StreamingDartTypeTranslator* translator,
- intptr_t parameters_offset,
- intptr_t parameters_count)
- : parameters_offset_(parameters_offset),
- parameters_count_(parameters_count),
+ intptr_t parameter_count)
+ : parameter_count_(parameter_count),
outer_(translator->type_parameter_scope_),
translator_(translator) {
outer_parameter_count_ = 0;
if (outer_ != NULL) {
outer_parameter_count_ =
- outer_->outer_parameter_count_ + outer_->parameters_count_;
+ outer_->outer_parameter_count_ + outer_->parameter_count_;
}
translator_->type_parameter_scope_ = this;
}
~TypeParameterScope() { translator_->type_parameter_scope_ = outer_; }
TypeParameterScope* outer() const { return outer_; }
- intptr_t parameters_offset() const { return parameters_offset_; }
- intptr_t parameters_count() const { return parameters_count_; }
+ intptr_t parameter_count() const { return parameter_count_; }
intptr_t outer_parameter_count() const { return outer_parameter_count_; }
private:
- intptr_t parameters_offset_;
- intptr_t parameters_count_;
+ intptr_t parameter_count_;
intptr_t outer_parameter_count_;
TypeParameterScope* outer_;
StreamingDartTypeTranslator* translator_;
};
- intptr_t FindTypeParameterIndex(intptr_t parameters_offset,
- intptr_t parameters_count,
- intptr_t look_for);
-
StreamingFlowGraphBuilder* builder_;
TranslationHelper& translation_helper_;
ActiveClass* active_class_;
@@ -98,9 +90,8 @@ class StreamingDartTypeTranslator {
class StreamingScopeBuilder {
public:
StreamingScopeBuilder(ParsedFunction* parsed_function,
- intptr_t kernel_offset,
- const uint8_t* buffer,
- intptr_t buffer_length);
+ intptr_t relative_kernel_offset,
+ const TypedData& data);
virtual ~StreamingScopeBuilder();
@@ -158,7 +149,7 @@ class StreamingScopeBuilder {
// Record an assignment or reference to a variable. If the occurrence is
// in a nested function, ensure that the variable is handled properly as a
// captured variable.
- void LookupVariable(intptr_t declaration_binary_offest);
+ void LookupVariable(intptr_t declaration_binary_offset);
const dart::String& GenerateName(const char* prefix, intptr_t suffix);
@@ -185,7 +176,7 @@ class StreamingScopeBuilder {
ScopeBuildingResult* result_;
ParsedFunction* parsed_function_;
- intptr_t kernel_offset_;
+ intptr_t relative_kernel_offset_;
ActiveClass active_class_;
@@ -306,14 +297,15 @@ class FunctionNodeHelper;
class StreamingFlowGraphBuilder {
public:
StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder,
- const uint8_t* buffer,
- intptr_t buffer_length)
+ intptr_t relative_kernel_offset,
+ const TypedData& data)
: flow_graph_builder_(flow_graph_builder),
translation_helper_(flow_graph_builder->translation_helper_),
zone_(flow_graph_builder->zone_),
- reader_(new Reader(buffer, buffer_length)),
+ reader_(new Reader(data)),
constant_evaluator_(this),
type_translator_(this, /* finalize= */ true),
+ relative_kernel_offset_(relative_kernel_offset),
current_script_id_(-1),
record_for_script_id_(-1),
record_token_positions_into_(NULL),
@@ -329,6 +321,23 @@ class StreamingFlowGraphBuilder {
reader_(new Reader(buffer, buffer_length)),
constant_evaluator_(this),
type_translator_(this, /* finalize= */ true),
+ relative_kernel_offset_(0),
+ current_script_id_(-1),
+ record_for_script_id_(-1),
+ record_token_positions_into_(NULL),
+ record_yield_positions_into_(NULL) {}
+
+ StreamingFlowGraphBuilder(TranslationHelper* translation_helper,
+ Zone* zone,
+ intptr_t relative_kernel_offset,
+ const TypedData& data)
+ : flow_graph_builder_(NULL),
+ translation_helper_(*translation_helper),
+ zone_(zone),
+ reader_(new Reader(data)),
+ constant_evaluator_(this),
+ type_translator_(this, /* finalize= */ true),
+ relative_kernel_offset_(relative_kernel_offset),
current_script_id_(-1),
record_for_script_id_(-1),
record_token_positions_into_(NULL),
@@ -343,6 +352,7 @@ class StreamingFlowGraphBuilder {
RawObject* EvaluateMetadata(intptr_t kernel_offset);
void CollectTokenPositionsFor(
intptr_t script_index,
+ intptr_t initial_script_index,
GrowableArray<intptr_t>* record_token_positions_in,
GrowableArray<intptr_t>* record_yield_positions_in);
intptr_t SourceTableSize();
@@ -355,22 +365,18 @@ class StreamingFlowGraphBuilder {
const Function& function,
Function* outermost_function);
- /**
- * Will return kernel offset for parent class if reading a constructor.
- * Will otherwise return -1.
- */
- intptr_t ReadUntilFunctionNode();
- StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset);
+ void ReadUntilFunctionNode();
+ StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset,
+ const Function& function);
FlowGraph* BuildGraphOfStaticFieldInitializer();
FlowGraph* BuildGraphOfFieldAccessor(LocalVariable* setter_value);
void SetupDefaultParameterValues();
Fragment BuildFieldInitializer(NameIndex canonical_name);
- Fragment BuildInitializers(intptr_t constructor_class_parent_offset);
+ Fragment BuildInitializers(const Class& parent_class);
FlowGraph* BuildGraphOfImplicitClosureFunction(const Function& function);
FlowGraph* BuildGraphOfConvertedClosureFunction(const Function& function);
- FlowGraph* BuildGraphOfFunction(
- intptr_t constructor_class_parent_offset = -1);
+ FlowGraph* BuildGraphOfFunction(bool constructor);
Fragment BuildExpression(TokenPosition* position = NULL);
Fragment BuildStatement();
@@ -617,10 +623,8 @@ class StreamingFlowGraphBuilder {
Fragment BuildYieldStatement();
Fragment BuildVariableDeclaration();
Fragment BuildFunctionDeclaration();
- Fragment BuildFunctionNode(intptr_t parent_kernel_offset,
- TokenPosition parent_position,
- bool declaration,
- intptr_t variable_offeset);
+ Fragment BuildFunctionNode(TokenPosition parent_position,
+ StringIndex name_index);
void SetupFunctionParameters(const dart::Class& klass,
const dart::Function& function,
bool is_method,
@@ -633,6 +637,7 @@ class StreamingFlowGraphBuilder {
Reader* reader_;
StreamingConstantEvaluator constant_evaluator_;
StreamingDartTypeTranslator type_translator_;
+ intptr_t relative_kernel_offset_;
intptr_t current_script_id_;
intptr_t record_for_script_id_;
GrowableArray<intptr_t>* record_token_positions_into_;
@@ -657,19 +662,49 @@ class StreamingFlowGraphBuilder {
class AlternativeReadingScope {
public:
AlternativeReadingScope(Reader* reader, intptr_t new_position)
- : reader_(reader), saved_offset_(reader_->offset()) {
+ : reader_(reader),
+ saved_size_(reader_->size()),
+ saved_raw_buffer_(reader_->raw_buffer()),
+ saved_typed_data_(reader_->typed_data()),
+ saved_offset_(reader_->offset()) {
reader_->set_offset(new_position);
}
- explicit AlternativeReadingScope(Reader* reader)
- : reader_(reader), saved_offset_(reader_->offset()) {}
+ AlternativeReadingScope(Reader* reader,
+ const TypedData* new_typed_data,
+ intptr_t new_position)
+ : reader_(reader),
+ saved_size_(reader_->size()),
+ saved_raw_buffer_(reader_->raw_buffer()),
+ saved_typed_data_(reader_->typed_data()),
+ saved_offset_(reader_->offset()) {
+ reader_->set_raw_buffer(NULL);
+ reader_->set_typed_data(new_typed_data);
+ reader_->set_size(new_typed_data->Length());
+ reader_->set_offset(new_position);
+ }
- ~AlternativeReadingScope() { reader_->set_offset(saved_offset_); }
+ explicit AlternativeReadingScope(Reader* reader)
+ : reader_(reader),
+ saved_size_(reader_->size()),
+ saved_raw_buffer_(reader_->raw_buffer()),
+ saved_typed_data_(reader_->typed_data()),
+ saved_offset_(reader_->offset()) {}
+
+ ~AlternativeReadingScope() {
+ reader_->set_raw_buffer(saved_raw_buffer_);
+ reader_->set_typed_data(saved_typed_data_);
+ reader_->set_size(saved_size_);
+ reader_->set_offset(saved_offset_);
+ }
intptr_t saved_offset() { return saved_offset_; }
private:
Reader* reader_;
+ intptr_t saved_size_;
+ const uint8_t* saved_raw_buffer_;
+ const TypedData* saved_typed_data_;
intptr_t saved_offset_;
};
@@ -875,7 +910,6 @@ class FieldHelper {
kPosition,
kEndPosition,
kFlags,
- kParentClassBinaryOffset,
kName,
kSourceUriIndex,
kDocumentationCommentIndex,
@@ -925,10 +959,6 @@ class FieldHelper {
case kFlags:
flags_ = builder_->ReadFlags(); // read flags.
if (++next_read_ == field) return;
- case kParentClassBinaryOffset:
- parent_class_binary_offset_ =
- builder_->ReadUInt(); // read parent class binary offset.
- if (++next_read_ == field) return;
case kName:
builder_->SkipName(); // read name.
if (++next_read_ == field) return;
@@ -999,7 +1029,6 @@ class FieldHelper {
TokenPosition position_;
TokenPosition end_position_;
word flags_;
- intptr_t parent_class_binary_offset_;
intptr_t source_uri_index_;
intptr_t annotation_count_;
@@ -1028,7 +1057,6 @@ class ProcedureHelper {
kEndPosition,
kKind,
kFlags,
- kParentClassBinaryOffset,
kName,
kSourceUriIndex,
kDocumentationCommentIndex,
@@ -1073,10 +1101,6 @@ class ProcedureHelper {
case kFlags:
flags_ = builder_->ReadFlags(); // read flags.
if (++next_read_ == field) return;
- case kParentClassBinaryOffset:
- parent_class_binary_offset_ =
- builder_->ReadUInt(); // read parent class binary offset.
- if (++next_read_ == field) return;
case kName:
builder_->SkipName(); // read name.
if (++next_read_ == field) return;
@@ -1129,7 +1153,6 @@ class ProcedureHelper {
TokenPosition end_position_;
Procedure::ProcedureKind kind_;
word flags_;
- intptr_t parent_class_binary_offset_;
intptr_t source_uri_index_;
intptr_t annotation_count_;
@@ -1153,7 +1176,6 @@ class ConstructorHelper {
kPosition,
kEndPosition,
kFlags,
- kParentClassBinaryOffset,
kName,
kDocumentationCommentIndex,
kAnnotations,
@@ -1194,10 +1216,6 @@ class ConstructorHelper {
case kFlags:
flags_ = builder_->ReadFlags(); // read flags.
if (++next_read_ == field) return;
- case kParentClassBinaryOffset:
- parent_class_binary_offset_ =
- builder_->ReadUInt(); // read parent class binary offset.
- if (++next_read_ == field) return;
case kName:
builder_->SkipName(); // read name.
if (++next_read_ == field) return;
@@ -1266,7 +1284,6 @@ class ConstructorHelper {
TokenPosition position_;
TokenPosition end_position_;
word flags_;
- intptr_t parent_class_binary_offset_;
intptr_t annotation_count_;
private:
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698