⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typeframemodelingvisitor.java

📁 A static analysis tool to find bugs in Java programs
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}	@Override	public void visitFCMPG(FCMPG obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitDCMPL(DCMPL obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitDCMPG(DCMPG obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLCMP(LCMP obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitD2F(D2F obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitD2I(D2I obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitD2L(D2L obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitF2D(F2D obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitF2I(F2I obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitF2L(F2L obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitI2B(I2B obj) {		consumeStack(obj);		pushValue(Type.BYTE);	}	@Override	public void visitI2C(I2C obj) {		consumeStack(obj);		pushValue(Type.CHAR);	}	@Override	public void visitI2D(I2D obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitI2F(I2F obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitI2L(I2L obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitI2S(I2S obj) {	} // no change	@Override	public void visitL2D(L2D obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitL2F(L2F obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitL2I(L2I obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitIAND(IAND obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLAND(LAND obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitIOR(IOR obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLOR(LOR obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitIXOR(IXOR obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLXOR(LXOR obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitISHR(ISHR obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitIUSHR(IUSHR obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLSHR(LSHR obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitLUSHR(LUSHR obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitISHL(ISHL obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLSHL(LSHL obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitDADD(DADD obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFADD(FADD obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitIADD(IADD obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLADD(LADD obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitDSUB(DSUB obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFSUB(FSUB obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitISUB(ISUB obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLSUB(LSUB obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitDMUL(DMUL obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFMUL(FMUL obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitIMUL(IMUL obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLMUL(LMUL obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitDDIV(DDIV obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFDIV(FDIV obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitIDIV(IDIV obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLDIV(LDIV obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitDREM(DREM obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFREM(FREM obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitIREM(IREM obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLREM(LREM obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitIINC(IINC obj) {	} // no change to types of stack or locals	@Override	public void visitDNEG(DNEG obj) {	} // no change	@Override	public void visitFNEG(FNEG obj) {	} // no change	@Override	public void visitINEG(INEG obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLNEG(LNEG obj) {	} // no change	@Override	public void visitARRAYLENGTH(ARRAYLENGTH obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitAALOAD(AALOAD obj) {		// To determine the type pushed on the stack,		// we look at the type of the array reference which was		// popped off of the stack.		TypeFrame frame = getFrame();		try {			frame.popValue(); // index			Type arrayType = frame.popValue(); // arrayref			if (arrayType instanceof ArrayType) {				ArrayType arr = (ArrayType) arrayType;				pushValue(arr.getElementType());			} else {				pushValue(TypeFrame.getBottomType());			}		} catch (DataflowAnalysisException e) {			throw new InvalidBytecodeException("Stack underflow: " + e.getMessage());		}	}	@Override	public void visitBALOAD(BALOAD obj) {		consumeStack(obj);		pushValue(Type.BYTE);	}	@Override	public void visitCALOAD(CALOAD obj) {		consumeStack(obj);		pushValue(Type.CHAR);	}	@Override	public void visitDALOAD(DALOAD obj) {		consumeStack(obj);		pushValue(Type.DOUBLE);	}	@Override	public void visitFALOAD(FALOAD obj) {		consumeStack(obj);		pushValue(Type.FLOAT);	}	@Override	public void visitIALOAD(IALOAD obj) {		consumeStack(obj);		pushValue(Type.INT);	}	@Override	public void visitLALOAD(LALOAD obj) {		consumeStack(obj);		pushValue(Type.LONG);	}	@Override	public void visitSALOAD(SALOAD obj) {		consumeStack(obj);		pushValue(Type.SHORT);	}	// The various xASTORE instructions only consume stack.	@Override	public void visitNEW(NEW obj) {		// FIXME: type is technically "uninitialized"		// However, we don't model that yet.		pushValue(obj.getType(getCPG()));		// We now have an exact type for this value.		setTopOfStackIsExact();	}	@Override	public void visitNEWARRAY(NEWARRAY obj) {		consumeStack(obj);		Type elementType = obj.getType();		pushValue(elementType);		// We now have an exact type for this value.		setTopOfStackIsExact();	}	@Override	public void visitANEWARRAY(ANEWARRAY obj) {		consumeStack(obj);		Type elementType = obj.getType(getCPG());		pushValue(new ArrayType(elementType, 1));		// We now have an exact type for this value.		setTopOfStackIsExact();	}	@Override	public void visitMULTIANEWARRAY(MULTIANEWARRAY obj) {		consumeStack(obj);		Type elementType = obj.getType(getCPG());		pushValue(elementType);		// We now have an exact type for this value.		setTopOfStackIsExact();	}	private void setTopOfStackIsExact() {		TypeFrame frame = getFrame();		frame.setExact(frame.getNumSlots() - 1, true);	}	@Override	public void visitJSR(JSR obj) {		pushValue(ReturnaddressType.NO_TARGET);	}	@Override	public void visitJSR_W(JSR_W obj) {		pushValue(ReturnaddressType.NO_TARGET);	}	@Override	public void visitRET(RET obj) {	} // no change	@Override	public void visitIFEQ(IFEQ obj) {		if (lastOpcode == Constants.INSTANCEOF)			instanceOfFollowedByBranch = true;		super.visitIFEQ(obj);	}	@Override	public void visitIFGT(IFGT obj) {		if (lastOpcode == Constants.INSTANCEOF)			instanceOfFollowedByBranch = true;		super.visitIFGT(obj);	}	@Override	public void visitIFLE(IFLE obj) {		if (lastOpcode == Constants.INSTANCEOF)			instanceOfFollowedByBranch = true;		super.visitIFLE(obj);	}	@Override	public void visitIFNE(IFNE obj) {		if (lastOpcode == Constants.INSTANCEOF)			instanceOfFollowedByBranch = true;		super.visitIFNE(obj);	}}// vim:ts=4

⌨️ 快捷键说明

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