mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge remote-tracking branch 'upstream/master' into lang-doc
This commit is contained in:
@@ -311,7 +311,6 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
|
||||
int ai = mrb_gc_arena_save(mrb);
|
||||
|
||||
p = mrb_proc_new_cfunc(mrb, func);
|
||||
p->target_class = c;
|
||||
mrb_define_method_raw(mrb, c, mid, p);
|
||||
mrb_gc_arena_restore(mrb, ai);
|
||||
}
|
||||
|
||||
@@ -1551,7 +1551,6 @@ codegen(codegen_scope *s, node *tree, int val)
|
||||
// variable rhs
|
||||
codegen(s, t, VAL);
|
||||
gen_vmassignment(s, tree->car, rhs, val);
|
||||
if (!val) pop();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
+11
-1
@@ -5210,6 +5210,8 @@ mrb_parse_string(mrb_state *mrb, const char *s, mrbc_context *c)
|
||||
static mrb_value
|
||||
load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
|
||||
{
|
||||
struct RClass *target = mrb->object_class;
|
||||
struct RProc *proc;
|
||||
int n;
|
||||
mrb_value v;
|
||||
|
||||
@@ -5243,8 +5245,16 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
|
||||
if (c) {
|
||||
if (c->dump_result) codedump_all(mrb, n);
|
||||
if (c->no_exec) return mrb_fixnum_value(n);
|
||||
if (c->target_class) {
|
||||
target = c->target_class;
|
||||
}
|
||||
}
|
||||
v = mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
|
||||
proc = mrb_proc_new(mrb, mrb->irep[n]);
|
||||
proc->target_class = target;
|
||||
if (mrb->c->ci) {
|
||||
mrb->c->ci->target_class = target;
|
||||
}
|
||||
v = mrb_run(mrb, proc, mrb_top_self(mrb));
|
||||
if (mrb->exc) return mrb_nil_value();
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -386,9 +386,9 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr
|
||||
if (MRB_PROC_CFUNC_P(p)) {
|
||||
int ai = mrb_gc_arena_save(mrb);
|
||||
val = p->body.func(mrb, self);
|
||||
mrb_gc_arena_restore(mrb, ai);
|
||||
mrb->c->stack = mrb->c->stbase + mrb->c->ci->stackidx;
|
||||
cipop(mrb);
|
||||
mrb_gc_arena_restore(mrb, ai);
|
||||
}
|
||||
else {
|
||||
val = mrb_run(mrb, p, self);
|
||||
|
||||
Reference in New Issue
Block a user