summaryrefslogtreecommitdiff
path: root/prism_compile.c
diff options
context:
space:
mode:
authorJean Boussier <[email protected]>2024-08-11 12:58:57 +0200
committerJean Boussier <[email protected]>2024-08-11 15:04:35 +0200
commitca5b7276c668f595b8348822fc61a90cd5b9710f (patch)
treead4209ee97d9f267be9be09790230c8ae80891ff /prism_compile.c
parent1fd0a1b4ceef29a5aade5e1d896dca5b74258e6f (diff)
compile.c: don't allocate empty default values list
It just wastes memory.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11361
Diffstat (limited to 'prism_compile.c')
-rw-r--r--prism_compile.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/prism_compile.c b/prism_compile.c
index 14cf016f16..14c21a9941 100644
--- a/prism_compile.c
+++ b/prism_compile.c
@@ -8889,18 +8889,20 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
keyword->bits_start = local_index;
keyword->table = ids;
- VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values));
-
- for (int i = 0; i < RARRAY_LEN(default_values); i++) {
- VALUE dv = RARRAY_AREF(default_values, i);
- if (dv == complex_mark) dv = Qundef;
- if (!SPECIAL_CONST_P(dv)) {
- RB_OBJ_WRITTEN(iseq, Qundef, dv);
+ if (RARRAY_LEN(default_values)) {
+ VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values));
+
+ for (int i = 0; i < RARRAY_LEN(default_values); i++) {
+ VALUE dv = RARRAY_AREF(default_values, i);
+ if (dv == complex_mark) dv = Qundef;
+ if (!SPECIAL_CONST_P(dv)) {
+ RB_OBJ_WRITTEN(iseq, Qundef, dv);
+ }
+ dvs[i] = dv;
}
- dvs[i] = dv;
- }
- keyword->default_values = dvs;
+ keyword->default_values = dvs;
+ }
// Hidden local for keyword arguments
ID local = rb_make_temporary_id(local_index);