Java 类soot.jimple.MonitorStmt 实例源码

项目:petablox    文件:Instrumentor.java   
public static boolean isRelevant(Unit q) {
    if(q instanceof JAssignStmt){
        JAssignStmt as=(JAssignStmt)q;
        return
SootUtilities.isFieldLoad(as)||
         SootUtilities.isStoreInst(as) ||
         SootUtilities.isNewStmt(as)||
         SootUtilities.isLoadInst(as)||
         SootUtilities.isFieldStore(as) ||
         SootUtilities.isStaticGet(as)||
         SootUtilities.isStaticPut(as) ||
         SootUtilities.isInvoke(as) ||
         SootUtilities.isNewArrayStmt(as);  
    }
    return
        SootUtilities.isInvoke(q) ||
        (q instanceof JReturnStmt || q instanceof JReturnVoidStmt)||
        q instanceof MonitorStmt;
}
项目:petablox    文件:RelLL.java   
private void process(Block bb, TIntArrayList locks, int ndx) {
    int k = ndx;
    Iterator<Unit> uit = bb.iterator();
    while(uit.hasNext()){
        Unit u = uit.next();
        if (u instanceof MonitorStmt) {
            if (u instanceof JEnterMonitorStmt) {
                int lIdx = domL.indexOf(u);
                assert (lIdx >= 0);
                if (k > 0) {
                    int lIdx2 = locks.get(k - 1);
                    add(lIdx2, lIdx);
                }
                locks.add(lIdx);
                k++;
            } else {
                k--;
            }
        }
    }
    for (Object o : bb.getSuccs()) {
        Block bb2 = (Block) o;
        if (!visited.contains(bb2)) {
            visited.add(bb2);
            process(bb2, locks, k);
        }
    }
}
项目:petablox    文件:RelLP.java   
private void process(Block bb, TIntArrayList locks, int ndx) {
    int k = ndx;
    Iterator<Unit> uit = bb.iterator();
    while(uit.hasNext()){
        Unit u = uit.next();
        if (u instanceof MonitorStmt) {
            if (u instanceof JEnterMonitorStmt) {
                int lIdx = domL.indexOf(u);
                assert (lIdx >= 0);
                locks.add(lIdx);
                k++;
            } else {
                k--;
            }
        } else if (k > 0) {
            int pIdx = domP.indexOf(u);
            assert (pIdx >= 0);
            add(locks.get(k - 1), pIdx);
        }
    }
    for (Object o : bb.getSuccs()) {
        Block bb2 = (Block) o;
        if (!visited.contains(bb2)) {
            visited.add(bb2);
            process(bb2, locks, k);
        }
    }
}
项目:JAADAS    文件:StmtVisitor.java   
private Insn buildMonitorInsn(MonitorStmt stmt, Opcode opc) {
    Value lockValue = stmt.getOp();
       constantV.setOrigStmt(stmt);
    Register lockReg = regAlloc.asImmediate(lockValue, constantV);
    return new Insn11x(opc, lockReg);
}