Skip to content

Commit 4e05fe5

Browse files
committed
Use union in cross_ractor_require
A cross_ractor_require is either a require or an autoload, so we can make the fields an union. This reduces the size of cross_ractor_require by 8 bytes.
1 parent 44d1feb commit 4e05fe5

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

ractor.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,12 +2280,16 @@ struct cross_ractor_require {
22802280
VALUE result;
22812281
VALUE exception;
22822282

2283-
// require
2284-
VALUE feature;
2283+
union {
2284+
struct {
2285+
VALUE feature;
2286+
} require;
22852287

2286-
// autoload
2287-
VALUE module;
2288-
ID name;
2288+
struct {
2289+
VALUE module;
2290+
ID name;
2291+
} autoload;
2292+
} as;
22892293

22902294
bool silent;
22912295
};
@@ -2294,8 +2298,7 @@ RUBY_REFERENCES(cross_ractor_require_refs) = {
22942298
RUBY_REF_EDGE(struct cross_ractor_require, port),
22952299
RUBY_REF_EDGE(struct cross_ractor_require, result),
22962300
RUBY_REF_EDGE(struct cross_ractor_require, exception),
2297-
RUBY_REF_EDGE(struct cross_ractor_require, feature),
2298-
RUBY_REF_EDGE(struct cross_ractor_require, module),
2301+
RUBY_REF_EDGE(struct cross_ractor_require, as.require.feature),
22992302
RUBY_REF_END
23002303
};
23012304

@@ -2322,10 +2325,10 @@ require_body(VALUE crr_obj)
23222325
if (crr->silent) {
23232326
int rb_require_internal_silent(VALUE fname);
23242327

2325-
RB_OBJ_WRITE(crr_obj, &crr->result, INT2NUM(rb_require_internal_silent(crr->feature)));
2328+
RB_OBJ_WRITE(crr_obj, &crr->result, INT2NUM(rb_require_internal_silent(crr->as.require.feature)));
23262329
}
23272330
else {
2328-
RB_OBJ_WRITE(crr_obj, &crr->result, rb_funcallv(Qnil, require, 1, &crr->feature));
2331+
RB_OBJ_WRITE(crr_obj, &crr->result, rb_funcallv(Qnil, require, 1, &crr->as.require.feature));
23292332
}
23302333

23312334
return Qnil;
@@ -2418,7 +2421,7 @@ rb_ractor_require(VALUE feature, bool silent)
24182421
FL_SET_RAW(crr_obj, RUBY_FL_SHAREABLE);
24192422

24202423
// Convert feature to proper file path and make it shareable as fstring
2421-
RB_OBJ_WRITE(crr_obj, &crr->feature, rb_fstring(FilePathValue(feature)));
2424+
RB_OBJ_WRITE(crr_obj, &crr->as.require.feature, rb_fstring(FilePathValue(feature)));
24222425
RB_OBJ_WRITE(crr_obj, &crr->port, ractor_port_new(GET_RACTOR()));
24232426
crr->result = Qundef;
24242427
crr->exception = Qundef;
@@ -2459,7 +2462,7 @@ autoload_load_body(VALUE crr_obj)
24592462
struct cross_ractor_require *crr;
24602463
TypedData_Get_Struct(crr_obj, struct cross_ractor_require, &cross_ractor_require_data_type, crr);
24612464

2462-
RB_OBJ_WRITE(crr_obj, &crr->result, rb_autoload_load(crr->module, crr->name));
2465+
RB_OBJ_WRITE(crr_obj, &crr->result, rb_autoload_load(crr->as.autoload.module, crr->as.autoload.name));
24632466

24642467
return Qnil;
24652468
}
@@ -2476,8 +2479,8 @@ rb_ractor_autoload_load(VALUE module, ID name)
24762479
struct cross_ractor_require *crr;
24772480
VALUE crr_obj = TypedData_Make_Struct(0, struct cross_ractor_require, &cross_ractor_require_data_type, crr);
24782481
FL_SET_RAW(crr_obj, RUBY_FL_SHAREABLE);
2479-
RB_OBJ_WRITE(crr_obj, &crr->module, module);
2480-
RB_OBJ_WRITE(crr_obj, &crr->name, name);
2482+
RB_OBJ_WRITE(crr_obj, &crr->as.autoload.module, module);
2483+
RB_OBJ_WRITE(crr_obj, &crr->as.autoload.name, name);
24812484
RB_OBJ_WRITE(crr_obj, &crr->port, ractor_port_new(GET_RACTOR()));
24822485
crr->result = Qundef;
24832486
crr->exception = Qundef;

0 commit comments

Comments
 (0)