From 75f223ef5e954b406224b1e4621d91f1b8727885 Mon Sep 17 00:00:00 2001 From: Parnassian Date: Sun, 3 May 2015 00:12:41 +0200 Subject: [PATCH] different debug adapter --- .../core/asm/adapters/AddDebugAdapter.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java b/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java index beb4dce..ec4d68d 100644 --- a/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java +++ b/parabotv2/src/org/parabot/core/asm/adapters/AddDebugAdapter.java @@ -1,33 +1,43 @@ package org.parabot.core.asm.adapters; +import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.LabelNode; +import org.objectweb.asm.tree.LdcInsnNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; public class AddDebugAdapter { + private ClassNode owner; private MethodNode mn; + public AddDebugAdapter(ClassNode owner, MethodNode mn) { + this.owner = owner; + this.mn = mn; + } + public AddDebugAdapter(MethodNode mn) { this.mn = mn; } public void inject() { + InsnList inject = new InsnList(); + Label l0 = new Label(); + inject.add(new LabelNode(l0)); + + String callString = owner.name + "." + mn.name + " " + mn.desc; + LdcInsnNode ldc = new LdcInsnNode(callString); + + MethodInsnNode methodNode = new MethodInsnNode(Opcodes.INVOKESTATIC, "org/parabot/core/Core", "debug", + "(Ljava/lang/String;)V"); + + inject.add(ldc); + inject.add(methodNode); + + mn.instructions.insert(inject); - int i = 20; - for(AbstractInsnNode node : mn.instructions.toArray().clone()) { - if(node.getType() == AbstractInsnNode.METHOD_INSN || node.getOpcode() == Opcodes.PUTFIELD || node.getOpcode() == Opcodes.ASTORE || node.getOpcode() == Opcodes.ISTORE) { - i++; - InsnList inject = new InsnList(); - inject.add(new IntInsnNode(Opcodes.BIPUSH, i)); - inject.add(new MethodInsnNode(Opcodes.INVOKESTATIC, - "org/parabot/core/Core", "debug", - "(I)V")); - mn.instructions.insertBefore(node.getNext(), inject); - } - } } }