37 public OopField(sun.jvm.hotspot.types.OopField vmField, long startOffset) {
38 super(new NamedFieldIdentifier(vmField.getName()), vmField.getOffset() + startOffset, true);
39 }
40
41 public OopField(InstanceKlass holder, int fieldArrayIndex) {
42 super(holder, fieldArrayIndex);
43 }
44
45 public Oop getValue(Oop obj) {
46 if (!isVMField() && !obj.isInstance() && !obj.isArray()) {
47 throw new InternalError();
48 }
49 return obj.getHeap().newOop(getValueAsOopHandle(obj));
50 }
51
52 /** Debugging support */
53 public OopHandle getValueAsOopHandle(Oop obj) {
54 if (!isVMField() && !obj.isInstance() && !obj.isArray()) {
55 throw new InternalError(obj.toString());
56 }
57 return obj.getHandle().getOopHandleAt(getOffset());
58 }
59
60 public Oop getValue(VMObject obj) {
61 return VM.getVM().getObjectHeap().newOop(getValueAsOopHandle(obj));
62 }
63
64 /** Debugging support */
65 public OopHandle getValueAsOopHandle(VMObject obj) {
66 return obj.getAddress().getOopHandleAt(getOffset());
67 }
68
69 public void setValue(Oop obj) throws MutationException {
70 // Fix this: setOopAt is missing in Address
71 }
72 }
|
37 public OopField(sun.jvm.hotspot.types.OopField vmField, long startOffset) {
38 super(new NamedFieldIdentifier(vmField.getName()), vmField.getOffset() + startOffset, true);
39 }
40
41 public OopField(InstanceKlass holder, int fieldArrayIndex) {
42 super(holder, fieldArrayIndex);
43 }
44
45 public Oop getValue(Oop obj) {
46 if (!isVMField() && !obj.isInstance() && !obj.isArray()) {
47 throw new InternalError();
48 }
49 return obj.getHeap().newOop(getValueAsOopHandle(obj));
50 }
51
52 /** Debugging support */
53 public OopHandle getValueAsOopHandle(Oop obj) {
54 if (!isVMField() && !obj.isInstance() && !obj.isArray()) {
55 throw new InternalError(obj.toString());
56 }
57
58 return VM.getVM().getUniverse().heap().oop_load_at(obj.getHandle(), getOffset());
59 }
60
61 public Oop getValue(VMObject obj) {
62 return VM.getVM().getObjectHeap().newOop(getValueAsOopHandle(obj));
63 }
64
65 /** Debugging support */
66 public OopHandle getValueAsOopHandle(VMObject obj) {
67 return obj.getAddress().getOopHandleAt(getOffset());
68 }
69
70 public void setValue(Oop obj) throws MutationException {
71 // Fix this: setOopAt is missing in Address
72 }
73 }
|