mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 112120969d | |||
| 63956036e1 | |||
| cdf45438f0 |
@@ -34,7 +34,7 @@ struct REnv {
|
||||
#define MRB_ENV_HEAP_P(e) ((e)->flags & MRB_ENV_HEAPED)
|
||||
#define MRB_ENV_ONSTACK_P(e) (((e)->flags & MRB_ENV_CLOSED) == 0)
|
||||
#define MRB_ENV_BIDX(e) (((e)->flags >> 8) & 0xff)
|
||||
#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<10))
|
||||
#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<8))
|
||||
|
||||
void mrb_env_unshare(mrb_state*, struct REnv*);
|
||||
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key)
|
||||
|
||||
default:
|
||||
hv = mrb_funcall(mrb, key, "hash", 0);
|
||||
h = (size_t)t ^ (size_t)mrb_fixnum(hv);
|
||||
h = (size_t)tt ^ (size_t)mrb_fixnum(hv);
|
||||
break;
|
||||
}
|
||||
if (index && (index != t->index || capa != index->capa)) {
|
||||
|
||||
@@ -754,16 +754,25 @@ mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value
|
||||
ci = cipush(mrb);
|
||||
ci->mid = mid;
|
||||
ci->proc = p;
|
||||
ci->stackent = mrb->c->stack;
|
||||
ci->argc = (int)argc;
|
||||
ci->target_class = c;
|
||||
ci->acc = CI_ACC_SKIP;
|
||||
n = MRB_PROC_CFUNC_P(p) ? (int)(argc+2) : p->body.irep->nregs;
|
||||
mrb->c->stack = mrb->c->stack + n;
|
||||
ci->stackent = mrb->c->stack;
|
||||
mrb->c->stack += n;
|
||||
if (argc >= CALL_MAXARGS) {
|
||||
ci->argc = -1;
|
||||
n = 3;
|
||||
}
|
||||
else {
|
||||
ci->argc = (int)argc;
|
||||
n = argc + 2;
|
||||
}
|
||||
mrb_stack_extend(mrb, n);
|
||||
|
||||
mrb->c->stack[0] = self;
|
||||
if (argc > 0) {
|
||||
if (ci->argc < 0) {
|
||||
mrb->c->stack[1] = mrb_ary_new_from_values(mrb, argc, argv);
|
||||
argc = 1;
|
||||
}
|
||||
else if (argc > 0) {
|
||||
stack_copy(mrb->c->stack+1, argv, argc);
|
||||
}
|
||||
mrb->c->stack[argc+1] = mrb_nil_value();
|
||||
|
||||
@@ -116,6 +116,13 @@ assert('Kernel#block_given?', '15.3.1.3.6') do
|
||||
"block"
|
||||
end
|
||||
end
|
||||
|
||||
def bg_try_in_block
|
||||
-> { block_given? }[]
|
||||
end
|
||||
|
||||
assert_false bg_try_in_block
|
||||
assert_true bg_try_in_block{}
|
||||
end
|
||||
|
||||
assert('Kernel#class', '15.3.1.3.7') do
|
||||
|
||||
Reference in New Issue
Block a user