From 21e0dabf874129a8e24d52685c5124e413739dd2 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 6 Oct 2013 12:32:38 +0400 Subject: [PATCH] Using LabelNode instead of bare Label --- src/org/jetbrains/eval4j/interpreter.kt | 10 +++++----- src/org/jetbrains/eval4j/values.kt | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/org/jetbrains/eval4j/interpreter.kt b/src/org/jetbrains/eval4j/interpreter.kt index a1dabe25e55..122a627dd7e 100644 --- a/src/org/jetbrains/eval4j/interpreter.kt +++ b/src/org/jetbrains/eval4j/interpreter.kt @@ -13,7 +13,7 @@ import org.objectweb.asm.tree.MultiANewArrayInsnNode import org.objectweb.asm.tree.TypeInsnNode import org.objectweb.asm.tree.JumpInsnNode import org.objectweb.asm.tree.IincInsnNode -import org.objectweb.asm.Label +import org.objectweb.asm.tree.LabelNode class UnsupportedByteCodeException(message: String) : RuntimeException(message) @@ -39,7 +39,7 @@ trait Eval { } trait Control { - fun jump(label: Label) + fun jump(label: LabelNode) fun returnValue(value: Value) fun throwException(value: Value) @@ -103,7 +103,7 @@ class SingleInstructionInterpreter(private val eval: Eval, private val control: else -> throw UnsupportedByteCodeException("Illegal LDC constant " + cst) } } - JSR -> LabelValue((insn as JumpInsnNode).label.getLabel()) + JSR -> LabelValue((insn as JumpInsnNode).label) GETSTATIC -> eval.getStaticField((insn as FieldInsnNode).desc) NEW -> eval.newInstance(Type.getType((insn as TypeInsnNode).desc)) else -> throw UnsupportedByteCodeException("$insn") @@ -141,7 +141,7 @@ class SingleInstructionInterpreter(private val eval: Eval, private val control: F2D -> double(value.float.toDouble()) IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IFNULL, IFNONNULL -> { - val label = (insn as JumpInsnNode).label.getLabel() + val label = (insn as JumpInsnNode).label when (insn.getOpcode()) { IFEQ -> if (value.int == 0) control.jump(label) IFNE -> if (value.int != 0) control.jump(label) @@ -290,7 +290,7 @@ class SingleInstructionInterpreter(private val eval: Eval, private val control: } IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE -> { - val label = (insn as JumpInsnNode).label.getLabel() + val label = (insn as JumpInsnNode).label when (insn.getOpcode()) { IF_ICMPEQ -> if (value1.int == value2.int) control.jump(label) IF_ICMPNE -> if (value1.int != value2.int) control.jump(label) diff --git a/src/org/jetbrains/eval4j/values.kt b/src/org/jetbrains/eval4j/values.kt index 06246a3967a..94dc363aca5 100644 --- a/src/org/jetbrains/eval4j/values.kt +++ b/src/org/jetbrains/eval4j/values.kt @@ -1,7 +1,7 @@ package org.jetbrains.eval4j import org.objectweb.asm.Type -import org.objectweb.asm.Label +import org.objectweb.asm.tree.LabelNode trait Value : org.objectweb.asm.tree.analysis.Value { val asmType: Type @@ -31,7 +31,7 @@ class FloatValue(val value: Float): AbstractValue(Type.FLOAT_TYPE) class DoubleValue(val value: Double): AbstractValue(Type.DOUBLE_TYPE) class ObjectValue(val value: Any?, asmType: Type): AbstractValue(asmType) -class LabelValue(val value: Label): AbstractValue(Type.VOID_TYPE) +class LabelValue(val value: LabelNode): AbstractValue(Type.VOID_TYPE) fun boolean(v: Boolean) = IntValue(if (v) 1 else 0, Type.BOOLEAN_TYPE) fun byte(v: Byte) = IntValue(v.toInt(), Type.BYTE_TYPE)