Почему компилятор Flash ActionScript3 выдает ненужный код?

Недавно я сделал декомпилятор для 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         

Ну, конечно, это недопустимый код, который также мертв и, следовательно, не вызовет никаких побочных эффектов (кроме раздувания кодовой базы). Но почему он вообще испускает этот код? И почему верификатор принимает это?

7
задан David 12 January 2012 в 20:02
поделиться