@@ -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 );
@@ -140,13 +139,13 @@ jl_opaque_closure_t *jl_new_opaque_closure(jl_tupletype_t *argt, jl_value_t *rt_
140
139
{
141
140
jl_value_t * captures = jl_f_tuple (NULL , env , nenv );
142
141
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 );
144
143
JL_GC_POP ();
145
144
return oc ;
146
145
}
147
146
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 )
150
149
{
151
150
jl_value_t * root = NULL , * sigtype = NULL ;
152
151
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
156
155
root = jl_new_struct (jl_linenumbernode_type , root , file );
157
156
jl_method_t * meth = jl_make_opaque_closure_method (mod , jl_nothing , nargs , root , ci , isva , isinferred );
158
157
root = (jl_value_t * )meth ;
159
- size_t world = jl_current_task -> world_age ;
160
158
// these are only legal in the current world since they are not in any tables
161
159
jl_atomic_store_release (& meth -> primary_world , world );
162
160
@@ -172,11 +170,17 @@ JL_DLLEXPORT jl_opaque_closure_t *jl_new_opaque_closure_from_code_info(jl_tuplet
172
170
jl_mi_cache_insert (mi , inst );
173
171
}
174
172
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 );
176
174
JL_GC_POP ();
177
175
return oc ;
178
176
}
179
177
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
+
180
184
JL_CALLABLE (jl_new_opaque_closure_jlcall )
181
185
{
182
186
if (nargs < 5 )
0 commit comments