private void handleArrayRef(ArrayRef arrayRef, AnalysisInfo out) { Value array = arrayRef.getBase(); // here we know that the array must point to an object, but the array value might be anything out.put(array, NON_NULL); // out.put(arrayRef, TOP); }
private void handleArrayRef(ArrayRef arrayRef, AnalysisInfo out) { Value array = arrayRef.getBase(); // here we know that the array must point to an object out.put(array, NON_NULL); }
if (!(leftOp.equals(leftRef.getBase()))) { if (DEBUG) { System.out.println("Not assigning to same array");
@Override final public void caseArrayRef(ArrayRef ar) { caseLocal((Local) ar.getBase()); setResult(caseArray((VarNode) getNode())); }
if (!(leftOp.equals(leftRef.getBase()))) { if (DEBUG) { System.out.println("Not assigning to same array");
public boolean equivTo(Object o) { if (o instanceof ArrayRef) { return (getBase().equivTo(((ArrayRef) o).getBase()) && getIndex().equivTo(((ArrayRef) o).getIndex())); } return false; }
public void caseArrayRef(ArrayRef v) { ((ConvertToBaf) (v.getBase())).convertToBaf(context, out); ((ConvertToBaf) (v.getIndex())).convertToBaf(context, out); ((ConvertToBaf) rvalue).convertToBaf(context, out); Unit u = Baf.v().newArrayWriteInst(v.getType()); u.addAllTagsOf(JAssignStmt.this); out.add(u); }
public void caseArrayRef(ArrayRef v) { String oldName = varName; Value base = v.getBase(); suggestVariableName("base"); String baseName = varName; base.apply(this); Value index = v.getIndex(); suggestVariableName("index"); String indexName = varName; index.apply(this); p.println("Value " + oldName + " = Jimple.v().newArrayRef(" + baseName + ", " + indexName + ");"); varName = oldName; }
Value base = (op).getBase(); Value index = (op).getIndex();
public void caseArrayRef(ArrayRef ref) { result = result.add(mgr.NULL_POINTER_EXCEPTION); result = result.add(mgr.ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION); result = result.add(mightThrow(ref.getBase())); result = result.add(mightThrow(ref.getIndex())); }
private Insn buildArrayGetInsn(Register destinationReg, ArrayRef sourceRef) { Value index = sourceRef.getIndex(); Register indexReg = regAlloc.asImmediate(index, constantV); Local array = (Local) sourceRef.getBase(); Register arrayReg = regAlloc.asLocal(array); String arrayTypeDescriptor = SootToDexUtils.getArrayTypeDescriptor((ArrayType) array.getType()); Opcode opc = getPutGetOpcodeWithTypeSuffix(AGET_OPCODE, arrayTypeDescriptor); return new Insn23x(opc, destinationReg, arrayReg, indexReg); }
private Insn buildArrayPutInsn(ArrayRef destRef, Value source) { Local array = (Local) destRef.getBase(); Register arrayReg = regAlloc.asLocal(array); Value index = destRef.getIndex(); Register indexReg = regAlloc.asImmediate(index, constantV); Register sourceReg = regAlloc.asImmediate(source, constantV); String arrayTypeDescriptor = SootToDexUtils.getArrayTypeDescriptor((ArrayType) array.getType()); Opcode opc = getPutGetOpcodeWithTypeSuffix(APUT_OPCODE, arrayTypeDescriptor); return new Insn23x(opc, sourceReg, arrayReg, indexReg); }
public void caseArrayRef(ArrayRef v) { emitValue(v.getBase()); emitValue(v.getIndex());
this.addDepend((Local) ((ArrayRef) rhs).getBase(), assignmentIdx);
public void caseArrayRef(ArrayRef v) { emitValue(v.getBase()); emitValue(v.getIndex()); emitValue(rvalue);
protected RWSet addValue(Value v, SootMethod m, Stmt s) { RWSet ret = null; if (v instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) v; PointsToSet base = pa.reachingObjects((Local) ifr.getBase()); ret = new StmtRWSet(); ret.addFieldRef(base, ifr.getField()); } else if (v instanceof StaticFieldRef) { StaticFieldRef sfr = (StaticFieldRef) v; ret = new StmtRWSet(); ret.addGlobal(sfr.getField()); } else if (v instanceof ArrayRef) { ArrayRef ar = (ArrayRef) v; PointsToSet base = pa.reachingObjects((Local) ar.getBase()); ret = new StmtRWSet(); ret.addFieldRef(base, PointsToAnalysis.ARRAY_ELEMENTS_NODE); } return ret; }
if (l instanceof ArrayRef) { ArrayRef ar = (ArrayRef) l; Local baseLocal = (Local) ar.getBase(); ArrayType arrayType = (ArrayType) localTyped.get(baseLocal); lType = arrayType.getElementType(); Local baseLocal = (Local) stmt.getArrayRef().getBase(); ArrayType lType = (ArrayType) localTyped.get(baseLocal); Type elemType = lType.getElementType();
Value base = s.getArrayRef().getBase(); if (isAlwaysNullBefore(s, (Local) base, defs)) { createThrowStmt(body, s, lc);
return null; } else if (v instanceof ArrayRef && tlo.isObjectThreadLocal(((ArrayRef) v).getBase(), m)) { return null; } else if (v instanceof ArrayRef) { ArrayRef ar = (ArrayRef) v; PointsToSet base = pa.reachingObjects((Local) ar.getBase()); ret = new StmtRWSet(); ret.addFieldRef(base, PointsToAnalysis.ARRAY_ELEMENTS_NODE);
@Override public void caseAssignStmt(AssignStmt stmt) { // Case a = 0 with a being an object if (isObject(stmt.getLeftOp().getType()) && isConstZero(stmt.getRightOp())) { stmt.setRightOp(nullConstant); return; } // Case a = (Object) 0 if (stmt.getRightOp() instanceof CastExpr) { CastExpr ce = (CastExpr) stmt.getRightOp(); if (isObject(ce.getCastType()) && isConstZero(ce.getOp())) { stmt.setRightOp(nullConstant); } } // Case a[0] = 0 if (stmt.getLeftOp() instanceof ArrayRef && isConstZero(stmt.getRightOp())) { ArrayRef ar = (ArrayRef) stmt.getLeftOp(); if (isObjectArray(ar.getBase(), body) || stmt.hasTag("ObjectOpTag")) { stmt.setRightOp(nullConstant); } } }