Remove copies in InsnMatcher

Signed-off-by: Major <major@emulate.rs>
pull/68/head
Major 4 years ago
parent 1d29aa8c50
commit 45bf24c51d
  1. 14
      asm/src/main/java/dev/openrs2/asm/InsnMatcher.kt

@ -12,9 +12,17 @@ class InsnMatcher private constructor(private val regex: Regex) {
}
fun match(list: InsnList): Sequence<List<AbstractInsnNode>> {
val insns = list.filter { it.opcode != -1 }.toList()
val codepoints = insns.map { opcodeToCodepoint(it.opcode) }.toCharArray()
return regex.findAll(String(codepoints)).map {
val insns = ArrayList<AbstractInsnNode>(list.size())
val builder = StringBuilder(list.size())
for (instruction in list) {
if (instruction.opcode != -1) {
insns += instruction
builder.append(opcodeToCodepoint(instruction.opcode))
}
}
return regex.findAll(builder).map {
insns.subList(it.range.first, it.range.last + 1)
}
}

Loading…
Cancel
Save