diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/ftbsc/lll/tools/InsnSequence.java | 10 | ||||
-rw-r--r-- | src/main/java/ftbsc/lll/tools/PatternMatcher.java | 26 |
2 files changed, 23 insertions, 13 deletions
diff --git a/src/main/java/ftbsc/lll/tools/InsnSequence.java b/src/main/java/ftbsc/lll/tools/InsnSequence.java index 1a915ca..2038155 100644 --- a/src/main/java/ftbsc/lll/tools/InsnSequence.java +++ b/src/main/java/ftbsc/lll/tools/InsnSequence.java @@ -20,6 +20,16 @@ public class InsnSequence extends InsnList { } /** + * Public constructor for list with single item. + * Must be given a single non-null node. + * @param node the node in question + */ + public InsnSequence(AbstractInsnNode node) { + super(); + super.add(node); + } + + /** * Public constructor. * Must be given two non-null, connected nodes. * @param startNode the starting node of the pattern diff --git a/src/main/java/ftbsc/lll/tools/PatternMatcher.java b/src/main/java/ftbsc/lll/tools/PatternMatcher.java index 161a3fa..a941b72 100644 --- a/src/main/java/ftbsc/lll/tools/PatternMatcher.java +++ b/src/main/java/ftbsc/lll/tools/PatternMatcher.java @@ -85,25 +85,25 @@ public class PatternMatcher { if(ignoreLabels && cur.getType() == AbstractInsnNode.LABEL) continue; if(ignoreFrames && cur.getType() == AbstractInsnNode.FRAME) continue; if(ignoreLineNumbers && cur.getType() == AbstractInsnNode.LINE) continue; - if(predicates.get(match).test(cur)) { - match++; - if(first == null) - first = cur; - } else { //reset - first = null; - match = 0; + if(predicates.get(match) != null) { + if(predicates.get(match).test(cur)) { + match++; + if (first == null) + first = cur; + } else { //reset + first = null; + match = 0; + } } //check if we found the last one if(match == predicates.size()) { + if(match == 0) + return new InsnSequence(cur); //match whatever last = cur; - break; + if(reverse) return new InsnSequence(last, first); //we are matching backwards + else return new InsnSequence(first, last); } } - //only return value if we found both a start and an end - if(first != null && last != null) { - if(reverse) return new InsnSequence(last, first); //we are matching backwards - else return new InsnSequence(first, last); - } } throw new PatternNotFoundException("Failed to find pattern!"); } |