vmlinenumbermap.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 82 行

JAVA
82
字号
/*
 * $Id: VmLineNumberMap.java,v 1.1 2003/11/25 11:41:14 epr Exp $
 */
package org.jnode.vm.classmgr;

import org.jnode.vm.VmSystemObject;

/**
 * @author epr
 */
public class VmLineNumberMap extends VmSystemObject {

	/** Number of line number info's in this object */
	private final int noLineNrs;
	/**
	 * Line number table.
	 * The line-number table should be interpreted as follows:
	 * Each line number entry consists of two entries in the following
	 * array.
	 * Entry i*2+0 = start_pc
	 * Entry i*2+1 = line_number
	 * So lnTable.length == noLineNrs*2
	 */
	private final char[] lnTable;

	public static final int LNT_STARTPC_OFS = 0;
	public static final int LNT_LINENR_OFS = 1;
	public static final int LNT_ELEMSIZE = 2;

	public VmLineNumberMap(char[] lnTable) {
		this.lnTable = lnTable;
		this.noLineNrs = (lnTable == null) ? 0 : (lnTable.length / LNT_ELEMSIZE);
	}

	/**
	 * Gets the number of entries of this table
	 * @return length of the table
	 */
	public int getLength() {
		return noLineNrs;
	}

	/**
	 * Gets the start PC field of an entry in this table with a given index.
	 * @param index
	 * @return int
	 */
	public int getStartPCAt(int index) {
		return lnTable[index * LNT_ELEMSIZE + LNT_STARTPC_OFS];
	}

	/**
	 * Gets the line number field of an entry in this table with a given index.
	 * @param index
	 * @return int
	 */
	public int getLineNrAt(int index) {
		return lnTable[index * LNT_ELEMSIZE + LNT_LINENR_OFS];
	}
	
	/**
	 * Gets the linenumber for a given PC.
	 * @param pc
	 * @return The line number
	 */
	public int findLineNr(int pc) {
		int ln = 0;
		final int len = noLineNrs * LNT_ELEMSIZE;
		for (int i = 0; i < len; i += LNT_ELEMSIZE) {
			final char startPC = lnTable[i + LNT_STARTPC_OFS];
			final char lineNr = lnTable[i + LNT_LINENR_OFS];
			if (startPC <= pc) {
				ln = lineNr;
			} else {
				return ln;
			}
		}
		return ln;
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?