Como o intérprete do Perl faz instruções if? Eu queria tentar implementar um Lazy-Basic-Block-Versioning simples para instruções if usadas ref
como predicado e talvez posteriormente também para sub-rotinas.
Depois de estudar o código-fonte, vejo códigos OP para tudo, menos para controlar o fluxo. Minha experiência como intérprete é bastante limitada, mas presumo ver um OP_IF
que estouraria a pilha para seus códigos OP de predicados ou algo nesse sentido. Descobri KEY_if
que vem da gramática Yacc, que posteriormente é usada toke.c
e traduzida para a KW_IF
, mas não consigo descobrir onde KW_IF
é realmente usada.
Originalmente, eu pretendia apenas adicionar alguma otimização básica com estado global ao peep.c
, mas como não há, OP_IF
estou lutando para ter uma visão geral de como o fluxo de controle é tratado.
if
é compilado em umand
ouor
op.O opcode
name
do Concise é mapeado para uma função nomeada em (com algumas exceções).pp_name
pp*.c