3.4.验证(verification)
验证不是集中发生,通常延迟到数据或依赖对象被加载后,这样前向引用(forward references)才可能。
AVM2触发的验证错误部分如下:
- 一个u30值的30位以后不能有非零位
- 控制流指令不能将控制转移到代码向量外,或者其他指令的中间
- 多个控制类指令指向的相同指令必须有兼容的作用域栈,操作数栈,寄存器值
- 命名类型(如在
coerce指令或基类引用中)必须唯一 - 名称不能指向名称池的索引0位置,除非显式指定那个特定名称字段
- 一些名称字段(如
instance_info)需要被引用的名称为一个QName - 类不能继承最终类,或接口
- 类的接口集不能引用接口0,必须引用其他接口(而非类)
callmethod和callstatic指向的方法必须位于接收对象的方法表中- 包含"
must be less than "措辞的指令定义节,通常表示一个需要验证器来验证的静态限制(static constraint)。