summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-25 15:05:37 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-25 15:05:37 +0900
commitd4e49c9f8fe752e8f7d3d6b9dc10a55307654dfd (patch)
treef24db700416f2390fe3804742760d3c7dbb12abf
parent8548aebcfafa01001f99b591bc3454188b78ca96 (diff)
parentf092ef6b141d0817bd76af9d9187e73029d3001b (diff)
downloadmruby-d4e49c9f8fe752e8f7d3d6b9dc10a55307654dfd.tar.gz
mruby-d4e49c9f8fe752e8f7d3d6b9dc10a55307654dfd.zip
Merge pull request #2422 from ksss/aspec-macro
OP_ENTER use MBR_ASPEC_* macros
-rw-r--r--include/mruby/proc.h2
-rw-r--r--src/vm.c14
2 files changed, 8 insertions, 8 deletions
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))
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;