Недавно я сделал декомпилятор для AVM2 / AS3 и заметил, что компилятор Flash имеет тенденцию выдавать много ненужных код. Например, для определенного приложения я удалил около 10% кода без какого-либо ущерба для функциональности. Это был просто мертвый код, на который не ссылались ни условные коды операций, ни блоки обработки исключений.
Также посмотрите этот фрагмент:
...
313 setproperty y
315 getlocal 12
317 returnvalue
318 jump L9
L3:
322 getlocal 8
324 returnvalue
L9:
325 jump L10 ; L10 (opcode #331) does not ever exist.
; Technically, it is a jump beyond
; the end of function. This is invalid code!
L2:
329 pushnull
330 returnvalue
Ну, конечно, это недопустимый код, который также мертв и, следовательно, не вызовет никаких побочных эффектов (кроме раздувания кодовой базы). Но почему он вообще испускает этот код? И почему верификатор принимает это?