@@ -2638,12 +2638,12 @@ static void jl_prune_module_bindings(jl_module_t * m) JL_GC_DISABLED
2638
2638
jl_gc_wb (m , jl_atomic_load_relaxed (& bindingkeyset2 ));
2639
2639
}
2640
2640
2641
- static void strip_slotnames (jl_array_t * slotnames )
2641
+ static void strip_slotnames (jl_array_t * slotnames , int n )
2642
2642
{
2643
2643
// replace slot names with `?`, except unused_sym since the compiler looks at it
2644
2644
jl_sym_t * questionsym = jl_symbol ("?" );
2645
- int i , l = jl_array_len ( slotnames ) ;
2646
- for (i = 0 ; i < l ; i ++ ) {
2645
+ int i ;
2646
+ for (i = 0 ; i < n ; i ++ ) {
2647
2647
jl_value_t * s = jl_array_ptr_ref (slotnames , i );
2648
2648
if (s != (jl_value_t * )jl_unused_sym )
2649
2649
jl_array_ptr_set (slotnames , i , questionsym );
@@ -2662,7 +2662,7 @@ static jl_value_t *strip_codeinfo_meta(jl_method_t *m, jl_value_t *ci_, jl_code_
2662
2662
else {
2663
2663
ci = (jl_code_info_t * )ci_ ;
2664
2664
}
2665
- strip_slotnames (ci -> slotnames );
2665
+ strip_slotnames (ci -> slotnames , jl_array_len ( ci -> slotnames ) );
2666
2666
ci -> debuginfo = jl_nulldebuginfo ;
2667
2667
jl_gc_wb (ci , ci -> debuginfo );
2668
2668
jl_value_t * ret = (jl_value_t * )ci ;
@@ -2736,7 +2736,11 @@ static int strip_all_codeinfos__(jl_typemap_entry_t *def, void *_env)
2736
2736
}
2737
2737
jl_array_t * slotnames = jl_uncompress_argnames (m -> slot_syms );
2738
2738
JL_GC_PUSH1 (& slotnames );
2739
- strip_slotnames (slotnames );
2739
+ int tostrip = jl_array_len (slotnames );
2740
+ // for keyword methods, strip only nargs to keep the keyword names at the end for reflection
2741
+ if (jl_tparam0 (jl_unwrap_unionall (m -> sig )) == jl_typeof (jl_kwcall_func ))
2742
+ tostrip = m -> nargs ;
2743
+ strip_slotnames (slotnames , tostrip );
2740
2744
m -> slot_syms = jl_compress_argnames (slotnames );
2741
2745
jl_gc_wb (m , m -> slot_syms );
2742
2746
JL_GC_POP ();
0 commit comments