[vm] Refactor handling of kernel data in compiler frontend
a) Remove 2 fields in our object representation: * PatchClass::library_data_ * Library::kernel_data_ => This saves O(#libraries + #patch-classes) which can amount up to 10+ MB for big apps, as we save not just the slots but the [ExternalTypedData] objects they used to reference. Instead we'll compute the KernelLibraryData when we need it by making a [TypedDataView] of sub parts of the component. b) We make a kernel binary be represented by a single [ExternalTypedData]. Whenever we need a sub-part of a kernel binary (e.g. one for each component for concatinated kernels, or one for a library inside a component) we use proper [TypedDataView]s for that. c) As we sometimes need to create a view of only a particular library within a component we need to find start/end of a library based on index. => We store the library index instead of the library offset on Library/PatchClass. => We can easily derive the start/end of a library from it's index by looking at the kernel component encoding. d) We make the [Reader] object work purely based on a pointer - instead of making it have if/else when reading bytes (either from pointer or from a view). e) We make the [KernelProgramInfo] store the kernel_component and various TD views into it. TEST=ci Change-Id: Ibe160881ff48635e834c3d647a977a144b5d0565 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/313561 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
006b3a8780
commit
0ae3368fb6
@@ -935,7 +935,7 @@ class PatchClassSerializationCluster : public SerializationCluster {
|
||||
AutoTraceObject(cls);
|
||||
WriteFromTo(cls);
|
||||
if (s->kind() != Snapshot::kFullAOT) {
|
||||
s->Write<int32_t>(cls->untag()->library_kernel_offset_);
|
||||
s->Write<int32_t>(cls->untag()->kernel_library_index_);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -965,7 +965,7 @@ class PatchClassDeserializationCluster : public DeserializationCluster {
|
||||
d.ReadFromTo(cls);
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
ASSERT(d_->kind() != Snapshot::kFullAOT);
|
||||
cls->untag()->library_kernel_offset_ = d.Read<int32_t>();
|
||||
cls->untag()->kernel_library_index_ = d.Read<int32_t>();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1710,7 +1710,7 @@ class LibrarySerializationCluster : public SerializationCluster {
|
||||
s->Write<int8_t>(lib->untag()->load_state_);
|
||||
s->Write<uint8_t>(lib->untag()->flags_);
|
||||
if (s->kind() != Snapshot::kFullAOT) {
|
||||
s->Write<uint32_t>(lib->untag()->kernel_offset_);
|
||||
s->Write<uint32_t>(lib->untag()->kernel_library_index_);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1746,7 +1746,7 @@ class LibraryDeserializationCluster : public DeserializationCluster {
|
||||
UntaggedLibrary::InFullSnapshotBit::update(true, d.Read<uint8_t>());
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
ASSERT(d_->kind() != Snapshot::kFullAOT);
|
||||
lib->untag()->kernel_offset_ = d.Read<uint32_t>();
|
||||
lib->untag()->kernel_library_index_ = d.Read<uint32_t>();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ class ProgramElementKeyValueTrait {
|
||||
// of these might change during precompilation: urls are changed
|
||||
// by |Precompiler::Obfuscate| and library index is changed by
|
||||
// |Precompiler::DropLibraries|.
|
||||
return Utils::WordHash(Library::Cast(*key).kernel_offset());
|
||||
return Utils::WordHash(Library::Cast(*key).KernelLibraryOffset());
|
||||
}
|
||||
FATAL("Unexpected type: %s\n", key->ToCString());
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ Fragment StreamingFlowGraphBuilder::BuildInitializers(
|
||||
});
|
||||
constructor_initialized_field_offsets.Add(-1);
|
||||
|
||||
ExternalTypedData& kernel_data = ExternalTypedData::Handle(Z);
|
||||
auto& kernel_data = TypedDataView::Handle(Z);
|
||||
Array& class_fields = Array::Handle(Z, parent_class.fields());
|
||||
Field& class_field = Field::Handle(Z);
|
||||
intptr_t next_constructor_initialized_field_index = 0;
|
||||
@@ -298,7 +298,7 @@ Fragment StreamingFlowGraphBuilder::BuildInitializers(
|
||||
is_constructor_initialized = true;
|
||||
}
|
||||
|
||||
kernel_data = class_field.KernelData();
|
||||
kernel_data = class_field.KernelLibrary();
|
||||
ASSERT(!kernel_data.IsNull());
|
||||
AlternativeReadingScopeWithNewData alt(&reader_, &kernel_data,
|
||||
field_offset);
|
||||
|
||||
@@ -23,13 +23,12 @@ namespace kernel {
|
||||
class StreamingFlowGraphBuilder : public KernelReaderHelper {
|
||||
public:
|
||||
StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataView& data,
|
||||
intptr_t data_program_offset)
|
||||
: KernelReaderHelper(
|
||||
flow_graph_builder->zone_,
|
||||
&flow_graph_builder->translation_helper_,
|
||||
data,
|
||||
data_program_offset),
|
||||
: KernelReaderHelper(flow_graph_builder->zone_,
|
||||
&flow_graph_builder->translation_helper_,
|
||||
data,
|
||||
data_program_offset),
|
||||
flow_graph_builder_(flow_graph_builder),
|
||||
active_class_(&flow_graph_builder->active_class_),
|
||||
constant_reader_(this, active_class_),
|
||||
|
||||
@@ -15,12 +15,9 @@ class KernelFingerprintHelper : public KernelReaderHelper {
|
||||
public:
|
||||
KernelFingerprintHelper(Zone* zone,
|
||||
TranslationHelper* translation_helper,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataView& data,
|
||||
intptr_t data_program_offset)
|
||||
: KernelReaderHelper(zone,
|
||||
translation_helper,
|
||||
data,
|
||||
data_program_offset),
|
||||
: KernelReaderHelper(zone, translation_helper, data, data_program_offset),
|
||||
hash_(0) {}
|
||||
|
||||
virtual ~KernelFingerprintHelper() {}
|
||||
@@ -995,8 +992,8 @@ uint32_t KernelSourceFingerprintHelper::CalculateFieldFingerprint(
|
||||
|
||||
KernelFingerprintHelper helper(
|
||||
zone, &translation_helper,
|
||||
ExternalTypedData::Handle(zone, field.KernelData()),
|
||||
field.KernelDataProgramOffset());
|
||||
TypedDataView::Handle(zone, field.KernelLibrary()),
|
||||
field.KernelLibraryOffset());
|
||||
helper.SetOffset(field.kernel_offset());
|
||||
return helper.CalculateFieldFingerprint();
|
||||
}
|
||||
@@ -1012,8 +1009,8 @@ uint32_t KernelSourceFingerprintHelper::CalculateFunctionFingerprint(
|
||||
|
||||
KernelFingerprintHelper helper(
|
||||
zone, &translation_helper,
|
||||
ExternalTypedData::Handle(zone, func.KernelData()),
|
||||
func.KernelDataProgramOffset());
|
||||
TypedDataView::Handle(zone, func.KernelLibrary()),
|
||||
func.KernelLibraryOffset());
|
||||
helper.SetOffset(func.kernel_offset());
|
||||
return helper.CalculateFunctionFingerprint();
|
||||
}
|
||||
|
||||
@@ -810,8 +810,8 @@ FlowGraph* FlowGraphBuilder::BuildGraph() {
|
||||
}
|
||||
#endif
|
||||
|
||||
auto& kernel_data = ExternalTypedData::Handle(Z, function.KernelData());
|
||||
intptr_t kernel_data_program_offset = function.KernelDataProgramOffset();
|
||||
auto& kernel_data = TypedDataView::Handle(Z, function.KernelLibrary());
|
||||
intptr_t kernel_data_program_offset = function.KernelLibraryOffset();
|
||||
|
||||
StreamingFlowGraphBuilder streaming_flow_graph_builder(
|
||||
this, kernel_data, kernel_data_program_offset);
|
||||
|
||||
@@ -29,12 +29,12 @@ TranslationHelper::TranslationHelper(Thread* thread)
|
||||
isolate_group_(thread->isolate_group()),
|
||||
allocation_space_(Heap::kNew),
|
||||
string_offsets_(TypedData::Handle(Z)),
|
||||
string_data_(ExternalTypedData::Handle(Z)),
|
||||
string_data_(TypedDataView::Handle(Z)),
|
||||
canonical_names_(TypedData::Handle(Z)),
|
||||
metadata_payloads_(ExternalTypedData::Handle(Z)),
|
||||
metadata_mappings_(ExternalTypedData::Handle(Z)),
|
||||
metadata_payloads_(TypedDataView::Handle(Z)),
|
||||
metadata_mappings_(TypedDataView::Handle(Z)),
|
||||
constants_(Array::Handle(Z)),
|
||||
constants_table_(ExternalTypedData::Handle(Z)),
|
||||
constants_table_(TypedDataView::Handle(Z)),
|
||||
info_(KernelProgramInfo::Handle(Z)),
|
||||
name_index_handle_(Smi::Handle(Z)) {}
|
||||
|
||||
@@ -44,21 +44,21 @@ TranslationHelper::TranslationHelper(Thread* thread, Heap::Space space)
|
||||
isolate_group_(thread->isolate_group()),
|
||||
allocation_space_(space),
|
||||
string_offsets_(TypedData::Handle(Z)),
|
||||
string_data_(ExternalTypedData::Handle(Z)),
|
||||
string_data_(TypedDataView::Handle(Z)),
|
||||
canonical_names_(TypedData::Handle(Z)),
|
||||
metadata_payloads_(ExternalTypedData::Handle(Z)),
|
||||
metadata_mappings_(ExternalTypedData::Handle(Z)),
|
||||
metadata_payloads_(TypedDataView::Handle(Z)),
|
||||
metadata_mappings_(TypedDataView::Handle(Z)),
|
||||
constants_(Array::Handle(Z)),
|
||||
constants_table_(ExternalTypedData::Handle(Z)),
|
||||
constants_table_(TypedDataView::Handle(Z)),
|
||||
info_(KernelProgramInfo::Handle(Z)),
|
||||
name_index_handle_(Smi::Handle(Z)) {}
|
||||
|
||||
void TranslationHelper::Reset() {
|
||||
string_offsets_ = TypedData::null();
|
||||
string_data_ = ExternalTypedData::null();
|
||||
string_data_ = TypedDataView::null();
|
||||
canonical_names_ = TypedData::null();
|
||||
metadata_payloads_ = ExternalTypedData::null();
|
||||
metadata_mappings_ = ExternalTypedData::null();
|
||||
metadata_payloads_ = TypedDataView::null();
|
||||
metadata_mappings_ = TypedDataView::null();
|
||||
constants_ = Array::null();
|
||||
}
|
||||
|
||||
@@ -71,12 +71,12 @@ void TranslationHelper::InitFromKernelProgramInfo(
|
||||
return;
|
||||
}
|
||||
SetStringOffsets(TypedData::Handle(Z, info.string_offsets()));
|
||||
SetStringData(ExternalTypedData::Handle(Z, info.string_data()));
|
||||
SetStringData(TypedDataView::Handle(Z, info.string_data()));
|
||||
SetCanonicalNames(TypedData::Handle(Z, info.canonical_names()));
|
||||
SetMetadataPayloads(ExternalTypedData::Handle(Z, info.metadata_payloads()));
|
||||
SetMetadataMappings(ExternalTypedData::Handle(Z, info.metadata_mappings()));
|
||||
SetMetadataPayloads(TypedDataView::Handle(Z, info.metadata_payloads()));
|
||||
SetMetadataMappings(TypedDataView::Handle(Z, info.metadata_mappings()));
|
||||
SetConstants(Array::Handle(Z, info.constants()));
|
||||
SetConstantsTable(ExternalTypedData::Handle(Z, info.constants_table()));
|
||||
SetConstantsTable(TypedDataView::Handle(Z, info.constants_table()));
|
||||
SetKernelProgramInfo(info);
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ void TranslationHelper::SetStringOffsets(const TypedData& string_offsets) {
|
||||
string_offsets_ = string_offsets.ptr();
|
||||
}
|
||||
|
||||
void TranslationHelper::SetStringData(const ExternalTypedData& string_data) {
|
||||
void TranslationHelper::SetStringData(const TypedDataView& string_data) {
|
||||
ASSERT(string_data_.IsNull());
|
||||
string_data_ = string_data.ptr();
|
||||
}
|
||||
@@ -96,14 +96,14 @@ void TranslationHelper::SetCanonicalNames(const TypedData& canonical_names) {
|
||||
}
|
||||
|
||||
void TranslationHelper::SetMetadataPayloads(
|
||||
const ExternalTypedData& metadata_payloads) {
|
||||
const TypedDataView& metadata_payloads) {
|
||||
ASSERT(metadata_payloads_.IsNull());
|
||||
ASSERT(Utils::IsAligned(metadata_payloads.DataAddr(0), kWordSize));
|
||||
metadata_payloads_ = metadata_payloads.ptr();
|
||||
}
|
||||
|
||||
void TranslationHelper::SetMetadataMappings(
|
||||
const ExternalTypedData& metadata_mappings) {
|
||||
const TypedDataView& metadata_mappings) {
|
||||
ASSERT(metadata_mappings_.IsNull());
|
||||
metadata_mappings_ = metadata_mappings.ptr();
|
||||
}
|
||||
@@ -115,7 +115,7 @@ void TranslationHelper::SetConstants(const Array& constants) {
|
||||
}
|
||||
|
||||
void TranslationHelper::SetConstantsTable(
|
||||
const ExternalTypedData& constants_table) {
|
||||
const TypedDataView& constants_table) {
|
||||
ASSERT(constants_table_.IsNull());
|
||||
constants_table_ = constants_table.ptr();
|
||||
}
|
||||
@@ -1520,7 +1520,7 @@ void LibraryDependencyHelper::ReadUntilExcluding(Field field) {
|
||||
#if defined(DEBUG)
|
||||
|
||||
void MetadataHelper::VerifyMetadataMappings(
|
||||
const ExternalTypedData& metadata_mappings) {
|
||||
const TypedDataView& metadata_mappings) {
|
||||
const intptr_t kUInt32Size = 4;
|
||||
Reader reader(metadata_mappings);
|
||||
if (reader.size() == 0) {
|
||||
@@ -3067,8 +3067,7 @@ String& KernelReaderHelper::SourceTableImportUriFor(intptr_t index) {
|
||||
return H.DartString(reader_.BufferAt(ReaderOffset()), size, Heap::kOld);
|
||||
}
|
||||
|
||||
ExternalTypedDataPtr KernelReaderHelper::GetConstantCoverageFor(
|
||||
intptr_t index) {
|
||||
TypedDataViewPtr KernelReaderHelper::GetConstantCoverageFor(intptr_t index) {
|
||||
AlternativeReadingScope alt(&reader_);
|
||||
SetOffset(GetOffsetForSourceInfo(index));
|
||||
SkipBytes(ReadUInt()); // skip uri.
|
||||
@@ -3091,7 +3090,7 @@ ExternalTypedDataPtr KernelReaderHelper::GetConstantCoverageFor(
|
||||
|
||||
intptr_t end_offset = ReaderOffset();
|
||||
|
||||
return reader_.ExternalDataFromTo(start_offset, end_offset);
|
||||
return reader_.ViewFromTo(start_offset, end_offset);
|
||||
}
|
||||
|
||||
intptr_t ActiveClass::MemberTypeParameterCount(Zone* zone) {
|
||||
|
||||
@@ -46,29 +46,25 @@ class TranslationHelper {
|
||||
const TypedData& string_offsets() const { return string_offsets_; }
|
||||
void SetStringOffsets(const TypedData& string_offsets);
|
||||
|
||||
const ExternalTypedData& string_data() const { return string_data_; }
|
||||
void SetStringData(const ExternalTypedData& string_data);
|
||||
const TypedDataView& string_data() const { return string_data_; }
|
||||
void SetStringData(const TypedDataView& string_data);
|
||||
|
||||
const TypedData& canonical_names() const { return canonical_names_; }
|
||||
void SetCanonicalNames(const TypedData& canonical_names);
|
||||
|
||||
const ExternalTypedData& metadata_payloads() const {
|
||||
return metadata_payloads_;
|
||||
}
|
||||
void SetMetadataPayloads(const ExternalTypedData& metadata_payloads);
|
||||
const TypedDataView& metadata_payloads() const { return metadata_payloads_; }
|
||||
void SetMetadataPayloads(const TypedDataView& metadata_payloads);
|
||||
|
||||
const ExternalTypedData& metadata_mappings() const {
|
||||
return metadata_mappings_;
|
||||
}
|
||||
void SetMetadataMappings(const ExternalTypedData& metadata_mappings);
|
||||
const TypedDataView& metadata_mappings() const { return metadata_mappings_; }
|
||||
void SetMetadataMappings(const TypedDataView& metadata_mappings);
|
||||
|
||||
// Access to previously evaluated constants from the constants table.
|
||||
const Array& constants() { return constants_; }
|
||||
void SetConstants(const Array& constants);
|
||||
|
||||
// Access to the raw bytes of the constants table.
|
||||
const ExternalTypedData& constants_table() const { return constants_table_; }
|
||||
void SetConstantsTable(const ExternalTypedData& constants_table);
|
||||
const TypedDataView& constants_table() const { return constants_table_; }
|
||||
void SetConstantsTable(const TypedDataView& constants_table);
|
||||
|
||||
void SetKernelProgramInfo(const KernelProgramInfo& info);
|
||||
const KernelProgramInfo& GetKernelProgramInfo() const { return info_; }
|
||||
@@ -251,12 +247,12 @@ class TranslationHelper {
|
||||
Heap::Space allocation_space_;
|
||||
|
||||
TypedData& string_offsets_;
|
||||
ExternalTypedData& string_data_;
|
||||
TypedDataView& string_data_;
|
||||
TypedData& canonical_names_;
|
||||
ExternalTypedData& metadata_payloads_;
|
||||
ExternalTypedData& metadata_mappings_;
|
||||
TypedDataView& metadata_payloads_;
|
||||
TypedDataView& metadata_mappings_;
|
||||
Array& constants_;
|
||||
ExternalTypedData& constants_table_;
|
||||
TypedDataView& constants_table_;
|
||||
KernelProgramInfo& info_;
|
||||
Smi& name_index_handle_;
|
||||
GrowableObjectArray* potential_extension_libraries_ = nullptr;
|
||||
@@ -945,8 +941,7 @@ class MetadataHelper {
|
||||
bool precompiler_only);
|
||||
|
||||
#if defined(DEBUG)
|
||||
static void VerifyMetadataMappings(
|
||||
const ExternalTypedData& metadata_mappings);
|
||||
static void VerifyMetadataMappings(const TypedDataView& metadata_mappings);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
@@ -1235,22 +1230,13 @@ class KernelReaderHelper {
|
||||
public:
|
||||
KernelReaderHelper(Zone* zone,
|
||||
TranslationHelper* translation_helper,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataBase& data,
|
||||
intptr_t data_program_offset)
|
||||
: zone_(zone),
|
||||
translation_helper_(*translation_helper),
|
||||
reader_(data),
|
||||
data_program_offset_(data_program_offset) {}
|
||||
|
||||
KernelReaderHelper(Zone* zone,
|
||||
TranslationHelper* translation_helper,
|
||||
const ProgramBinary& binary,
|
||||
intptr_t data_program_offset)
|
||||
: zone_(zone),
|
||||
translation_helper_(*translation_helper),
|
||||
reader_(binary),
|
||||
data_program_offset_(data_program_offset) {}
|
||||
|
||||
virtual ~KernelReaderHelper() = default;
|
||||
|
||||
void SetOffset(intptr_t offset);
|
||||
@@ -1332,7 +1318,7 @@ class KernelReaderHelper {
|
||||
const String& GetSourceFor(intptr_t index);
|
||||
TypedDataPtr GetLineStartsFor(intptr_t index);
|
||||
String& SourceTableImportUriFor(intptr_t index);
|
||||
ExternalTypedDataPtr GetConstantCoverageFor(intptr_t index);
|
||||
TypedDataViewPtr GetConstantCoverageFor(intptr_t index);
|
||||
|
||||
Zone* zone_;
|
||||
TranslationHelper& translation_helper_;
|
||||
|
||||
@@ -29,9 +29,8 @@ ScopeBuilder::ScopeBuilder(ParsedFunction* parsed_function)
|
||||
helper_(
|
||||
zone_,
|
||||
&translation_helper_,
|
||||
ExternalTypedData::Handle(Z,
|
||||
parsed_function->function().KernelData()),
|
||||
parsed_function->function().KernelDataProgramOffset()),
|
||||
TypedDataView::Handle(Z, parsed_function->function().KernelLibrary()),
|
||||
parsed_function->function().KernelLibraryOffset()),
|
||||
constant_reader_(&helper_, &active_class_),
|
||||
inferred_type_metadata_helper_(&helper_, &constant_reader_),
|
||||
procedure_attributes_metadata_helper_(&helper_),
|
||||
@@ -178,8 +177,8 @@ ScopeBuildingResult* ScopeBuilder::BuildScopes() {
|
||||
for (intptr_t i = 0; i < class_fields.Length(); ++i) {
|
||||
class_field ^= class_fields.At(i);
|
||||
if (!class_field.is_static()) {
|
||||
ExternalTypedData& kernel_data =
|
||||
ExternalTypedData::Handle(Z, class_field.KernelData());
|
||||
const auto& kernel_data =
|
||||
TypedDataView::Handle(Z, class_field.KernelLibrary());
|
||||
ASSERT(!kernel_data.IsNull());
|
||||
intptr_t field_offset = class_field.kernel_offset();
|
||||
AlternativeReadingScopeWithNewData alt(
|
||||
@@ -507,8 +506,8 @@ void ScopeBuilder::VisitConstructor() {
|
||||
for (intptr_t i = 0; i < class_fields.Length(); ++i) {
|
||||
class_field ^= class_fields.At(i);
|
||||
if (!class_field.is_static()) {
|
||||
ExternalTypedData& kernel_data =
|
||||
ExternalTypedData::Handle(Z, class_field.KernelData());
|
||||
const auto& kernel_data =
|
||||
TypedDataView::Handle(Z, class_field.KernelLibrary());
|
||||
ASSERT(!kernel_data.IsNull());
|
||||
intptr_t field_offset = class_field.kernel_offset();
|
||||
AlternativeReadingScopeWithNewData alt(&helper_.reader_, &kernel_data,
|
||||
@@ -1896,8 +1895,7 @@ LocalVariable* ScopeBuilder::LookupVariable(
|
||||
StringIndex ScopeBuilder::GetNameFromVariableDeclaration(
|
||||
intptr_t kernel_offset,
|
||||
const Function& function) {
|
||||
ExternalTypedData& kernel_data =
|
||||
ExternalTypedData::Handle(Z, function.KernelData());
|
||||
const auto& kernel_data = TypedDataView::Handle(Z, function.KernelLibrary());
|
||||
ASSERT(!kernel_data.IsNull());
|
||||
|
||||
// Temporarily go to the variable declaration, read the name.
|
||||
|
||||
@@ -670,7 +670,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -686,7 +686,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x14;
|
||||
@@ -1386,7 +1386,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -1402,7 +1402,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x28;
|
||||
@@ -2091,7 +2091,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -2107,7 +2107,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x14;
|
||||
@@ -2809,7 +2809,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -2825,7 +2825,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x28;
|
||||
@@ -4942,7 +4942,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -4958,7 +4958,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x14;
|
||||
@@ -5659,7 +5659,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -5675,7 +5675,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x28;
|
||||
@@ -6359,7 +6359,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -6375,7 +6375,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0xc;
|
||||
@@ -7067,7 +7067,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -7083,7 +7083,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x18;
|
||||
@@ -7764,7 +7764,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -7780,7 +7780,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0xc;
|
||||
@@ -8474,7 +8474,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -8490,7 +8490,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x18;
|
||||
@@ -10583,7 +10583,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x1c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x5c;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0x58;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x1c;
|
||||
@@ -10599,7 +10599,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x14;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0xc;
|
||||
@@ -11292,7 +11292,7 @@ static constexpr dart::compiler::target::word Integer_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word KernelProgramInfo_InstanceSize =
|
||||
0x60;
|
||||
static constexpr dart::compiler::target::word LanguageError_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xb0;
|
||||
static constexpr dart::compiler::target::word Library_InstanceSize = 0xa8;
|
||||
static constexpr dart::compiler::target::word LibraryPrefix_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word LinkedHashBase_InstanceSize =
|
||||
0x38;
|
||||
@@ -11308,7 +11308,7 @@ static constexpr dart::compiler::target::word Namespace_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word NativeArguments_StructSize = 0x20;
|
||||
static constexpr dart::compiler::target::word Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word PatchClass_InstanceSize = 0x28;
|
||||
static constexpr dart::compiler::target::word PcDescriptors_HeaderSize = 0x10;
|
||||
static constexpr dart::compiler::target::word Pointer_InstanceSize = 0x18;
|
||||
static constexpr dart::compiler::target::word ReceivePort_InstanceSize = 0x18;
|
||||
@@ -12066,7 +12066,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x1c;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x54;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x50;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x14;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -12085,8 +12085,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0xc;
|
||||
@@ -12853,7 +12852,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -12873,7 +12872,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -13645,7 +13644,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -13665,7 +13664,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -14434,7 +14433,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x38;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x20;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x68;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -14454,7 +14453,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x18;
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -15225,7 +15224,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x38;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x20;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x68;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -15245,7 +15244,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x18;
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -16013,7 +16012,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x1c;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x54;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x50;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x14;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -16032,8 +16031,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0xc;
|
||||
@@ -16801,7 +16799,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -16821,7 +16819,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -17581,7 +17579,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x1c;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x54;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x50;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x14;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -17600,8 +17598,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0xc;
|
||||
@@ -18359,7 +18356,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -18379,7 +18376,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -19142,7 +19139,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -19162,7 +19159,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -19922,7 +19919,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x38;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x20;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x68;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -19942,7 +19939,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x18;
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -20704,7 +20701,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x38;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x20;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x68;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -20724,7 +20721,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x18;
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
@@ -21483,7 +21480,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x30;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x1c;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x54;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x50;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x14;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -21502,8 +21499,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x4;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize = 0xc;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0xc;
|
||||
@@ -22262,7 +22258,7 @@ static constexpr dart::compiler::target::word
|
||||
AOT_KernelProgramInfo_InstanceSize = 0x60;
|
||||
static constexpr dart::compiler::target::word AOT_LanguageError_InstanceSize =
|
||||
0x30;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0xa0;
|
||||
static constexpr dart::compiler::target::word AOT_Library_InstanceSize = 0x98;
|
||||
static constexpr dart::compiler::target::word AOT_LibraryPrefix_InstanceSize =
|
||||
0x28;
|
||||
static constexpr dart::compiler::target::word AOT_LinkedHashBase_InstanceSize =
|
||||
@@ -22282,7 +22278,7 @@ static constexpr dart::compiler::target::word AOT_NativeArguments_StructSize =
|
||||
static constexpr dart::compiler::target::word AOT_Number_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_Object_InstanceSize = 0x8;
|
||||
static constexpr dart::compiler::target::word AOT_PatchClass_InstanceSize =
|
||||
0x20;
|
||||
0x18;
|
||||
static constexpr dart::compiler::target::word AOT_PcDescriptors_HeaderSize =
|
||||
0x10;
|
||||
static constexpr dart::compiler::target::word AOT_Pointer_InstanceSize = 0x18;
|
||||
|
||||
@@ -6241,11 +6241,10 @@ DART_EXPORT bool Dart_DetectNullSafety(const char* script_uri,
|
||||
// kernel file or the kernel file of the application,
|
||||
// figure out the null safety mode by sniffing the kernel file.
|
||||
if (kernel_buffer != nullptr) {
|
||||
const char* error = nullptr;
|
||||
std::unique_ptr<kernel::Program> program = kernel::Program::ReadFromBuffer(
|
||||
kernel_buffer, kernel_buffer_size, &error);
|
||||
if (program != nullptr) {
|
||||
return program->compilation_mode() == NNBDCompiledMode::kStrong;
|
||||
const auto null_safety =
|
||||
kernel::Program::DetectNullSafety(kernel_buffer, kernel_buffer_size);
|
||||
if (null_safety != NNBDCompiledMode::kInvalid) {
|
||||
return null_safety == NNBDCompiledMode::kStrong;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -825,7 +825,7 @@ bool IsolateGroupReloadContext::Reload(bool force_reload,
|
||||
kernel_program = kernel::Program::ReadFromFile(root_script_url);
|
||||
if (kernel_program != nullptr) {
|
||||
num_received_libs_ = kernel_program->library_count();
|
||||
bytes_received_libs_ = kernel_program->kernel_data_size();
|
||||
bytes_received_libs_ = kernel_program->binary().LengthInBytes();
|
||||
p_num_received_classes = &num_received_classes_;
|
||||
p_num_received_procedures = &num_received_procedures_;
|
||||
} else {
|
||||
@@ -854,10 +854,9 @@ bool IsolateGroupReloadContext::Reload(bool force_reload,
|
||||
|
||||
NoActiveIsolateScope no_active_isolate_scope;
|
||||
|
||||
ExternalTypedData& external_typed_data =
|
||||
ExternalTypedData::Handle(Z, kernel_program->typed_data()->ptr());
|
||||
IsolateGroupSource* source = IsolateGroup::Current()->source();
|
||||
source->add_loaded_blob(Z, external_typed_data);
|
||||
source->add_loaded_blob(Z,
|
||||
ExternalTypedData::Cast(kernel_program->binary()));
|
||||
|
||||
modified_libs_ = new (Z) BitVector(Z, num_old_libs_);
|
||||
kernel::KernelLoader::FindModifiedLibraries(
|
||||
|
||||
+50
-59
@@ -106,15 +106,12 @@ class KernelTokenPositionCollector : public KernelReaderHelper {
|
||||
Zone* zone,
|
||||
TranslationHelper* translation_helper,
|
||||
const Script& script,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataView& data,
|
||||
intptr_t data_program_offset,
|
||||
intptr_t initial_script_index,
|
||||
intptr_t record_for_script_id,
|
||||
GrowableArray<intptr_t>* record_token_positions_into)
|
||||
: KernelReaderHelper(zone,
|
||||
translation_helper,
|
||||
data,
|
||||
data_program_offset),
|
||||
: KernelReaderHelper(zone, translation_helper, data, data_program_offset),
|
||||
current_script_id_(initial_script_index),
|
||||
record_for_script_id_(record_for_script_id),
|
||||
record_token_positions_into_(record_token_positions_into) {}
|
||||
@@ -202,8 +199,8 @@ static ArrayPtr AsSortedDuplicateFreeArray(GrowableArray<intptr_t>* source) {
|
||||
return array_object.ptr();
|
||||
}
|
||||
|
||||
static void CollectKernelDataTokenPositions(
|
||||
const ExternalTypedData& kernel_data,
|
||||
static void CollectKernelLibraryTokenPositions(
|
||||
const TypedDataView& kernel_data,
|
||||
const Script& script,
|
||||
intptr_t kernel_offset,
|
||||
intptr_t data_kernel_offset,
|
||||
@@ -242,7 +239,7 @@ void Script::CollectTokenPositionsFor() const {
|
||||
Library& lib = Library::Handle(zone);
|
||||
Object& entry = Object::Handle(zone);
|
||||
Script& entry_script = Script::Handle(zone);
|
||||
ExternalTypedData& data = ExternalTypedData::Handle(zone);
|
||||
auto& data = TypedDataView::Handle(zone);
|
||||
|
||||
auto& interesting_script = *this;
|
||||
|
||||
@@ -255,7 +252,7 @@ void Script::CollectTokenPositionsFor() const {
|
||||
DictionaryIterator it(lib);
|
||||
while (it.HasNext()) {
|
||||
entry = it.GetNext();
|
||||
data = ExternalTypedData::null();
|
||||
data = TypedDataView::null();
|
||||
if (entry.IsClass()) {
|
||||
const Class& klass = Class::Cast(entry);
|
||||
if (klass.script() == interesting_script.ptr()) {
|
||||
@@ -274,11 +271,11 @@ void Script::CollectTokenPositionsFor() const {
|
||||
if (entry_script.ptr() != interesting_script.ptr()) {
|
||||
continue;
|
||||
}
|
||||
data = temp_field.KernelData();
|
||||
CollectKernelDataTokenPositions(
|
||||
data, interesting_script, temp_field.kernel_offset(),
|
||||
temp_field.KernelDataProgramOffset(), zone, &helper,
|
||||
&token_positions);
|
||||
data = temp_field.KernelLibrary();
|
||||
CollectKernelLibraryTokenPositions(data, interesting_script,
|
||||
temp_field.kernel_offset(),
|
||||
temp_field.KernelLibraryOffset(),
|
||||
zone, &helper, &token_positions);
|
||||
}
|
||||
temp_array = klass.current_functions();
|
||||
for (intptr_t i = 0; i < temp_array.Length(); ++i) {
|
||||
@@ -287,18 +284,18 @@ void Script::CollectTokenPositionsFor() const {
|
||||
if (entry_script.ptr() != interesting_script.ptr()) {
|
||||
continue;
|
||||
}
|
||||
data = temp_function.KernelData();
|
||||
CollectKernelDataTokenPositions(
|
||||
data = temp_function.KernelLibrary();
|
||||
CollectKernelLibraryTokenPositions(
|
||||
data, interesting_script, temp_function.kernel_offset(),
|
||||
temp_function.KernelDataProgramOffset(), zone, &helper,
|
||||
temp_function.KernelLibraryOffset(), zone, &helper,
|
||||
&token_positions);
|
||||
}
|
||||
} else {
|
||||
// Class isn't finalized yet: read the data attached to it.
|
||||
ASSERT(klass.kernel_offset() > 0);
|
||||
data = lib.kernel_data();
|
||||
data = lib.KernelLibrary();
|
||||
ASSERT(!data.IsNull());
|
||||
const intptr_t library_kernel_offset = lib.kernel_offset();
|
||||
const intptr_t library_kernel_offset = lib.KernelLibraryOffset();
|
||||
ASSERT(library_kernel_offset > 0);
|
||||
const intptr_t class_offset = klass.kernel_offset();
|
||||
|
||||
@@ -306,9 +303,9 @@ void Script::CollectTokenPositionsFor() const {
|
||||
if (entry_script.ptr() != interesting_script.ptr()) {
|
||||
continue;
|
||||
}
|
||||
CollectKernelDataTokenPositions(data, interesting_script,
|
||||
class_offset, library_kernel_offset,
|
||||
zone, &helper, &token_positions);
|
||||
CollectKernelLibraryTokenPositions(
|
||||
data, interesting_script, class_offset, library_kernel_offset,
|
||||
zone, &helper, &token_positions);
|
||||
}
|
||||
} else if (entry.IsFunction()) {
|
||||
temp_function ^= entry.ptr();
|
||||
@@ -316,11 +313,11 @@ void Script::CollectTokenPositionsFor() const {
|
||||
if (entry_script.ptr() != interesting_script.ptr()) {
|
||||
continue;
|
||||
}
|
||||
data = temp_function.KernelData();
|
||||
CollectKernelDataTokenPositions(data, interesting_script,
|
||||
temp_function.kernel_offset(),
|
||||
temp_function.KernelDataProgramOffset(),
|
||||
zone, &helper, &token_positions);
|
||||
data = temp_function.KernelLibrary();
|
||||
CollectKernelLibraryTokenPositions(data, interesting_script,
|
||||
temp_function.kernel_offset(),
|
||||
temp_function.KernelLibraryOffset(),
|
||||
zone, &helper, &token_positions);
|
||||
} else if (entry.IsField()) {
|
||||
const Field& field = Field::Cast(entry);
|
||||
if (field.kernel_offset() <= 0) {
|
||||
@@ -331,10 +328,10 @@ void Script::CollectTokenPositionsFor() const {
|
||||
if (entry_script.ptr() != interesting_script.ptr()) {
|
||||
continue;
|
||||
}
|
||||
data = field.KernelData();
|
||||
CollectKernelDataTokenPositions(
|
||||
data = field.KernelLibrary();
|
||||
CollectKernelLibraryTokenPositions(
|
||||
data, interesting_script, field.kernel_offset(),
|
||||
field.KernelDataProgramOffset(), zone, &helper, &token_positions);
|
||||
field.KernelLibraryOffset(), zone, &helper, &token_positions);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,8 +354,8 @@ ArrayPtr Script::CollectConstConstructorCoverageFrom() const {
|
||||
KernelProgramInfo::Handle(zone, kernel_program_info());
|
||||
helper.InitFromKernelProgramInfo(kernel_info);
|
||||
|
||||
ExternalTypedData& data =
|
||||
ExternalTypedData::Handle(zone, interesting_script.constant_coverage());
|
||||
const auto& data =
|
||||
TypedDataView::Handle(zone, interesting_script.constant_coverage());
|
||||
|
||||
kernel::KernelReaderHelper kernel_reader(zone, &helper, data, 0);
|
||||
|
||||
@@ -399,8 +396,8 @@ ObjectPtr EvaluateStaticConstFieldInitializer(const Field& field) {
|
||||
ActiveClassScope active_class_scope(&active_class, &owner_class);
|
||||
|
||||
KernelReaderHelper kernel_reader(
|
||||
zone, &helper, ExternalTypedData::Handle(zone, field.KernelData()),
|
||||
field.KernelDataProgramOffset());
|
||||
zone, &helper, TypedDataView::Handle(zone, field.KernelLibrary()),
|
||||
field.KernelLibraryOffset());
|
||||
kernel_reader.SetOffset(field.kernel_offset());
|
||||
ConstantReader constant_reader(&kernel_reader, &active_class);
|
||||
|
||||
@@ -418,13 +415,10 @@ class MetadataEvaluator : public KernelReaderHelper {
|
||||
public:
|
||||
MetadataEvaluator(Zone* zone,
|
||||
TranslationHelper* translation_helper,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataView& data,
|
||||
intptr_t data_program_offset,
|
||||
ActiveClass* active_class)
|
||||
: KernelReaderHelper(zone,
|
||||
translation_helper,
|
||||
data,
|
||||
data_program_offset),
|
||||
: KernelReaderHelper(zone, translation_helper, data, data_program_offset),
|
||||
constant_reader_(this, active_class) {}
|
||||
|
||||
ObjectPtr EvaluateMetadata(intptr_t kernel_offset,
|
||||
@@ -488,8 +482,8 @@ ObjectPtr EvaluateMetadata(const Library& library,
|
||||
ActiveClassScope active_class_scope(&active_class, &owner_class);
|
||||
|
||||
MetadataEvaluator metadata_evaluator(
|
||||
zone, &helper, ExternalTypedData::Handle(zone, library.kernel_data()),
|
||||
library.kernel_offset(), &active_class);
|
||||
zone, &helper, TypedDataView::Handle(zone, library.KernelLibrary()),
|
||||
library.KernelLibraryOffset(), &active_class);
|
||||
|
||||
return metadata_evaluator.EvaluateMetadata(kernel_offset,
|
||||
is_annotations_offset);
|
||||
@@ -503,13 +497,10 @@ class ParameterDescriptorBuilder : public KernelReaderHelper {
|
||||
public:
|
||||
ParameterDescriptorBuilder(TranslationHelper* translation_helper,
|
||||
Zone* zone,
|
||||
const ExternalTypedData& data,
|
||||
const TypedDataView& data,
|
||||
intptr_t data_program_offset,
|
||||
ActiveClass* active_class)
|
||||
: KernelReaderHelper(zone,
|
||||
translation_helper,
|
||||
data,
|
||||
data_program_offset),
|
||||
: KernelReaderHelper(zone, translation_helper, data, data_program_offset),
|
||||
constant_reader_(this, active_class) {}
|
||||
|
||||
ObjectPtr BuildParameterDescriptor(const Function& function);
|
||||
@@ -597,8 +588,8 @@ ObjectPtr BuildParameterDescriptor(const Function& function) {
|
||||
ActiveClassScope active_class_scope(&active_class, &owner_class);
|
||||
|
||||
ParameterDescriptorBuilder builder(
|
||||
&helper, zone, ExternalTypedData::Handle(zone, function.KernelData()),
|
||||
function.KernelDataProgramOffset(), &active_class);
|
||||
&helper, zone, TypedDataView::Handle(zone, function.KernelLibrary()),
|
||||
function.KernelLibraryOffset(), &active_class);
|
||||
|
||||
return builder.BuildParameterDescriptor(function);
|
||||
} else {
|
||||
@@ -624,8 +615,8 @@ void ReadParameterCovariance(const Function& function,
|
||||
|
||||
KernelReaderHelper reader_helper(
|
||||
zone, &translation_helper,
|
||||
ExternalTypedData::Handle(zone, function.KernelData()),
|
||||
function.KernelDataProgramOffset());
|
||||
TypedDataView::Handle(zone, function.KernelLibrary()),
|
||||
function.KernelLibraryOffset());
|
||||
|
||||
reader_helper.SetOffset(function.kernel_offset());
|
||||
reader_helper.ReadUntilFunctionNode();
|
||||
@@ -746,7 +737,7 @@ bool NeedsDynamicInvocationForwarder(const Function& function) {
|
||||
static ProcedureAttributesMetadata ProcedureAttributesOf(
|
||||
Zone* zone,
|
||||
const KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& kernel_data,
|
||||
const TypedDataView& kernel_data,
|
||||
intptr_t kernel_data_program_offset,
|
||||
intptr_t kernel_offset) {
|
||||
TranslationHelper translation_helper(Thread::Current());
|
||||
@@ -767,8 +758,8 @@ ProcedureAttributesMetadata ProcedureAttributesOf(const Function& function,
|
||||
KernelProgramInfo::Handle(zone, function.KernelProgramInfo());
|
||||
return ProcedureAttributesOf(
|
||||
zone, kernel_program_info,
|
||||
ExternalTypedData::Handle(zone, function.KernelData()),
|
||||
function.KernelDataProgramOffset(), function.kernel_offset());
|
||||
TypedDataView::Handle(zone, function.KernelLibrary()),
|
||||
function.KernelLibraryOffset(), function.kernel_offset());
|
||||
}
|
||||
|
||||
ProcedureAttributesMetadata ProcedureAttributesOf(const Field& field,
|
||||
@@ -777,14 +768,14 @@ ProcedureAttributesMetadata ProcedureAttributesOf(const Field& field,
|
||||
KernelProgramInfo::Handle(zone, field.KernelProgramInfo());
|
||||
return ProcedureAttributesOf(
|
||||
zone, kernel_program_info,
|
||||
ExternalTypedData::Handle(zone, field.KernelData()),
|
||||
field.KernelDataProgramOffset(), field.kernel_offset());
|
||||
TypedDataView::Handle(zone, field.KernelLibrary()),
|
||||
field.KernelLibraryOffset(), field.kernel_offset());
|
||||
}
|
||||
|
||||
static UnboxingInfoMetadata* UnboxingInfoMetadataOf(
|
||||
Zone* zone,
|
||||
const KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& kernel_data,
|
||||
const TypedDataView& kernel_data,
|
||||
intptr_t kernel_data_program_offset,
|
||||
intptr_t kernel_offset) {
|
||||
TranslationHelper translation_helper(Thread::Current());
|
||||
@@ -801,8 +792,8 @@ UnboxingInfoMetadata* UnboxingInfoMetadataOf(const Function& function,
|
||||
KernelProgramInfo::Handle(zone, function.KernelProgramInfo());
|
||||
return UnboxingInfoMetadataOf(
|
||||
zone, kernel_program_info,
|
||||
ExternalTypedData::Handle(zone, function.KernelData()),
|
||||
function.KernelDataProgramOffset(), function.kernel_offset());
|
||||
TypedDataView::Handle(zone, function.KernelLibrary()),
|
||||
function.KernelLibraryOffset(), function.kernel_offset());
|
||||
}
|
||||
|
||||
TableSelectorMetadata* TableSelectorMetadataForProgram(
|
||||
@@ -810,7 +801,7 @@ TableSelectorMetadata* TableSelectorMetadataForProgram(
|
||||
Zone* zone) {
|
||||
TranslationHelper translation_helper(Thread::Current());
|
||||
translation_helper.InitFromKernelProgramInfo(info);
|
||||
const auto& data = ExternalTypedData::Handle(zone, info.metadata_payloads());
|
||||
const auto& data = TypedDataView::Handle(zone, info.metadata_payloads());
|
||||
KernelReaderHelper reader_helper(zone, &translation_helper, data, 0);
|
||||
TableSelectorMetadataHelper table_selector_metadata_helper(&reader_helper);
|
||||
return table_selector_metadata_helper.GetTableSelectorMetadata(zone);
|
||||
|
||||
+7
-16
@@ -59,18 +59,11 @@ class StringIndex {
|
||||
|
||||
enum LogicalOperator { kAnd, kOr };
|
||||
|
||||
struct ProgramBinary {
|
||||
ProgramBinary SubView(intptr_t start, intptr_t end) const {
|
||||
return {typed_data, kernel_data + start, end - start};
|
||||
}
|
||||
|
||||
const ExternalTypedData* typed_data;
|
||||
const uint8_t* kernel_data;
|
||||
intptr_t kernel_data_size;
|
||||
};
|
||||
|
||||
class Program {
|
||||
public:
|
||||
static NNBDCompiledMode DetectNullSafety(const uint8_t* buffer,
|
||||
intptr_t buffer_length);
|
||||
|
||||
// Read a kernel Program from the given Reader. Note the returned Program
|
||||
// can potentially contain several "sub programs", though the library count
|
||||
// etc will reference the last "sub program" only.
|
||||
@@ -101,13 +94,11 @@ class Program {
|
||||
intptr_t library_count() { return library_count_; }
|
||||
NNBDCompiledMode compilation_mode() const { return compilation_mode_; }
|
||||
|
||||
const ProgramBinary& binary() const { return binary_; }
|
||||
const ExternalTypedData* typed_data() { return binary().typed_data; }
|
||||
const uint8_t* kernel_data() { return binary().kernel_data; }
|
||||
intptr_t kernel_data_size() { return binary().kernel_data_size; }
|
||||
// The data of the kernel file (single or multiple encoded components).
|
||||
const TypedDataBase& binary() { return *binary_; }
|
||||
|
||||
private:
|
||||
Program() : binary_() {}
|
||||
explicit Program(const TypedDataBase* binary) : binary_(binary) {}
|
||||
|
||||
bool single_program_;
|
||||
NameIndex main_method_reference_; // Procedure.
|
||||
@@ -135,7 +126,7 @@ class Program {
|
||||
// The offset from the start of the binary to the start of the string table.
|
||||
intptr_t string_table_offset_;
|
||||
|
||||
ProgramBinary binary_;
|
||||
const TypedDataBase* binary_ = nullptr;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(Program);
|
||||
};
|
||||
|
||||
+27
-13
@@ -76,6 +76,23 @@ const char* kKernelInvalidSdkHash = "Invalid SDK hash";
|
||||
const int kSdkHashSizeInBytes = 10;
|
||||
const char* kSdkHashNull = "0000000000";
|
||||
|
||||
bool IsValidSdkHash(const uint8_t* sdk_hash) {
|
||||
if (memcmp(Version::SdkHash(), kSdkHashNull, kSdkHashSizeInBytes) != 0 &&
|
||||
memcmp(sdk_hash, kSdkHashNull, kSdkHashSizeInBytes) != 0 &&
|
||||
memcmp(sdk_hash, Version::SdkHash(), kSdkHashSizeInBytes) != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
NNBDCompiledMode Program::DetectNullSafety(const uint8_t* buffer,
|
||||
intptr_t buffer_length) {
|
||||
Reader reader(buffer, buffer_length);
|
||||
std::unique_ptr<Program> program = Program::ReadFrom(&reader, nullptr);
|
||||
if (program == nullptr) return NNBDCompiledMode::kInvalid;
|
||||
return program->compilation_mode_;
|
||||
}
|
||||
|
||||
std::unique_ptr<Program> Program::ReadFrom(Reader* reader, const char** error) {
|
||||
if (reader->size() < 70) {
|
||||
// A kernel file (v43) currently contains at least the following:
|
||||
@@ -115,22 +132,15 @@ std::unique_ptr<Program> Program::ReadFrom(Reader* reader, const char** error) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint8_t sdkHash[kSdkHashSizeInBytes + 1];
|
||||
reader->ReadBytes(sdkHash, kSdkHashSizeInBytes);
|
||||
sdkHash[kSdkHashSizeInBytes] = 0; // Null terminate.
|
||||
if (strcmp(Version::SdkHash(), kSdkHashNull) != 0 &&
|
||||
strcmp((const char*)sdkHash, kSdkHashNull) != 0 &&
|
||||
strcmp((const char*)sdkHash, Version::SdkHash()) != 0) {
|
||||
if (!IsValidSdkHash(reader->BufferAt(reader->offset()))) {
|
||||
if (error != nullptr) {
|
||||
*error = kKernelInvalidSdkHash;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
reader->set_offset(reader->offset() + kSdkHashSizeInBytes);
|
||||
|
||||
std::unique_ptr<Program> program(new Program());
|
||||
program->binary_.typed_data = reader->typed_data();
|
||||
program->binary_.kernel_data = reader->buffer();
|
||||
program->binary_.kernel_data_size = reader->size();
|
||||
std::unique_ptr<Program> program(new Program(reader->typed_data()));
|
||||
|
||||
// Dill files can be concatenated (e.g. cat a.dill b.dill > c.dill). Find out
|
||||
// if this dill contains more than one program.
|
||||
@@ -195,8 +205,7 @@ std::unique_ptr<Program> Program::ReadFromFile(
|
||||
const Object& ret = Object::Handle(isolate_group->CallTagHandler(
|
||||
Dart_kKernelTag, Object::null_object(), uri));
|
||||
if (ret.IsExternalTypedData()) {
|
||||
const auto& typed_data = ExternalTypedData::Handle(
|
||||
thread->zone(), ExternalTypedData::RawCast(ret.ptr()));
|
||||
const auto& typed_data = ExternalTypedData::Cast(ret);
|
||||
kernel_program = kernel::Program::ReadFromTypedData(typed_data);
|
||||
return kernel_program;
|
||||
} else if (error != nullptr) {
|
||||
@@ -213,7 +222,12 @@ std::unique_ptr<Program> Program::ReadFromFile(
|
||||
std::unique_ptr<Program> Program::ReadFromBuffer(const uint8_t* buffer,
|
||||
intptr_t buffer_length,
|
||||
const char** error) {
|
||||
kernel::Reader reader(buffer, buffer_length);
|
||||
// Whoever called this method (e.g. embedder) has to ensure the buffer stays
|
||||
// alive until the VM is done with the last usage (e.g. isolate shutdown).
|
||||
const auto& binary = ExternalTypedData::Handle(ExternalTypedData::New(
|
||||
kExternalTypedDataUint8ArrayCid, const_cast<uint8_t*>(buffer),
|
||||
buffer_length, Heap::kNew));
|
||||
kernel::Reader reader(binary);
|
||||
return kernel::Program::ReadFrom(&reader, error);
|
||||
}
|
||||
|
||||
|
||||
+58
-72
@@ -275,19 +275,11 @@ static constexpr int HeaderSize = 8; // 'magic', 'formatVersion'.
|
||||
|
||||
class Reader : public ValueObject {
|
||||
public:
|
||||
explicit Reader(const ProgramBinary& binary)
|
||||
: Reader(binary.kernel_data, binary.kernel_data_size) {
|
||||
// Make sure to link any Program / KernelProgramInfo objects created
|
||||
// from this reader back to originating typed data to keep it alive.
|
||||
set_typed_data(binary.typed_data);
|
||||
explicit Reader(const TypedDataBase& typed_data)
|
||||
: thread_(Thread::Current()), typed_data_(&typed_data) {
|
||||
Init();
|
||||
}
|
||||
|
||||
explicit Reader(const ExternalTypedData& typed_data)
|
||||
: thread_(Thread::Current()),
|
||||
raw_buffer_(nullptr),
|
||||
typed_data_(&typed_data),
|
||||
size_(typed_data.IsNull() ? 0 : typed_data.Length()) {}
|
||||
|
||||
uint32_t ReadFromIndex(intptr_t end_offset,
|
||||
intptr_t fields_before,
|
||||
intptr_t list_size,
|
||||
@@ -295,19 +287,14 @@ class Reader : public ValueObject {
|
||||
intptr_t org_offset = offset();
|
||||
uint32_t result =
|
||||
ReadFromIndexNoReset(end_offset, fields_before, list_size, list_index);
|
||||
set_offset(org_offset);
|
||||
offset_ = org_offset;
|
||||
return result;
|
||||
}
|
||||
|
||||
uint32_t ReadUInt32At(intptr_t offset) const {
|
||||
ASSERT((size_ >= 4) && (offset >= 0) && (offset <= size_ - 4));
|
||||
uint32_t value;
|
||||
if (raw_buffer_ != nullptr) {
|
||||
value = LoadUnaligned(
|
||||
reinterpret_cast<const uint32_t*>(raw_buffer_ + offset));
|
||||
} else {
|
||||
value = typed_data_->GetUint32(offset);
|
||||
}
|
||||
uint32_t value =
|
||||
LoadUnaligned(reinterpret_cast<const uint32_t*>(raw_buffer_ + offset));
|
||||
return Utils::BigEndianToHost32(value);
|
||||
}
|
||||
|
||||
@@ -315,7 +302,7 @@ class Reader : public ValueObject {
|
||||
intptr_t fields_before,
|
||||
intptr_t list_size,
|
||||
intptr_t list_index) {
|
||||
set_offset(end_offset - (fields_before + list_size - list_index) * 4);
|
||||
offset_ = end_offset - (fields_before + list_size - list_index) * 4;
|
||||
return ReadUInt32();
|
||||
}
|
||||
|
||||
@@ -327,8 +314,8 @@ class Reader : public ValueObject {
|
||||
|
||||
double ReadDouble() {
|
||||
ASSERT((size_ >= 8) && (offset_ >= 0) && (offset_ <= size_ - 8));
|
||||
double value = LoadUnaligned(
|
||||
reinterpret_cast<const double*>(&this->buffer()[offset_]));
|
||||
double value =
|
||||
LoadUnaligned(reinterpret_cast<const double*>(&raw_buffer_[offset_]));
|
||||
offset_ += 8;
|
||||
return value;
|
||||
}
|
||||
@@ -336,7 +323,7 @@ class Reader : public ValueObject {
|
||||
uint32_t ReadUInt() {
|
||||
ASSERT((size_ >= 1) && (offset_ >= 0) && (offset_ <= size_ - 1));
|
||||
|
||||
const uint8_t* buffer = this->buffer();
|
||||
const uint8_t* buffer = raw_buffer_;
|
||||
uint8_t byte0 = buffer[offset_];
|
||||
if ((byte0 & 0x80) == 0) {
|
||||
// 0...
|
||||
@@ -359,14 +346,14 @@ class Reader : public ValueObject {
|
||||
}
|
||||
|
||||
intptr_t ReadSLEB128() {
|
||||
ReadStream stream(this->buffer(), size_, offset_);
|
||||
ReadStream stream(raw_buffer_, size_, offset_);
|
||||
const intptr_t result = stream.ReadSLEB128();
|
||||
offset_ = stream.Position();
|
||||
return result;
|
||||
}
|
||||
|
||||
int64_t ReadSLEB128AsInt64() {
|
||||
ReadStream stream(this->buffer(), size_, offset_);
|
||||
ReadStream stream(raw_buffer_, size_, offset_);
|
||||
const int64_t result = stream.ReadSLEB128<int64_t>();
|
||||
offset_ = stream.Position();
|
||||
return result;
|
||||
@@ -387,9 +374,9 @@ class Reader : public ValueObject {
|
||||
|
||||
intptr_t ReadListLength() { return ReadUInt(); }
|
||||
|
||||
uint8_t ReadByte() { return buffer()[offset_++]; }
|
||||
uint8_t ReadByte() { return raw_buffer_[offset_++]; }
|
||||
|
||||
uint8_t PeekByte() { return buffer()[offset_]; }
|
||||
uint8_t PeekByte() { return raw_buffer_[offset_]; }
|
||||
|
||||
void ReadBytes(uint8_t* buffer, uint8_t size) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
@@ -476,52 +463,52 @@ class Reader : public ValueObject {
|
||||
// the root name as in the canonical name table.
|
||||
NameIndex ReadCanonicalNameReference() { return NameIndex(ReadUInt() - 1); }
|
||||
|
||||
const TypedDataBase* typed_data() { return typed_data_; }
|
||||
|
||||
intptr_t offset() const { return offset_; }
|
||||
void set_offset(intptr_t offset) { offset_ = offset; }
|
||||
|
||||
intptr_t size() const { return size_; }
|
||||
void set_size(intptr_t size) { size_ = size; }
|
||||
|
||||
const ExternalTypedData* typed_data() const { return typed_data_; }
|
||||
void set_typed_data(const ExternalTypedData* typed_data) {
|
||||
typed_data_ = typed_data;
|
||||
void set_offset(intptr_t offset) {
|
||||
ASSERT(offset < size_);
|
||||
offset_ = offset;
|
||||
}
|
||||
intptr_t size() const { return size_; }
|
||||
|
||||
const uint8_t* raw_buffer() const { return raw_buffer_; }
|
||||
void set_raw_buffer(const uint8_t* raw_buffer) { raw_buffer_ = raw_buffer; }
|
||||
|
||||
ExternalTypedDataPtr ExternalDataFromTo(intptr_t start, intptr_t end) {
|
||||
return ExternalTypedData::New(kExternalTypedDataUint8ArrayCid,
|
||||
const_cast<uint8_t*>(buffer() + start),
|
||||
end - start, Heap::kOld);
|
||||
TypedDataViewPtr ViewFromTo(intptr_t start, intptr_t end) {
|
||||
return typed_data_->ViewFromTo(start, end, Heap::kOld);
|
||||
}
|
||||
|
||||
const uint8_t* BufferAt(intptr_t offset) {
|
||||
ASSERT((offset >= 0) && (offset < size_));
|
||||
return &buffer()[offset];
|
||||
return &raw_buffer_[offset];
|
||||
}
|
||||
|
||||
TypedDataPtr ReadLineStartsData(intptr_t line_start_count);
|
||||
|
||||
private:
|
||||
friend class Program;
|
||||
friend class AlternativeReadingScopeWithNewData;
|
||||
friend class AlternativeReadingScope;
|
||||
|
||||
Reader(const uint8_t* buffer, intptr_t size)
|
||||
: thread_(nullptr),
|
||||
raw_buffer_(buffer),
|
||||
typed_data_(nullptr),
|
||||
size_(size) {}
|
||||
|
||||
const uint8_t* buffer() const {
|
||||
if (raw_buffer_ != nullptr) {
|
||||
return raw_buffer_;
|
||||
}
|
||||
NoSafepointScope no_safepoint(thread_);
|
||||
return reinterpret_cast<uint8_t*>(typed_data_->DataAddr(0));
|
||||
void Init() {
|
||||
ASSERT(typed_data_->IsExternalOrExternalView());
|
||||
raw_buffer_ = reinterpret_cast<uint8_t*>(typed_data_->DataAddr(0));
|
||||
size_ = typed_data_->LengthInBytes();
|
||||
offset_ = 0;
|
||||
}
|
||||
|
||||
Thread* thread_;
|
||||
const uint8_t* raw_buffer_;
|
||||
const ExternalTypedData* typed_data_;
|
||||
intptr_t size_;
|
||||
Thread* thread_ = nullptr;
|
||||
|
||||
// A external typed data or a view on an external typed data.
|
||||
const TypedDataBase* typed_data_ = nullptr;
|
||||
|
||||
// The raw data size/length of [typed_data_].
|
||||
const uint8_t* raw_buffer_ = nullptr;
|
||||
intptr_t size_ = 0;
|
||||
|
||||
intptr_t offset_ = 0;
|
||||
TokenPosition max_position_ = TokenPosition::kNoSource;
|
||||
TokenPosition min_position_ = TokenPosition::kNoSource;
|
||||
@@ -536,14 +523,14 @@ class Reader : public ValueObject {
|
||||
class AlternativeReadingScope {
|
||||
public:
|
||||
AlternativeReadingScope(Reader* reader, intptr_t new_position)
|
||||
: reader_(reader), saved_offset_(reader_->offset()) {
|
||||
reader_->set_offset(new_position);
|
||||
: reader_(reader), saved_offset_(reader_->offset_) {
|
||||
reader_->offset_ = new_position;
|
||||
}
|
||||
|
||||
explicit AlternativeReadingScope(Reader* reader)
|
||||
: reader_(reader), saved_offset_(reader_->offset()) {}
|
||||
: reader_(reader), saved_offset_(reader_->offset_) {}
|
||||
|
||||
~AlternativeReadingScope() { reader_->set_offset(saved_offset_); }
|
||||
~AlternativeReadingScope() { reader_->offset_ = saved_offset_; }
|
||||
|
||||
intptr_t saved_offset() { return saved_offset_; }
|
||||
|
||||
@@ -559,24 +546,23 @@ class AlternativeReadingScope {
|
||||
class AlternativeReadingScopeWithNewData {
|
||||
public:
|
||||
AlternativeReadingScopeWithNewData(Reader* reader,
|
||||
const ExternalTypedData* new_typed_data,
|
||||
const TypedDataBase* 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(nullptr);
|
||||
reader_->set_typed_data(new_typed_data);
|
||||
reader_->set_size(new_typed_data->Length());
|
||||
reader_->set_offset(new_position);
|
||||
saved_size_(reader_->size_),
|
||||
saved_raw_buffer_(reader_->raw_buffer_),
|
||||
saved_typed_data_(reader_->typed_data_),
|
||||
saved_offset_(reader_->offset_) {
|
||||
reader_->typed_data_ = new_typed_data;
|
||||
reader_->Init();
|
||||
reader_->offset_ = new_position;
|
||||
}
|
||||
|
||||
~AlternativeReadingScopeWithNewData() {
|
||||
reader_->set_raw_buffer(saved_raw_buffer_);
|
||||
reader_->set_typed_data(saved_typed_data_);
|
||||
reader_->set_size(saved_size_);
|
||||
reader_->set_offset(saved_offset_);
|
||||
reader_->raw_buffer_ = saved_raw_buffer_;
|
||||
reader_->typed_data_ = saved_typed_data_;
|
||||
reader_->size_ = saved_size_;
|
||||
reader_->offset_ = saved_offset_;
|
||||
}
|
||||
|
||||
intptr_t saved_offset() { return saved_offset_; }
|
||||
@@ -585,7 +571,7 @@ class AlternativeReadingScopeWithNewData {
|
||||
Reader* reader_;
|
||||
intptr_t saved_size_;
|
||||
const uint8_t* saved_raw_buffer_;
|
||||
const ExternalTypedData* saved_typed_data_;
|
||||
const TypedDataBase* saved_typed_data_;
|
||||
intptr_t saved_offset_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(AlternativeReadingScopeWithNewData);
|
||||
|
||||
+67
-73
@@ -149,7 +149,7 @@ ClassPtr BuildingTranslationHelper::LookupClassByKernelClass(NameIndex klass,
|
||||
return loader_->LookupClass(library_lookup_handle_, klass);
|
||||
}
|
||||
|
||||
LibraryIndex::LibraryIndex(const ExternalTypedData& kernel_data)
|
||||
LibraryIndex::LibraryIndex(const TypedDataView& kernel_data)
|
||||
: reader_(kernel_data) {
|
||||
intptr_t data_size = reader_.size();
|
||||
|
||||
@@ -163,14 +163,7 @@ LibraryIndex::LibraryIndex(const ExternalTypedData& kernel_data)
|
||||
source_references_offset_ = reader_.ReadUInt32At(class_index_offset_ - 4);
|
||||
}
|
||||
|
||||
ClassIndex::ClassIndex(const ProgramBinary& binary,
|
||||
intptr_t class_offset,
|
||||
intptr_t class_size)
|
||||
: reader_(binary) {
|
||||
Init(class_offset, class_size);
|
||||
}
|
||||
|
||||
ClassIndex::ClassIndex(const ExternalTypedData& library_kernel_data,
|
||||
ClassIndex::ClassIndex(const TypedDataBase& library_kernel_data,
|
||||
intptr_t class_offset,
|
||||
intptr_t class_size)
|
||||
: reader_(library_kernel_data) {
|
||||
@@ -196,7 +189,7 @@ KernelLoader::KernelLoader(Program* program,
|
||||
library_kernel_offset_(-1), // Set to the correct value in LoadLibrary
|
||||
correction_offset_(-1), // Set to the correct value in LoadLibrary
|
||||
loading_native_wrappers_library_(false),
|
||||
library_kernel_data_(ExternalTypedData::ZoneHandle(zone_)),
|
||||
library_kernel_data_(TypedDataView::ZoneHandle(zone_)),
|
||||
kernel_program_info_(KernelProgramInfo::ZoneHandle(zone_)),
|
||||
translation_helper_(this, thread_, Heap::kOld),
|
||||
helper_(zone_,
|
||||
@@ -244,9 +237,11 @@ Object& KernelLoader::LoadEntireProgram(Program* program,
|
||||
return Object::Handle(loader.LoadProgram(process_pending_classes));
|
||||
}
|
||||
|
||||
kernel::Reader reader(program->binary());
|
||||
GrowableArray<intptr_t> subprogram_file_starts;
|
||||
index_programs(&reader, &subprogram_file_starts);
|
||||
{
|
||||
kernel::Reader reader(program->binary());
|
||||
index_programs(&reader, &subprogram_file_starts);
|
||||
}
|
||||
|
||||
Zone* zone = thread->zone();
|
||||
Library& library = Library::Handle(zone);
|
||||
@@ -255,15 +250,15 @@ Object& KernelLoader::LoadEntireProgram(Program* program,
|
||||
// First index all source tables.
|
||||
UriToSourceTable uri_to_source_table;
|
||||
UriToSourceTableEntry wrapper;
|
||||
Thread* thread_ = Thread::Current();
|
||||
Zone* zone_ = thread_->zone();
|
||||
for (intptr_t i = subprogram_count - 1; i >= 0; --i) {
|
||||
intptr_t subprogram_start = subprogram_file_starts.At(i);
|
||||
intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
|
||||
Thread* thread_ = Thread::Current();
|
||||
Zone* zone_ = thread_->zone();
|
||||
const auto& component = TypedDataBase::Handle(
|
||||
program->binary().ViewFromTo(subprogram_start, subprogram_end));
|
||||
TranslationHelper translation_helper(thread);
|
||||
KernelReaderHelper helper_(
|
||||
zone_, &translation_helper,
|
||||
program->binary().SubView(subprogram_start, subprogram_end), 0); // ,
|
||||
KernelReaderHelper helper_(zone_, &translation_helper, component, 0);
|
||||
const intptr_t source_table_size = helper_.SourceTableSize();
|
||||
for (intptr_t index = 0; index < source_table_size; ++index) {
|
||||
const String& uri_string = helper_.SourceTableUriFor(index);
|
||||
@@ -305,9 +300,9 @@ Object& KernelLoader::LoadEntireProgram(Program* program,
|
||||
for (intptr_t i = subprogram_count - 1; i >= 0; --i) {
|
||||
intptr_t subprogram_start = subprogram_file_starts.At(i);
|
||||
intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
|
||||
reader.set_raw_buffer(program->kernel_data() + subprogram_start);
|
||||
reader.set_size(subprogram_end - subprogram_start);
|
||||
reader.set_offset(0);
|
||||
const auto& component = TypedDataBase::Handle(
|
||||
program->binary().ViewFromTo(subprogram_start, subprogram_end));
|
||||
Reader reader(component);
|
||||
const char* error = nullptr;
|
||||
std::unique_ptr<Program> subprogram = Program::ReadFrom(&reader, &error);
|
||||
if (subprogram == nullptr) {
|
||||
@@ -355,13 +350,13 @@ void KernelLoader::index_programs(
|
||||
StringPtr KernelLoader::FindSourceForScript(const uint8_t* kernel_buffer,
|
||||
intptr_t kernel_buffer_length,
|
||||
const String& uri) {
|
||||
const auto& binary = ExternalTypedData::Handle(ExternalTypedData::New(
|
||||
kExternalTypedDataUint8ArrayCid, const_cast<uint8_t*>(kernel_buffer),
|
||||
kernel_buffer_length, Heap::kNew));
|
||||
|
||||
Thread* thread = Thread::Current();
|
||||
Zone* zone = thread->zone();
|
||||
TranslationHelper translation_helper(thread);
|
||||
// Note: it is okay to have typed_data be nullptr here because we are not
|
||||
// creating any long living views into the kernel_buffer.
|
||||
const ProgramBinary binary = {/*typed_data=*/nullptr, kernel_buffer,
|
||||
kernel_buffer_length};
|
||||
KernelReaderHelper reader(zone, &translation_helper, binary, 0);
|
||||
intptr_t source_table_size = reader.SourceTableSize();
|
||||
for (intptr_t i = 0; i < source_table_size; ++i) {
|
||||
@@ -378,12 +373,14 @@ void KernelLoader::InitializeFields(UriToSourceTable* uri_to_source_table) {
|
||||
const Array& scripts =
|
||||
Array::Handle(Z, Array::New(source_table_size, Heap::kOld));
|
||||
|
||||
const auto& binary = program_->binary();
|
||||
|
||||
// Copy the Kernel string offsets out of the binary and into the VM's heap.
|
||||
ASSERT(program_->string_table_offset() >= 0);
|
||||
Reader reader(program_->binary());
|
||||
Reader reader(binary);
|
||||
reader.set_offset(program_->string_table_offset());
|
||||
intptr_t count = reader.ReadUInt() + 1;
|
||||
TypedData& offsets = TypedData::Handle(
|
||||
const auto& offsets = TypedData::Handle(
|
||||
Z, TypedData::New(kTypedDataUint32ArrayCid, count, Heap::kOld));
|
||||
offsets.SetUint32(0, 0);
|
||||
intptr_t end_offset = 0;
|
||||
@@ -393,15 +390,12 @@ void KernelLoader::InitializeFields(UriToSourceTable* uri_to_source_table) {
|
||||
}
|
||||
|
||||
// Create view of the string data.
|
||||
const ExternalTypedData& data = ExternalTypedData::Handle(
|
||||
Z,
|
||||
reader.ExternalDataFromTo(reader.offset(), reader.offset() + end_offset));
|
||||
const auto& string_data = TypedDataView::Handle(
|
||||
reader.ViewFromTo(reader.offset(), reader.offset() + end_offset));
|
||||
|
||||
// Create a view of the constants table (first part)
|
||||
// and the constant table index (second part).
|
||||
const ExternalTypedData& constants_table = ExternalTypedData::Handle(
|
||||
Z, reader.ExternalDataFromTo(program_->constant_table_offset(),
|
||||
program_->name_table_offset()));
|
||||
// Create a view of the constants table.
|
||||
const auto& constants_table = TypedDataView::Handle(reader.ViewFromTo(
|
||||
program_->constant_table_offset(), program_->name_table_offset()));
|
||||
|
||||
// Copy the canonical names into the VM's heap. Encode them as unsigned, so
|
||||
// the parent indexes are adjusted when extracted.
|
||||
@@ -414,15 +408,15 @@ void KernelLoader::InitializeFields(UriToSourceTable* uri_to_source_table) {
|
||||
}
|
||||
|
||||
// Create view of metadata payloads.
|
||||
const ExternalTypedData& metadata_payloads = ExternalTypedData::Handle(
|
||||
Z, reader.ExternalDataFromTo(program_->metadata_payloads_offset(),
|
||||
program_->metadata_mappings_offset()));
|
||||
const auto& metadata_payloads = TypedDataView::Handle(
|
||||
reader.ViewFromTo(program_->metadata_payloads_offset(),
|
||||
program_->metadata_mappings_offset()));
|
||||
|
||||
ASSERT(Utils::IsAligned(metadata_payloads.DataAddr(0), kWordSize));
|
||||
|
||||
// Create view of metadata mappings.
|
||||
const ExternalTypedData& metadata_mappings = ExternalTypedData::Handle(
|
||||
Z, reader.ExternalDataFromTo(program_->metadata_mappings_offset(),
|
||||
program_->string_table_offset()));
|
||||
const auto& metadata_mappings = TypedDataView::Handle(reader.ViewFromTo(
|
||||
program_->metadata_mappings_offset(), program_->string_table_offset()));
|
||||
|
||||
#if defined(DEBUG)
|
||||
MetadataHelper::VerifyMetadataMappings(metadata_mappings);
|
||||
@@ -438,10 +432,8 @@ void KernelLoader::InitializeFields(UriToSourceTable* uri_to_source_table) {
|
||||
kClassesPerLibraryGuess * program_->library_count(), Heap::kOld));
|
||||
|
||||
kernel_program_info_ = KernelProgramInfo::New(
|
||||
offsets, data, names, metadata_payloads, metadata_mappings,
|
||||
constants_table, scripts, libraries_cache, classes_cache,
|
||||
program_->typed_data() == nullptr ? Object::null_object()
|
||||
: *program_->typed_data());
|
||||
binary, string_data, metadata_payloads, metadata_mappings,
|
||||
constants_table, offsets, names, scripts, libraries_cache, classes_cache);
|
||||
|
||||
H.InitFromKernelProgramInfo(kernel_program_info_);
|
||||
|
||||
@@ -453,7 +445,7 @@ void KernelLoader::InitializeFields(UriToSourceTable* uri_to_source_table) {
|
||||
}
|
||||
|
||||
KernelLoader::KernelLoader(const KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& kernel_data,
|
||||
const TypedDataBase& kernel_data,
|
||||
intptr_t data_program_offset)
|
||||
: program_(nullptr),
|
||||
thread_(Thread::Current()),
|
||||
@@ -463,7 +455,7 @@ KernelLoader::KernelLoader(const KernelProgramInfo& kernel_program_info,
|
||||
library_kernel_offset_(data_program_offset),
|
||||
correction_offset_(0),
|
||||
loading_native_wrappers_library_(false),
|
||||
library_kernel_data_(ExternalTypedData::ZoneHandle(zone_)),
|
||||
library_kernel_data_(TypedDataView::ZoneHandle(zone_)),
|
||||
kernel_program_info_(
|
||||
KernelProgramInfo::ZoneHandle(zone_, kernel_program_info.ptr())),
|
||||
translation_helper_(this, thread_, Heap::kOld),
|
||||
@@ -482,7 +474,6 @@ KernelLoader::KernelLoader(const KernelProgramInfo& kernel_program_info,
|
||||
expression_evaluation_library_(Library::Handle(Z)) {
|
||||
ASSERT(T.active_class_ == &active_class_);
|
||||
T.finalize_ = false;
|
||||
library_kernel_data_ = kernel_data.ptr();
|
||||
H.InitFromKernelProgramInfo(kernel_program_info_);
|
||||
}
|
||||
|
||||
@@ -614,11 +605,9 @@ ObjectPtr KernelLoader::LoadExpressionEvaluationFunction(
|
||||
// kernel data and parent.
|
||||
const auto& eval_script = Script::Handle(Z, function.script());
|
||||
ASSERT(!expression_evaluation_library_.IsNull());
|
||||
auto& kernel_data = ExternalTypedData::Handle(
|
||||
Z, expression_evaluation_library_.kernel_data());
|
||||
intptr_t kernel_offset = expression_evaluation_library_.kernel_offset();
|
||||
function.SetKernelDataAndEvalScript(eval_script, kernel_program_info_,
|
||||
kernel_data, kernel_offset);
|
||||
function.SetKernelLibraryAndEvalScript(
|
||||
eval_script, kernel_program_info_,
|
||||
expression_evaluation_library_.kernel_library_index());
|
||||
|
||||
function.set_owner(real_class);
|
||||
|
||||
@@ -678,18 +667,21 @@ void KernelLoader::FindModifiedLibraries(Program* program,
|
||||
loader.walk_incremental_kernel(modified_libs, is_empty_program,
|
||||
p_num_classes, p_num_procedures);
|
||||
}
|
||||
kernel::Reader reader(program->binary());
|
||||
|
||||
GrowableArray<intptr_t> subprogram_file_starts;
|
||||
index_programs(&reader, &subprogram_file_starts);
|
||||
{
|
||||
kernel::Reader reader(program->binary());
|
||||
index_programs(&reader, &subprogram_file_starts);
|
||||
}
|
||||
|
||||
// Create "fake programs" for each sub-program.
|
||||
intptr_t subprogram_count = subprogram_file_starts.length() - 1;
|
||||
for (intptr_t i = 0; i < subprogram_count; ++i) {
|
||||
intptr_t subprogram_start = subprogram_file_starts.At(i);
|
||||
intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
|
||||
reader.set_raw_buffer(program->kernel_data() + subprogram_start);
|
||||
reader.set_size(subprogram_end - subprogram_start);
|
||||
reader.set_offset(0);
|
||||
const auto& component = TypedDataBase::Handle(
|
||||
program->binary().ViewFromTo(subprogram_start, subprogram_end));
|
||||
Reader reader(component);
|
||||
const char* error = nullptr;
|
||||
std::unique_ptr<Program> subprogram = Program::ReadFrom(&reader, &error);
|
||||
if (subprogram == nullptr) {
|
||||
@@ -727,7 +719,7 @@ void KernelLoader::walk_incremental_kernel(BitVector* modified_libs,
|
||||
if (collect_library_stats) {
|
||||
intptr_t library_end = library_offset(i + 1);
|
||||
library_kernel_data_ =
|
||||
helper_.reader_.ExternalDataFromTo(kernel_offset, library_end);
|
||||
helper_.reader_.ViewFromTo(kernel_offset, library_end);
|
||||
LibraryIndex library_index(library_kernel_data_);
|
||||
num_classes += library_index.class_count();
|
||||
num_procedures += library_index.procedure_count();
|
||||
@@ -845,12 +837,16 @@ LibraryPtr KernelLoader::LoadLibrary(intptr_t index) {
|
||||
}
|
||||
library.set_nnbd_compiled_mode(mode);
|
||||
|
||||
library_kernel_data_ = helper_.reader_.ExternalDataFromTo(
|
||||
library_kernel_data_ = helper_.reader_.ViewFromTo(
|
||||
library_kernel_offset_, library_kernel_offset_ + library_size);
|
||||
library.set_kernel_data(library_kernel_data_);
|
||||
library.set_kernel_offset(library_kernel_offset_);
|
||||
library.set_kernel_library_index(index);
|
||||
library.set_kernel_program_info(kernel_program_info_);
|
||||
|
||||
const intptr_t start_offset =
|
||||
kernel_program_info_.KernelLibraryStartOffset(index);
|
||||
const intptr_t end_offset =
|
||||
kernel_program_info_.KernelLibraryEndOffset(index);
|
||||
library_kernel_data_ = helper_.reader_.ViewFromTo(start_offset, end_offset);
|
||||
LibraryIndex library_index(library_kernel_data_);
|
||||
intptr_t class_count = library_index.class_count();
|
||||
|
||||
@@ -1685,17 +1681,18 @@ void KernelLoader::FinishLoading(const Class& klass) {
|
||||
Zone* zone = Thread::Current()->zone();
|
||||
const Library& library = Library::Handle(zone, klass.library());
|
||||
const Class& toplevel_class = Class::Handle(zone, library.toplevel_class());
|
||||
const ExternalTypedData& library_kernel_data =
|
||||
ExternalTypedData::Handle(zone, library.kernel_data());
|
||||
const auto& library_kernel_data =
|
||||
TypedDataView::Handle(zone, library.KernelLibrary());
|
||||
ASSERT(!library_kernel_data.IsNull());
|
||||
const intptr_t library_kernel_offset = library.kernel_offset();
|
||||
ASSERT(library_kernel_offset > 0);
|
||||
|
||||
auto& kernel_info =
|
||||
const auto& kernel_info =
|
||||
KernelProgramInfo::Handle(zone, klass.KernelProgramInfo());
|
||||
const intptr_t library_kernel_offset =
|
||||
kernel_info.KernelLibraryStartOffset(library.kernel_library_index());
|
||||
|
||||
KernelLoader kernel_loader(kernel_info, library_kernel_data,
|
||||
library_kernel_offset);
|
||||
|
||||
LibraryIndex library_index(library_kernel_data);
|
||||
|
||||
if (klass.IsTopLevel()) {
|
||||
@@ -1930,11 +1927,10 @@ const Object& KernelLoader::ClassForScriptAt(const Class& klass,
|
||||
PatchClass& patch_class = PatchClass::ZoneHandle(Z);
|
||||
patch_class ^= patch_classes_.At(source_uri_index);
|
||||
if (patch_class.IsNull() || patch_class.wrapped_class() != klass.ptr()) {
|
||||
ASSERT(!library_kernel_data_.IsNull());
|
||||
const auto& lib = Library::Handle(klass.library());
|
||||
patch_class =
|
||||
PatchClass::New(klass, kernel_program_info_, correct_script);
|
||||
patch_class.set_library_kernel_data(library_kernel_data_);
|
||||
patch_class.set_library_kernel_offset(library_kernel_offset_);
|
||||
patch_class.set_kernel_library_index(lib.kernel_library_index());
|
||||
patch_classes_.SetAt(source_uri_index, patch_class);
|
||||
}
|
||||
return patch_class;
|
||||
@@ -1946,7 +1942,7 @@ ScriptPtr KernelLoader::LoadScriptAt(intptr_t index,
|
||||
UriToSourceTable* uri_to_source_table) {
|
||||
const String& uri_string = helper_.SourceTableUriFor(index);
|
||||
const String& import_uri_string = helper_.SourceTableImportUriFor(index);
|
||||
auto& constant_coverage = ExternalTypedData::Handle(Z);
|
||||
auto& constant_coverage = TypedDataView::Handle(Z);
|
||||
NOT_IN_PRODUCT(constant_coverage = helper_.GetConstantCoverageFor(index));
|
||||
|
||||
String& sources = String::Handle(Z);
|
||||
@@ -2234,9 +2230,7 @@ FunctionPtr CreateFieldInitializerFunction(Thread* thread,
|
||||
const PatchClass& initializer_owner = PatchClass::Handle(
|
||||
zone, PatchClass::New(field_owner, kernel_program_info, script));
|
||||
const Library& lib = Library::Handle(zone, field_owner.library());
|
||||
initializer_owner.set_library_kernel_data(
|
||||
ExternalTypedData::Handle(zone, lib.kernel_data()));
|
||||
initializer_owner.set_library_kernel_offset(lib.kernel_offset());
|
||||
initializer_owner.set_kernel_library_index(lib.kernel_library_index());
|
||||
|
||||
// Create a static initializer.
|
||||
FunctionType& signature = FunctionType::Handle(zone, FunctionType::New());
|
||||
|
||||
@@ -83,8 +83,7 @@ class Mapping {
|
||||
|
||||
class LibraryIndex {
|
||||
public:
|
||||
// |kernel_data| is the kernel data for one library alone.
|
||||
explicit LibraryIndex(const ExternalTypedData& kernel_data);
|
||||
explicit LibraryIndex(const TypedDataView& kernel_data);
|
||||
|
||||
intptr_t class_count() const { return class_count_; }
|
||||
intptr_t procedure_count() const { return procedure_count_; }
|
||||
@@ -123,15 +122,9 @@ class LibraryIndex {
|
||||
|
||||
class ClassIndex {
|
||||
public:
|
||||
// |class_offset| is the offset of class' kernel data in |buffer| of
|
||||
// size |size|. The size of the class' kernel data is |class_size|.
|
||||
ClassIndex(const ProgramBinary& binary,
|
||||
intptr_t class_offset,
|
||||
intptr_t class_size);
|
||||
|
||||
// |class_offset| is the offset of class' kernel data in |kernel_data|.
|
||||
// The size of the class' kernel data is |class_size|.
|
||||
ClassIndex(const ExternalTypedData& kernel_data,
|
||||
ClassIndex(const TypedDataBase& kernel_data,
|
||||
intptr_t class_offset,
|
||||
intptr_t class_size);
|
||||
|
||||
@@ -234,7 +227,7 @@ class KernelLoader : public ValueObject {
|
||||
bool* has_pragma_annotation);
|
||||
|
||||
KernelLoader(const KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& kernel_data,
|
||||
const TypedDataBase& kernel_data,
|
||||
intptr_t data_program_offset);
|
||||
|
||||
void InitializeFields(
|
||||
@@ -364,7 +357,7 @@ class KernelLoader : public ValueObject {
|
||||
|
||||
NameIndex skip_vmservice_library_;
|
||||
|
||||
ExternalTypedData& library_kernel_data_;
|
||||
TypedDataView& library_kernel_data_;
|
||||
KernelProgramInfo& kernel_program_info_;
|
||||
BuildingTranslationHelper translation_helper_;
|
||||
KernelReaderHelper helper_;
|
||||
|
||||
+145
-77
@@ -7833,7 +7833,7 @@ PatchClassPtr PatchClass::New(const Class& wrapped_class,
|
||||
NOT_IN_PRECOMPILED_RUNTIME(
|
||||
result.untag()->set_kernel_program_info(info.ptr()));
|
||||
result.set_script(script);
|
||||
result.set_library_kernel_offset(-1);
|
||||
result.set_kernel_library_index(-1);
|
||||
return result.ptr();
|
||||
}
|
||||
|
||||
@@ -7856,10 +7856,6 @@ void PatchClass::set_script(const Script& value) const {
|
||||
untag()->set_script(value.ptr());
|
||||
}
|
||||
|
||||
void PatchClass::set_library_kernel_data(const ExternalTypedData& data) const {
|
||||
untag()->set_library_kernel_data(data.ptr());
|
||||
}
|
||||
|
||||
uword Function::Hash() const {
|
||||
uword hash = String::HashRawSymbol(name());
|
||||
if (IsClosureFunction()) {
|
||||
@@ -8427,8 +8423,7 @@ void Function::SetForwardingTarget(const Function& target) const {
|
||||
// This field is heavily overloaded:
|
||||
// kernel eval function: Array[0] = Script
|
||||
// Array[1] = KernelProgramInfo
|
||||
// Array[2] = Kernel data
|
||||
// Array[3] = Kernel offset of enclosing library
|
||||
// Array[2] = Kernel index of enclosing library
|
||||
// method extractor: Function extracted closure function
|
||||
// implicit getter: Field
|
||||
// implicit setter: Field
|
||||
@@ -10664,19 +10659,17 @@ void Function::InheritKernelOffsetFrom(const Field& src) const {
|
||||
#endif
|
||||
}
|
||||
|
||||
void Function::SetKernelDataAndEvalScript(
|
||||
void Function::SetKernelLibraryAndEvalScript(
|
||||
const Script& script,
|
||||
const class KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& data,
|
||||
intptr_t offset) const {
|
||||
intptr_t index) const {
|
||||
Array& data_field = Array::Handle(
|
||||
Array::New(static_cast<intptr_t>(EvalFunctionData::kLength)));
|
||||
data_field.SetAt(static_cast<intptr_t>(EvalFunctionData::kScript), script);
|
||||
data_field.SetAt(static_cast<intptr_t>(EvalFunctionData::kKernelProgramInfo),
|
||||
kernel_program_info);
|
||||
data_field.SetAt(static_cast<intptr_t>(EvalFunctionData::kKernelData), data);
|
||||
data_field.SetAt(static_cast<intptr_t>(EvalFunctionData::kKernelOffset),
|
||||
Smi::Handle(Smi::New(offset)));
|
||||
data_field.SetAt(static_cast<intptr_t>(EvalFunctionData::kKernelLibraryIndex),
|
||||
Smi::Handle(Smi::New(index)));
|
||||
set_data(data_field);
|
||||
}
|
||||
|
||||
@@ -10734,51 +10727,44 @@ KernelProgramInfoPtr Function::KernelProgramInfo() const {
|
||||
}
|
||||
return PatchClass::Cast(owner).kernel_program_info();
|
||||
}
|
||||
#endif
|
||||
|
||||
ExternalTypedDataPtr Function::KernelData() const {
|
||||
if (is_eval_function()) {
|
||||
const auto& fdata = Array::Handle(Array::RawCast(data()));
|
||||
return ExternalTypedData::RawCast(
|
||||
fdata.At(static_cast<intptr_t>(EvalFunctionData::kKernelData)));
|
||||
}
|
||||
if (IsClosureFunction()) {
|
||||
Function& parent = Function::Handle(parent_function());
|
||||
ASSERT(!parent.IsNull());
|
||||
return parent.KernelData();
|
||||
}
|
||||
|
||||
const auto& owner = Object::Handle(RawOwner());
|
||||
if (owner.IsClass()) {
|
||||
return Library::Handle(Class::Cast(owner).library()).kernel_data();
|
||||
}
|
||||
return PatchClass::Cast(owner).library_kernel_data();
|
||||
TypedDataViewPtr Function::KernelLibrary() const {
|
||||
const auto& info = KernelProgramInfo::Handle(KernelProgramInfo());
|
||||
return info.KernelLibrary(KernelLibraryIndex());
|
||||
}
|
||||
|
||||
intptr_t Function::KernelDataProgramOffset() const {
|
||||
intptr_t Function::KernelLibraryOffset() const {
|
||||
const intptr_t kernel_library_index = KernelLibraryIndex();
|
||||
if (kernel_library_index == -1) return 0;
|
||||
const auto& info = KernelProgramInfo::Handle(KernelProgramInfo());
|
||||
return info.KernelLibraryStartOffset(kernel_library_index);
|
||||
}
|
||||
|
||||
intptr_t Function::KernelLibraryIndex() const {
|
||||
if (IsNoSuchMethodDispatcher() || IsInvokeFieldDispatcher() ||
|
||||
IsFfiTrampoline()) {
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
if (is_eval_function()) {
|
||||
const auto& fdata = Array::Handle(Array::RawCast(data()));
|
||||
return Smi::Value(static_cast<SmiPtr>(
|
||||
fdata.At(static_cast<intptr_t>(EvalFunctionData::kKernelOffset))));
|
||||
return Smi::Value(static_cast<SmiPtr>(fdata.At(
|
||||
static_cast<intptr_t>(EvalFunctionData::kKernelLibraryIndex))));
|
||||
}
|
||||
if (IsClosureFunction()) {
|
||||
Function& parent = Function::Handle(parent_function());
|
||||
const auto& parent = Function::Handle(parent_function());
|
||||
ASSERT(!parent.IsNull());
|
||||
return parent.KernelDataProgramOffset();
|
||||
return parent.KernelLibraryIndex();
|
||||
}
|
||||
|
||||
const Object& obj = Object::Handle(untag()->owner());
|
||||
const auto& obj = Object::Handle(untag()->owner());
|
||||
if (obj.IsClass()) {
|
||||
Library& lib = Library::Handle(Class::Cast(obj).library());
|
||||
return lib.kernel_offset();
|
||||
const auto& lib = Library::Handle(Class::Cast(obj).library());
|
||||
return lib.kernel_library_index();
|
||||
}
|
||||
ASSERT(obj.IsPatchClass());
|
||||
return PatchClass::Cast(obj).library_kernel_offset();
|
||||
return PatchClass::Cast(obj).kernel_library_index();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool Function::HasOptimizedCode() const {
|
||||
return HasCode() && Code::Handle(CurrentCode()).is_optimized();
|
||||
@@ -11699,20 +11685,6 @@ uint32_t Field::Hash() const {
|
||||
return String::HashRawSymbol(name());
|
||||
}
|
||||
|
||||
ExternalTypedDataPtr Field::KernelData() const {
|
||||
const Object& obj = Object::Handle(this->untag()->owner());
|
||||
// During background JIT compilation field objects are copied
|
||||
// and copy points to the original field via the owner field.
|
||||
if (obj.IsField()) {
|
||||
return Field::Cast(obj).KernelData();
|
||||
} else if (obj.IsClass()) {
|
||||
Library& library = Library::Handle(Class::Cast(obj).library());
|
||||
return library.kernel_data();
|
||||
}
|
||||
ASSERT(obj.IsPatchClass());
|
||||
return PatchClass::Cast(obj).library_kernel_data();
|
||||
}
|
||||
|
||||
void Field::InheritKernelOffsetFrom(const Field& src) const {
|
||||
#if defined(DART_PRECOMPILED_RUNTIME)
|
||||
UNREACHABLE();
|
||||
@@ -11721,19 +11693,33 @@ void Field::InheritKernelOffsetFrom(const Field& src) const {
|
||||
#endif
|
||||
}
|
||||
|
||||
intptr_t Field::KernelDataProgramOffset() const {
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
TypedDataViewPtr Field::KernelLibrary() const {
|
||||
const auto& info = KernelProgramInfo::Handle(KernelProgramInfo());
|
||||
return info.KernelLibrary(KernelLibraryIndex());
|
||||
}
|
||||
|
||||
intptr_t Field::KernelLibraryOffset() const {
|
||||
const intptr_t kernel_library_index = KernelLibraryIndex();
|
||||
if (kernel_library_index == -1) return 0;
|
||||
const auto& info = KernelProgramInfo::Handle(KernelProgramInfo());
|
||||
return info.KernelLibraryStartOffset(kernel_library_index);
|
||||
}
|
||||
|
||||
intptr_t Field::KernelLibraryIndex() const {
|
||||
const Object& obj = Object::Handle(untag()->owner());
|
||||
// During background JIT compilation field objects are copied
|
||||
// and copy points to the original field via the owner field.
|
||||
if (obj.IsField()) {
|
||||
return Field::Cast(obj).KernelDataProgramOffset();
|
||||
return Field::Cast(obj).KernelLibraryIndex();
|
||||
} else if (obj.IsClass()) {
|
||||
Library& lib = Library::Handle(Class::Cast(obj).library());
|
||||
return lib.kernel_offset();
|
||||
const auto& lib = Library::Handle(Class::Cast(obj).library());
|
||||
return lib.kernel_library_index();
|
||||
}
|
||||
ASSERT(obj.IsPatchClass());
|
||||
return PatchClass::Cast(obj).library_kernel_offset();
|
||||
return PatchClass::Cast(obj).kernel_library_index();
|
||||
}
|
||||
#endif // !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
||||
void Field::SetFieldTypeSafe(const AbstractType& value) const {
|
||||
ASSERT(IsOriginal());
|
||||
@@ -12917,7 +12903,7 @@ void Script::InitializeFromKernel(
|
||||
const KernelProgramInfo& info,
|
||||
intptr_t script_index,
|
||||
const TypedData& line_starts,
|
||||
const ExternalTypedData& constant_coverage) const {
|
||||
const TypedDataView& constant_coverage) const {
|
||||
StoreNonPointer(&untag()->kernel_script_index_, script_index);
|
||||
untag()->set_kernel_program_info(info.ptr());
|
||||
untag()->set_line_starts(line_starts.ptr());
|
||||
@@ -13010,7 +12996,7 @@ void Script::set_source(const String& value) const {
|
||||
}
|
||||
|
||||
#if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
ExternalTypedDataPtr Script::constant_coverage() const {
|
||||
TypedDataViewPtr Script::constant_coverage() const {
|
||||
return untag()->constant_coverage();
|
||||
}
|
||||
#endif // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
@@ -13401,12 +13387,18 @@ void Library::set_private_key(const String& key) const {
|
||||
void Library::set_kernel_program_info(const KernelProgramInfo& info) const {
|
||||
untag()->set_kernel_program_info(info.ptr());
|
||||
}
|
||||
#endif
|
||||
|
||||
void Library::set_kernel_data(const ExternalTypedData& data) const {
|
||||
untag()->set_kernel_data(data.ptr());
|
||||
TypedDataViewPtr Library::KernelLibrary() const {
|
||||
const auto& info = KernelProgramInfo::Handle(kernel_program_info());
|
||||
return info.KernelLibrary(kernel_library_index());
|
||||
}
|
||||
|
||||
intptr_t Library::KernelLibraryOffset() const {
|
||||
const auto& info = KernelProgramInfo::Handle(kernel_program_info());
|
||||
return info.KernelLibraryStartOffset(kernel_library_index());
|
||||
}
|
||||
#endif
|
||||
|
||||
void Library::set_loading_unit(const LoadingUnit& value) const {
|
||||
untag()->set_loading_unit(value.ptr());
|
||||
}
|
||||
@@ -14342,7 +14334,8 @@ LibraryPtr Library::NewLibraryHelper(const String& url, bool import_core_lib) {
|
||||
result.set_debuggable(true);
|
||||
}
|
||||
result.set_is_dart_scheme(dart_scheme);
|
||||
NOT_IN_PRECOMPILED(result.set_kernel_offset(0));
|
||||
NOT_IN_PRECOMPILED(
|
||||
result.StoreNonPointer(&result.untag()->kernel_library_index_, -1));
|
||||
result.StoreNonPointer(&result.untag()->load_state_,
|
||||
UntaggedLibrary::kAllocated);
|
||||
result.StoreNonPointer(&result.untag()->index_, -1);
|
||||
@@ -15180,18 +15173,24 @@ KernelProgramInfoPtr KernelProgramInfo::New() {
|
||||
}
|
||||
|
||||
KernelProgramInfoPtr KernelProgramInfo::New(
|
||||
const TypedDataBase& kernel_component,
|
||||
const TypedDataView& string_data,
|
||||
const TypedDataView& metadata_payloads,
|
||||
const TypedDataView& metadata_mappings,
|
||||
const TypedDataView& constants_table,
|
||||
const TypedData& string_offsets,
|
||||
const ExternalTypedData& string_data,
|
||||
const TypedData& canonical_names,
|
||||
const ExternalTypedData& metadata_payloads,
|
||||
const ExternalTypedData& metadata_mappings,
|
||||
const ExternalTypedData& constants_table,
|
||||
const Array& scripts,
|
||||
const Array& libraries_cache,
|
||||
const Array& classes_cache,
|
||||
const Object& retained_kernel_blob) {
|
||||
const KernelProgramInfo& info =
|
||||
KernelProgramInfo::Handle(KernelProgramInfo::New());
|
||||
const Array& classes_cache) {
|
||||
ASSERT(kernel_component.IsExternalOrExternalView());
|
||||
ASSERT(string_data.IsExternalOrExternalView());
|
||||
ASSERT(metadata_payloads.IsExternalOrExternalView());
|
||||
ASSERT(metadata_mappings.IsExternalOrExternalView());
|
||||
ASSERT(constants_table.IsExternalOrExternalView());
|
||||
|
||||
const auto& info = KernelProgramInfo::Handle(KernelProgramInfo::New());
|
||||
info.untag()->set_kernel_component(kernel_component.ptr());
|
||||
info.untag()->set_string_offsets(string_offsets.ptr());
|
||||
info.untag()->set_string_data(string_data.ptr());
|
||||
info.untag()->set_canonical_names(canonical_names.ptr());
|
||||
@@ -15201,7 +15200,6 @@ KernelProgramInfoPtr KernelProgramInfo::New(
|
||||
info.untag()->set_constants_table(constants_table.ptr());
|
||||
info.untag()->set_libraries_cache(libraries_cache.ptr());
|
||||
info.untag()->set_classes_cache(classes_cache.ptr());
|
||||
info.untag()->set_retained_kernel_blob(retained_kernel_blob.ptr());
|
||||
return info.ptr();
|
||||
}
|
||||
|
||||
@@ -15223,8 +15221,40 @@ void KernelProgramInfo::set_constants(const Array& constants) const {
|
||||
untag()->set_constants(constants.ptr());
|
||||
}
|
||||
|
||||
void KernelProgramInfo::set_constants_table(
|
||||
const ExternalTypedData& value) const {
|
||||
intptr_t KernelProgramInfo::KernelLibraryStartOffset(
|
||||
intptr_t library_index) const {
|
||||
const auto& blob = TypedDataBase::Handle(kernel_component());
|
||||
const intptr_t library_count =
|
||||
Utils::BigEndianToHost32(*reinterpret_cast<uint32_t*>(
|
||||
blob.DataAddr(blob.LengthInBytes() - 2 * 4)));
|
||||
const intptr_t library_start =
|
||||
Utils::BigEndianToHost32(*reinterpret_cast<uint32_t*>(
|
||||
blob.DataAddr(blob.LengthInBytes() -
|
||||
(2 + 1 + (library_count - library_index)) * 4)));
|
||||
return library_start;
|
||||
}
|
||||
|
||||
TypedDataViewPtr KernelProgramInfo::KernelLibrary(
|
||||
intptr_t library_index) const {
|
||||
const intptr_t start_offset = KernelLibraryStartOffset(library_index);
|
||||
const intptr_t end_offset = KernelLibraryEndOffset(library_index);
|
||||
const auto& component = TypedDataBase::Handle(kernel_component());
|
||||
return component.ViewFromTo(start_offset, end_offset);
|
||||
}
|
||||
|
||||
intptr_t KernelProgramInfo::KernelLibraryEndOffset(
|
||||
intptr_t library_index) const {
|
||||
const auto& blob = TypedDataBase::Handle(kernel_component());
|
||||
const intptr_t library_count =
|
||||
Utils::BigEndianToHost32(*reinterpret_cast<uint32_t*>(
|
||||
blob.DataAddr(blob.LengthInBytes() - 2 * 4)));
|
||||
const intptr_t library_end =
|
||||
Utils::BigEndianToHost32(*reinterpret_cast<uint32_t*>(blob.DataAddr(
|
||||
blob.LengthInBytes() - (2 + (library_count - library_index)) * 4)));
|
||||
return library_end;
|
||||
}
|
||||
|
||||
void KernelProgramInfo::set_constants_table(const TypedDataView& value) const {
|
||||
untag()->set_constants_table(value.ptr());
|
||||
}
|
||||
|
||||
@@ -26179,6 +26209,44 @@ TypedDataViewPtr TypedDataView::New(intptr_t class_id,
|
||||
return result.ptr();
|
||||
}
|
||||
|
||||
bool TypedDataBase::IsExternalOrExternalView() const {
|
||||
if (IsExternalTypedData()) return true;
|
||||
if (IsTypedDataView()) {
|
||||
const auto& backing =
|
||||
TypedDataBase::Handle(TypedDataView::Cast(*this).typed_data());
|
||||
return backing.IsExternalTypedData();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
TypedDataViewPtr TypedDataBase::ViewFromTo(intptr_t start,
|
||||
intptr_t end,
|
||||
Heap::Space space) const {
|
||||
const intptr_t len = end - start;
|
||||
ASSERT(0 <= len);
|
||||
ASSERT(start < Length());
|
||||
ASSERT((start + len) <= Length());
|
||||
|
||||
const intptr_t cid = GetClassId();
|
||||
|
||||
if (IsTypedDataView()) {
|
||||
const auto& view = TypedDataView::Cast(*this);
|
||||
const auto& td = TypedDataBase::Handle(view.typed_data());
|
||||
const intptr_t view_offset = Smi::Value(view.offset_in_bytes());
|
||||
ASSERT(IsTypedDataViewClassId(cid));
|
||||
return TypedDataView::New(cid, ExternalTypedData::Cast(td),
|
||||
view_offset + start, len, Heap::kOld);
|
||||
} else if (IsExternalTypedData()) {
|
||||
ASSERT(IsExternalTypedDataClassId(cid));
|
||||
ASSERT(IsTypedDataViewClassId(cid - 1));
|
||||
return TypedDataView::New(cid - 1, *this, start, len, Heap::kOld);
|
||||
}
|
||||
RELEASE_ASSERT(IsTypedData());
|
||||
ASSERT(IsExternalTypedDataClassId(cid));
|
||||
ASSERT(IsTypedDataViewClassId(cid + 1));
|
||||
return TypedDataView::New(cid + 1, *this, start, len, Heap::kOld);
|
||||
}
|
||||
|
||||
const char* TypedDataBase::ToCString() const {
|
||||
// There are no instances of RawTypedDataBase.
|
||||
UNREACHABLE();
|
||||
|
||||
+46
-41
@@ -2239,21 +2239,16 @@ class PatchClass : public Object {
|
||||
public:
|
||||
ClassPtr wrapped_class() const { return untag()->wrapped_class(); }
|
||||
ScriptPtr script() const { return untag()->script(); }
|
||||
ExternalTypedDataPtr library_kernel_data() const {
|
||||
return untag()->library_kernel_data();
|
||||
}
|
||||
void set_library_kernel_data(const ExternalTypedData& data) const;
|
||||
|
||||
intptr_t library_kernel_offset() const {
|
||||
intptr_t kernel_library_index() const {
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
return untag()->library_kernel_offset_;
|
||||
return untag()->kernel_library_index_;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
void set_library_kernel_offset(intptr_t offset) const {
|
||||
NOT_IN_PRECOMPILED(
|
||||
StoreNonPointer(&untag()->library_kernel_offset_, offset));
|
||||
void set_kernel_library_index(intptr_t index) const {
|
||||
NOT_IN_PRECOMPILED(StoreNonPointer(&untag()->kernel_library_index_, index));
|
||||
}
|
||||
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
@@ -3555,15 +3550,15 @@ class Function : public Object {
|
||||
set_optimized_call_site_count(value);
|
||||
}
|
||||
|
||||
void SetKernelDataAndEvalScript(
|
||||
void SetKernelLibraryAndEvalScript(
|
||||
const Script& script,
|
||||
const class KernelProgramInfo& kernel_program_info,
|
||||
const ExternalTypedData& data,
|
||||
intptr_t offset) const;
|
||||
intptr_t index) const;
|
||||
|
||||
intptr_t KernelDataProgramOffset() const;
|
||||
intptr_t KernelLibraryOffset() const;
|
||||
intptr_t KernelLibraryIndex() const;
|
||||
|
||||
ExternalTypedDataPtr KernelData() const;
|
||||
TypedDataViewPtr KernelLibrary() const;
|
||||
|
||||
bool IsOptimizable() const;
|
||||
void SetIsOptimizable(bool value) const;
|
||||
@@ -4229,8 +4224,7 @@ class Function : public Object {
|
||||
enum class EvalFunctionData {
|
||||
kScript,
|
||||
kKernelProgramInfo,
|
||||
kKernelData,
|
||||
kKernelOffset,
|
||||
kKernelLibraryIndex,
|
||||
kLength,
|
||||
};
|
||||
enum NativeFunctionData {
|
||||
@@ -4472,9 +4466,9 @@ class Field : public Object {
|
||||
|
||||
void InheritKernelOffsetFrom(const Field& src) const;
|
||||
|
||||
ExternalTypedDataPtr KernelData() const;
|
||||
|
||||
intptr_t KernelDataProgramOffset() const;
|
||||
TypedDataViewPtr KernelLibrary() const;
|
||||
intptr_t KernelLibraryOffset() const;
|
||||
intptr_t KernelLibraryIndex() const;
|
||||
|
||||
// Called during class finalization.
|
||||
inline void SetOffset(intptr_t host_offset_in_bytes,
|
||||
@@ -4908,7 +4902,7 @@ class Script : public Object {
|
||||
void InitializeFromKernel(const KernelProgramInfo& info,
|
||||
intptr_t script_index,
|
||||
const TypedData& line_starts,
|
||||
const ExternalTypedData& constant_coverage) const;
|
||||
const TypedDataView& constant_coverage) const;
|
||||
#endif
|
||||
|
||||
// The index of this script into the [KernelProgramInfo] object's source
|
||||
@@ -4922,7 +4916,7 @@ class Script : public Object {
|
||||
TypedDataPtr line_starts() const;
|
||||
|
||||
#if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
ExternalTypedDataPtr constant_coverage() const;
|
||||
TypedDataViewPtr constant_coverage() const;
|
||||
#endif // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
||||
LibraryPtr FindLibrary() const;
|
||||
@@ -5286,25 +5280,24 @@ class Library : public Object {
|
||||
return untag()->kernel_program_info();
|
||||
}
|
||||
void set_kernel_program_info(const KernelProgramInfo& info) const;
|
||||
TypedDataViewPtr KernelLibrary() const;
|
||||
intptr_t KernelLibraryOffset() const;
|
||||
#endif
|
||||
|
||||
ExternalTypedDataPtr kernel_data() const { return untag()->kernel_data(); }
|
||||
void set_kernel_data(const ExternalTypedData& data) const;
|
||||
|
||||
intptr_t kernel_offset() const {
|
||||
intptr_t kernel_library_index() const {
|
||||
#if defined(DART_PRECOMPILED_RUNTIME)
|
||||
return 0;
|
||||
#else
|
||||
return untag()->kernel_offset_;
|
||||
return untag()->kernel_library_index_;
|
||||
#endif
|
||||
}
|
||||
|
||||
void set_kernel_offset(intptr_t value) const {
|
||||
void set_kernel_library_index(intptr_t value) const {
|
||||
#if defined(DART_PRECOMPILED_RUNTIME)
|
||||
UNREACHABLE();
|
||||
#else
|
||||
ASSERT(value >= 0);
|
||||
StoreNonPointer(&untag()->kernel_offset_, value);
|
||||
StoreNonPointer(&untag()->kernel_library_index_, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -5473,16 +5466,16 @@ class Namespace : public Object {
|
||||
|
||||
class KernelProgramInfo : public Object {
|
||||
public:
|
||||
static KernelProgramInfoPtr New(const TypedData& string_offsets,
|
||||
const ExternalTypedData& string_data,
|
||||
static KernelProgramInfoPtr New(const TypedDataBase& kernel_component,
|
||||
const TypedDataView& string_data,
|
||||
const TypedDataView& metadata_payload,
|
||||
const TypedDataView& metadata_mappings,
|
||||
const TypedDataView& constants_table,
|
||||
const TypedData& string_offsets,
|
||||
const TypedData& canonical_names,
|
||||
const ExternalTypedData& metadata_payload,
|
||||
const ExternalTypedData& metadata_mappings,
|
||||
const ExternalTypedData& constants_table,
|
||||
const Array& scripts,
|
||||
const Array& libraries_cache,
|
||||
const Array& classes_cache,
|
||||
const Object& retained_kernel_blob);
|
||||
const Array& classes_cache);
|
||||
|
||||
static intptr_t InstanceSize() {
|
||||
return RoundedAllocationSize(sizeof(UntaggedKernelProgramInfo));
|
||||
@@ -5490,23 +5483,30 @@ class KernelProgramInfo : public Object {
|
||||
|
||||
TypedDataPtr string_offsets() const { return untag()->string_offsets(); }
|
||||
|
||||
ExternalTypedDataPtr string_data() const { return untag()->string_data(); }
|
||||
TypedDataBasePtr kernel_component() const {
|
||||
return untag()->kernel_component();
|
||||
}
|
||||
TypedDataViewPtr string_data() const { return untag()->string_data(); }
|
||||
|
||||
TypedDataPtr canonical_names() const { return untag()->canonical_names(); }
|
||||
|
||||
ExternalTypedDataPtr metadata_payloads() const {
|
||||
TypedDataViewPtr metadata_payloads() const {
|
||||
return untag()->metadata_payloads();
|
||||
}
|
||||
|
||||
ExternalTypedDataPtr metadata_mappings() const {
|
||||
TypedDataViewPtr metadata_mappings() const {
|
||||
return untag()->metadata_mappings();
|
||||
}
|
||||
|
||||
ExternalTypedDataPtr constants_table() const {
|
||||
intptr_t KernelLibraryStartOffset(intptr_t library_index) const;
|
||||
intptr_t KernelLibraryEndOffset(intptr_t library_index) const;
|
||||
TypedDataViewPtr KernelLibrary(intptr_t library_index) const;
|
||||
|
||||
TypedDataViewPtr constants_table() const {
|
||||
return untag()->constants_table();
|
||||
}
|
||||
|
||||
void set_constants_table(const ExternalTypedData& value) const;
|
||||
void set_constants_table(const TypedDataView& value) const;
|
||||
|
||||
ArrayPtr scripts() const { return untag()->scripts(); }
|
||||
void set_scripts(const Array& scripts) const;
|
||||
@@ -11659,6 +11659,11 @@ class TypedDataBase : public PointerBase {
|
||||
}
|
||||
}
|
||||
|
||||
bool IsExternalOrExternalView() const;
|
||||
TypedDataViewPtr ViewFromTo(intptr_t start,
|
||||
intptr_t end,
|
||||
Heap::Space space = Heap::kNew) const;
|
||||
|
||||
void* DataAddr(intptr_t byte_offset) const {
|
||||
ASSERT((byte_offset == 0) ||
|
||||
((byte_offset > 0) && (byte_offset < LengthInBytes())));
|
||||
@@ -11907,7 +11912,7 @@ class TypedDataView : public TypedDataBase {
|
||||
return OFFSET_OF(UntaggedTypedDataView, offset_in_bytes_);
|
||||
}
|
||||
|
||||
InstancePtr typed_data() const { return untag()->typed_data(); }
|
||||
TypedDataBasePtr typed_data() const { return untag()->typed_data(); }
|
||||
|
||||
void InitializeWith(const TypedDataBase& typed_data,
|
||||
intptr_t offset_in_bytes,
|
||||
|
||||
@@ -280,8 +280,7 @@ void Class::PatchFieldsAndFunctions() const {
|
||||
PatchClass::New(*this, kernel_info, Script::Handle(script())));
|
||||
ASSERT(!patch.IsNull());
|
||||
const Library& lib = Library::Handle(library());
|
||||
patch.set_library_kernel_data(ExternalTypedData::Handle(lib.kernel_data()));
|
||||
patch.set_library_kernel_offset(lib.kernel_offset());
|
||||
patch.set_kernel_library_index(lib.kernel_library_index());
|
||||
|
||||
const Array& funcs = Array::Handle(current_functions());
|
||||
Function& func = Function::Handle();
|
||||
|
||||
+25
-17
@@ -1167,10 +1167,10 @@ class UntaggedPatchClass : public UntaggedObject {
|
||||
COMPRESSED_POINTER_FIELD(ScriptPtr, script)
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
COMPRESSED_POINTER_FIELD(KernelProgramInfoPtr, kernel_program_info)
|
||||
VISIT_TO(kernel_program_info)
|
||||
#else
|
||||
VISIT_TO(script)
|
||||
#endif
|
||||
// A sub-view into the bytes of a kernel blob that encode the library.
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, library_kernel_data)
|
||||
VISIT_TO(library_kernel_data)
|
||||
|
||||
CompressedObjectPtr* to_snapshot(Snapshot::Kind kind) {
|
||||
switch (kind) {
|
||||
@@ -1179,7 +1179,12 @@ class UntaggedPatchClass : public UntaggedObject {
|
||||
case Snapshot::kFull:
|
||||
case Snapshot::kFullCore:
|
||||
case Snapshot::kFullJIT:
|
||||
return reinterpret_cast<CompressedObjectPtr*>(&library_kernel_data_);
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
return reinterpret_cast<CompressedObjectPtr*>(&kernel_program_info_);
|
||||
#else
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
#endif
|
||||
case Snapshot::kNone:
|
||||
case Snapshot::kInvalid:
|
||||
break;
|
||||
@@ -1188,7 +1193,7 @@ class UntaggedPatchClass : public UntaggedObject {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NOT_IN_PRECOMPILED(intptr_t library_kernel_offset_);
|
||||
NOT_IN_PRECOMPILED(intptr_t kernel_library_index_);
|
||||
|
||||
friend class Function;
|
||||
};
|
||||
@@ -1587,7 +1592,7 @@ class alignas(8) UntaggedScript : public UntaggedObject {
|
||||
COMPRESSED_POINTER_FIELD(StringPtr, resolved_url)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataPtr, line_starts)
|
||||
#if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, constant_coverage)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataViewPtr, constant_coverage)
|
||||
#endif // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
|
||||
COMPRESSED_POINTER_FIELD(ArrayPtr, debug_positions)
|
||||
COMPRESSED_POINTER_FIELD(KernelProgramInfoPtr, kernel_program_info)
|
||||
@@ -1690,8 +1695,6 @@ class UntaggedLibrary : public UntaggedObject {
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
COMPRESSED_POINTER_FIELD(KernelProgramInfoPtr, kernel_program_info)
|
||||
#endif
|
||||
// A sub-view into the bytes of a kernel blob that encode the library.
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, kernel_data)
|
||||
CompressedObjectPtr* to_snapshot(Snapshot::Kind kind) {
|
||||
switch (kind) {
|
||||
case Snapshot::kFullAOT:
|
||||
@@ -1699,7 +1702,12 @@ class UntaggedLibrary : public UntaggedObject {
|
||||
case Snapshot::kFull:
|
||||
case Snapshot::kFullCore:
|
||||
case Snapshot::kFullJIT:
|
||||
return reinterpret_cast<CompressedObjectPtr*>(&kernel_data_);
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
return reinterpret_cast<CompressedObjectPtr*>(&kernel_program_info_);
|
||||
#else
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
#endif
|
||||
case Snapshot::kNone:
|
||||
case Snapshot::kInvalid:
|
||||
break;
|
||||
@@ -1725,7 +1733,7 @@ class UntaggedLibrary : public UntaggedObject {
|
||||
uint8_t flags_; // BitField for LibraryFlags.
|
||||
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
uint32_t kernel_offset_;
|
||||
uint32_t kernel_library_index_;
|
||||
#endif // !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
||||
friend class Class;
|
||||
@@ -1767,19 +1775,19 @@ class UntaggedNamespace : public UntaggedObject {
|
||||
class UntaggedKernelProgramInfo : public UntaggedObject {
|
||||
RAW_HEAP_OBJECT_IMPLEMENTATION(KernelProgramInfo);
|
||||
|
||||
COMPRESSED_POINTER_FIELD(TypedDataBasePtr, kernel_component)
|
||||
VISIT_FROM(kernel_component)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataPtr, string_offsets)
|
||||
VISIT_FROM(string_offsets)
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, string_data)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataViewPtr, string_data)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataPtr, canonical_names)
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, metadata_payloads)
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, metadata_mappings)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataViewPtr, metadata_payloads)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataViewPtr, metadata_mappings)
|
||||
COMPRESSED_POINTER_FIELD(ArrayPtr, scripts)
|
||||
COMPRESSED_POINTER_FIELD(ArrayPtr, constants)
|
||||
COMPRESSED_POINTER_FIELD(ExternalTypedDataPtr, constants_table)
|
||||
COMPRESSED_POINTER_FIELD(TypedDataViewPtr, constants_table)
|
||||
COMPRESSED_POINTER_FIELD(ArrayPtr, libraries_cache)
|
||||
COMPRESSED_POINTER_FIELD(ArrayPtr, classes_cache)
|
||||
COMPRESSED_POINTER_FIELD(ObjectPtr, retained_kernel_blob)
|
||||
VISIT_TO(retained_kernel_blob)
|
||||
VISIT_TO(classes_cache)
|
||||
|
||||
CompressedObjectPtr* to_snapshot(Snapshot::Kind kind) {
|
||||
return reinterpret_cast<CompressedObjectPtr*>(&constants_table_);
|
||||
|
||||
@@ -30,7 +30,6 @@ namespace dart {
|
||||
F(Class, invocation_dispatcher_cache_) \
|
||||
F(PatchClass, wrapped_class_) \
|
||||
F(PatchClass, script_) \
|
||||
F(PatchClass, library_kernel_data_) \
|
||||
F(Function, name_) \
|
||||
F(Function, owner_) \
|
||||
F(Function, signature_) \
|
||||
@@ -64,7 +63,6 @@ namespace dart {
|
||||
F(Library, imports_) \
|
||||
F(Library, exports_) \
|
||||
F(Library, dependencies_) \
|
||||
F(Library, kernel_data_) \
|
||||
F(Library, resolved_names_) \
|
||||
F(Library, exported_names_) \
|
||||
F(Library, loaded_scripts_) \
|
||||
@@ -72,6 +70,7 @@ namespace dart {
|
||||
F(Namespace, show_names_) \
|
||||
F(Namespace, hide_names_) \
|
||||
F(Namespace, owner_) \
|
||||
F(KernelProgramInfo, kernel_component_) \
|
||||
F(KernelProgramInfo, string_offsets_) \
|
||||
F(KernelProgramInfo, string_data_) \
|
||||
F(KernelProgramInfo, canonical_names_) \
|
||||
@@ -82,7 +81,6 @@ namespace dart {
|
||||
F(KernelProgramInfo, constants_table_) \
|
||||
F(KernelProgramInfo, libraries_cache_) \
|
||||
F(KernelProgramInfo, classes_cache_) \
|
||||
F(KernelProgramInfo, retained_kernel_blob_) \
|
||||
F(WeakSerializationReference, target_) \
|
||||
F(WeakSerializationReference, replacement_) \
|
||||
F(WeakArray, length_) \
|
||||
|
||||
Reference in New Issue
Block a user