// returns either an expression or a thunk jl_value_t *jl_expand(jl_value_t *expr) { int np = jl_gc_n_preserved_values(); value_t arg = julia_to_scm(expr); value_t e = fl_applyn(1, symbol_value(symbol("jl-expand-to-thunk")), arg); jl_value_t *result = scm_to_julia(e,0); while (jl_gc_n_preserved_values() > np) { jl_gc_unpreserve(); } return result; }
DLLEXPORT jl_value_t *jl_macroexpand(jl_value_t *expr) { int np = jl_gc_n_preserved_values(); value_t arg = julia_to_scm(expr); value_t e = fl_applyn(1, symbol_value(symbol("jl-macroexpand")), arg); jl_value_t *result; result = scm_to_julia(e); while (jl_gc_n_preserved_values() > np) { jl_gc_unpreserve(); } return result; }
// returns either an expression or a thunk jl_value_t *jl_expand(jl_value_t *expr) { int np = jl_gc_n_preserved_values(); value_t arg = julia_to_scm(expr); value_t e = fl_applyn(1, symbol_value(symbol("jl-expand-to-thunk")), arg); jl_value_t *result; if (e == FL_T || e == FL_F || e == FL_EOF) { result = NULL; } else { result = scm_to_julia(e); } while (jl_gc_n_preserved_values() > np) { jl_gc_unpreserve(); } return result; }