acquire class lock before running static initializer; wrap exceptions thrown from static initializers in ExceptionInInitializerError instances

This commit is contained in:
Joel Dice
2007-08-01 17:48:36 -06:00
parent 6ddb8c839c
commit 1997ea6b8c
8 changed files with 129 additions and 67 deletions

View File

@ -3,6 +3,7 @@
#include "machine.h"
#include "stream.h"
#include "constants.h"
#include "run.h"
using namespace vm;
@ -948,6 +949,7 @@ parseMethodTable(Thread* t, Stream& s, object class_, object pool)
if (strcmp(reinterpret_cast<const int8_t*>("<clinit>"),
&byteArrayBody(t, methodName(t, method), 0)) == 0)
{
methodVmFlags(t, method) |= ClassInitFlag;
classVmFlags(t, class_) |= NeedInitFlag;
}
} else {