diff options
author | Jean Boussier <[email protected]> | 2024-08-11 12:58:57 +0200 |
---|---|---|
committer | Jean Boussier <[email protected]> | 2024-08-11 15:04:35 +0200 |
commit | ca5b7276c668f595b8348822fc61a90cd5b9710f (patch) | |
tree | ad4209ee97d9f267be9be09790230c8ae80891ff /prism_compile.c | |
parent | 1fd0a1b4ceef29a5aade5e1d896dca5b74258e6f (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.c | 22 |
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); |