Christian Thalinger
Christian Ullrich
- $Id: stack.c 4681 2006-03-22 23:51:09Z edwin $
+ $Id: stack.c 4682 2006-03-23 00:08:28Z edwin $
*/
/* pop 1 push 0 */
case ICMD_POP:
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_1;
- if (IS_2_WORD_TYPE(curstack->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->type))
+ goto throw_stack_category_error;
}
#endif
OP1_0ANY;
REQUIRE_1;
if (!IS_2_WORD_TYPE(curstack->type)) {
/* ..., cat1 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_2;
- if (IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
OP1_0ANY; /* second pop */
/* pop 0 push 1 dup */
case ICMD_DUP:
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_1;
- if (IS_2_WORD_TYPE(curstack->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->type))
+ goto throw_stack_category_error;
}
#endif
last_dupx = bptr->icount - len - 1;
else {
REQUIRE_2;
/* ..., ????, cat1 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
- if (IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
copy = curstack;
/* pop 2 push 3 dup */
case ICMD_DUP_X1:
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_2;
if (IS_2_WORD_TYPE(curstack->type) ||
- IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
last_dupx = bptr->icount - len - 1;
REQUIRE_2;
if (IS_2_WORD_TYPE(curstack->type)) {
/* ..., ????, cat2 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
- if (IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
iptr->opc = ICMD_DUP_X1;
}
else {
/* ..., ????, cat1 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_3;
if (IS_2_WORD_TYPE(curstack->prev->type)
- || IS_2_WORD_TYPE(curstack->prev->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ || IS_2_WORD_TYPE(curstack->prev->prev->type))
+ goto throw_stack_category_error;
}
#endif
DUP2_X1;
REQUIRE_2;
if (IS_2_WORD_TYPE(curstack->prev->type)) {
/* ..., cat2, ???? */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
- if (IS_2_WORD_TYPE(curstack->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->type))
+ goto throw_stack_category_error;
}
#endif
iptr->opc = ICMD_DUP_X1;
}
else {
/* ..., cat1, ???? */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_3;
if (IS_2_WORD_TYPE(curstack->type)
- || IS_2_WORD_TYPE(curstack->prev->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ || IS_2_WORD_TYPE(curstack->prev->prev->type))
+ goto throw_stack_category_error;
}
#endif
DUP_X2;
}
else {
/* ..., cat1, cat2 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_3;
- if (IS_2_WORD_TYPE(curstack->prev->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->prev->prev->type))
+ goto throw_stack_category_error;
}
#endif
iptr->opc = ICMD_DUP_X2;
/* ..., ????, ????, cat1 */
if (IS_2_WORD_TYPE(curstack->prev->prev->type)) {
/* ..., cat2, ????, cat1 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
- if (IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ if (IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
iptr->opc = ICMD_DUP2_X1;
}
else {
/* ..., cat1, ????, cat1 */
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_4;
if (IS_2_WORD_TYPE(curstack->prev->type)
- || IS_2_WORD_TYPE(curstack->prev->prev->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ || IS_2_WORD_TYPE(curstack->prev->prev->prev->type))
+ goto throw_stack_category_error;
}
#endif
DUP2_X2;
case ICMD_SWAP:
last_dupx = bptr->icount - len - 1;
-#ifdef TYPECHECK_STACK_COMPCAT
+#ifdef ENABLE_VERIFIER
if (opt_verify) {
REQUIRE_2;
if (IS_2_WORD_TYPE(curstack->type)
- || IS_2_WORD_TYPE(curstack->prev->type)) {
- *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
- return NULL;
- }
+ || IS_2_WORD_TYPE(curstack->prev->type))
+ goto throw_stack_category_error;
}
#endif
SWAP;
throw_stack_type_error:
exceptions_throw_verifyerror_for_stack(m, expectedtype);
return NULL;
+
+throw_stack_category_error:
+ *exceptionptr = new_verifyerror(m, "Attempt to split long or double on the stack");
+ return NULL;
#endif
}