@Override public void remove() { int[] index = colValuesInternal.get(pointer); data[index[0]] &= ~index[1]; } }
private void buildDominatorTree() { VBStyleCollection<Integer, Integer> orderedIDoms = domEngine.getOrderedIDoms(); List<Integer> lstKeys = orderedIDoms.getLstKeys(); for (int index = lstKeys.size() - 1; index >= 0; index--) { Integer key = lstKeys.get(index); Integer idom = orderedIDoms.get(index); mapTreeBranches.computeIfAbsent(idom, k -> new HashSet<>()).add(key); } Integer firstid = statement.getFirst().id; mapTreeBranches.get(firstid).remove(firstid); }
public String toString() { StringBuilder buffer = new StringBuilder("{"); int[] intdata = data; boolean first = true; for (int i = colValuesInternal.size() - 1; i >= 0; i--) { int[] index = colValuesInternal.get(i); if ((intdata[index[0]] & index[1]) != 0) { if (first) { first = false; } else { buffer.append(","); } buffer.append(colValuesInternal.getKey(i)); } } buffer.append("}"); return buffer.toString(); }
private static Statement getNextStatement(Statement stat) { Statement parent = stat.getParent(); switch (parent.type) { case Statement.TYPE_ROOT: return ((RootStatement)parent).getDummyExit(); case Statement.TYPE_DO: return parent; case Statement.TYPE_SEQUENCE: SequenceStatement sequence = (SequenceStatement)parent; if (sequence.getStats().getLast() != stat) { for (int i = sequence.getStats().size() - 1; i >= 0; i--) { if (sequence.getStats().get(i) == stat) { return sequence.getStats().get(i + 1); } } } } return getNextStatement(parent); }
@Override public void remove() { int[] index = colValuesInternal.get(pointer); data[index[0]] &= ~index[1]; } }
public Set<E> toPlainSet() { HashSet<E> set = new HashSet<>(); int[] intdata = data; int size = data.length * 32; if (size > colValuesInternal.size()) { size = colValuesInternal.size(); } for (int i = size - 1; i >= 0; i--) { int[] index = colValuesInternal.get(i); if ((intdata[index[0]] & index[1]) != 0) { set.add(colValuesInternal.getKey(i)); } } return set; }
public String toString(int indent) { String new_line_separator = DecompilerContext.getNewLineSeparator(); StringBuilder buf = new StringBuilder(); for (int i = 0; i < collinstr.size(); i++) { buf.append(TextUtil.getIndentString(indent)); buf.append(collinstr.getKey(i).intValue()); buf.append(": "); buf.append(collinstr.get(i).toString()); buf.append(new_line_separator); } return buf.toString(); }
public Instruction getInstr(int index) { return collinstr.get(index); }
@Override public void initSimpleCopy() { first = stats.get(0); List<StatEdge> lstSuccs = first.getSuccessorEdges(STATEDGE_DIRECT_ALL); ifedge = lstSuccs.get((iftype == IFTYPE_IF || negated) ? 0 : 1); if (stats.size() > 1) { ifstat = stats.get(1); } if (iftype == IFTYPE_IFELSE) { elseedge = lstSuccs.get(negated ? 1 : 0); elsestat = stats.get(2); } }
public void setAllElements() { int[] lastindex = colValuesInternal.get(colValuesInternal.size() - 1); for (int i = lastindex[0] - 1; i >= 0; i--) { data[i] = 0xFFFFFFFF; } data[lastindex[0]] = lastindex[1] | (lastindex[1] - 1); }
public void initSimpleCopy() { if (!stats.isEmpty()) { first = stats.get(0); } }
public SequenceStatement(List<? extends Statement> lst) { this(); lastBasicType = lst.get(lst.size() - 1).getLastBasicType(); for (Statement st : lst) { stats.addWithKey(st, st.id); } first = stats.get(0); }
@Override public void initSimpleCopy() { first = stats.get(0); default_edge = first.getSuccessorEdges(Statement.STATEDGE_DIRECT_ALL).get(0); sortEdgesAndNodes(); }
public void removeExc() { Statement exc = stats.get(2); SequenceHelper.destroyStatementContent(exc, true); stats.removeWithKey(exc.id); }
private void setFirstAndLastBlocks() { first = blocks.get(0); last = new BasicBlock(++last_id); for (BasicBlock block : blocks) { if (block.getSuccs().isEmpty()) { last.addPredecessor(block); } } }
private static boolean isInlineable(SequenceStatement seq, int index) { Statement first = seq.getStats().get(index); Statement pre = seq.getStats().get(index - 1); if (pre.hasBasicSuccEdge()) { return false; } List<StatEdge> lst = first.getPredecessorEdges(StatEdge.TYPE_BREAK); if (lst.size() == 1) { StatEdge edge = lst.get(0); if (sameCatchRanges(edge)) { if (!edge.explicit) { for (int i = index; i < seq.getStats().size(); i++) { if (!noExitLabels(seq.getStats().get(i), seq)) { return false; } } } return true; } // FIXME: count labels properly } return false; }
private static Statement getLastDirectData(Statement stat) { if (stat.getExprents() != null) { return stat; } if (stat.type == Statement.TYPE_SEQUENCE) { for (int i = stat.getStats().size() - 1; i >= 0; i--) { Statement tmp = getLastDirectData(stat.getStats().get(i)); if (tmp == null || !tmp.getExprents().isEmpty()) { return tmp; } } } return null; } }
private static void collectCatchVars(Statement stat, FlattenStatementsHelper flatthelper, Map<String, VarExprent> map) { List<VarExprent> lst = null; if (stat.type == Statement.TYPE_CATCHALL) { CatchAllStatement catchall = (CatchAllStatement)stat; if (!catchall.isFinally()) { lst = catchall.getVars(); } } else if (stat.type == Statement.TYPE_TRYCATCH) { lst = ((CatchStatement)stat).getVars(); } if (lst != null) { for (int i = 1; i < stat.getStats().size(); i++) { map.put(flatthelper.getMapDestinationNodes().get(stat.getStats().get(i).id)[0], lst.get(i - 1)); } } for (Statement st : stat.getStats()) { collectCatchVars(st, flatthelper, map); } }