Skip to content

Commit 2b68949

Browse files
committed
pass ast context to julia_to_scm
1 parent 1dc1459 commit 2b68949

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

src/ast.c

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ struct macroctx_stack {
153153
};
154154

155155
static jl_value_t *scm_to_julia(fl_context_t *fl_ctx, value_t e, jl_module_t *mod);
156-
static value_t julia_to_scm(fl_context_t *fl_ctx, jl_value_t *v);
156+
static value_t julia_to_scm(jl_ast_context_t *ctx, jl_value_t *v);
157157
static jl_value_t *jl_expand_macros(jl_value_t *expr, jl_module_t *inmodule, struct macroctx_stack *macroctx, int onelevel, size_t world, int throw_load_error);
158158

159159
static jl_sym_t *scmsym_to_julia(fl_context_t *fl_ctx, value_t s)
@@ -680,37 +680,40 @@ static jl_value_t *scm_to_julia_(fl_context_t *fl_ctx, value_t e, jl_module_t *m
680680
jl_error("malformed tree");
681681
}
682682

683-
static value_t julia_to_scm_(fl_context_t *fl_ctx, jl_value_t *v, int check_valid);
683+
static value_t julia_to_scm_(jl_ast_context_t *ctx, jl_value_t *v, int check_valid);
684684

685-
static value_t julia_to_scm(fl_context_t *fl_ctx, jl_value_t *v)
685+
static value_t julia_to_scm(jl_ast_context_t *ctx, jl_value_t *v)
686686
{
687687
value_t temp;
688688
// need try/catch to reset GC handle stack in case of error
689+
fl_context_t *fl_ctx = &ctx->fl;
689690
FL_TRY_EXTERN(fl_ctx) {
690-
temp = julia_to_scm_(fl_ctx, v, 1);
691+
temp = julia_to_scm_(ctx, v, 1);
691692
}
692693
FL_CATCH_EXTERN(fl_ctx) {
693694
temp = fl_ctx->lasterror;
694695
}
695696
return temp;
696697
}
697698

698-
static void array_to_list(fl_context_t *fl_ctx, jl_array_t *a, value_t *pv, int check_valid)
699+
static void array_to_list(jl_ast_context_t *ctx, jl_array_t *a, value_t *pv, int check_valid)
699700
{
700701
value_t temp;
702+
fl_context_t *fl_ctx = &ctx->fl;
701703
for (long i = jl_array_nrows(a) - 1; i >= 0; i--) {
702704
*pv = fl_cons(fl_ctx, fl_ctx->NIL, *pv);
703-
temp = julia_to_scm_(fl_ctx, jl_array_ptr_ref(a, i), check_valid);
705+
temp = julia_to_scm_(ctx, jl_array_ptr_ref(a, i), check_valid);
704706
// note: must be separate statement
705707
car_(*pv) = temp;
706708
}
707709
}
708710

709-
static value_t julia_to_list2(fl_context_t *fl_ctx, jl_value_t *a, jl_value_t *b, int check_valid)
711+
static value_t julia_to_list2(jl_ast_context_t *ctx, jl_value_t *a, jl_value_t *b, int check_valid)
710712
{
711-
value_t sa = julia_to_scm_(fl_ctx, a, check_valid);
713+
fl_context_t *fl_ctx = &ctx->fl;
714+
value_t sa = julia_to_scm_(ctx, a, check_valid);
712715
fl_gc_handle(fl_ctx, &sa);
713-
value_t sb = julia_to_scm_(fl_ctx, b, check_valid);
716+
value_t sb = julia_to_scm_(ctx, b, check_valid);
714717
value_t l = fl_list2(fl_ctx, sa, sb);
715718
fl_free_gc_handles(fl_ctx, 1);
716719
return l;
@@ -784,12 +787,13 @@ static value_t julia_to_list2_noalloc(fl_context_t *fl_ctx, jl_value_t *a, jl_va
784787
return l;
785788
}
786789

787-
static value_t julia_to_scm_(fl_context_t *fl_ctx, jl_value_t *v, int check_valid)
790+
static value_t julia_to_scm_(jl_ast_context_t *ctx, jl_value_t *v, int check_valid)
788791
{
789792
// The following code will take internal pointers to v's fields. We need to make sure
790793
// that v will not be moved by GC.
791794
OBJ_PIN(v);
792795
value_t retval;
796+
fl_context_t *fl_ctx = &ctx->fl;
793797
if (julia_to_scm_noalloc1(fl_ctx, v, &retval))
794798
return retval;
795799
if (jl_is_expr(v)) {
@@ -798,12 +802,12 @@ static value_t julia_to_scm_(fl_context_t *fl_ctx, jl_value_t *v, int check_vali
798802
fl_gc_handle(fl_ctx, &args);
799803
if (jl_expr_nargs(ex) > 520000 && ex->head != jl_block_sym)
800804
lerror(fl_ctx, symbol(fl_ctx, "error"), "expression too large");
801-
array_to_list(fl_ctx, ex->args, &args, check_valid);
802-
value_t hd = julia_to_scm_(fl_ctx, (jl_value_t*)ex->head, check_valid);
805+
array_to_list(ctx, ex->args, &args, check_valid);
806+
value_t hd = julia_to_scm_(ctx, (jl_value_t*)ex->head, check_valid);
803807
if (ex->head == jl_lambda_sym && jl_expr_nargs(ex)>0 && jl_is_array(jl_exprarg(ex,0))) {
804808
value_t llist = fl_ctx->NIL;
805809
fl_gc_handle(fl_ctx, &llist);
806-
array_to_list(fl_ctx, (jl_array_t*)jl_exprarg(ex,0), &llist, check_valid);
810+
array_to_list(ctx, (jl_array_t*)jl_exprarg(ex,0), &llist, check_valid);
807811
car_(args) = llist;
808812
fl_free_gc_handles(fl_ctx, 1);
809813
}
@@ -819,26 +823,26 @@ static value_t julia_to_scm_(fl_context_t *fl_ctx, jl_value_t *v, int check_vali
819823
jl_value_t *line = jl_fieldref(v,0);
820824
value_t args = julia_to_list2_noalloc(fl_ctx, line, file, check_valid);
821825
fl_gc_handle(fl_ctx, &args);
822-
value_t hd = julia_to_scm_(fl_ctx, (jl_value_t*)jl_line_sym, check_valid);
826+
value_t hd = julia_to_scm_(ctx, (jl_value_t*)jl_line_sym, check_valid);
823827
value_t scmv = fl_cons(fl_ctx, hd, args);
824828
fl_free_gc_handles(fl_ctx, 1);
825829
return scmv;
826830
}
827831
if (jl_typetagis(v, jl_gotonode_type))
828832
return julia_to_list2_noalloc(fl_ctx, (jl_value_t*)jl_goto_sym, jl_fieldref(v,0), check_valid);
829833
if (jl_typetagis(v, jl_quotenode_type))
830-
return julia_to_list2(fl_ctx, (jl_value_t*)jl_inert_sym, jl_fieldref_noalloc(v,0), 0);
834+
return julia_to_list2(ctx, (jl_value_t*)jl_inert_sym, jl_fieldref_noalloc(v,0), 0);
831835
if (jl_typetagis(v, jl_newvarnode_type))
832836
return julia_to_list2_noalloc(fl_ctx, (jl_value_t*)jl_newvar_sym, jl_fieldref(v,0), check_valid);
833837
if (jl_typetagis(v, jl_globalref_type)) {
834838
jl_module_t *m = jl_globalref_mod(v);
835839
jl_sym_t *sym = jl_globalref_name(v);
836840
if (m == jl_core_module)
837-
return julia_to_list2(fl_ctx, (jl_value_t*)jl_core_sym,
841+
return julia_to_list2(ctx, (jl_value_t*)jl_core_sym,
838842
(jl_value_t*)sym, check_valid);
839-
value_t args = julia_to_list2(fl_ctx, (jl_value_t*)m, (jl_value_t*)sym, check_valid);
843+
value_t args = julia_to_list2(ctx, (jl_value_t*)m, (jl_value_t*)sym, check_valid);
840844
fl_gc_handle(fl_ctx, &args);
841-
value_t hd = julia_to_scm_(fl_ctx, (jl_value_t*)jl_globalref_sym, check_valid);
845+
value_t hd = julia_to_scm_(ctx, (jl_value_t*)jl_globalref_sym, check_valid);
842846
value_t scmv = fl_cons(fl_ctx, hd, args);
843847
fl_free_gc_handles(fl_ctx, 1);
844848
return scmv;
@@ -906,8 +910,8 @@ JL_DLLEXPORT jl_value_t *jl_fl_parse(const char *text, size_t text_len,
906910
static jl_value_t *jl_call_scm_on_ast(const char *funcname, jl_value_t *expr, jl_module_t *inmodule)
907911
{
908912
jl_ast_context_t *ctx = jl_ast_ctx_enter(inmodule);
913+
value_t arg = julia_to_scm(ctx, expr);
909914
fl_context_t *fl_ctx = &ctx->fl;
910-
value_t arg = julia_to_scm(fl_ctx, expr);
911915
value_t e = fl_applyn(fl_ctx, 1, symbol_value(symbol(fl_ctx, funcname)), arg);
912916
jl_value_t *result = scm_to_julia(fl_ctx, e, inmodule);
913917
JL_GC_PUSH1(&result);
@@ -920,8 +924,8 @@ jl_value_t *jl_call_scm_on_ast_and_loc(const char *funcname, jl_value_t *expr,
920924
jl_module_t *inmodule, const char *file, int line)
921925
{
922926
jl_ast_context_t *ctx = jl_ast_ctx_enter(inmodule);
927+
value_t arg = julia_to_scm(ctx, expr);
923928
fl_context_t *fl_ctx = &ctx->fl;
924-
value_t arg = julia_to_scm(fl_ctx, expr);
925929
value_t e = fl_applyn(fl_ctx, 3, symbol_value(symbol(fl_ctx, funcname)), arg,
926930
symbol(fl_ctx, file), fixnum(line));
927931
jl_value_t *result = scm_to_julia(fl_ctx, e, inmodule);
@@ -1322,8 +1326,8 @@ JL_DLLEXPORT jl_value_t *jl_expand_with_loc_warn(jl_value_t *expr, jl_module_t *
13221326
expr = jl_copy_ast(expr);
13231327
expr = jl_expand_macros(expr, inmodule, NULL, 0, ~(size_t)0, 1);
13241328
jl_ast_context_t *ctx = jl_ast_ctx_enter(inmodule);
1329+
value_t arg = julia_to_scm(ctx, expr);
13251330
fl_context_t *fl_ctx = &ctx->fl;
1326-
value_t arg = julia_to_scm(fl_ctx, expr);
13271331
value_t e = fl_applyn(fl_ctx, 4, symbol_value(symbol(fl_ctx, "jl-expand-to-thunk-warn")), arg,
13281332
symbol(fl_ctx, file), fixnum(line), fl_ctx->F);
13291333
expr = scm_to_julia(fl_ctx, e, inmodule);

0 commit comments

Comments
 (0)