# Optimize a `AIsaExpr`
# `source` the source type of the expression
# `target` the target type of the subtyping test
private fun optimize(v: VirtualMachine, source: MType, target: MType)
do
# If the source class and target class are not classic classes (non-generics) then return
if not source isa MClassType or not target isa MClassType or target isa MGenericType then
return
end
if not target.mclass.abstract_loaded then return
# If the value is positive, the target class has an invariant position in source's structures
var value = source.mclass.get_position_methods(target.mclass)
if value > 0 then
# `value - 2` is the position of the target identifier in source vtable
position = value - 2
status = 1
else
# We use perfect hashing
status = 2
end
id = target.mclass.vtable.id
end
src/vm/vm_optimizations.nit:230,2--254,4