@@ -28,7 +28,7 @@ JL_DLLEXPORT int jl_is_valid_oc_argtype(jl_tupletype_t *argt, jl_method_t *sourc
2828}
2929
3030static jl_opaque_closure_t * new_opaque_closure (jl_tupletype_t * argt , jl_value_t * rt_lb , jl_value_t * rt_ub ,
31- jl_value_t * source_ , jl_value_t * captures , int do_compile )
31+ jl_value_t * source_ , jl_value_t * captures , int do_compile , size_t world )
3232{
3333 if (!jl_is_tuple_type ((jl_value_t * )argt )) {
3434 jl_error ("OpaqueClosure argument tuple must be a tuple type" );
@@ -61,7 +61,6 @@ static jl_opaque_closure_t *new_opaque_closure(jl_tupletype_t *argt, jl_value_t
6161 }
6262 }
6363 jl_task_t * ct = jl_current_task ;
64- size_t world = ct -> world_age ;
6564 jl_code_instance_t * ci = NULL ;
6665 if (do_compile ) {
6766 ci = jl_compile_method_internal (mi , world );
@@ -140,13 +139,13 @@ jl_opaque_closure_t *jl_new_opaque_closure(jl_tupletype_t *argt, jl_value_t *rt_
140139{
141140 jl_value_t * captures = jl_f_tuple (NULL , env , nenv );
142141 JL_GC_PUSH1 (& captures );
143- jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , source_ , captures , do_compile );
142+ jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , source_ , captures , do_compile , jl_current_task -> world_age );
144143 JL_GC_POP ();
145144 return oc ;
146145}
147146
148- JL_DLLEXPORT jl_opaque_closure_t * jl_new_opaque_closure_from_code_info (jl_tupletype_t * argt , jl_value_t * rt_lb , jl_value_t * rt_ub ,
149- jl_module_t * mod , jl_code_info_t * ci , int lineno , jl_value_t * file , int nargs , int isva , jl_value_t * env , int do_compile , int isinferred )
147+ JL_DLLEXPORT jl_opaque_closure_t * jl_new_opaque_closure_from_code_info_in_world (jl_tupletype_t * argt , jl_value_t * rt_lb , jl_value_t * rt_ub ,
148+ jl_module_t * mod , jl_code_info_t * ci , int lineno , jl_value_t * file , int nargs , int isva , jl_value_t * env , int do_compile , int isinferred , size_t world )
150149{
151150 jl_value_t * root = NULL , * sigtype = NULL ;
152151 jl_code_instance_t * inst = NULL ;
@@ -156,7 +155,6 @@ JL_DLLEXPORT jl_opaque_closure_t *jl_new_opaque_closure_from_code_info(jl_tuplet
156155 root = jl_new_struct (jl_linenumbernode_type , root , file );
157156 jl_method_t * meth = jl_make_opaque_closure_method (mod , jl_nothing , nargs , root , ci , isva , isinferred );
158157 root = (jl_value_t * )meth ;
159- size_t world = jl_current_task -> world_age ;
160158 // these are only legal in the current world since they are not in any tables
161159 jl_atomic_store_release (& meth -> primary_world , world );
162160
@@ -172,11 +170,17 @@ JL_DLLEXPORT jl_opaque_closure_t *jl_new_opaque_closure_from_code_info(jl_tuplet
172170 jl_mi_cache_insert (mi , inst );
173171 }
174172
175- jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , root , env , do_compile );
173+ jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , root , env , do_compile , world );
176174 JL_GC_POP ();
177175 return oc ;
178176}
179177
178+ JL_DLLEXPORT jl_opaque_closure_t * jl_new_opaque_closure_from_code_info (jl_tupletype_t * argt , jl_value_t * rt_lb , jl_value_t * rt_ub ,
179+ jl_module_t * mod , jl_code_info_t * ci , int lineno , jl_value_t * file , int nargs , int isva , jl_value_t * env , int do_compile , int isinferred )
180+ {
181+ return jl_new_opaque_closure_from_code_info_in_world (argt , rt_lb , rt_ub , mod , ci , lineno , file , nargs , isva , env , do_compile , isinferred , jl_current_task -> world_age );
182+ }
183+
180184JL_CALLABLE (jl_new_opaque_closure_jlcall )
181185{
182186 if (nargs < 5 )
0 commit comments