verify.cc (class _Jv_BytecodeVerifier): Don't check for abstract classes or interfaces here...
2005-07-06 Colin Walters <walters@verbum.org> * verify.cc (class _Jv_BytecodeVerifier) <op_new>: Don't check for abstract classes or interfaces here; JVM spec says it should throw an exception, so we'll do so later. * interpret.cc (run): Throw an InstantiationException for abstract classes and interfaces. From-SVN: r101788
This commit is contained in:
parent
1ff54bfbdb
commit
3ffa3729c0
@ -1,3 +1,11 @@
|
||||
2005-07-06 Colin Walters <walters@verbum.org>
|
||||
|
||||
* verify.cc (class _Jv_BytecodeVerifier) <op_new>: Don't
|
||||
check for abstract classes or interfaces here; JVM spec
|
||||
says it should throw an exception, so we'll do so later.
|
||||
* interpret.cc (run): Throw an InstantiationException for
|
||||
abstract classes and interfaces.
|
||||
|
||||
2005-07-08 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* posix-threads.cc (_Jv_ThreadSetPriority): Use SCHED_OTHER
|
||||
|
@ -30,6 +30,7 @@ details. */
|
||||
#include <java/lang/NullPointerException.h>
|
||||
#include <java/lang/ArithmeticException.h>
|
||||
#include <java/lang/IncompatibleClassChangeError.h>
|
||||
#include <java/lang/InstantiationException.h>
|
||||
#include <java/lang/Thread.h>
|
||||
#include <java-insns.h>
|
||||
#include <java-signal.h>
|
||||
@ -2942,6 +2943,10 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args, _Jv_InterpMethod *meth)
|
||||
int index = GET2U ();
|
||||
jclass klass = (_Jv_Linker::resolve_pool_entry (meth->defining_class,
|
||||
index)).clazz;
|
||||
/* VM spec, section 3.11.5 */
|
||||
if ((klass->getModifiers() & Modifier::ABSTRACT)
|
||||
|| klass->isInterface())
|
||||
throw new java::lang::InstantiationException;
|
||||
jobject res = _Jv_AllocObject (klass);
|
||||
PUSHA (res);
|
||||
|
||||
|
@ -2926,8 +2926,8 @@ private:
|
||||
case op_new:
|
||||
{
|
||||
type t = check_class_constant (get_ushort ());
|
||||
if (t.isarray () || t.isinterface (this) || t.isabstract (this))
|
||||
verify_fail ("type is array, interface, or abstract");
|
||||
if (t.isarray ())
|
||||
verify_fail ("type is array");
|
||||
t.set_uninitialized (start_PC, this);
|
||||
push_type (t);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user