@@ -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 );
@@ -136,13 +135,13 @@ jl_opaque_closure_t *jl_new_opaque_closure(jl_tupletype_t *argt, jl_value_t *rt_
136135{
137136 jl_value_t * captures = jl_f_tuple (NULL , env , nenv );
138137 JL_GC_PUSH1 (& captures );
139- jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , source_ , captures , do_compile );
138+ jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , source_ , captures , do_compile , jl_current_task -> world_age );
140139 JL_GC_POP ();
141140 return oc ;
142141}
143142
144- 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 ,
145- 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 )
143+ 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 ,
144+ 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 )
146145{
147146 jl_value_t * root = NULL , * sigtype = NULL ;
148147 jl_code_instance_t * inst = NULL ;
@@ -152,7 +151,6 @@ JL_DLLEXPORT jl_opaque_closure_t *jl_new_opaque_closure_from_code_info(jl_tuplet
152151 root = jl_new_struct (jl_linenumbernode_type , root , file );
153152 jl_method_t * meth = jl_make_opaque_closure_method (mod , jl_nothing , nargs , root , ci , isva , isinferred );
154153 root = (jl_value_t * )meth ;
155- size_t world = jl_current_task -> world_age ;
156154 // these are only legal in the current world since they are not in any tables
157155 jl_atomic_store_release (& meth -> primary_world , world );
158156 jl_atomic_store_release (& meth -> deleted_world , world );
@@ -169,11 +167,17 @@ JL_DLLEXPORT jl_opaque_closure_t *jl_new_opaque_closure_from_code_info(jl_tuplet
169167 jl_mi_cache_insert (mi , inst );
170168 }
171169
172- jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , root , env , do_compile );
170+ jl_opaque_closure_t * oc = new_opaque_closure (argt , rt_lb , rt_ub , root , env , do_compile , world );
173171 JL_GC_POP ();
174172 return oc ;
175173}
176174
175+ 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 ,
176+ 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 )
177+ {
178+ 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 );
179+ }
180+
177181JL_CALLABLE (jl_new_opaque_closure_jlcall )
178182{
179183 if (nargs < 5 )
0 commit comments