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

Unified Diff: runtime/vm/object.cc

Issue 2972343002: [kernel] Insert kernel bodies into VM heap (Closed)
Patch Set: Rebased 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
Index: runtime/vm/object.cc
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index d1b188a1065a65122be9dafa4072899cb07673fc..e2d2e89336fffbd7638bbb77c3fd3732519c4698 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2731,6 +2731,7 @@ RawFunction* Function::CreateMethodExtractor(const String& getter_name) const {
extractor.set_parameter_names(Object::extractor_parameter_names());
extractor.set_result_type(Object::dynamic_type());
extractor.set_kernel_offset(kernel_offset());
+ extractor.set_kernel_body(TypedData::Handle(zone, kernel_body()));
extractor.set_extracted_method_closure(closure_function);
extractor.set_is_debuggable(false);
@@ -5947,6 +5948,10 @@ void Function::SetNumOptionalParameters(intptr_t num_optional_parameters,
: -num_optional_parameters);
}
+void Function::set_kernel_body(const TypedData& data) const {
+ StorePointer(&raw_ptr()->kernel_body_, data.raw());
+}
+
bool Function::IsOptimizable() const {
if (FLAG_precompiled_mode) {
return true;
@@ -6639,6 +6644,8 @@ RawFunction* Function::Clone(const Class& new_owner) const {
clone.set_optimized_instruction_count(0);
clone.set_optimized_call_site_count(0);
clone.set_kernel_offset(kernel_offset());
+ clone.set_kernel_body(TypedData::Handle(zone, kernel_body()));
+
if (new_owner.NumTypeParameters() > 0) {
// Adjust uninstantiated types to refer to type parameters of the new owner.
const TypeArguments& type_params =
@@ -6822,6 +6829,7 @@ RawFunction* Function::ImplicitClosureFunction() const {
closure_function.SetParameterNameAt(i, param_name);
}
closure_function.set_kernel_offset(kernel_offset());
+ closure_function.set_kernel_body(TypedData::Handle(zone, kernel_body()));
const Type& signature_type =
Type::Handle(zone, closure_function.SignatureType());
@@ -7697,6 +7705,10 @@ void Field::set_name(const String& value) const {
StorePointer(&raw_ptr()->name_, value.raw());
}
+void Field::set_kernel_body(const TypedData& data) const {
+ StorePointer(&raw_ptr()->kernel_body_, data.raw());
+}
+
RawObject* Field::RawOwner() const {
if (IsOriginal()) {
return raw_ptr()->owner_;
@@ -8961,12 +8973,7 @@ RawString* TokenStream::Iterator::MakeLiteralToken(const Object& obj) const {
}
bool Script::HasSource() const {
-#if !defined(DART_PRECOMPILED_RUNTIME)
- return kind() == RawScript::kKernelTag ||
- raw_ptr()->source_ != String::null();
-#else // !defined(DART_PRECOMPILED_RUNTIME)
return raw_ptr()->source_ != String::null();
-#endif // !defined(DART_PRECOMPILED_RUNTIME)
}
RawString* Script::Source() const {
@@ -8978,17 +8985,6 @@ RawString* Script::Source() const {
}
RawString* Script::GenerateSource() const {
-#if !defined(DART_PRECOMPILED_RUNTIME)
- if (kind() == RawScript::kKernelTag) {
- String& source = String::Handle(raw_ptr()->source_);
- if (source.IsNull()) {
- // This is created lazily. Now we need it.
- set_source(kernel::GetSourceFor(*this));
- }
- return raw_ptr()->source_;
- }
-#endif // !defined(DART_PRECOMPILED_RUNTIME)
-
const TokenStream& token_stream = TokenStream::Handle(tokens());
if (token_stream.IsNull()) {
ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT);
@@ -9001,14 +8997,6 @@ void Script::set_compile_time_constants(const Array& value) const {
StorePointer(&raw_ptr()->compile_time_constants_, value.raw());
}
-void Script::set_kernel_data(const uint8_t* kernel_data) const {
- StoreNonPointer(&raw_ptr()->kernel_data_, kernel_data);
-}
-
-void Script::set_kernel_data_size(const intptr_t kernel_data_size) const {
- StoreNonPointer(&raw_ptr()->kernel_data_size_, kernel_data_size);
-}
-
void Script::set_kernel_script_index(const intptr_t kernel_script_index) const {
StoreNonPointer(&raw_ptr()->kernel_script_index_, kernel_script_index);
}
@@ -9211,13 +9199,6 @@ RawArray* Script::yield_positions() const {
}
RawArray* Script::line_starts() const {
-#if !defined(DART_PRECOMPILED_RUNTIME)
- const Array& line_starts_array = Array::Handle(raw_ptr()->line_starts_);
- if (line_starts_array.IsNull() && kind() == RawScript::kKernelTag) {
- // This is created lazily. Now we need it.
- set_line_starts(kernel::GetLineStartsFor(*this));
- }
-#endif // !defined(DART_PRECOMPILED_RUNTIME)
return raw_ptr()->line_starts_;
}
@@ -9959,7 +9940,8 @@ static RawString* MakeTypeParameterMetaName(Thread* thread,
void Library::AddMetadata(const Object& owner,
const String& name,
TokenPosition token_pos,
- intptr_t kernel_offset) const {
+ intptr_t kernel_offset,
+ const TypedData* kernel_body) const {
Thread* thread = Thread::Current();
ASSERT(thread->IsMutatorThread());
Zone* zone = thread->zone();
@@ -9973,6 +9955,9 @@ void Library::AddMetadata(const Object& owner,
field.set_is_reflectable(false);
field.SetStaticValue(Array::empty_array(), true);
field.set_kernel_offset(kernel_offset);
+ if (kernel_body != NULL) {
+ field.set_kernel_body(*kernel_body);
+ }
GrowableObjectArray& metadata =
GrowableObjectArray::Handle(zone, this->metadata());
metadata.Add(field, Heap::kOld);
@@ -9981,34 +9966,37 @@ void Library::AddMetadata(const Object& owner,
void Library::AddClassMetadata(const Class& cls,
const Object& tl_owner,
TokenPosition token_pos,
- intptr_t kernel_offset) const {
+ intptr_t kernel_offset,
+ const TypedData* kernel_body) const {
Thread* thread = Thread::Current();
Zone* zone = thread->zone();
// We use the toplevel class as the owner of a class's metadata field because
// a class's metadata is in scope of the library, not the class.
AddMetadata(tl_owner,
String::Handle(zone, MakeClassMetaName(thread, zone, cls)),
- token_pos, kernel_offset);
+ token_pos, kernel_offset, kernel_body);
}
void Library::AddFieldMetadata(const Field& field,
TokenPosition token_pos,
- intptr_t kernel_offset) const {
+ intptr_t kernel_offset,
+ const TypedData* kernel_body) const {
Thread* thread = Thread::Current();
Zone* zone = thread->zone();
AddMetadata(Object::Handle(zone, field.RawOwner()),
String::Handle(zone, MakeFieldMetaName(thread, zone, field)),
- token_pos, kernel_offset);
+ token_pos, kernel_offset, kernel_body);
}
void Library::AddFunctionMetadata(const Function& func,
TokenPosition token_pos,
- intptr_t kernel_offset) const {
+ intptr_t kernel_offset,
+ const TypedData* kernel_body) const {
Thread* thread = Thread::Current();
Zone* zone = thread->zone();
AddMetadata(Object::Handle(zone, func.RawOwner()),
String::Handle(zone, MakeFunctionMetaName(thread, zone, func)),
- token_pos, kernel_offset);
+ token_pos, kernel_offset, kernel_body);
}
void Library::AddTypeParameterMetadata(const TypeParameter& param,
« runtime/vm/kernel_reader.cc ('K') | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698