diff options
author | Matt Valentine-House <[email protected]> | 2024-01-31 20:56:08 +0000 |
---|---|---|
committer | Kevin Newton <[email protected]> | 2024-02-13 21:19:12 -0500 |
commit | fd3f776a05505d71c818620fe9c6ca8fb3d132ea (patch) | |
tree | 1c5692589598db6f4ea1d5147e1322f790f980c3 /vm_eval.c | |
parent | 068b19bd53148d91397d0443de78eeeb8c1628ba (diff) |
[PRISM] Use Prism for `eval` if enabled
Diffstat (limited to 'vm_eval.c')
-rw-r--r-- | vm_eval.c | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -1643,9 +1643,40 @@ get_eval_default_path(void) } static const rb_iseq_t * +pm_eval_make_iseq(VALUE src, VALUE fname, int line, + const struct rb_block *base_block) +{ + rb_iseq_t *iseq = NULL; + const rb_iseq_t *const parent = vm_block_iseq(base_block); + const rb_iseq_t *iseq = parent; + VALUE name = rb_fstring_lit("<compiled>"); + fname = rb_fstring_lit("<compiled>"); + + pm_parse_result_t result = { 0 }; + VALUE error; + + + error = pm_parse_string(&result, src, fname); + + if (error == Qnil) { + iseq = pm_iseq_new_eval(&result.node, name, fname, fname, ln, parent, 0); + pm_parse_result_free(&result); + } + else { + pm_parse_result_free(&result); + rb_exc_raise(error); + } + + return iseq; +} + +static const rb_iseq_t * eval_make_iseq(VALUE src, VALUE fname, int line, const struct rb_block *base_block) { + if (*rb_ruby_prism_ptr()) { + return pm_eval_make_iseq(src, fname, line, base_block); + } const VALUE parser = rb_parser_new(); const rb_iseq_t *const parent = vm_block_iseq(base_block); rb_iseq_t *iseq = NULL; |