3.4.验证(verification)

验证不是集中发生,通常延迟到数据或依赖对象被加载后,这样前向引用(forward references)才可能。

AVM2触发的验证错误部分如下:

  • 一个u30值的30位以后不能有非零位
  • 控制流指令不能将控制转移到代码向量外,或者其他指令的中间
  • 多个控制类指令指向的相同指令必须有兼容的作用域栈,操作数栈,寄存器值
  • 命名类型(如在coerce指令或基类引用中)必须唯一
  • 名称不能指向名称池的索引0位置,除非显式指定那个特定名称字段
  • 一些名称字段(如instance_info)需要被引用的名称为一个QName
  • 类不能继承最终类,或接口
  • 类的接口集不能引用接口0,必须引用其他接口(而非类)
  • callmethodcallstatic指向的方法必须位于接收对象的方法表中
  • 包含" must be less than "措辞的指令定义节,通常表示一个需要验证器来验证的静态限制(static constraint)。