aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-05 17:39:52 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-05 17:39:52 +0000
commit5f05c269e943b7c633f999b5f046122ba39559fa (patch)
tree7af6686cefbcfe7d60e5eb564f7b72cc10bcf165
parent78029f00d5e330ea7bb594d1abef54e490effc2d (diff)
downloadruby-5f05c269e943b7c633f999b5f046122ba39559fa.tar.gz
* insnhelper.h, insns.def (DEC_SP): shoudn't use unary minus operator
in pointer operation. some compilers (such as VC++8 x64) cannot deal it with expected way. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12442 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--insnhelper.h5
-rw-r--r--insns.def4
3 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d67aac9902..b0fb0f2ad7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jun 6 02:40:20 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * insnhelper.h, insns.def (DEC_SP): shoudn't use unary minus operator
+ in pointer operation. some compilers (such as VC++8 x64) cannot deal
+ it with expected way.
+
Wed Jun 6 02:19:48 2007 Koichi Sasada <ko1@atdot.net>
* parse.y (new_yield), compile.c (iseq_compile_each): fix
diff --git a/insnhelper.h b/insnhelper.h
index 1c13dd4df2..eb6b3ef21b 100644
--- a/insnhelper.h
+++ b/insnhelper.h
@@ -25,8 +25,8 @@
#define PUSH(x) (SET_SV(x), INC_SP(1))
#define TOPN(n) (*(GET_SP()-(n)-1))
-#define POPN(n) (INC_SP(-(n)))
-#define POP() (INC_SP(-1))
+#define POPN(n) (DEC_SP(n))
+#define POP() (DEC_SP(1))
#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
#define GET_TOS() (tos) /* dummy */
@@ -84,6 +84,7 @@
#define GET_SP() (USAGE_ANALYSIS_REGISTER_HELPER(1, 0, REG_SP))
#define SET_SP(x) (REG_SP = (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
#define INC_SP(x) (REG_SP += (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
+#define DEC_SP(x) (REG_SP -= (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
#define SET_SV(x) (*GET_SP() = (x))
/* set current stack value as x */
diff --git a/insns.def b/insns.def
index dc8b47b149..57ef5b5ecd 100644
--- a/insns.def
+++ b/insns.def
@@ -1190,7 +1190,7 @@ send
mn = rb_method_node(klass, id);
num -= 1;
- INC_SP(-1);
+ DEC_SP(1);
}
if (node->nd_cfnc == rb_f_funcall) {
@@ -1344,7 +1344,7 @@ invokeblock
}
}
- INC_SP(-argc);
+ DEC_SP(argc);
argc = th_yield_setup_args(th, iseq, argc, GET_SP(),
block_proc_is_lambda(block->proc));
INC_SP(argc);