Mercurial > hg > truffle
view agent/src/share/classes/sun/jvm/hotspot/utilities/LivenessPath.java @ 271:818a18cd69a8
6730514: assertion failure in mangling code when expanding by 0 bytes
Summary: An expansion by 0 bytes was not anticipated when the assertion was composed.
Reviewed-by: jjh, jcoomes, apetrusenko
author | jmasa |
---|---|
date | Wed, 30 Jul 2008 11:54:00 -0700 |
parents | a61af66fc99e |
children | c18cbe5936b8 |
line wrap: on
line source
/* * Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. * */ package sun.jvm.hotspot.utilities; import java.io.*; import java.util.*; import sun.jvm.hotspot.oops.*; /** Describes a path from an object back to the root which is keeping it alive. Elements of the path are (object, field) pairs, where the object is expressed as a @link{sun.jvm.hotspot.oops.Oop}, and where the field is expressed as a @link{sun.jvm.hotspot.oops.FieldIdentifier}. If the element reflects a root, the Oop will be null. If the element is the end of the path, the FieldIdentifier will be null. */ public class LivenessPath { LivenessPath() { stack = new Stack(); } /** Number of elements in the path */ public int size() { return stack.size(); } /** Fetch the element at the given index; 0-based */ public LivenessPathElement get(int index) throws ArrayIndexOutOfBoundsException { return (LivenessPathElement) stack.get(index); } public void printOn(PrintStream tty) { for (int j = 0; j < size(); j++) { LivenessPathElement el = get(j); tty.print(" - "); if (el.getObj() != null) { Oop.printOopValueOn(el.getObj(), tty); } if (el.getField() != null) { if (el.getObj() != null) { tty.print(", field "); } tty.print(el.getField().getName()); } tty.println(); } } /** Indicates whether this path is "complete", i.e., whether the last element is a root. Convenience routine for LivenessAnalysis. */ boolean isComplete() { if (size() == 0) return false; return peek().isRoot(); } // Convenience routine for LivenessAnalysis LivenessPathElement peek() { return (LivenessPathElement) stack.peek(); } // Convenience routine for LivenessAnalysis void push(LivenessPathElement el) { stack.push(el); } // Convenience routine for LivenessAnalysis void pop() { stack.pop(); } // Make a copy of the contents of the path -- the // LivenessPathElements are not duplicated, only the containing path LivenessPath copy() { LivenessPath dup = new LivenessPath(); for (int i = 0; i < stack.size(); i++) { dup.stack.push(stack.get(i)); } return dup; } //--------------------------------------------------------------------------- // Internals only below this point // private Stack stack; }