[kaffe] CVS kaffe (dalibor): Replaced macro by static inline function
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Mon Feb 16 07:05:11 2004
PatchSet 4430
Date: 2004/02/16 15:01:48
Author: dalibor
Branch: HEAD
Tag: (none)
Log:
Replaced macro by static inline function
2004-02-15 Dalibor Topic <robilad@kaffe.org>
* kaffe/kaffevm/verify.c
(getOpstackTop): New static inline function.
(OPSTACK_TOP) Removed.
Replaced use of OPSTACK_Top by getOpstackTop.
Members:
ChangeLog:1.2013->1.2014
kaffe/kaffevm/verify.c:1.46->1.47
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2013 kaffe/ChangeLog:1.2014
--- kaffe/ChangeLog:1.2013 Mon Feb 16 14:31:38 2004
+++ kaffe/ChangeLog Mon Feb 16 15:01:48 2004
@@ -1,6 +1,13 @@
2004-02-15 Dalibor Topic <robilad@kaffe.org>
* kaffe/kaffevm/verify.c
+ (getOpstackTop): New static inline function.
+ (OPSTACK_TOP) Removed.
+ Replaced use of OPSTACK_Top by getOpstackTop.
+
+2004-02-15 Dalibor Topic <robilad@kaffe.org>
+
+ * kaffe/kaffevm/verify.c
(getOpstackItem): New static inline function.
(OPSTACK_ITEM) Removed.
Replaced use of OPSTACK_ITEM by getOpstackItem.
Index: kaffe/kaffe/kaffevm/verify.c
diff -u kaffe/kaffe/kaffevm/verify.c:1.46 kaffe/kaffe/kaffevm/verify.c:1.47
--- kaffe/kaffe/kaffevm/verify.c:1.46 Mon Feb 16 14:31:39 2004
+++ kaffe/kaffe/kaffevm/verify.c Mon Feb 16 15:01:50 2004
@@ -2567,6 +2567,18 @@
}
/*
+ * Helper function for opstack access in verifyBasicBlock.
+ *
+ * @return first item on the operand stack from the top.
+ */
+static inline
+Type *
+getOpstackTop(BlockInfo* block)
+{
+ return getOpstackItem(block, 1);
+}
+
+/*
* verifyBasicBlock()
* Simulates execution of a basic block by modifying its simulated operand stack and local variable array.
*/
@@ -2649,7 +2661,6 @@
}
-#define OPSTACK_TOP getOpstackItem(block, 1)
#define OPSTACK_WTOP getOpstackItem(block, 2)
#define OPSTACK_INFO(_N) \
@@ -2681,10 +2692,10 @@
/* ensure that the top item on the stack is of type _T */
#define OPSTACK_PEEK_T_BLIND(_TINFO) \
- if (!typecheck(einfo, this, _TINFO, OPSTACK_TOP)) { \
+ if (!typecheck(einfo, this, _TINFO, getOpstackTop(block))) { \
DBG(VERIFY3, \
dprintf(" OPSTACK_TOP: "); \
- printType(OPSTACK_TOP); \
+ printType(getOpstackTop(block)); \
dprintf(" vs. what's we wanted: "); \
printType(_TINFO); dprintf("\n"); ); \
return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type"); \
@@ -2698,7 +2709,7 @@
* this only works with doubles and longs
*/
#define OPSTACK_WPEEK_T_BLIND(_TINFO) \
- if (OPSTACK_TOP->data.class != TWIDE->data.class) { \
+ if (getOpstackTop(block)->data.class != TWIDE->data.class) { \
return verifyErrorInVerifyBasicBlock(einfo, method, this, "trying to pop a wide value off operand stack where there is none"); \
} else if (OPSTACK_WTOP->data.class != (_TINFO)->data.class) { \
return verifyErrorInVerifyBasicBlock(einfo, method, this, "mismatched stack types"); \
@@ -2890,7 +2901,7 @@
GET_CONST_INDEX;
ASTORE_common:
ENSURE_OPSTACK_SIZE(1);
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (!IS_ADDRESS(type) && !isReference(type)) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "astore: top of stack is not a return address or reference type");
@@ -3035,7 +3046,7 @@
case ARRAYLENGTH:
ENSURE_OPSTACK_SIZE(1);
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (!isArray(type)) {
DBG(VERIFY3, dprintf("%stype = ", indent); printType(type); dprintf("\n"); );
return verifyErrorInVerifyBasicBlock(einfo, method, this, "arraylength: top of operand stack is not an array");
@@ -3059,12 +3070,12 @@
case AALOAD:
ENSURE_OPSTACK_SIZE(2);
- if (OPSTACK_TOP->data.class != TINT->data.class) {
+ if (getOpstackTop(block)->data.class != TINT->data.class) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "aaload: item on top of stack is not an integer");
}
OPSTACK_POP_BLIND;
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (!isArray(type)) {
DBG(VERIFY3, dprintf("%serror: type = ", indent); printType(type); dprintf("\n"); );
return verifyErrorInVerifyBasicBlock(einfo, method, this, "aaload: top of operand stack is not an array");
@@ -3095,11 +3106,11 @@
/* BALOAD can be used for bytes or booleans .... */
OPSTACK_POP_T(TINT);
- if (!typecheck (einfo, this, TBYTEARR, OPSTACK_TOP) &&
- !typecheck (einfo, this, TBOOLARR, OPSTACK_TOP)) {
+ if (!typecheck (einfo, this, TBYTEARR, getOpstackTop(block)) &&
+ !typecheck (einfo, this, TBOOLARR, getOpstackTop(block))) {
DBG(VERIFY3,
dprintf(" OPSTACK_TOP: ");
- printType(OPSTACK_TOP);
+ printType(getOpstackTop(block));
dprintf(" vs. what's we wanted: TBYTEARR or TBOOLARR"); )
return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type");
}
@@ -3181,11 +3192,11 @@
OPSTACK_POP_T(TINT);
OPSTACK_POP_T(TINT);
- if ( !typecheck(einfo, this, TBYTEARR, OPSTACK_TOP) &&
- !typecheck(einfo, this, TBOOLARR, OPSTACK_TOP)) {
+ if ( !typecheck(einfo, this, TBYTEARR, getOpstackTop(block)) &&
+ !typecheck(einfo, this, TBOOLARR, getOpstackTop(block))) {
DBG(VERIFY3,
dprintf(" OPSTACK_TOP: ");
- printType(OPSTACK_TOP);
+ printType(getOpstackTop(block));
dprintf(" vs. what's we wanted: TBYTEARR or TBOOLARR"); )
return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type");
}
@@ -3344,7 +3355,7 @@
if (!isReference(getOpstackItem(block, 1))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "instanceof: top of stack is not a reference type");
}
- *OPSTACK_TOP = *TINT;
+ *getOpstackTop(block) = *TINT;
break;
case CHECKCAST:
@@ -3356,7 +3367,7 @@
n = code[pc + 3];
ENSURE_OPSTACK_SIZE(n);
while (n > 0) {
- if (OPSTACK_TOP->data.class != TINT->data.class) {
+ if (getOpstackTop(block)->data.class != TINT->data.class) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "multinewarray: first <n> things on opstack must be integers");
}
OPSTACK_POP_BLIND;
@@ -3369,7 +3380,7 @@
CHECK_STACK_OVERFLOW(1);
block->stacksz++;
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (pool->tags[idx] == CONSTANT_ResolvedClass) {
type->tinfo = TINFO_CLASS;
@@ -3390,7 +3401,7 @@
DBG(VERIFY3,
dprintf("%s", indent);
- printType(OPSTACK_TOP);
+ printType(getOpstackTop(block));
dprintf("\n"); );
break;
@@ -3399,7 +3410,7 @@
CHECK_STACK_OVERFLOW(1);
block->stacksz++;
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (pool->tags[idx] == CONSTANT_ResolvedClass) {
type->tinfo = TINFO_CLASS;
type->data.class = CLASS_CLASS(idx, pool);
@@ -3420,7 +3431,7 @@
DBG(VERIFY3,
dprintf("%s", indent);
- printType(OPSTACK_TOP);
+ printType(getOpstackTop(block));
dprintf("\n"); );
break;
@@ -3429,7 +3440,7 @@
GET_WIDX;
OPSTACK_PEEK_T(TINT);
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
if (pool->tags[idx] == CONSTANT_ResolvedClass) {
class = CLASS_CLASS(idx, pool);
type->tinfo = TINFO_CLASS;
@@ -3458,14 +3469,14 @@
DBG(VERIFY3,
dprintf("%s", indent);
- printType(OPSTACK_TOP);
+ printType(getOpstackTop(block));
dprintf("\n"); );
break;
case GETFIELD:
ENSURE_OPSTACK_SIZE(1);
- if (!checkUninit(this, OPSTACK_TOP)) {
+ if (!checkUninit(this, getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "getfield: uninitialized type on top of operand stack");
}
@@ -3505,7 +3516,7 @@
case 'L':
CHECK_STACK_OVERFLOW(1);
block->stacksz++;
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
type->tinfo = TINFO_SIG;
type->data.name = sig;
break;
@@ -3519,11 +3530,11 @@
case PUTFIELD:
- if (isWide(OPSTACK_TOP)) n = 3;
+ if (isWide(getOpstackTop(block))) n = 3;
else n = 2;
ENSURE_OPSTACK_SIZE(n);
- if (!checkUninit(this, OPSTACK_TOP)) {
+ if (!checkUninit(this, getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "putfield: uninitialized type on top of operand stack");
}
@@ -3569,7 +3580,7 @@
case PUTSTATIC:
- if (OPSTACK_TOP == TWIDE) n = 2;
+ if (getOpstackTop(block) == TWIDE) n = 2;
else n = 1;
ENSURE_OPSTACK_SIZE(n);
@@ -3614,7 +3625,7 @@
case JSR:
CHECK_STACK_OVERFLOW(1);
block->stacksz++;
- type = OPSTACK_TOP;
+ type = getOpstackTop(block);
type->tinfo = TINFO_ADDR;
type->data.addr = pc + insnLen[code[pc]];
break;
@@ -3626,7 +3637,7 @@
case IF_ACMPEQ:
case IF_ACMPNE:
ENSURE_OPSTACK_SIZE(2);
- if (!isReference(OPSTACK_TOP) ||
+ if (!isReference(getOpstackTop(block)) ||
!isReference(OPSTACK_WTOP)) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "if_acmp* when item on top of stack is not a reference type");
}
@@ -3722,7 +3733,7 @@
ENSURE_OPSTACK_SIZE(1);
t->tinfo = TINFO_SIG;
t->data.sig = getReturnSig(method);
- if (!typecheck(einfo, this, t, OPSTACK_TOP)) {
+ if (!typecheck(einfo, this, t, getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "areturn: top of stack is not type compatible with method return type");
}
break;
@@ -3737,8 +3748,8 @@
}
t->tinfo = TINFO_CLASS;
t->data.class = javaLangThrowable;
- if (!typecheck(einfo, this, t, OPSTACK_TOP)) {
- DBG(VERIFY3, dprintf("%sATHROW error: ", indent); printType(OPSTACK_TOP); dprintf ("\n"); );
+ if (!typecheck(einfo, this, t, getOpstackTop(block))) {
+ DBG(VERIFY3, dprintf("%sATHROW error: ", indent); printType(getOpstackTop(block)); dprintf ("\n"); );
return verifyErrorInVerifyBasicBlock(einfo, method, this, "athrow: object on top of stack is not a subclass of throwable");
}
@@ -3766,7 +3777,7 @@
case MONITORENTER:
case MONITOREXIT:
ENSURE_OPSTACK_SIZE(1);
- if(!isReference(OPSTACK_TOP)) {
+ if(!isReference(getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "monitor*: top of stack is not an object reference");
}
OPSTACK_POP_BLIND;
@@ -3775,20 +3786,20 @@
case DUP:
ENSURE_OPSTACK_SIZE(1);
- if (isWide(OPSTACK_TOP)) {
+ if (isWide(getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup: on a long or double");
}
- OPSTACK_PUSH(OPSTACK_TOP);
+ OPSTACK_PUSH(getOpstackTop(block));
break;
case DUP_X1:
ENSURE_OPSTACK_SIZE(2);
- if (isWide(OPSTACK_TOP) || isWide(OPSTACK_WTOP)) {
+ if (isWide(getOpstackTop(block)) || isWide(OPSTACK_WTOP)) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup_x1: splits up a double or long");
}
- OPSTACK_PUSH(OPSTACK_TOP);
+ OPSTACK_PUSH(getOpstackTop(block));
*getOpstackItem(block, 2) = *getOpstackItem(block, 3);
*getOpstackItem(block, 3) = *getOpstackItem(block, 1);
@@ -3796,11 +3807,11 @@
case DUP_X2:
ENSURE_OPSTACK_SIZE(3);
- if (isWide(OPSTACK_TOP)) {
+ if (isWide(getOpstackTop(block))) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "cannot dup_x2 when top item on operand stack is a two byte item");
}
- OPSTACK_PUSH(OPSTACK_TOP);
+ OPSTACK_PUSH(getOpstackTop(block));
*getOpstackItem(block, 2) = *getOpstackItem(block, 3);
*getOpstackItem(block, 3) = *getOpstackItem(block, 4);
@@ -3848,12 +3859,12 @@
case SWAP:
ENSURE_OPSTACK_SIZE(2);
- if (isWide(OPSTACK_TOP) || isWide(OPSTACK_WTOP)) {
+ if (isWide(getOpstackTop(block)) || isWide(OPSTACK_WTOP)) {
return verifyErrorInVerifyBasicBlock(einfo, method, this, "cannot swap 2 bytes of a long or double");
}
- *type = *OPSTACK_TOP;
- *OPSTACK_TOP = *OPSTACK_WTOP;
+ *type = *getOpstackTop(block);
+ *getOpstackTop(block) = *OPSTACK_WTOP;
*OPSTACK_WTOP = *type;
break;
@@ -3910,8 +3921,6 @@
#undef OPSTACK_INFO
#undef OPSTACK_WTOP
-#undef OPSTACK_TOP
-#undef OPSTACK_ITEM
#undef CHECK_STACK_OVERFLOW
#undef ENSURE_OPSTACK_SIZE