--- ruby-3.1.3/gc.rbinc 2022-11-24 11:20:33.000000000 +0100 +++ ruby/gc.rbinc 2022-11-25 11:50:19.939820992 +0100 @@ -9,27 +9,27 @@ #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ struct rb_execution_context_struct; /* in vm_core.h */ -static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self) +static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self) { MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3); -#line 277 "gc.rb" +#line 209 "gc.rb" rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; return flag; #line 20 "gc.rbinc" } -static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self) +static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self) { -#line 289 "gc.rb" +#line 221 "gc.rb" return RBOOL(rb_objspace.flags.measure_gc); #line 28 "gc.rbinc" } -static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self) +static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self) { -#line 299 "gc.rb" +#line 231 "gc.rb" return ULL2NUM(rb_objspace.profile.total_time_ns); #line 36 "gc.rbinc" @@ -52,31 +52,6 @@ } static void -mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) -{ - fprintf(f, " VALUE self = GET_SELF();\n"); - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact); - fprintf(f, " val = f(ec, self);\n"); -} - -static void -mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) -{ - fprintf(f, " VALUE self = GET_SELF();\n"); - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n"); - if (index == -1) { - fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1); - } - else { - fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); - fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); - } - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact); - fprintf(f, " val = f(ec, self, argv[0]);\n"); -} - -static void mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p) { fprintf(f, " VALUE self = GET_SELF();\n"); @@ -161,40 +136,6 @@ } static void -mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p) -{ - fprintf(f, " VALUE self = GET_SELF();\n"); - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats); - fprintf(f, " val = f(ec, self);\n"); -} - -static void -mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) -{ - fprintf(f, " VALUE self = GET_SELF();\n"); - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact); - fprintf(f, " val = f(ec, self);\n"); -} - -static void -mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p) -{ - fprintf(f, " VALUE self = GET_SELF();\n"); - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n"); - if (index == -1) { - fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2); - } - else { - fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); - fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); - } - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references); - fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n"); -} - -static void mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p) { fprintf(f, " VALUE self = GET_SELF();\n"); @@ -202,7 +143,7 @@ if (inlinable_p) { fprintf(f, "%s", " {\n"); fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n"); - fprintf(f, "%s", "#line 277 \"gc.rb\"\n"); + fprintf(f, "%s", "#line 209 \"gc.rb\"\n"); fprintf(f, "%s", " \n"); fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"); fprintf(f, "%s", " return flag;\n"); @@ -211,7 +152,7 @@ fprintf(f, "%s", " \n"); return; } - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277); + fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209); fprintf(f, " val = f(ec, self);\n"); } @@ -222,7 +163,7 @@ fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); if (inlinable_p) { fprintf(f, "%s", " {\n"); - fprintf(f, "%s", "#line 289 \"gc.rb\"\n"); + fprintf(f, "%s", "#line 221 \"gc.rb\"\n"); fprintf(f, "%s", " return \n"); fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n"); fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n"); @@ -230,7 +171,7 @@ fprintf(f, "%s", " \n"); return; } - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289); + fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221); fprintf(f, " val = f(ec, self);\n"); } @@ -241,7 +182,7 @@ fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); if (inlinable_p) { fprintf(f, "%s", " {\n"); - fprintf(f, "%s", "#line 299 \"gc.rb\"\n"); + fprintf(f, "%s", "#line 231 \"gc.rb\"\n"); fprintf(f, "%s", " return \n"); fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n"); fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n"); @@ -249,7 +190,7 @@ fprintf(f, "%s", " \n"); return; } - fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299); + fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231); fprintf(f, " val = f(ec, self);\n"); } @@ -258,21 +199,16 @@ // table definition static const struct rb_builtin_function gc_table[] = { RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal), - RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact), - RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact), - RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), - RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), - RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), - RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), - RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), - RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), - RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), - RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats), - RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact), - RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references), - RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0), - RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1), - RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2), + RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), + RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), + RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), + RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), + RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), + RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), + RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), + RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0), + RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1), + RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2), RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0), }; @@ -282,8 +218,6 @@ COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) #endif if (0) rb_builtin_function_check_arity4(gc_start_internal); - if (0) rb_builtin_function_check_arity0(gc_get_auto_compact); - if (0) rb_builtin_function_check_arity1(gc_set_auto_compact); if (0) rb_builtin_function_check_arity0(gc_enable); if (0) rb_builtin_function_check_arity0(gc_disable); if (0) rb_builtin_function_check_arity0(gc_stress_get); @@ -291,12 +225,9 @@ if (0) rb_builtin_function_check_arity0(gc_count); if (0) rb_builtin_function_check_arity1(gc_stat); if (0) rb_builtin_function_check_arity1(gc_latest_gc_info); - if (0) rb_builtin_function_check_arity0(gc_compact_stats); - if (0) rb_builtin_function_check_arity0(gc_compact); - if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references); - if (0) rb_builtin_function_check_arity0(builtin_inline_class_277); - if (0) rb_builtin_function_check_arity0(builtin_inline_class_289); - if (0) rb_builtin_function_check_arity0(builtin_inline_class_299); + if (0) rb_builtin_function_check_arity0(builtin_inline_class_209); + if (0) rb_builtin_function_check_arity0(builtin_inline_class_221); + if (0) rb_builtin_function_check_arity0(builtin_inline_class_231); COMPILER_WARNING_POP // load --- ruby-3.1.3/miniprelude.c 2022-11-24 11:20:33.000000000 +0100 +++ ruby/miniprelude.c 2022-11-25 11:50:20.012820803 +0100 @@ -545,11 +545,10 @@ static const char prelude_name2[] = ""; static const struct { - char L0[479]; /* 1..58 */ - char L58[508]; /* 59..204 */ - char L204[504]; /* 205..275 */ - char L275[490]; /* 276..306 */ - char L306[128]; /* 307..312 */ + char L0[492]; /* 1..70 */ + char L70[468]; /* 71..197 */ + char L197[470]; /* 198..237 */ + char L237[211]; /* 238..244 */ } prelude_code2 = { #line 1 "gc.rb" ""/* for gc.c */ @@ -593,29 +592,6 @@ " end\n" "\n" "\n"/* call-seq: */ -"\n"/* GC.auto_compact -> true or false */ -"\n"/* */ -"\n"/* Returns whether or not automatic compaction has been enabled. */ -"\n"/* */ -" def self.auto_compact\n" -" Primitive.gc_get_auto_compact\n" -" end\n" -"\n" -"\n"/* call-seq: */ -"\n"/* GC.auto_compact = flag */ -"\n"/* */ -"\n"/* Updates automatic compaction mode. */ -"\n"/* */ -"\n"/* When enabled, the compactor will execute on every major collection. */ -"\n"/* */ -"\n"/* Enabling compaction will degrade performance on major collections. */ -" def self.auto_compact=(flag)\n" -, -#line 59 "gc.rb" -" Primitive.gc_set_auto_compact(flag)\n" -" end\n" -"\n" -"\n"/* call-seq: */ "\n"/* GC.enable -> true or false */ "\n"/* */ "\n"/* Enables garbage collection, returning +true+ if garbage */ @@ -645,6 +621,8 @@ "\n"/* GC.stress -> integer, true or false */ "\n"/* */ "\n"/* Returns current status of GC stress mode. */ +, +#line 71 "gc.rb" " def self.stress\n" " Primitive.gc_stress_get\n" " end\n" @@ -758,8 +736,6 @@ "\n"/* GC.latest_gc_info(:major_by) -> :malloc */ "\n"/* */ "\n"/* Returns information about the most recent garbage collection. */ -, -#line 205 "gc.rb" "\n"/* */ "\n"/* If the optional argument, hash, is given, */ "\n"/* it is overwritten and returned. */ @@ -768,59 +744,14 @@ " Primitive.gc_latest_gc_info hash_or_key\n" " end\n" "\n" -"\n"/* call-seq: */ -"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */ -"\n"/* */ -"\n"/* Returns information about object moved in the most recent GC compaction. */ -"\n"/* */ -"\n"/* The returned hash has two keys :considered and :moved. The hash for */ -"\n"/* :considered lists the number of objects that were considered for movement */ -"\n"/* by the compactor, and the :moved hash lists the number of objects that */ -"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */ -"\n"/* so these numbers can be used to calculate compaction efficiency. */ -" def self.latest_compact_info\n" -" Primitive.gc_compact_stats\n" -" end\n" -"\n" -"\n"/* call-seq: */ -"\n"/* GC.compact */ -"\n"/* */ -"\n"/* This function compacts objects together in Ruby's heap. It eliminates */ -"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */ -"\n"/* unused space. This function returns a hash which contains statistics about */ -"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */ -"\n"/* compaction statistics. */ -"\n"/* */ -"\n"/* This method is implementation specific and not expected to be implemented */ -"\n"/* in any implementation besides MRI. */ -" def self.compact\n" -" Primitive.gc_compact\n" -" end\n" -"\n" -"\n"/* call-seq: */ -"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */ -"\n"/* */ -"\n"/* Verify compaction reference consistency. */ -"\n"/* */ -"\n"/* This method is implementation specific. During compaction, objects that */ -"\n"/* were moved are replaced with T_MOVED objects. No object should have a */ -"\n"/* reference to a T_MOVED object after compaction. */ -"\n"/* */ -"\n"/* This function doubles the heap to ensure room to move all objects, */ -"\n"/* compacts the heap to make sure everything moves, updates all references, */ -"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */ -"\n"/* object, that object should be pushed on the mark stack, and will */ -"\n"/* make a SEGV. */ -" def self.verify_compaction_references(toward: nil, double_heap: false)\n" -" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n" -" end\n" -"\n" "\n"/* call-seq: */ "\n"/* GC.using_rvargc? -> true or false */ "\n"/* */ "\n"/* Returns true if using experimental feature Variable Width Allocation, false */ "\n"/* otherwise. */ " def self.using_rvargc?\n"/* :nodoc: */ +, +#line 198 "gc.rb" " GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n" " end\n" "\n" @@ -831,8 +762,6 @@ "\n"/* Enable to measure GC time. */ "\n"/* You can get the result with GC.stat(:time). */ "\n"/* Note that GC time measurement can cause some performance overhead. */ -, -#line 276 "gc.rb" " def self.measure_total_time=(flag)\n" " Primitive.cstmt! %{\n" " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n" @@ -863,15 +792,15 @@ "end\n" "\n" "module ObjectSpace\n" -" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" , -#line 307 "gc.rb" +#line 238 "gc.rb" +" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" " Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n" " end\n" "\n" " module_function :garbage_collect\n" "end\n" -#line 875 "miniprelude.c" +#line 804 "miniprelude.c" }; static const char prelude_name3[] = ""; @@ -1223,7 +1152,7 @@ " end\n" "\n" "end\n" -#line 1227 "miniprelude.c" +#line 1156 "miniprelude.c" }; static const char prelude_name4[] = ""; @@ -1354,7 +1283,7 @@ " Primitive.io_write_nonblock(buf, exception)\n" " end\n" "end\n" -#line 1358 "miniprelude.c" +#line 1287 "miniprelude.c" }; static const char prelude_name5[] = ""; @@ -1402,7 +1331,7 @@ " alias restore load\n" " end\n" "end\n" -#line 1406 "miniprelude.c" +#line 1335 "miniprelude.c" }; static const char prelude_name6[] = ""; @@ -1724,7 +1653,7 @@ " Primitive.pack_unpack1(fmt, offset)\n" " end\n" "end\n" -#line 1728 "miniprelude.c" +#line 1657 "miniprelude.c" }; static const char prelude_name7[] = ""; @@ -2111,7 +2040,7 @@ " Primitive.tracepoint_attr_instruction_sequence\n" " end\n" "end\n" -#line 2115 "miniprelude.c" +#line 2044 "miniprelude.c" }; static const char prelude_name8[] = ""; @@ -2172,7 +2101,7 @@ " Primitive.rb_warn_m(msgs, uplevel, category)\n" " end\n" "end\n" -#line 2176 "miniprelude.c" +#line 2105 "miniprelude.c" }; static const char prelude_name9[] = ""; @@ -2249,7 +2178,7 @@ " end\n" " end\n" "end\n" -#line 2253 "miniprelude.c" +#line 2182 "miniprelude.c" }; static const char prelude_name10[] = ""; @@ -2438,7 +2367,7 @@ " end\n" " end\n" "end\n" -#line 2442 "miniprelude.c" +#line 2371 "miniprelude.c" }; static const char prelude_name11[] = ""; @@ -3309,7 +3238,7 @@ " }\n" " end\n" "end\n" -#line 3313 "miniprelude.c" +#line 3242 "miniprelude.c" }; static const char prelude_name12[] = ""; @@ -3632,7 +3561,7 @@ " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" " end\n" "end\n" -#line 3636 "miniprelude.c" +#line 3565 "miniprelude.c" }; static const char prelude_name13[] = ""; @@ -3665,7 +3594,7 @@ " return 0.0\n" " end\n" "end\n" -#line 3669 "miniprelude.c" +#line 3598 "miniprelude.c" }; static const char prelude_name14[] = ""; @@ -3695,7 +3624,7 @@ "\n" " private :pp\n" "end\n" -#line 3699 "miniprelude.c" +#line 3628 "miniprelude.c" }; static const char prelude_name15[] = ""; @@ -3722,7 +3651,7 @@ "rescue LoadError\n" " warn \"`did_you_mean' was not loaded.\"\n" "end if defined?(DidYouMean)\n" -#line 3726 "miniprelude.c" +#line 3655 "miniprelude.c" }; static const char prelude_name16[] = ""; @@ -4063,7 +3992,7 @@ " end\n" " end\n" "end\n" -#line 4067 "miniprelude.c" +#line 3996 "miniprelude.c" }; COMPILER_WARNING_POP