Tom> While browsing the verifier again, I noticed that there is a dynamic
Tom> constraint that we can't represent using our current type
Tom> assertions, namely:
Tom> if (type_isarray (&t) || type_isinterface (&t) \
Tom> || type_isabstract (&t))
Tom> verify_fail ("type is array, interface, or abstract");
If we want to fully support the "gcj never fails" approach, then we
have to support cases like this. For instance, it is an error to use
invokestatic on a non-static method. This has to be reverified at
runtime.