From 322410e5cda57258c5d9dc7830ca138603c49570 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Thu, 5 May 2022 22:36:56 +0000 Subject: [PATCH] [vm] Function::packed_fields is not used in AOT. flutter_gallery Isolate(CodeSize): 2199986 -> 2181807 (-0.83%) Total(CodeSize): 7312019 -> 7293839 (-0.25%) TEST=ci Change-Id: I5f71df4f0020b7702162fd44b5c0f1a9ce4c143f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243563 Commit-Queue: Ryan Macnak Reviewed-by: Alexander Aprelev --- runtime/vm/app_snapshot.cc | 4 +- runtime/vm/compiler/backend/slot.h | 1 - runtime/vm/compiler/runtime_api.h | 1 - .../vm/compiler/runtime_offsets_extracted.h | 68 ++----------------- runtime/vm/compiler/runtime_offsets_list.h | 1 - runtime/vm/object.cc | 4 ++ runtime/vm/object.h | 19 ++++-- runtime/vm/raw_object.h | 3 +- 8 files changed, 26 insertions(+), 75 deletions(-) diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc index c8f2ca5100f..178aedff08f 100644 --- a/runtime/vm/app_snapshot.cc +++ b/runtime/vm/app_snapshot.cc @@ -1030,9 +1030,9 @@ class FunctionSerializationCluster : public SerializationCluster { s->WriteTokenPosition(func->untag()->token_pos_); s->WriteTokenPosition(func->untag()->end_token_pos_); s->Write(func->untag()->kernel_offset_); + s->Write(func->untag()->packed_fields_); } - s->Write(func->untag()->packed_fields_); s->Write(func->untag()->kind_tag_); } } @@ -1192,8 +1192,8 @@ class FunctionDeserializationCluster : public DeserializationCluster { func->untag()->end_token_pos_ = d.ReadTokenPosition(); func->untag()->kernel_offset_ = d.Read(); func->untag()->unboxed_parameters_info_.Reset(); -#endif func->untag()->packed_fields_ = d.Read(); +#endif func->untag()->kind_tag_ = d.Read(); #if !defined(DART_PRECOMPILED_RUNTIME) func->untag()->usage_counter_ = 0; diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h index e4efe293ccd..eb873550aea 100644 --- a/runtime/vm/compiler/backend/slot.h +++ b/runtime/vm/compiler/backend/slot.h @@ -177,7 +177,6 @@ NONNULLABLE_BOXED_NATIVE_SLOTS_LIST(FOR_EACH_NATIVE_SLOT) V(FinalizerEntry, UntaggedFinalizerEntry, external_size, IntPtr, VAR) \ V(Function, UntaggedFunction, entry_point, Uword, FINAL) \ V(Function, UntaggedFunction, kind_tag, Uint32, FINAL) \ - V(Function, UntaggedFunction, packed_fields, Uint32, FINAL) \ V(FunctionType, UntaggedFunctionType, packed_parameter_counts, Uint32, \ FINAL) \ V(FunctionType, UntaggedFunctionType, packed_type_parameter_counts, Uint16, \ diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h index 31c7822ba66..22befb98b68 100644 --- a/runtime/vm/compiler/runtime_api.h +++ b/runtime/vm/compiler/runtime_api.h @@ -508,7 +508,6 @@ class Function : public AllStatic { static word data_offset(); static word entry_point_offset(CodeEntryKind kind = CodeEntryKind::kNormal); static word kind_tag_offset(); - static word packed_fields_offset(); static word signature_offset(); static word usage_counter_offset(); static word InstanceSize(); diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h index 2fc188c83e0..1a4718e30ea 100644 --- a/runtime/vm/compiler/runtime_offsets_extracted.h +++ b/runtime/vm/compiler/runtime_offsets_extracted.h @@ -161,8 +161,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -782,8 +780,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -1408,8 +1404,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -2026,8 +2020,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -2653,8 +2645,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 36; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 91; static constexpr dart::compiler::target::word Function_signature_offset = 32; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -3279,8 +3269,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 36; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 91; static constexpr dart::compiler::target::word Function_signature_offset = 32; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -3906,8 +3894,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -4529,8 +4515,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -5153,8 +5137,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -5768,8 +5750,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -6388,8 +6368,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -7000,8 +6978,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -7621,8 +7597,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 36; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 91; static constexpr dart::compiler::target::word Function_signature_offset = 32; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -8241,8 +8215,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 36; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 91; static constexpr dart::compiler::target::word Function_signature_offset = 32; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -8862,8 +8834,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 24; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 4, 8}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 64; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 83; static constexpr dart::compiler::target::word Function_signature_offset = 20; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 4; @@ -9479,8 +9449,6 @@ static constexpr dart::compiler::target::word Function_data_offset = 48; static constexpr dart::compiler::target::word Function_entry_point_offset[] = { 8, 16}; static constexpr dart::compiler::target::word Function_kind_tag_offset = 104; -static constexpr dart::compiler::target::word Function_packed_fields_offset = - 123; static constexpr dart::compiler::target::word Function_signature_offset = 40; static constexpr dart::compiler::target::word FutureOr_type_arguments_offset = 8; @@ -10119,8 +10087,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 24; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {4, 8}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 36; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 40; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 20; static constexpr dart::compiler::target::word @@ -10581,7 +10547,7 @@ static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24; -static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44; +static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 8; @@ -10816,8 +10782,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word @@ -11519,8 +11483,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word @@ -12219,8 +12181,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 36; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 48; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 52; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 32; static constexpr dart::compiler::target::word @@ -12918,8 +12878,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 36; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 48; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 52; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 32; static constexpr dart::compiler::target::word @@ -13618,8 +13576,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 24; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {4, 8}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 36; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 40; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 20; static constexpr dart::compiler::target::word @@ -14082,7 +14038,7 @@ static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24; -static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44; +static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 8; @@ -14317,8 +14273,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word @@ -15014,8 +14968,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 24; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {4, 8}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 36; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 40; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 20; static constexpr dart::compiler::target::word @@ -15474,7 +15426,7 @@ static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24; -static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44; +static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 8; @@ -15704,8 +15656,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word @@ -16400,8 +16350,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word @@ -17093,8 +17041,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 36; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 48; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 52; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 32; static constexpr dart::compiler::target::word @@ -17785,8 +17731,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 36; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 48; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 52; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 32; static constexpr dart::compiler::target::word @@ -18478,8 +18422,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 24; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {4, 8}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 36; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 40; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 20; static constexpr dart::compiler::target::word @@ -18940,7 +18882,7 @@ static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24; static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24; -static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44; +static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize = 40; static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 8; @@ -19170,8 +19112,6 @@ static constexpr dart::compiler::target::word AOT_Function_data_offset = 48; static constexpr dart::compiler::target::word AOT_Function_entry_point_offset[] = {8, 16}; static constexpr dart::compiler::target::word AOT_Function_kind_tag_offset = 72; -static constexpr dart::compiler::target::word - AOT_Function_packed_fields_offset = 76; static constexpr dart::compiler::target::word AOT_Function_signature_offset = 40; static constexpr dart::compiler::target::word diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h index 04aa47b5cf3..2e7c90f8e0c 100644 --- a/runtime/vm/compiler/runtime_offsets_list.h +++ b/runtime/vm/compiler/runtime_offsets_list.h @@ -133,7 +133,6 @@ RANGE(Function, entry_point_offset, CodeEntryKind, CodeEntryKind::kNormal, \ CodeEntryKind::kUnchecked, [](CodeEntryKind value) { return true; }) \ FIELD(Function, kind_tag_offset) \ - FIELD(Function, packed_fields_offset) \ FIELD(Function, signature_offset) \ FIELD(FutureOr, type_arguments_offset) \ FIELD(GrowableObjectArray, data_offset) \ diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc index e9b0ea28709..c4547965736 100644 --- a/runtime/vm/object.cc +++ b/runtime/vm/object.cc @@ -8064,7 +8064,11 @@ void Function::set_kind_tag(uint32_t value) const { } void Function::set_packed_fields(uint32_t packed_fields) const { +#if defined(DART_PRECOMPILED_RUNTIME) + UNREACHABLE(); +#else StoreNonPointer(&untag()->packed_fields_, packed_fields); +#endif } bool Function::IsOptimizable() const { diff --git a/runtime/vm/object.h b/runtime/vm/object.h index b5eaa99016c..19f2fd3762b 100644 --- a/runtime/vm/object.h +++ b/runtime/vm/object.h @@ -3141,11 +3141,14 @@ class Function : public Object { // Returns the size of the source for this function. intptr_t SourceSize() const; - uint32_t packed_fields() const { return untag()->packed_fields_; } - void set_packed_fields(uint32_t packed_fields) const; - static intptr_t packed_fields_offset() { - return OFFSET_OF(UntaggedFunction, packed_fields_); + uint32_t packed_fields() const { +#if defined(DART_PRECOMPILED_RUNTIME) + UNREACHABLE(); +#else + return untag()->packed_fields_; +#endif } + void set_packed_fields(uint32_t packed_fields) const; // Returns the number of required positional parameters. intptr_t num_fixed_parameters() const; @@ -3881,11 +3884,19 @@ class Function : public Object { // some functions known to be execute infrequently and functions // which have been de-optimized too many times. bool is_optimizable() const { +#if defined(DART_PRECOMPILED_RUNTIME) + UNREACHABLE(); +#else return untag()->packed_fields_.Read(); +#endif } void set_is_optimizable(bool value) const { +#if defined(DART_PRECOMPILED_RUNTIME) + UNREACHABLE(); +#else untag()->packed_fields_.UpdateBool( value); +#endif } enum KindTagBits { diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h index 6b5dab88d27..f4908652d48 100644 --- a/runtime/vm/raw_object.h +++ b/runtime/vm/raw_object.h @@ -1346,14 +1346,13 @@ class UntaggedFunction : public UntaggedObject { JIT_FUNCTION_COUNTERS(DECLARE) #undef DECLARE -#endif // !defined(DART_PRECOMPILED_RUNTIME) - AtomicBitFieldContainer packed_fields_; static constexpr intptr_t kMaxOptimizableBits = 1; using PackedOptimizable = BitField; +#endif // !defined(DART_PRECOMPILED_RUNTIME) }; class UntaggedClosureData : public UntaggedObject {