
shz.core.jvm.cfs.CFSConstants Maven / Gradle / Ivy
package shz.core.jvm.cfs;
import shz.core.jvm.cfs.un.HexU1;
import shz.core.jvm.cfs.un.HexU2;
public final class CFSConstants {
private CFSConstants() {
throw new IllegalStateException();
}
/**
* 位数
*/
public static final byte BIT1 = 0b01;
public static final byte BIT2 = 0b10;
public static final byte BIT4 = 0b100;
public static final byte BIT8 = 0b1000;
/**
* 类访问标志
*/
public enum ClassAccessFlag {
ACC_PUBLIC(HexU2._0x0001), ACC_FINAL(HexU2._0x0010), ACC_SUPER(HexU2._0x0020), ACC_INTERFACE(HexU2._0x0200),
ACC_ABSTRACT(HexU2._0x0400), ACC_SYNTHETIC(HexU2._0x1000), ACC_ANNOTATION(HexU2._0x2000), ACC_ENUM(HexU2._0x4000);
public final HexU2 value;
ClassAccessFlag(HexU2 value) {
this.value = value;
}
}
/**
* 内部类访问标志
*/
public enum InnerClassAccessFlag {
ACC_PUBLIC(HexU2._0x0001), ACC_PRIVATE(HexU2._0x0002), ACC_PROTECTED(HexU2._0x0004), ACC_STATIC(HexU2._0x0008),
ACC_FINAL(HexU2._0x0010), ACC_INTERFACE(HexU2._0x0200), ACC_ABSTRACT(HexU2._0x0400), ACC_SYNTHETIC(HexU2._0x1000),
ACC_ANNOTATION(HexU2._0x2000), ACC_ENUM(HexU2._0x4000);
public final HexU2 value;
InnerClassAccessFlag(HexU2 value) {
this.value = value;
}
}
/**
* 字段访问标志
*/
public enum FieldAccessFlag {
ACC_PUBLIC(HexU2._0x0001), ACC_PRIVATE(HexU2._0x0002), ACC_PROTECTED(HexU2._0x0004), ACC_STATIC(HexU2._0x0008),
ACC_FINAL(HexU2._0x0010), ACC_VOLATILE(HexU2._0x0040), ACC_TRANSIENT(HexU2._0x0080), ACC_SYNTHETIC(HexU2._0x1000),
ACC_ENUM(HexU2._0x4000);
public final HexU2 value;
FieldAccessFlag(HexU2 value) {
this.value = value;
}
}
/**
* 方法访问标志
*/
public enum MethodAccessFlag {
ACC_PUBLIC(HexU2._0x0001), ACC_PRIVATE(HexU2._0x0002), ACC_PROTECTED(HexU2._0x0004), ACC_STATIC(HexU2._0x0008),
ACC_FINAL(HexU2._0x0010), ACC_SYNCHRONIZED(HexU2._0x0020), ACC_BRIDGE(HexU2._0x0040), ACC_VARARGS(HexU2._0x0080),
ACC_NATIVE(HexU2._0x0100), ACC_ABSTRACT(HexU2._0x0400), ACC_STRICTFP(HexU2._0x0800), ACC_SYNTHETIC(HexU2._0x1000);
public final HexU2 value;
MethodAccessFlag(HexU2 value) {
this.value = value;
}
}
/**
* 描述符标识字符
*/
public enum DescriptorFlag {
/**
* 基本类型byte
*/
B,
/**
* 基本类型char
*/
C,
/**
* 基本类型double
*/
D,
/**
* 基本类型float
*/
F,
/**
* 基本类型int
*/
I,
/**
* 基本类型long
*/
J,
/**
* 基本类型short
*/
S,
/**
* 基本类型boolean
*/
Z,
/**
* 特殊类型void
*/
V,
/**
* 对象类型,如Ljava/lang/Object;
*/
L,
// String[][] [[Ljava/lang/String;
// int[] [I
// 用描述符描述方法时,先参数列表后返回值,参数列表按顺序放入小括号()中
// void inc() -> ()V
// java.lang.String toString() -> ()Ljava/lang/String;
// int indexOf(char[] source,int sourceOffset,int sourceCount,char[] target,int
// targetOffset,int targetCount,int fromIndex) -> ([CII[CIII)I
;
}
/**
* 字节码指令
*/
public enum Bytecode {
/**
* 什么都不做
*/
nop(HexU1._0x00),
/**
* 将null推送至栈顶
*/
aconst_null(HexU1._0x01),
/**
* 将int型-1推送至栈顶
*/
iconst_m1(HexU1._0x02),
/**
* 将int型0推送至栈顶
*/
iconst_0(HexU1._0x03), iconst_1(HexU1._0x04), iconst_2(HexU1._0x05), iconst_3(HexU1._0x06),
iconst_4(HexU1._0x07), iconst_5(HexU1._0x08), lconst_0(HexU1._0x09), lconst_1(HexU1._0x0a),
fconst_0(HexU1._0x0b), fconst_1(HexU1._0x0c), fconst_2(HexU1._0x0d), dconst_0(HexU1._0x0e),
dconst_1(HexU1._0x0f),
/**
* 将单字节的常量值(-128~127)推送至栈顶
*/
bipush(HexU1._0x10),
/**
* 将一个短整型常量值(-32768~32767)推送至栈顶
*/
sipush(HexU1._0x11),
/**
* 将int、float或String型常量值从常量池推送至栈顶
*/
ldc(HexU1._0x12),
/**
* 将int、float或String型常量值从常量池推送至栈顶(宽索引)
*/
ldc_w(HexU1._0x13),
/**
* 将long或double型常量值从常量池推送至栈顶(宽索引)
*/
ldc2_w(HexU1._0x14),
/**
* 将指定的int型本地变量推送至栈顶
*/
iload(HexU1._0x15), lload(HexU1._0x16), fload(HexU1._0x17), dload(HexU1._0x18), aload(HexU1._0x19),
/**
* 将第一个int型本地变量推送至栈顶
*/
iload_0(HexU1._0x1a), iload_1(HexU1._0x1b), iload_2(HexU1._0x1c), iload_3(HexU1._0x1d), lload_0(HexU1._0x1e),
lload_1(HexU1._0x1f), lload_2(HexU1._0x20), lload_3(HexU1._0x21), fload_0(HexU1._0x22), fload_1(HexU1._0x23),
fload_2(HexU1._0x24), fload_3(HexU1._0x25), dload_0(HexU1._0x26), dload_1(HexU1._0x27), dload_2(HexU1._0x28),
dload_3(HexU1._0x29), aload_0(HexU1._0x2a), aload_1(HexU1._0x2b), aload_2(HexU1._0x2c), aload_3(HexU1._0x2d),
/**
* 将int型数组指定索引的值推送至栈顶
*/
iaload(HexU1._0x2e), laload(HexU1._0x2f), faload(HexU1._0x30), daload(HexU1._0x31), aaload(HexU1._0x32),
baload(HexU1._0x33), caload(HexU1._0x34), saload(HexU1._0x35),
/**
* 将栈顶int型数值存入指定本地变量
*/
istore(HexU1._0x36), lstore(HexU1._0x37), fstore(HexU1._0x38), dstore(HexU1._0x39), astore(HexU1._0x3a),
/**
* 将栈顶int型数值存入第一个本地变量
*/
istore_0(HexU1._0x3b), istore_1(HexU1._0x3c), istore_2(HexU1._0x3d), istore_3(HexU1._0x3e),
lstore_0(HexU1._0x3f), lstore_1(HexU1._0x40), lstore_2(HexU1._0x41), lstore_3(HexU1._0x42),
fstore_0(HexU1._0x43), fstore_1(HexU1._0x44), fstore_2(HexU1._0x45), fstore_3(HexU1._0x46),
dstore_0(HexU1._0x47), dstore_1(HexU1._0x48), dstore_2(HexU1._0x49), dstore_3(HexU1._0x4a),
astore_0(HexU1._0x4b), astore_1(HexU1._0x4c), astore_2(HexU1._0x4d), astore_3(HexU1._0x4e),
/**
* 将栈顶int型数值存入指定数组的指定索引位置
*/
iastore(HexU1._0x4f), lastore(HexU1._0x50), fastore(HexU1._0x51), dastore(HexU1._0x52), aastore(HexU1._0x53),
bastore(HexU1._0x54), castore(HexU1._0x55), sastore(HexU1._0x56),
/**
* 将栈顶数值弹出(非long且非doubel类型)
*/
pop(HexU1._0x57),
/**
* 将栈顶一个(long或doubel类型)或两个(非long且非doubel类型)数值弹出
*/
pop2(HexU1._0x58),
/**
* 复制栈顶数值并将复制值压入栈顶
*/
dup(HexU1._0x59),
/**
* 复制栈顶数值并将两个复制值压入栈顶
*/
dup_x1(HexU1._0x5a),
/**
* 复制栈顶数值并将三个(或两个)复制值压入栈顶
*/
dup_x2(HexU1._0x5b),
/**
* 复制栈顶数一个(long或doubel类型)或两个(非long且非doubel类型)数值并将复制值压入栈顶
*/
dup2(HexU1._0x5c), dup2_x1(HexU1._0x5d), dup2_x2(HexU1._0x5e),
/**
* 将栈最顶端的两个数值互换(非long且非doubel类型)
*/
swap(HexU1._0x5f),
/**
* 将栈顶两int型数值相加并将结果压入栈顶
*/
iadd(HexU1._0x60), ladd(HexU1._0x61), fadd(HexU1._0x62), dadd(HexU1._0x63),
/**
* 将栈顶两int型数值相减并将结果压入栈顶
*/
isub(HexU1._0x64), lsub(HexU1._0x65), fsub(HexU1._0x66), dsub(HexU1._0x67),
/**
* 将栈顶两int型数值相乘并将结果压入栈顶
*/
imul(HexU1._0x68), lmul(HexU1._0x69), fmul(HexU1._0x6a), dmul(HexU1._0x6b),
/**
* 将栈顶两int型数值相除并将结果压入栈顶
*/
idiv(HexU1._0x6c), ldiv(HexU1._0x6d), fdiv(HexU1._0x6e), ddiv(HexU1._0x6f),
/**
* 将栈顶两int型数值作取模运算并将结果压入栈顶
*/
irem(HexU1._0x70), lrem(HexU1._0x71), frem(HexU1._0x72), drem(HexU1._0x73),
/**
* 将栈顶int型数值取负并将结果压入栈顶
*/
ineg(HexU1._0x74), lneg(HexU1._0x75), fneg(HexU1._0x76), dneg(HexU1._0x77),
/**
* 将int型数值左移位指定位数并将结果压入栈顶
*/
ishl(HexU1._0x78), lshl(HexU1._0x79),
/**
* 将int型数值右(带符号)移位指定位数并将结果压入栈顶
*/
ishr(HexU1._0x7a), lshr(HexU1._0x7b),
/**
* 将int型数值右(无符号)移位指定位数并将结果压入栈顶
*/
iushr(HexU1._0x7c), lushr(HexU1._0x7d),
/**
* 将栈顶两int型数值作"按位与"并将结果压入栈顶
*/
iand(HexU1._0x7e), land(HexU1._0x7f),
/**
* 将栈顶两int型数值作"按位或"并将结果压入栈顶
*/
ior(HexU1._0x80), lor(HexU1._0x81),
/**
* 将栈顶两int型数值作"按位异或"并将结果压入栈顶
*/
ixor(HexU1._0x82), lxor(HexU1._0x83),
/**
* 将指定int型变量增加指定值(如i++、i--、i+=2等)
*/
iinc(HexU1._0x84),
/**
* 将栈顶int型数值强制转换成long型数值并将结果压入栈顶
*/
i2l(HexU1._0x85), i2f(HexU1._0x86), i2d(HexU1._0x87), l2i(HexU1._0x88), l2f(HexU1._0x89), l2d(HexU1._0x8a),
f2i(HexU1._0x8b), f2l(HexU1._0x8c), f2d(HexU1._0x8d), d2i(HexU1._0x8e), d2l(HexU1._0x8f), d2f(HexU1._0x90),
i2b(HexU1._0x91), i2c(HexU1._0x92), i2s(HexU1._0x93),
/**
* 比较栈顶两long型数值的大小,并将结果(1、0或-1)压入栈顶
*/
lcmp(HexU1._0x94),
/**
* 比较栈顶两float型数值的大小,并将结果(1、0或-1)压入栈顶;当其中一个数值为NaN时,将-1压入栈顶
*/
fcmpl(HexU1._0x95),
/**
* 比较栈顶两float型数值的大小,并将结果(1、0或-1)压入栈顶;当其中一个数值为NaN时,将1压入栈顶
*/
fcmpg(HexU1._0x96), dcmpl(HexU1._0x97), dcmpg(HexU1._0x98),
/**
* 当栈顶int型数值==0时跳转
*/
ifeg(HexU1._0x99),
/**
* 当栈顶int型数值!=0时跳转
*/
ifne(HexU1._0x9a),
/**
* 当栈顶int型数值<0时跳转
*/
iflt(HexU1._0x9b),
/**
* 当栈顶int型数值>=0时跳转
*/
ifge(HexU1._0x9c),
/**
* 当栈顶int型数值>0时跳转
*/
ifgt(HexU1._0x9d),
/**
* 当栈顶int型数值<=0时跳转
*/
ifle(HexU1._0x9e),
/**
* 比较栈顶两int型数值的大小,当结果==0时跳转
*/
if_icmpeg(HexU1._0x9f), if_icmpne(HexU1._0xa0), if_icmplt(HexU1._0xa1), if_icmpge(HexU1._0xa2),
if_icmpgt(HexU1._0xa3), if_icmple(HexU1._0xa4), if_acmpeg(HexU1._0xa5), if_acmpne(HexU1._0xa6),
/**
* 无条件跳转
*/
_goto(HexU1._0xa7),
/**
* 跳转至指定的16位offset位置,并将jsr的下一条指令地址压入栈顶
*/
jsr(HexU1._0xa8),
/**
* 返回至本地变量指定的index的指令位置(一般与jsr或jsr_w联合使用)
*/
ret(HexU1._0xa9),
/**
* 用于switch条件跳转,case值连续(可变长度指令)
*/
tableswitch(HexU1._0xaa),
/**
* 用于switch条件跳转,case值不连续(可变长度指令)
*/
lookupswitch(HexU1._0xab),
/**
* 从当前方法返回int
*/
ireturn(HexU1._0xac), lreturn(HexU1._0xad), freturn(HexU1._0xae), dreturn(HexU1._0xaf), areturn(HexU1._0xb0),
/**
* 从当前方法返回void
*/
_return(HexU1._0xb1),
/**
* 获取指定类的静态域,并将其值压入栈顶
*/
getstatic(HexU1._0xb2),
/**
* 为指定的类的静态域赋值
*/
putstatic(HexU1._0xb3),
/**
* 获取指定类的实例域,并将其值压入栈顶
*/
getfield(HexU1._0xb4),
/**
* 为指定的类的实例域赋值
*/
putfield(HexU1._0xb5),
/**
* 调用实例方法
*/
invokevirtual(HexU1._0xb6),
/**
* 调用超类构造方法,实例初始化方法,私有方法
*/
invokespecial(HexU1._0xb7),
/**
* 调用静态方法
*/
invokestatic(HexU1._0xb8),
/**
* 调用接口方法
*/
invokeinterface(HexU1._0xb9),
/**
* 调用动态方法
*/
invokedynamic(HexU1._0xba),
/**
* 创建一个对象,并将其引用值压入栈顶
*/
_new(HexU1._0xbb),
/**
* 创建一个指定的原始类型(如int、float、char等)的数组,并将其引用值压入栈顶
*/
newarray(HexU1._0xbc),
/**
* 创建一个引用型(如类、接口、数组等)的数组,并将其引用值压入栈顶
*/
anewarray(HexU1._0xbd),
/**
* 获得数组的长度值并压入栈顶
*/
arraylength(HexU1._0xbe),
/**
* 将栈顶的异常抛出
*/
athrow(HexU1._0xbf),
/**
* 检验类型转换,检验未通过将抛出ClassCastException
*/
checkcast(HexU1._0xc0),
/**
* 检验对象是否是指定的类的实例,如果是,则将1压入栈顶,否则将0压入栈顶
*/
_instanceof(HexU1._0xc1),
/**
* 获得对象的锁,用于同步方法或同步块
*/
monitorenter(HexU1._0xc2),
/**
* 释放对象的锁,用于同步方法或同步块
*/
monitorexit(HexU1._0xc3),
/**
* 扩展本地变量的宽度
*/
wide(HexU1._0xc4),
/**
* 创建指定类型和指定维度的多维数组(执行该指令时,操作栈中必须包含各维度的长度值),并将其引用值压入栈顶
*/
multianewarray(HexU1._0xc5),
/**
* 为null时跳转
*/
ifnull(HexU1._0xc6),
/**
* 不为null时跳转
*/
ifnonnull(HexU1._0xc7),
/**
* 无条件跳转(宽索引)
*/
goto_w(HexU1._0xc8),
/**
* 跳转至指定的32位offset位置,并将jsr_w的下一条指令地址压入栈顶
*/
jsr_w(HexU1._0xc9),
;
public final HexU1 value;
Bytecode(HexU1 value) {
this.value = value;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy