+/* exceptions_throw_verifyerror ************************************************
+
+ Throws a java.lang.VerifyError for the VM system.
+
+*******************************************************************************/
+
+void exceptions_throw_verifyerror(methodinfo *m, const char *message, ...)
+{
+ *exceptionptr = exceptions_new_verifyerror(m, message);
+}
+
+
+/* exceptions_throw_verifyerror_for_stack **************************************
+
+ throws a java.lang.VerifyError for an invalid stack slot type
+
+ IN:
+ m............method in which the error was found
+ type.........the expected type
+
+ RETURN VALUE:
+ an exception pointer (in any case -- either it is the newly created
+ exception, or an exception thrown while trying to create it).
+
+*******************************************************************************/
+
+void exceptions_throw_verifyerror_for_stack(methodinfo *m,int type)
+{
+ java_objectheader *o;
+ char *msg;
+ s4 msglen;
+ char *typename;
+
+ /* calculate exception message length */
+
+ msglen = 0;
+
+ if (m)
+ msglen = strlen("(class: ") + utf_bytes(m->class->name) +
+ strlen(", method: ") + utf_bytes(m->name) +
+ strlen(" signature: ") + utf_bytes(m->descriptor) +
+ strlen(") Expecting to find longest-------typename on stack")
+ + strlen("0");
+
+ /* allocate memory */
+
+ msg = MNEW(char, msglen);
+
+ /* generate message */
+
+ if (m) {
+ strcpy(msg, "(class: ");
+ utf_cat_classname(msg, m->class->name);
+ strcat(msg, ", method: ");
+ utf_cat(msg, m->name);
+ strcat(msg, " signature: ");
+ utf_cat(msg, m->descriptor);
+ strcat(msg, ") ");
+ }
+ else {
+ msg[0] = 0;
+ }
+
+ strcat(msg,"Expecting to find ");
+ switch (type) {
+ case TYPE_INT: typename = "integer"; break;
+ case TYPE_LNG: typename = "long"; break;
+ case TYPE_FLT: typename = "float"; break;
+ case TYPE_DBL: typename = "double"; break;
+ case TYPE_ADR: typename = "object/array"; break;
+ case TYPE_RET: typename = "returnAddress"; break;
+ default: typename = "<INVALID>"; assert(0); break;
+ }
+ strcat(msg, typename);
+ strcat(msg, " on stack");
+
+ /* create exception object */
+
+ o = new_exception_message(string_java_lang_VerifyError, msg);
+
+ /* free memory */
+
+ MFREE(msg, char, msglen);
+
+ *exceptionptr = o;
+}
+
+