From b0edba434c5c5c08e2c21a7dbe07839b9a314968 Mon Sep 17 00:00:00 2001 From: ksss Date: Wed, 25 Jun 2014 13:50:06 +0900 Subject: proc.h: MRB_ASPEC_REST() macro return 1 or 0 MRB_ASPEC_REST() is macro just only checks whether truthy or falsy. And truthy means exist 1 rest argument in current proc. --- include/mruby/proc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mruby/proc.h b/include/mruby/proc.h index 39f5eca22..82b93ddef 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -37,7 +37,7 @@ struct RProc { /* aspec access */ #define MRB_ASPEC_REQ(a) (((a) >> 18) & 0x1f) #define MRB_ASPEC_OPT(a) (((a) >> 13) & 0x1f) -#define MRB_ASPEC_REST(a) ((a) & (1<<12)) +#define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1) #define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f) #define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f) #define MRB_ASPEC_KDICT(a) ((a) & (1<<1)) -- cgit v1.2.3 From f092ef6b141d0817bd76af9d9187e73029d3001b Mon Sep 17 00:00:00 2001 From: ksss Date: Wed, 25 Jun 2014 13:51:19 +0900 Subject: OP_ENTER: Rewrite split aspec use macros --- src/vm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/vm.c b/src/vm.c index 9a0f03aba..d1d4b7bd4 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1364,14 +1364,14 @@ RETRY_TRY_BLOCK: /* Ax arg setup according to flags (23=5:5:1:5:5:1:1) */ /* number of optional arguments times OP_JMP should follow */ mrb_aspec ax = GETARG_Ax(i); - int m1 = (ax>>18)&0x1f; - int o = (ax>>13)&0x1f; - int r = (ax>>12)&0x1; - int m2 = (ax>>7)&0x1f; + int m1 = MRB_ASPEC_REQ(ax); + int o = MRB_ASPEC_OPT(ax); + int r = MRB_ASPEC_REST(ax); + int m2 = MRB_ASPEC_POST(ax); /* unused - int k = (ax>>2)&0x1f; - int kd = (ax>>1)&0x1; - int b = (ax>>0)& 0x1; + int k = MRB_ASPEC_KEY(ax); + int kd = MRB_ASPEC_KDICT(ax); + int b = MRB_ASPEC_BLOCK(ax); */ int argc = mrb->c->ci->argc; mrb_value *argv = regs+1; -- cgit v1.2.3