@@ -1070,14 +1070,22 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
10701070 JL_GC_POP ();
10711071}
10721072
1073- void JL_NORETURN jl_method_error_bare (jl_function_t * f , jl_value_t * args )
1073+ void JL_NORETURN jl_method_error_bare (jl_function_t * f , jl_value_t * args , size_t world )
10741074{
10751075 if (jl_methoderror_type ) {
1076- jl_throw (jl_new_struct (jl_methoderror_type , f , args ));
1076+ jl_value_t * e = jl_new_struct_uninit (jl_methoderror_type );
1077+ struct jl_method_error {
1078+ jl_value_t * f ;
1079+ jl_value_t * args ;
1080+ size_t world ;
1081+ } * pe = (void * )e ,
1082+ ee = {f , args , world };
1083+ * pe = ee ;
1084+ jl_throw (e );
10771085 }
10781086 else {
10791087 jl_printf ((JL_STREAM * )STDERR_FILENO , "A method error occurred before the base MethodError type was defined. Aborting...\n" );
1080- jl_static_show ((JL_STREAM * )STDERR_FILENO ,(jl_value_t * )f ); jl_printf ((JL_STREAM * )STDERR_FILENO ,"\n" );
1088+ jl_static_show ((JL_STREAM * )STDERR_FILENO ,(jl_value_t * )f ); jl_printf ((JL_STREAM * )STDERR_FILENO ," world %u \n" , ( unsigned ) world );
10811089 jl_static_show ((JL_STREAM * )STDERR_FILENO ,args ); jl_printf ((JL_STREAM * )STDERR_FILENO ,"\n" );
10821090 jl_ptls_t ptls = jl_get_ptls_states ();
10831091 ptls -> bt_size = rec_backtrace (ptls -> bt_data , JL_MAX_BT_SIZE );
@@ -1087,11 +1095,11 @@ void JL_NORETURN jl_method_error_bare(jl_function_t *f, jl_value_t *args)
10871095 // not reached
10881096}
10891097
1090- void JL_NORETURN jl_method_error (jl_function_t * f , jl_value_t * * args , size_t na )
1098+ void JL_NORETURN jl_method_error (jl_function_t * f , jl_value_t * * args , size_t na , size_t world )
10911099{
10921100 jl_value_t * argtup = jl_f_tuple (NULL , args + 1 , na - 1 );
10931101 JL_GC_PUSH1 (& argtup );
1094- jl_method_error_bare (f , argtup );
1102+ jl_method_error_bare (f , argtup , world );
10951103 // not reached
10961104}
10971105
@@ -1891,7 +1899,7 @@ JL_DLLEXPORT jl_value_t *jl_apply_generic(jl_value_t **args, uint32_t nargs)
18911899 if (error_en )
18921900 show_call (F , args , nargs );
18931901#endif
1894- jl_method_error ((jl_function_t * )args [0 ], args , nargs );
1902+ jl_method_error ((jl_function_t * )args [0 ], args , nargs , world );
18951903 // unreachable
18961904 }
18971905 }
@@ -1938,7 +1946,7 @@ jl_value_t *jl_gf_invoke(jl_tupletype_t *types0, jl_value_t **args, size_t nargs
19381946 jl_typemap_entry_t * entry = (jl_typemap_entry_t * )jl_gf_invoke_lookup (types , world );
19391947
19401948 if ((jl_value_t * )entry == jl_nothing ) {
1941- jl_method_error_bare (gf , (jl_value_t * )types0 );
1949+ jl_method_error_bare (gf , (jl_value_t * )types0 , world );
19421950 // unreachable
19431951 }
19441952
0 commit comments