翻译过程
ASM 库
类的翻译
def emitClass(clazz: ClassDef): JVMClass = {
implicit val cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES + ClassWriter.COMPUTE_MAXS)
// set up meta data
cw.visit(...)
// First add the default constructor:
val mv = cw.visitMethod(Opcodes.ACC_PUBLIC, CONSTRUCTOR_NAME, CONSTRUCTOR_DESC, null, null)
mv.visitCode()
mv.visitVarInsn(Opcodes.ALOAD, 0)
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, superClass, CONSTRUCTOR_NAME, CONSTRUCTOR_DESC, false) // call super
mv.visitInsn(Opcodes.RETURN)
mv.visitMaxs(-1, -1) // pass in random numbers, as COMPUTE_MAXS flag enables the computation
mv.visitEnd()
// Then generate every user-defined member:
clazz.fields.foreach {
case field: VarDef => cw.visitField(...)
case method: MethodDef => emitMethod(method)
}
cw.visitEnd()
JVMClass(clazz.name, cw.toByteArray)
}方法的翻译
语句与表达式的翻译
Last updated
Was this helpful?