private void javafy_binop_expr(ValueBox vb) { BinopExpr boe = (BinopExpr) vb.getValue(); ValueBox leftOpBox = boe.getOp1Box(), rightOpBox = boe.getOp2Box(); Value leftOp = leftOpBox.getValue(), rightOp = rightOpBox.getValue(); if (rightOp instanceof IntConstant) { if ((leftOp instanceof IntConstant) == false) { javafy(leftOpBox); leftOp = leftOpBox.getValue(); if (boe instanceof ConditionExpr) rightOpBox.setValue(DIntConstant.v( ((IntConstant) rightOp).value, leftOp.getType())); else rightOpBox.setValue(DIntConstant.v( ((IntConstant) rightOp).value, null)); } } else if (leftOp instanceof IntConstant) { javafy(rightOpBox); rightOp = rightOpBox.getValue(); if (boe instanceof ConditionExpr) leftOpBox.setValue(DIntConstant.v(((IntConstant) leftOp).value, rightOp.getType())); else leftOpBox.setValue(DIntConstant.v(((IntConstant) leftOp).value, null)); } else { javafy(rightOpBox); rightOp = rightOpBox.getValue(); javafy(leftOpBox); leftOp = leftOpBox.getValue(); } if (boe instanceof CmpExpr) vb.setValue(new DCmpExpr(leftOp, rightOp)); else if (boe instanceof CmplExpr) vb.setValue(new DCmplExpr(leftOp, rightOp)); else if (boe instanceof CmpgExpr) vb.setValue(new DCmpgExpr(leftOp, rightOp)); }
@Override public void visit(Value e) { if (e instanceof CmplExpr) { CmplExpr ce = (CmplExpr) e; add(e, ce.getOp1(), ce.getOp2()); } }
@Override public void caseCmplExpr(CmplExpr v) { rightElement = RightElement.NOT; if (actualContext == StmtContext.ASSIGNRIGHT) { throw new NotSupportedStmtException("CmplExpr"); } }
@Override public void caseCmplExpr(CmplExpr v) { throw new RuntimeException("todo"); }
public void caseCmplExpr(CmplExpr v) { printBinaryExpr(v); }
private void handleBinopExpr(BinopExpr be, Stmt stmt, Type tlhs) { Value opl = be.getOp1(), opr = be.getOp2(); Type tl = AugEvalFunction.eval_(this.tg, opl, stmt, this.jb), tr = AugEvalFunction.eval_(this.tg, opr, stmt, this.jb); if ( be instanceof AddExpr || be instanceof SubExpr || be instanceof MulExpr || be instanceof DivExpr || be instanceof RemExpr || be instanceof GeExpr || be instanceof GtExpr || be instanceof LeExpr || be instanceof LtExpr || be instanceof ShlExpr || be instanceof ShrExpr || be instanceof UshrExpr ) { if ( tlhs instanceof IntegerType ) { be.setOp1(this.uv.visit(opl, IntType.v(), stmt)); be.setOp2(this.uv.visit(opr, IntType.v(), stmt)); } } else if ( be instanceof CmpExpr || be instanceof CmpgExpr || be instanceof CmplExpr ) { // No checks in the original assigner } else if ( be instanceof AndExpr || be instanceof OrExpr || be instanceof XorExpr ) { be.setOp1(this.uv.visit(opl, tlhs, stmt)); be.setOp2(this.uv.visit(opr, tlhs, stmt)); } else if ( be instanceof EqExpr || be instanceof NeExpr ) { if ( tl instanceof BooleanType && tr instanceof BooleanType ) { } else if ( tl instanceof Integer1Type || tr instanceof Integer1Type ) { } else if ( tl instanceof IntegerType ) { be.setOp1(this.uv.visit(opl, IntType.v(), stmt)); be.setOp2(this.uv.visit(opr, IntType.v(), stmt)); } } }
@Override public void caseCmplExpr(CmplExpr v) { stmtV.addInsn(buildCmpInsn("CMPL", v.getOp1(), v.getOp2()), origStmt); }
public void caseCmplExpr(CmplExpr expr) { caseBinopExpr(expr); }
@Override public void caseCmplExpr(CmplExpr arg0) { translateBinOp(arg0); }
/** * DOC * * @see soot.jimple.ExprSwitch#caseCmplExpr(soot.jimple.CmplExpr) */ @Override public void caseCmplExpr(CmplExpr v) { v.getOp1().apply(this); v.getOp2().apply(this); }
@Override public void caseCmplExpr(CmplExpr v) { throwInvalidWriteException(v); }
@Override public void caseCmplExpr(CmplExpr v) { handleBinaryExpr(v.getOp1(), v.getOp2()); }
/** * The method should update the <em>security level</em> of a * {@link CmplExpr}, but it is not possible to update the level of an * expression. * * @param v * The expression for which the <em>security level</em> should be * updated. * @see soot.jimple.ExprSwitch#caseCmplExpr(soot.jimple.CmplExpr) * @throws InvalidSwitchException * Always, because the update is not possible. */ @Override public void caseCmplExpr(CmplExpr v) { throw new SwitchException(getMsg("exception.analysis.switch.update_error", this.getClass().getSimpleName(), v.getClass().getSimpleName(), v.toString(), getSourceLine())); }
/** * Looks up the <em>security level</em> for the given binary expression and * stores the level in {@link SecurityLevelValueReadSwitch#level}. For a * {@link CmplExpr} this is the strongest operand <em>security level</em> of * the given binary expression. * * @param v * The expression for which the <em>security level</em> should be * looked up. * @see soot.jimple.ExprSwitch#caseCmplExpr(soot.jimple.CmplExpr) * @see SecurityLevelValueReadSwitch#handleBinaryOperation(BinopExpr) */ @Override public void caseCmplExpr(CmplExpr v) { handleBinaryOperation(v); }