В компиляторе Pawn существуют баги, связанные с emit. Например, переходы по меткам или проблема с блоками. Поэтому я предлагаю создать новый оператор, поскольку, например, баг с блоками пофиксить никак нельзя.
Я уже написал некоторый функционал данного оператора:
PHP код:
new a = 2;
if (a == 2) {
_asm nop
_asm call name // название функции
_asm jzer abc: // метка
}
_asm nop
printf("abc");
abc:
printf("abc1");
asm_list
Код:
proc ; name
; line 6d
break ; c
; line 6e
break ; 10
;$lcl a fffffffc
stack fffffffc
const.pri 2
stor.s.pri fffffffc
;$exp
; line 70
break ; 2c
load.s.pri fffffffc
const.alt 2
eq
jzer 0
;$exp
; line 71
break ; 4c
nop
; line 72
break ; 54
call .name
; line 73
break ; 60
jzer 1
l.0 ; 6c
; line 75
break ; 6c
nop
nop
; line 7a
break ; 78
l.1 ; 7c
lctrl 5
add.c fffffffc
sctrl 4
nop
stack 4
zero.pri
retn
Генерация кода происходит отлично. Все инструкцию на своих местах.
Возможно, стоит добавить создание блоков, дабы не писать несколько раз _asm (как, например, в С-ях).