| 3048 | } |
| 3049 | |
| 3050 | GcClass* resolveArrayClass(Thread* t, |
| 3051 | GcClassLoader* loader, |
| 3052 | GcByteArray* spec, |
| 3053 | bool throw_, |
| 3054 | Gc::Type throwType) |
| 3055 | { |
| 3056 | GcClass* c = cast<GcClass>(t, |
| 3057 | hashMapFind(t, |
| 3058 | roots(t)->bootstrapClassMap(), |
| 3059 | spec, |
| 3060 | byteArrayHash, |
| 3061 | byteArrayEqual)); |
| 3062 | |
| 3063 | if (c) { |
| 3064 | c->setVirtualTable(t, type(t, GcJobject::Type)->virtualTable()); |
| 3065 | |
| 3066 | return c; |
| 3067 | } else { |
| 3068 | PROTECT(t, loader); |
| 3069 | PROTECT(t, spec); |
| 3070 | |
| 3071 | c = findLoadedClass(t, roots(t)->bootLoader(), spec); |
| 3072 | |
| 3073 | if (c) { |
| 3074 | return c; |
| 3075 | } else { |
| 3076 | return makeArrayClass(t, loader, spec, throw_, throwType); |
| 3077 | } |
| 3078 | } |
| 3079 | } |
| 3080 | |
| 3081 | void removeMonitor(Thread* t, object o) |
| 3082 | { |
no test coverage detected