我在应用程序中使用ASM(第一次)来创建Java类文件。这是我正在编写的编译器的后端。
我阅读了ASM文档的相关部分,并对堆栈映射框有疑问。 ASM表示,如果使用适当的标志初始化类编写器,它可以自动计算这些帧。我的问题是,这是否意味着我不必自己调用方法访问者的visitLocalVariable()方法?我不确定那种方法是做什么的。文档确实说如果自动计算帧,我不需要调用visitFrame()方法,但是对visitLocalVariable()方法保持沉默。
答案 0 :(得分:4)
visitLocalVariable()
描述或定义存储在Code
属性的LocalVariableTable
和LocalVariableTypeTable
属性中的 debug 信息。它们不是正常操作所必需的,与StackMapTable
中存储的信息不同。
换句话说,除非您想提供调试信息,否则无论是否自动计算堆栈映射帧,您都不需要调用visitLocalVariable()
。
请注意这些属性中存储的信息的差异。 LocalVariable[Type]Table
存储有关源级语言的名称和[泛型]局部变量及其范围。 StackMapTable
存储有关字节码验证器的JVM类型系统的局部变量和操作数堆栈条目的类型信息。