| Index: runtime/vm/raw_object.h
|
| diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
|
| index e249fdede7a89374b786a7bd893b409042746bd9..1e4f042131a08da8a92a13b7d4ae77efa55bbd21 100644
|
| --- a/runtime/vm/raw_object.h
|
| +++ b/runtime/vm/raw_object.h
|
| @@ -832,6 +832,8 @@ class RawFunction : public RawObject {
|
| static bool ShouldVisitCode(RawCode* raw_code);
|
| static bool CheckUsageCounter(RawFunction* raw_fun);
|
|
|
| + uword entry_point_; // Accessed from generated code.
|
| +
|
| RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->name_); }
|
| RawString* name_;
|
| RawObject* owner_; // Class or patch class or mixin class
|
| @@ -847,23 +849,28 @@ class RawFunction : public RawObject {
|
| RawObject** to_no_code() {
|
| return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
|
| }
|
| - RawCode* code_; // Currently active code.
|
| - RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization.
|
| + RawCode* code_; // Currently active code. Accessed from generated code.
|
| + NOT_IN_PRECOMPILED(RawCode* unoptimized_code_); // Unoptimized code, keep it
|
| + // after optimization.
|
| RawObject** to() {
|
| +#if defined(DART_PRECOMPILED_RUNTIME)
|
| + return reinterpret_cast<RawObject**>(&ptr()->code_);
|
| +#else
|
| return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_);
|
| +#endif
|
| }
|
| - uword entry_point_;
|
|
|
| - TokenPosition token_pos_;
|
| - TokenPosition end_token_pos_;
|
| - int32_t usage_counter_; // Incremented while function is running.
|
| + NOT_IN_PRECOMPILED(TokenPosition token_pos_);
|
| + NOT_IN_PRECOMPILED(TokenPosition end_token_pos_);
|
| + NOT_IN_PRECOMPILED(int32_t usage_counter_); // Accessed from generated code
|
| + // (JIT only).
|
| + uint32_t kind_tag_; // See Function::KindTagBits.
|
| int16_t num_fixed_parameters_;
|
| int16_t num_optional_parameters_; // > 0: positional; < 0: named.
|
| - int8_t deoptimization_counter_;
|
| - int8_t was_compiled_;
|
| - uint32_t kind_tag_; // See Function::KindTagBits.
|
| - uint16_t optimized_instruction_count_;
|
| - uint16_t optimized_call_site_count_;
|
| + NOT_IN_PRECOMPILED(uint16_t optimized_instruction_count_);
|
| + NOT_IN_PRECOMPILED(uint16_t optimized_call_site_count_);
|
| + NOT_IN_PRECOMPILED(int8_t deoptimization_counter_);
|
| + NOT_IN_PRECOMPILED(int8_t was_compiled_);
|
| };
|
|
|
|
|
| @@ -1113,15 +1120,14 @@ class RawCode : public RawObject {
|
|
|
| RAW_HEAP_OBJECT_IMPLEMENTATION(Code);
|
|
|
| - uword entry_point_;
|
| - uword checked_entry_point_;
|
| + uword entry_point_; // Accessed from generated code.
|
| + uword checked_entry_point_; // Accessed from generated code (AOT only).
|
|
|
| RawObject** from() {
|
| - return reinterpret_cast<RawObject**>(&ptr()->active_instructions_);
|
| + return reinterpret_cast<RawObject**>(&ptr()->object_pool_);
|
| }
|
| - RawInstructions* active_instructions_;
|
| - RawInstructions* instructions_;
|
| - RawObjectPool* object_pool_;
|
| + RawObjectPool* object_pool_; // Accessed from generated code.
|
| + RawInstructions* instructions_; // Accessed from generated code.
|
| // If owner_ is Function::null() the owner is a regular stub.
|
| // If owner_ is a Class the owner is the allocation stub for that class.
|
| // Else, owner_ is a regular Dart Function.
|
| @@ -1129,21 +1135,27 @@ class RawCode : public RawObject {
|
| RawExceptionHandlers* exception_handlers_;
|
| RawPcDescriptors* pc_descriptors_;
|
| RawArray* stackmaps_;
|
| - RawArray* deopt_info_array_;
|
| - RawArray* static_calls_target_table_; // (code-offset, function, code).
|
| - RawLocalVarDescriptors* var_descriptors_;
|
| - RawArray* inlined_metadata_;
|
| - RawCodeSourceMap* code_source_map_;
|
| - RawArray* comments_;
|
| + NOT_IN_PRECOMPILED(RawInstructions* active_instructions_);
|
| + NOT_IN_PRECOMPILED(RawArray* deopt_info_array_);
|
| + // (code-offset, function, code) triples.
|
| + NOT_IN_PRECOMPILED(RawArray* static_calls_target_table_);
|
| + NOT_IN_PRECOMPILED(RawLocalVarDescriptors* var_descriptors_);
|
| + NOT_IN_PRECOMPILED(RawArray* inlined_metadata_);
|
| + NOT_IN_PRECOMPILED(RawCodeSourceMap* code_source_map_);
|
| + NOT_IN_PRECOMPILED(RawArray* comments_);
|
| // If return_address_metadata_ is a Smi, it is the offset to the prologue.
|
| // Else, return_address_metadata_ is null.
|
| - RawObject* return_address_metadata_;
|
| + NOT_IN_PRECOMPILED(RawObject* return_address_metadata_);
|
| RawObject** to() {
|
| +#if defined(DART_PRECOMPILED_RUNTIME)
|
| + return reinterpret_cast<RawObject**>(&ptr()->stackmaps_);
|
| +#else
|
| return reinterpret_cast<RawObject**>(&ptr()->return_address_metadata_);
|
| +#endif
|
| }
|
|
|
| // Compilation timestamp.
|
| - int64_t compile_timestamp_;
|
| + NOT_IN_PRECOMPILED(int64_t compile_timestamp_);
|
|
|
| // state_bits_ is a bitfield with three fields:
|
| // The optimized bit, the alive bit, and a count of the number of pointer
|
| @@ -1152,7 +1164,7 @@ class RawCode : public RawObject {
|
| int32_t state_bits_;
|
|
|
| // PC offsets for code patching.
|
| - int32_t lazy_deopt_pc_offset_;
|
| + NOT_IN_PRECOMPILED(int32_t lazy_deopt_pc_offset_);
|
|
|
| // Variable length data follows here.
|
| int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); }
|
| @@ -1525,7 +1537,7 @@ class RawICData : public RawObject {
|
| UNREACHABLE();
|
| return NULL;
|
| }
|
| - int32_t deopt_id_; // Deoptimization id corresponding to this IC.
|
| + NOT_IN_PRECOMPILED(int32_t deopt_id_);
|
| uint32_t state_bits_; // Number of arguments tested in IC, deopt reasons.
|
| #if defined(TAG_IC_DATA)
|
| intptr_t tag_; // Debugging, verifying that the icdata is assigned to the
|
|
|