@@ -28,7 +28,7 @@ JL_DLLEXPORT int jl_is_valid_oc_argtype(jl_tupletype_t *argt, jl_method_t *sourc
28
28
}
29
29
30
30
static 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 )
32
32
{
33
33
if (!jl_is_tuple_type ((jl_value_t * )argt )) {
34
34
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
61
61
}
62
62
}
63
63
jl_task_t * ct = jl_current_task ;
64
- size_t world = ct -> world_age ;
65
64
jl_code_instance_t * ci = NULL ;
66
65
if (do_compile ) {
67
66
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_
136
135
{
137
136
jl_value_t * captures = jl_f_tuple (NULL , env , nenv );
138
137
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 );
140
139
JL_GC_POP ();
141
140
return oc ;
142
141
}
143
142
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 )
146
145
{
147
146
jl_value_t * root = NULL , * sigtype = NULL ;
148
147
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
152
151
root = jl_new_struct (jl_linenumbernode_type , root , file );
153
152
jl_method_t * meth = jl_make_opaque_closure_method (mod , jl_nothing , nargs , root , ci , isva , isinferred );
154
153
root = (jl_value_t * )meth ;
155
- size_t world = jl_current_task -> world_age ;
156
154
// these are only legal in the current world since they are not in any tables
157
155
jl_atomic_store_release (& meth -> primary_world , world );
158
156
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
169
167
jl_mi_cache_insert (mi , inst );
170
168
}
171
169
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 );
173
171
JL_GC_POP ();
174
172
return oc ;
175
173
}
176
174
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
+
177
181
JL_CALLABLE (jl_new_opaque_closure_jlcall )
178
182
{
179
183
if (nargs < 5 )
0 commit comments