Skip to content

Commit 613bbbf

Browse files
committed
Make version of opaque closure constructor in world
1 parent ece1c70 commit 613bbbf

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

src/jl_exported_funcs.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,8 @@
335335
XX(jl_new_method_table) \
336336
XX(jl_new_method_uninit) \
337337
XX(jl_new_module) \
338+
XX(jl_new_opaque_closure_from_code_info) \
339+
XX(jl_new_opaque_closure_from_code_info_in_world) \
338340
XX(jl_new_primitivetype) \
339341
XX(jl_new_struct) \
340342
XX(jl_new_structt) \

src/opaque_closure.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ JL_DLLEXPORT int jl_is_valid_oc_argtype(jl_tupletype_t *argt, jl_method_t *sourc
2828
}
2929

3030
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)
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+
177181
JL_CALLABLE(jl_new_opaque_closure_jlcall)
178182
{
179183
if (nargs < 5)

0 commit comments

Comments
 (0)