irgenerator.java

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

JAVA
1,392
字号
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpl()
	 */
	public void visit_dcmpl() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dcmpg()
	 */
	public void visit_dcmpg() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifeq(int)
	 */
	public void visit_ifeq(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFEQ, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifne(int)
	 */
	public void visit_ifne(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFNE, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_iflt(int)
	 */
	public void visit_iflt(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFLT, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifge(int)
	 */
	public void visit_ifge(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFGE, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifgt(int)
	 */
	public void visit_ifgt(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFGT, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifle(int)
	 */
	public void visit_ifle(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFLE, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpeq(int)
	 */
	public void visit_if_icmpeq(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPEQ, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpne(int)
	 */
	public void visit_if_icmpne(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPNE, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmplt(int)
	 */
	public void visit_if_icmplt(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPLT, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpge(int)
	 */
	public void visit_if_icmpge(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPGE, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmpgt(int)
	 */
	public void visit_if_icmpgt(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPGT, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_icmple(int)
	 */
	public void visit_if_icmple(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.INT);
		variables[s2].setType(Operand.INT);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ICMPLE, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpeq(int)
	 */
	public void visit_if_acmpeq(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.REFERENCE);
		variables[s2].setType(Operand.REFERENCE);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ACMPEQ, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_if_acmpne(int)
	 */
	public void visit_if_acmpne(int address) {
		int s1 = stackOffset - 2;
		int s2 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.REFERENCE);
		variables[s2].setType(Operand.REFERENCE);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IF_ACMPNE, s2, address));
		stackOffset -= 2;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_goto(int)
	 */
	public void visit_goto(int address) {
		quadList.add(new UnconditionalBranchQuad(this.address, currentBlock, address));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_jsr(int)
	 */
	public void visit_jsr(int address) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ret(int)
	 */
	public void visit_ret(int index) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_tableswitch(int, int, int, int[])
	 */
	public void visit_tableswitch(int defValue, int lowValue, int highValue, int[] addresses) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lookupswitch(int, int[], int[])
	 */
	public void visit_lookupswitch(int defValue, int[] matchValues, int[] addresses) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ireturn()
	 */
	public void visit_ireturn() {
		stackOffset -= 1;
		variables[stackOffset].setType(Operand.INT);
		quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lreturn()
	 */
	public void visit_lreturn() {
		stackOffset -= 2;
		variables[stackOffset].setType(Operand.LONG);
		quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_freturn()
	 */
	public void visit_freturn() {
		stackOffset -= 1;
		variables[stackOffset].setType(Operand.FLOAT);
		quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_dreturn()
	 */
	public void visit_dreturn() {
		stackOffset -= 2;
		variables[stackOffset].setType(Operand.DOUBLE);
		quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_areturn()
	 */
	public void visit_areturn() {
		stackOffset -= 1;
		variables[stackOffset].setType(Operand.REFERENCE);
		quadList.add(new VarReturnQuad(address, currentBlock, stackOffset));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_return()
	 */
	public void visit_return() {
		quadList.add(new VoidReturnQuad(address, currentBlock));
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getstatic(org.jnode.vm.classmgr.VmConstFieldRef)
	 */
	public void visit_getstatic(VmConstFieldRef fieldRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putstatic(org.jnode.vm.classmgr.VmConstFieldRef)
	 */
	public void visit_putstatic(VmConstFieldRef fieldRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getfield(org.jnode.vm.classmgr.VmConstFieldRef)
	 */
	public void visit_getfield(VmConstFieldRef fieldRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putfield(org.jnode.vm.classmgr.VmConstFieldRef)
	 */
	public void visit_putfield(VmConstFieldRef fieldRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokevirtual(org.jnode.vm.classmgr.VmConstMethodRef)
	 */
	public void visit_invokevirtual(VmConstMethodRef methodRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokespecial(org.jnode.vm.classmgr.VmConstMethodRef)
	 */
	public void visit_invokespecial(VmConstMethodRef methodRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokestatic(org.jnode.vm.classmgr.VmConstMethodRef)
	 */
	public void visit_invokestatic(VmConstMethodRef methodRef) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_invokeinterface(org.jnode.vm.classmgr.VmConstIMethodRef, int)
	 */
	public void visit_invokeinterface(VmConstIMethodRef methodRef, int count) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_new(org.jnode.vm.classmgr.VmConstClass)
	 */
	public void visit_new(VmConstClass clazz) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_newarray(int)
	 */
	public void visit_newarray(int type) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_anewarray(org.jnode.vm.classmgr.VmConstClass)
	 */
	public void visit_anewarray(VmConstClass clazz) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_arraylength()
	 */
	public void visit_arraylength() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_athrow()
	 */
	public void visit_athrow() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_checkcast(org.jnode.vm.classmgr.VmConstClass)
	 */
	public void visit_checkcast(VmConstClass clazz) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_instanceof(org.jnode.vm.classmgr.VmConstClass)
	 */
	public void visit_instanceof(VmConstClass clazz) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorenter()
	 */
	public void visit_monitorenter() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_monitorexit()
	 */
	public void visit_monitorexit() {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_multianewarray(org.jnode.vm.classmgr.VmConstClass, int)
	 */
	public void visit_multianewarray(VmConstClass clazz, int dimensions) {
		throw new IllegalArgumentException("byte code not yet supported");
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnull(int)
	 */
	public void visit_ifnull(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.REFERENCE);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFNULL, address));
		stackOffset -= 1;
	}

	/**
	 * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_ifnonnull(int)
	 */
	public void visit_ifnonnull(int address) {
		int s1 = stackOffset - 1;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(Operand.REFERENCE);
		quadList.add(new ConditionalBranchQuad(this.address, currentBlock,
			s1, ConditionalBranchQuad.IFNONNULL, address));
		stackOffset -= 1;
	}

	// TODO
	public Quad doBinaryQuad(int op, int type) {
		int sCount = 1;
		if (type == Operand.DOUBLE || type == Operand.LONG) {
			sCount = 2;
		}
		stackOffset -= sCount;
		int s1 = stackOffset - sCount;
		Variable[] variables = currentBlock.getVariables();
		variables[s1].setType(type);
		variables[stackOffset].setType(type);
		BinaryQuad bop = new BinaryQuad(address, currentBlock, s1, s1, op, stackOffset);
		return bop.foldConstants();
	}

	/**
	 * @return
	 */
	public Variable[] getVariables() {
		return variables;
	}

	/**
	 * @return
	 */
	public int getNoArgs() {
		return this.nArgs;
	}
}

⌨️ 快捷键说明

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