1 /* 2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 package sun.jvm.hotspot.oops; 26 27 import java.io.*; 28 29 public class OopPrinter implements OopVisitor { OopPrinter(PrintStream tty)30 public OopPrinter(PrintStream tty) { 31 this.tty = tty; 32 } 33 34 PrintStream tty; 35 prologue()36 public void prologue() { 37 Oop.printOopValueOn(getObj(), tty); 38 tty.println(" (object size = " + getObj().getObjectSize() + ")"); 39 } 40 epilogue()41 public void epilogue() { 42 tty.println(); 43 } 44 45 46 private Oop obj; setObj(Oop obj)47 public void setObj(Oop obj) { this.obj = obj; } getObj()48 public Oop getObj() { return obj; } 49 50 printField(Field field)51 private void printField(Field field) { 52 field.printOn(tty); 53 } 54 doMetadata(MetadataField field, boolean isVMField)55 public void doMetadata(MetadataField field, boolean isVMField) { 56 printField(field); 57 field.getValue(getObj()).printValueOn(tty); 58 tty.println(); 59 } 60 doOop(OopField field, boolean isVMField)61 public void doOop(OopField field, boolean isVMField) { 62 printField(field); 63 Oop.printOopValueOn(field.getValue(getObj()), tty); 64 tty.println(); 65 } 66 doOop(NarrowOopField field, boolean isVMField)67 public void doOop(NarrowOopField field, boolean isVMField) { 68 printField(field); 69 Oop.printOopValueOn(field.getValue(getObj()), tty); 70 tty.println(); 71 } 72 doChar(CharField field, boolean isVMField)73 public void doChar(CharField field, boolean isVMField) { 74 printField(field); 75 char c = field.getValue(getObj()); 76 // Fix me: not yet complete 77 if (Character.isLetterOrDigit(c)) tty.println(c); 78 else tty.println((int)c); 79 } doByte(ByteField field, boolean isVMField)80 public void doByte(ByteField field, boolean isVMField) { 81 printField(field); 82 tty.println(field.getValue(getObj())); 83 } doBoolean(BooleanField field, boolean isVMField)84 public void doBoolean(BooleanField field, boolean isVMField) { 85 printField(field); 86 tty.println(field.getValue(getObj())); 87 } doShort(ShortField field, boolean isVMField)88 public void doShort(ShortField field, boolean isVMField) { 89 printField(field); 90 tty.println(field.getValue(getObj())); 91 } doInt(IntField field, boolean isVMField)92 public void doInt(IntField field, boolean isVMField) { 93 printField(field); 94 tty.println(field.getValue(getObj())); 95 } doLong(LongField field, boolean isVMField)96 public void doLong(LongField field, boolean isVMField) { 97 printField(field); 98 tty.println(field.getValue(getObj())); 99 } doFloat(FloatField field, boolean isVMField)100 public void doFloat(FloatField field, boolean isVMField) { 101 printField(field); 102 tty.println(field.getValue(getObj())); 103 } doDouble(DoubleField field, boolean isVMField)104 public void doDouble(DoubleField field, boolean isVMField) { 105 printField(field); 106 tty.println(field.getValue(getObj())); 107 } doCInt(CIntField field, boolean isVMField)108 public void doCInt(CIntField field, boolean isVMField) { 109 printField(field); 110 tty.println(field.getValue(getObj())); 111 } 112 } 113