summaryrefslogtreecommitdiff
path: root/method.h
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-07-23 05:20:04 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-07-23 05:20:04 +0900
commit11f3da8e9dd98cb6b0c2c2fd22220f8508af32f2 (patch)
treeaa8c4e873f6e7340f2d7796a215a05581ca4a196 /method.h
parent6b62aa7aec1c8beffafc5e321419cba408bf3c24 (diff)
Stop packing rb_method_definition_t
By using `BITFIELD`, `type` field should not be forced to align.
Diffstat (limited to 'method.h')
-rw-r--r--method.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/method.h b/method.h
index a604554467..84ade7fef3 100644
--- a/method.h
+++ b/method.h
@@ -160,7 +160,7 @@ enum method_optimized_type {
OPTIMIZED_METHOD_TYPE__MAX
};
-PACKED_STRUCT_UNALIGNED(struct rb_method_definition_struct {
+struct rb_method_definition_struct {
BITFIELD(rb_method_type_t, type, VM_METHOD_TYPE_MINIMUM_BITS);
int alias_count : 28;
int complemented_count : 28;
@@ -177,9 +177,10 @@ PACKED_STRUCT_UNALIGNED(struct rb_method_definition_struct {
} body;
ID original_id;
-});
+};
typedef struct rb_method_definition_struct rb_method_definition_t;
+STATIC_ASSERT(sizeof_method_def, offsetof(rb_method_definition_t, body)==8);
#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
#define UNDEFINED_REFINED_METHOD_P(def) \