зеркало из https://github.com/github/ruby.git
fix missed script_compiled events. [Bug #15471]
* ruby.c (process_options): script_compiled events are missed on command line -e or specified file. this commit fix it. [Bug #15471] This patch should be backport to Ruby 2.6 branch. * vm_core.h (rb_exec_event_hook_script_compiled): introduce utility function to invoke a script_compiled event. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
fcc5a19e2f
Коммит
496267023c
5
load.c
5
load.c
|
@ -608,9 +608,8 @@ rb_load_internal0(rb_execution_context_t *ec, VALUE fname, int wrap)
|
|||
fname, rb_realpath_internal(Qnil, fname, 1), NULL);
|
||||
rb_ast_dispose(ast);
|
||||
}
|
||||
EXEC_EVENT_HOOK(ec, RUBY_EVENT_SCRIPT_COMPILED,
|
||||
ec->cfp->self, 0, 0, 0, (VALUE)iseq);
|
||||
rb_iseq_eval(iseq);
|
||||
rb_exec_event_hook_script_compiled(ec, iseq, Qnil);
|
||||
rb_iseq_eval(iseq);
|
||||
}
|
||||
EC_POP_TAG();
|
||||
|
||||
|
|
12
ruby.c
12
ruby.c
|
@ -1863,6 +1863,18 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
|
|||
|
||||
rb_set_safe_level(opt->safe_level);
|
||||
|
||||
{
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
|
||||
if (opt->e_script) {
|
||||
/* -e */
|
||||
rb_exec_event_hook_script_compiled(ec, iseq, opt->e_script);
|
||||
}
|
||||
else {
|
||||
/* file */
|
||||
rb_exec_event_hook_script_compiled(ec, iseq, Qnil);
|
||||
}
|
||||
}
|
||||
return (VALUE)iseq;
|
||||
}
|
||||
|
||||
|
|
|
@ -1882,6 +1882,14 @@ rb_vm_global_hooks(const rb_execution_context_t *ec)
|
|||
#define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_, flag_, self_, id_, called_id_, klass_, data_) \
|
||||
EXEC_EVENT_HOOK_ORIG(ec_, rb_vm_global_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
|
||||
|
||||
static inline void
|
||||
rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
|
||||
{
|
||||
EXEC_EVENT_HOOK(ec, RUBY_EVENT_SCRIPT_COMPILED, ec->cfp->self, 0, 0, 0,
|
||||
NIL_P(eval_script) ? (VALUE)iseq :
|
||||
rb_ary_new_from_args(2, eval_script, (VALUE)iseq));
|
||||
}
|
||||
|
||||
RUBY_SYMBOL_EXPORT_BEGIN
|
||||
|
||||
int rb_thread_check_trap_pending(void);
|
||||
|
|
|
@ -1293,8 +1293,8 @@ eval_make_iseq(VALUE src, VALUE fname, int line, const rb_binding_t *bind,
|
|||
printf("%s\n", StringValuePtr(disasm));
|
||||
}
|
||||
|
||||
EXEC_EVENT_HOOK(GET_EC(), RUBY_EVENT_SCRIPT_COMPILED, GET_EC()->cfp->self, 0, 0, 0,
|
||||
rb_ary_new_from_args(2, src, (VALUE)iseq));
|
||||
rb_exec_event_hook_script_compiled(GET_EC(), iseq, src);
|
||||
|
||||
return iseq;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче