Open-source multiplayer game server compatible with the RuneScape client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
openrs2/deob-ir/src/main/java/dev/openrs2/deob/ir/Expr.kt

52 lines
1.2 KiB

package dev.openrs2.deob.ir
import dev.openrs2.asm.MemberRef
import org.objectweb.asm.Type
sealed class Storage
class LocalVarStorage(val slot: Int = -1) : Storage()
class FieldStorage(val instance: Expr, val member: MemberRef) : Storage()
class StaticStorage(val member: MemberRef) : Storage()
sealed class UnaryOp {
object Negate : UnaryOp()
data class InstanceOf(val type: Type) : UnaryOp()
data class Cast(val type: Type) : UnaryOp()
}
enum class BinOp {
Equals,
NotEquals,
LessThan,
GreaterThanOrEquals,
GreaterThan,
LessThanOrEquals,
Remainder,
Divide,
Multiply,
Add,
Subtract,
ShiftLeft,
ShiftRight,
UnsignedShiftRight,
ExclusiveOr
}
data class BinaryExpr(val lhs: Expr, val rhs: Expr, val op: dev.openrs2.deob.ir.BinOp) : Expr()
sealed class Expr
data class IndexExpr(val array: Expr, val index: Expr) : Expr()
data class UnaryExpr(val operand: Expr, val operator: UnaryOp) : Expr()
data class ConstExpr(val value: Any?) : Expr()
data class CallExpr(val instance: Expr?, val method: MemberRef, val arguments: List<Expr>) : Expr()
data class VarExpr(val storage: Storage) : Expr() {
companion object {
fun local(slot: Int) = VarExpr(LocalVarStorage(slot))
}
}