[kaffe] CVS kaffe (dalibor): Replaced macro by static inline function
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Sun Feb 15 08:50:03 2004
PatchSet 4425
Date: 2004/02/15 16:40:44
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
(verifyErrorInVerifyBasicBlock): New static inline function.
(VERIFY_ERROR) Removed.
Replaced use of VERIFY_ERROR by verifyErrorInVerifyBasicBlock.
Members:
ChangeLog:1.2008->1.2009
kaffe/kaffevm/verify.c:1.41->1.42
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2008 kaffe/ChangeLog:1.2009
--- kaffe/ChangeLog:1.2008 Sun Feb 15 15:50:50 2004
+++ kaffe/ChangeLog Sun Feb 15 16:40:44 2004
@@ -1,6 +1,13 @@
2004-02-15 Dalibor Topic <robilad@kaffe.org>
* kaffe/kaffevm/verify.c
+ (verifyErrorInVerifyBasicBlock): New static inline function.
+ (VERIFY_ERROR) Removed.
+ Replaced use of VERIFY_ERROR by verifyErrorInVerifyBasicBlock.
+
+2004-02-15 Dalibor Topic <robilad@kaffe.org>
+
+ * kaffe/kaffevm/verify.c
(verifyErrorInMerge): New static inline function.
(VERIFY_ERROR) Removed.
Replaced use of VERIFY_ERROR by verifyErrorInMerge.
Index: kaffe/kaffe/kaffevm/verify.c
diff -u kaffe/kaffe/kaffevm/verify.c:1.41 kaffe/kaffe/kaffevm/verify.c:1.42
--- kaffe/kaffe/kaffevm/verify.c:1.41 Sun Feb 15 15:50:52 2004
+++ kaffe/kaffe/kaffevm/verify.c Sun Feb 15 16:40:45 2004
@@ -2473,8 +2473,23 @@
return(true);
}
-
-
+/*
+ * Helper function for error reporting in verifyBasicBlock.
+ */
+static inline
+bool
+verifyErrorInVerifyBasicBlock(errorInfo* einfo,
+ const Method* method,
+ Hjava_lang_Class* this,
+ const char * msg)
+{
+ if (einfo->type == 0) {
+ postExceptionMessage(einfo, JAVA_LANG(VerifyError),
+ "in method \"%s.%s\": %s",
+ CLASS_CNAME(this), METHOD_NAMED(method), msg);
+ }
+ return(false);
+}
/*
* verifyBasicBlock()
@@ -2521,13 +2536,6 @@
* - those dealing with locals variables
* - those dealing with the operand stack
**************************************************************************************************/
-#define VERIFY_ERROR(_MSG) \
- if (einfo->type == 0) { \
- postExceptionMessage(einfo, JAVA_LANG(VerifyError), \
- "in method \"%s.%s\": %s", \
- CLASS_CNAME(this), METHOD_NAMED(method), _MSG); \
- } \
- return(false)
#define GET_IDX \
idx = code[pc + 1]
@@ -2540,26 +2548,26 @@
#define ENSURE_LOCAL_TYPE(_N, _TINFO) \
if (!typecheck(einfo, this, (_TINFO), &block->locals[_N])) { \
if (block->locals[_N].data.class == TUNSTABLE->data.class) { \
- VERIFY_ERROR("attempt to access an unstable local variable"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "attempt to access an unstable local variable"); \
} else { \
- VERIFY_ERROR("attempt to access a local variable not of the correct type"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "attempt to access a local variable not of the correct type"); \
} \
}
/* only use with TLONG and TDOUBLE */
#define ENSURE_LOCAL_WTYPE(_N, _TINFO) \
if (block->locals[_N].data.class != (_TINFO)->data.class) { \
- VERIFY_ERROR("local variable not of correct type"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "local variable not of correct type"); \
} \
else if (block->locals[_N + 1].data.class != TWIDE->data.class) { \
- VERIFY_ERROR("accessing a long or double in a local where the following local has been corrupted"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "accessing a long or double in a local where the following local has been corrupted"); \
}
#define ENSURE_OPSTACK_SIZE(_N) \
if (block->stacksz < (_N)) { \
DBG(VERIFY3, dprintf(" here's the stack: \n"); printBlock(method, block, " "); ); \
- VERIFY_ERROR("not enough items on stack for operation"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "not enough items on stack for operation"); \
}
#define CHECK_STACK_OVERFLOW(_N) \
@@ -2567,7 +2575,7 @@
DBG(VERIFY3, dprintf(" block->stacksz: %d :: N = %d :: method->stacksz = %d\n", \
block->stacksz, _N, method->stacksz); ); \
DBG(VERIFY3, dprintf(" here's the stack: \n"); printBlock(method, block, " "); ); \
- VERIFY_ERROR("stack overflow"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "stack overflow"); \
}
@@ -2613,7 +2621,7 @@
printType(OPSTACK_TOP); \
dprintf(" vs. what's we wanted: "); \
printType(_TINFO); dprintf("\n"); ); \
- VERIFY_ERROR("top of opstack does not have desired type"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type"); \
}
#define OPSTACK_PEEK_T(_TINFO) \
@@ -2625,9 +2633,9 @@
*/
#define OPSTACK_WPEEK_T_BLIND(_TINFO) \
if (OPSTACK_TOP->data.class != TWIDE->data.class) { \
- VERIFY_ERROR("trying to pop a wide value off operand stack where there is none"); \
+ 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) { \
- VERIFY_ERROR("mismatched stack types"); \
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "mismatched stack types"); \
}
#define OPSTACK_WPEEK_T(_TINFO) \
@@ -2800,7 +2808,7 @@
ALOAD_common:
if (!isReference(&block->locals[idx])) {
DBG(VERIFY3, dprintf("%sERROR: ", indent); printType(&block->locals[idx]); dprintf("\n"); );
- VERIFY_ERROR("aload<_n> where local variable does not contain an object reference");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "aload<_n> where local variable does not contain an object reference");
}
OPSTACK_PUSH(&block->locals[idx]);
@@ -2819,7 +2827,7 @@
type = OPSTACK_TOP;
if (!IS_ADDRESS(type) && !isReference(type)) {
- VERIFY_ERROR("astore: top of stack is not a return address or reference type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "astore: top of stack is not a return address or reference type");
}
block->locals[idx] = *type;
@@ -2954,7 +2962,7 @@
case TYPE_Short: OPSTACK_PUSH(TSHORTARR); break;
case TYPE_Int: OPSTACK_PUSH(TINTARR); break;
case TYPE_Long: OPSTACK_PUSH(TLONGARR); break;
- default: VERIFY_ERROR("newarray of unknown type");
+ default: return verifyErrorInVerifyBasicBlock(einfo, method, this, "newarray of unknown type");
}
break;
@@ -2964,7 +2972,7 @@
type = OPSTACK_TOP;
if (!isArray(type)) {
DBG(VERIFY3, dprintf("%stype = ", indent); printType(type); dprintf("\n"); );
- VERIFY_ERROR("arraylength: top of operand stack is not an array");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "arraylength: top of operand stack is not an array");
}
*type = *TINT;
@@ -2986,14 +2994,14 @@
ENSURE_OPSTACK_SIZE(2);
if (OPSTACK_TOP->data.class != TINT->data.class) {
- VERIFY_ERROR("aaload: item on top of stack is not an integer");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "aaload: item on top of stack is not an integer");
}
OPSTACK_POP_BLIND;
type = OPSTACK_TOP;
if (!isArray(type)) {
DBG(VERIFY3, dprintf("%serror: type = ", indent); printType(type); dprintf("\n"); );
- VERIFY_ERROR("aaload: top of operand stack is not an array");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "aaload: top of operand stack is not an array");
}
if (type->tinfo & TINFO_NAME || type->tinfo & TINFO_SIG) {
@@ -3027,7 +3035,7 @@
dprintf(" OPSTACK_TOP: ");
printType(OPSTACK_TOP);
dprintf(" vs. what's we wanted: TBYTEARR or TBOOLARR"); )
- VERIFY_ERROR("top of opstack does not have desired type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type");
}
OPSTACK_POP_BLIND;
@@ -3042,7 +3050,7 @@
ENSURE_OPSTACK_SIZE(3);
if (OPSTACK_ITEM(2)->data.class != TINT->data.class) {
- VERIFY_ERROR("aastore: array index is not an integer");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "aastore: array index is not an integer");
}
type = OPSTACK_ITEM(1);
@@ -3056,7 +3064,7 @@
if (!isArray(arrayType)) {
DBG(VERIFY3, dprintf("%serror: type = ", indent); printType(type); dprintf("\n"); );
- VERIFY_ERROR("aastore: top of operand stack is not an array");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "aastore: top of operand stack is not an array");
}
if (arrayType->tinfo & TINFO_NAME || arrayType->tinfo & TINFO_SIG) {
@@ -3073,7 +3081,7 @@
}
if (!typecheck(einfo, this, arrayType, type)) {
- VERIFY_ERROR("attempting to store incompatible type in array");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "attempting to store incompatible type in array");
}
OPSTACK_POP_N_BLIND(3);
@@ -3113,7 +3121,7 @@
dprintf(" OPSTACK_TOP: ");
printType(OPSTACK_TOP);
dprintf(" vs. what's we wanted: TBYTEARR or TBOOLARR"); )
- VERIFY_ERROR("top of opstack does not have desired type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "top of opstack does not have desired type");
}
OPSTACK_POP_BLIND;
break;
@@ -3268,7 +3276,7 @@
case INSTANCEOF:
ENSURE_OPSTACK_SIZE(1);
if (!isReference(OPSTACK_ITEM(1))) {
- VERIFY_ERROR("instanceof: top of stack is not a reference type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "instanceof: top of stack is not a reference type");
}
*OPSTACK_TOP = *TINT;
break;
@@ -3283,7 +3291,7 @@
ENSURE_OPSTACK_SIZE(n);
while (n > 0) {
if (OPSTACK_TOP->data.class != TINT->data.class) {
- VERIFY_ERROR("multinewarray: first <n> things on opstack must be integers");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "multinewarray: first <n> things on opstack must be integers");
}
OPSTACK_POP_BLIND;
n--;
@@ -3333,7 +3341,7 @@
const char* namestr = CLASS_NAMED(idx, pool);
if (*namestr == '[') {
- VERIFY_ERROR("new: used to create an array");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "new: used to create an array");
}
type->tinfo = TINFO_NAME;
@@ -3362,7 +3370,7 @@
type->data.class = lookupArray(class, einfo);
if (type->data.class == NULL) {
- VERIFY_ERROR("anewarray: error creating array type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "anewarray: error creating array type");
}
} else {
char* namestr;
@@ -3392,7 +3400,7 @@
case GETFIELD:
ENSURE_OPSTACK_SIZE(1);
if (!checkUninit(this, OPSTACK_TOP)) {
- VERIFY_ERROR("getfield: uninitialized type on top of operand stack");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "getfield: uninitialized type on top of operand stack");
}
GET_WIDX;
@@ -3438,7 +3446,7 @@
default:
DBG(VERIFY3, dprintf("%sweird type signature: %s", indent, sig); );
- VERIFY_ERROR("get{field/static}: unrecognized type signature");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "get{field/static}: unrecognized type signature");
break;
}
break;
@@ -3450,7 +3458,7 @@
ENSURE_OPSTACK_SIZE(n);
if (!checkUninit(this, OPSTACK_TOP)) {
- VERIFY_ERROR("putfield: uninitialized type on top of operand stack");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "putfield: uninitialized type on top of operand stack");
}
GET_WIDX;
@@ -3476,7 +3484,7 @@
default:
DBG(VERIFY3, dprintf("%sweird type signature: %s", indent, sig); );
- VERIFY_ERROR("put{field/static}: unrecognized type signature");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "put{field/static}: unrecognized type signature");
break;
}
@@ -3523,7 +3531,7 @@
default:
DBG(VERIFY3, dprintf("%sweird type signature: %s", indent, sig); );
- VERIFY_ERROR("put{field/static}: unrecognized type signature");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "put{field/static}: unrecognized type signature");
break;
}
break;
@@ -3554,7 +3562,7 @@
ENSURE_OPSTACK_SIZE(2);
if (!isReference(OPSTACK_TOP) ||
!isReference(OPSTACK_WTOP)) {
- VERIFY_ERROR("if_acmp* when item on top of stack is not a reference type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "if_acmp* when item on top of stack is not a reference type");
}
OPSTACK_POP_BLIND;
OPSTACK_POP_BLIND;
@@ -3580,7 +3588,7 @@
case IFNULL:
ENSURE_OPSTACK_SIZE(1);
if (!isReference(OPSTACK_ITEM(1))) {
- VERIFY_ERROR("if[non]null: thing on top of stack is not a reference");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "if[non]null: thing on top of stack is not a reference");
}
OPSTACK_POP_BLIND;
break;
@@ -3605,7 +3613,7 @@
printBlock(method, block, " "); );
/* propagate error */
- VERIFY_ERROR("invoke* error");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "invoke* error");
}
break;
@@ -3614,34 +3622,34 @@
OPSTACK_PEEK_T(TINT);
sig = getReturnSig(method);
if (strlen(sig) != 1 || (*sig != 'I' && *sig != 'Z' && *sig != 'S' && *sig != 'B' && *sig != 'C')) {
- VERIFY_ERROR("ireturn: method doesn't return an integer");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "ireturn: method doesn't return an integer");
}
break;
case FRETURN:
OPSTACK_PEEK_T(TFLOAT);
sig = getReturnSig(method);
if (strcmp(sig, "F")) {
- VERIFY_ERROR("freturn: method doesn't return an float");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "freturn: method doesn't return an float");
}
break;
case LRETURN:
OPSTACK_WPEEK_T(TLONG);
sig = getReturnSig(method);
if (strcmp(sig, "J")) {
- VERIFY_ERROR("lreturn: method doesn't return a long");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "lreturn: method doesn't return a long");
}
break;
case DRETURN:
OPSTACK_WPEEK_T(TDOUBLE);
sig = getReturnSig(method);
if (strcmp(sig, "D")) {
- VERIFY_ERROR("dreturn: method doesn't return a double");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "dreturn: method doesn't return a double");
}
break;
case RETURN:
sig = getReturnSig(method);
if (strcmp(sig, "V")) {
- VERIFY_ERROR("return: must return something in a non-void function");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "return: must return something in a non-void function");
}
break;
case ARETURN:
@@ -3649,7 +3657,7 @@
t->tinfo = TINFO_SIG;
t->data.sig = getReturnSig(method);
if (!typecheck(einfo, this, t, OPSTACK_TOP)) {
- VERIFY_ERROR("areturn: top of stack is not type compatible with method return type");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "areturn: top of stack is not type compatible with method return type");
}
break;
@@ -3665,12 +3673,12 @@
t->data.class = javaLangThrowable;
if (!typecheck(einfo, this, t, OPSTACK_TOP)) {
DBG(VERIFY3, dprintf("%sATHROW error: ", indent); printType(OPSTACK_TOP); dprintf ("\n"); );
- VERIFY_ERROR("athrow: object on top of stack is not a subclass of throwable");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "athrow: object on top of stack is not a subclass of throwable");
}
for (n = 0; n < method->localsz; n++) {
if (block->locals[n].tinfo & TINFO_UNINIT) {
- VERIFY_ERROR("athrow: uninitialized class instance in a local variable");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "athrow: uninitialized class instance in a local variable");
}
}
break;
@@ -3685,7 +3693,7 @@
case BREAKPOINT:
/* for internal use only: cannot appear in a class file */
- VERIFY_ERROR("breakpoint instruction cannot appear in classfile");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "breakpoint instruction cannot appear in classfile");
break;
@@ -3693,7 +3701,7 @@
case MONITOREXIT:
ENSURE_OPSTACK_SIZE(1);
if(!isReference(OPSTACK_TOP)) {
- VERIFY_ERROR("monitor*: top of stack is not an object reference");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "monitor*: top of stack is not an object reference");
}
OPSTACK_POP_BLIND;
break;
@@ -3702,7 +3710,7 @@
case DUP:
ENSURE_OPSTACK_SIZE(1);
if (isWide(OPSTACK_TOP)) {
- VERIFY_ERROR("dup: on a long or double");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup: on a long or double");
}
OPSTACK_PUSH(OPSTACK_TOP);
@@ -3711,7 +3719,7 @@
case DUP_X1:
ENSURE_OPSTACK_SIZE(2);
if (isWide(OPSTACK_TOP) || isWide(OPSTACK_WTOP)) {
- VERIFY_ERROR("dup_x1: splits up a double or long");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup_x1: splits up a double or long");
}
OPSTACK_PUSH(OPSTACK_TOP);
@@ -3723,7 +3731,7 @@
case DUP_X2:
ENSURE_OPSTACK_SIZE(3);
if (isWide(OPSTACK_TOP)) {
- VERIFY_ERROR("cannot dup_x2 when top item on operand stack is a two byte item");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "cannot dup_x2 when top item on operand stack is a two byte item");
}
OPSTACK_PUSH(OPSTACK_TOP);
@@ -3743,7 +3751,7 @@
case DUP2_X1:
ENSURE_OPSTACK_SIZE(2);
if (isWide(OPSTACK_ITEM(2))) {
- VERIFY_ERROR("dup_x1 requires top 2 bytes on operand stack to be single bytes items");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup_x1 requires top 2 bytes on operand stack to be single bytes items");
}
CHECK_STACK_OVERFLOW(2);
@@ -3758,7 +3766,7 @@
case DUP2_X2:
ENSURE_OPSTACK_SIZE(4);
if (isWide(OPSTACK_ITEM(2)) || isWide(OPSTACK_ITEM(4))) {
- VERIFY_ERROR("dup2_x2 where either 2nd or 4th byte is 2nd half of a 2 byte item");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "dup2_x2 where either 2nd or 4th byte is 2nd half of a 2 byte item");
}
CHECK_STACK_OVERFLOW(2);
@@ -3775,7 +3783,7 @@
case SWAP:
ENSURE_OPSTACK_SIZE(2);
if (isWide(OPSTACK_TOP) || isWide(OPSTACK_WTOP)) {
- VERIFY_ERROR("cannot swap 2 bytes of a long or double");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "cannot swap 2 bytes of a long or double");
}
*type = *OPSTACK_TOP;
@@ -3791,7 +3799,7 @@
default:
/* should never get here because of preprocessing in defineBasicBlocks() */
- VERIFY_ERROR("unknown opcode encountered");
+ return verifyErrorInVerifyBasicBlock(einfo, method, this, "unknown opcode encountered");
}
@@ -3847,8 +3855,6 @@
#undef GET_WIDX
#undef GET_IDX
-
-#undef VERIFY_ERROR
}