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, |