345 if (handle.equals(shortArrayKlassHandle)) return getShortArrayKlassObj();
346 if (handle.equals(longArrayKlassHandle)) return getLongArrayKlassObj();
347 if (handle.equals(singleArrayKlassHandle)) return getSingleArrayKlassObj();
348 if (handle.equals(doubleArrayKlassHandle)) return getDoubleArrayKlassObj();
349 if (!VM.getVM().isCore()) {
350 if (handle.equals(compiledICHolderKlassHandle)) return getCompiledICHolderKlassObj();
351 if (handle.equals(methodDataKlassHandle)) return getMethodDataKlassObj();
352 }
353
354 // Then check if obj.klass() is one of the root objects
355 OopHandle klass = Oop.getKlassForOopHandle(handle);
356 if (klass != null) {
357 if (klass.equals(methodKlassHandle)) return new Method(handle, this);
358 if (klass.equals(constMethodKlassHandle)) return new ConstMethod(handle, this);
359 if (klass.equals(constantPoolKlassHandle)) return new ConstantPool(handle, this);
360 if (klass.equals(constantPoolCacheKlassHandle)) return new ConstantPoolCache(handle, this);
361 if (!VM.getVM().isCore()) {
362 if (klass.equals(compiledICHolderKlassHandle)) return new CompiledICHolder(handle, this);
363 if (klass.equals(methodDataKlassHandle)) return new MethodData(handle, this);
364 }
365 if (klass.equals(instanceKlassKlassHandle)) return new InstanceKlass(handle, this);
366 if (klass.equals(objArrayKlassKlassHandle)) return new ObjArrayKlass(handle, this);
367 if (klass.equals(typeArrayKlassKlassHandle)) return new TypeArrayKlass(handle, this);
368
369 // Lastly check if obj.klass().klass() is on of the root objects
370 OopHandle klassKlass = Oop.getKlassForOopHandle(klass);
371 if (klassKlass != null) {
372 if (klassKlass.equals(instanceKlassKlassHandle)) return new Instance(handle, this);
373 if (klassKlass.equals(objArrayKlassKlassHandle)) return new ObjArray(handle, this);
374 if (klassKlass.equals(typeArrayKlassKlassHandle)) return new TypeArray(handle, this);
375 }
376 }
377
378 if (DEBUG) {
379 System.err.println("Unknown oop at " + handle);
380 System.err.println("Oop's klass is " + klass);
381 }
382
383 throw new UnknownOopException();
384 }
385
|
345 if (handle.equals(shortArrayKlassHandle)) return getShortArrayKlassObj();
346 if (handle.equals(longArrayKlassHandle)) return getLongArrayKlassObj();
347 if (handle.equals(singleArrayKlassHandle)) return getSingleArrayKlassObj();
348 if (handle.equals(doubleArrayKlassHandle)) return getDoubleArrayKlassObj();
349 if (!VM.getVM().isCore()) {
350 if (handle.equals(compiledICHolderKlassHandle)) return getCompiledICHolderKlassObj();
351 if (handle.equals(methodDataKlassHandle)) return getMethodDataKlassObj();
352 }
353
354 // Then check if obj.klass() is one of the root objects
355 OopHandle klass = Oop.getKlassForOopHandle(handle);
356 if (klass != null) {
357 if (klass.equals(methodKlassHandle)) return new Method(handle, this);
358 if (klass.equals(constMethodKlassHandle)) return new ConstMethod(handle, this);
359 if (klass.equals(constantPoolKlassHandle)) return new ConstantPool(handle, this);
360 if (klass.equals(constantPoolCacheKlassHandle)) return new ConstantPoolCache(handle, this);
361 if (!VM.getVM().isCore()) {
362 if (klass.equals(compiledICHolderKlassHandle)) return new CompiledICHolder(handle, this);
363 if (klass.equals(methodDataKlassHandle)) return new MethodData(handle, this);
364 }
365 if (klass.equals(instanceKlassKlassHandle)) {
366 InstanceKlass ik = new InstanceKlass(handle, this);
367 if (ik.getName().asString().equals("java/lang/Class")) {
368 // We would normally do this using the vtable style
369 // lookup but since it's not used for these currently
370 // it's simpler to just check for the name.
371 return new InstanceMirrorKlass(handle, this);
372 }
373 return ik;
374 }
375 if (klass.equals(objArrayKlassKlassHandle)) return new ObjArrayKlass(handle, this);
376 if (klass.equals(typeArrayKlassKlassHandle)) return new TypeArrayKlass(handle, this);
377
378 // Lastly check if obj.klass().klass() is on of the root objects
379 OopHandle klassKlass = Oop.getKlassForOopHandle(klass);
380 if (klassKlass != null) {
381 if (klassKlass.equals(instanceKlassKlassHandle)) return new Instance(handle, this);
382 if (klassKlass.equals(objArrayKlassKlassHandle)) return new ObjArray(handle, this);
383 if (klassKlass.equals(typeArrayKlassKlassHandle)) return new TypeArray(handle, this);
384 }
385 }
386
387 if (DEBUG) {
388 System.err.println("Unknown oop at " + handle);
389 System.err.println("Oop's klass is " + klass);
390 }
391
392 throw new UnknownOopException();
393 }
394
|