类 MagicScriptCompiler
java.lang.Object
org.ssssssss.script.compile.MagicScriptCompiler
- 所有已实现的接口:
Opcodes
脚本编译器
-
字段概要
从接口继承的字段 org.ssssssss.script.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V9 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明arithmetic(String methodName) 执行算术运算将boolean值装箱将int值装箱bipush(int value) 位运算byte[]bytecode()invokedynamic调用编译编译AST节点编译AST节点createMethod(int access, String methodName, String descriptor) 创建方法end()跳转到break位置消除标记保存变量获取类名int获取lambda函数下标getSpans()intinsn(int opcode) voidintInsn(int opcode, int operand) invoke(int opcode, Class<?> target, String method, boolean isInterface, Class<?> returnType, Class<?>... argumentTypes) 调用方法调用方法跳转将方法转为lambdalineNumber(Span span) load(int index) 加载变量加载变量加载变量load0()加载thisload1()加载contextload2()加载Variablesload3()加载3号变量,一般指异常(临时变量)load4()voidloadVars()标识continue和break位置newArray(List<Expression> values) 编译数组void加载context二元运算pop()pre_store(int index) 写变量前的准备写变量前的准备voidpushFinallyBlock(List<Node> finallyBlock) 移除变量移除变量配合pre_store使用,保存至数组中start()跳转到continue位置store()配合pre_store使用,保存至数组中store(int index) 保存变量配合pre_store使用,保存至数组中设定tryCatch跳转 如果在Label start到Label end代码范围内捕获到type异常,则跳转到Label handler type为null则表示finally,只要抛异常就跳转到handler访问访问AST节点visitInt(int value) 编译int值visitMethod(String methodName, Runnable callback)
-
构造器详细资料
-
MagicScriptCompiler
-
-
方法详细资料
-
getSpans
-
createMethod
创建方法- 参数:
access- 访问属性methodName- 方法名descriptor- 方法描述
-
getTempIndex
public int getTempIndex() -
getFunctionIndex
public int getFunctionIndex()获取lambda函数下标 -
markLabel
标识continue和break位置 -
exitLabel
消除标记 -
start
跳转到continue位置 -
end
跳转到break位置 -
visit
访问AST节点 -
compile
编译AST节点 -
lineNumber
-
loadContext
-
newRuntimeContext
-
compile
编译AST节点- 参数:
node- AST节点pop- 是否需要弹出栈顶
-
tryCatch
设定tryCatch跳转 如果在Label start到Label end代码范围内捕获到type异常,则跳转到Label handler type为null则表示finally,只要抛异常就跳转到handler -
visit
访问 -
compile
编译 -
load0
加载this -
load1
加载context -
newArrayList
public void newArrayList()加载context -
load2
加载Variables -
load3
加载3号变量,一般指异常(临时变量) -
load4
-
load
加载变量 -
load
加载变量 -
load
加载变量- 参数:
name- 变量名
-
label
-
jump
跳转 -
remove
移除变量 -
remove
移除变量 -
store
配合pre_store使用,保存至数组中 -
store
配合pre_store使用,保存至数组中 -
scopeStore
配合pre_store使用,保存至数组中 -
store
保存变量 -
frame
public MagicScriptCompiler frame(int type, int numLocal, Object[] local, int numStack, Object[] stack) 保存变量 -
pre_store
写变量前的准备 -
pre_store
写变量前的准备 -
bipush
-
typeInsn
-
operator
二元运算- 参数:
methodName- 运算方法
-
bit
位运算- 参数:
methodName- 运算方法
-
lambda
将方法转为lambda- 参数:
methodName- 方法名
-
call
invokedynamic调用- 参数:
methodName- 方法名arguments- 参数个数
-
arithmetic
执行算术运算- 参数:
methodName- 方法名
-
asInteger
将int值装箱 -
asBoolean
将boolean值装箱 -
invoke
public MagicScriptCompiler invoke(int opcode, Class<?> target, String method, Class<?> returnType, Class<?>... argumentTypes) 调用方法- 参数:
opcode- 调用类型target- 目标类method- 方法名returnType- 返回值类型argumentTypes- 参数类型
-
invoke
public MagicScriptCompiler invoke(int opcode, Class<?> target, String method, boolean isInterface, Class<?> returnType, Class<?>... argumentTypes) 调用方法- 参数:
opcode- 调用类型target- 目标类method- 方法名isInterface- 是否是接口returnType- 返回值类型argumentTypes- 参数类型
-
ldc
-
insn
-
intInsn
public void intInsn(int opcode, int operand) -
newArray
编译数组 -
visitInt
编译int值 -
loadVars
public void loadVars() -
visitMethod
-
visitMethod
-
visitMethod
-
finallyBlockStack
-
pushFinallyBlock
-
popFinallyBlock
-
pop
-
bytecode
public byte[] bytecode() -
getClassName
获取类名
-