Perl 的解释器如何执行 if 语句?我想尝试为用作谓词的 if 语句实现一个简单的Lazy-Basic-Block-Versioningref
,也许随后也可以为子例程实现。
在研究了源代码之后,我看到了除了控制流之外的所有操作代码。我的解释器经验非常有限,但我假设会看到一个OP_IF
会弹出堆栈的谓词操作代码或类似的内容。我发现KEY_if
它来自 Yacc 语法,随后在 中使用toke.c
并翻译为 a KW_IF
,但我找不到KW_IF
实际使用的位置。
我最初打算只向 中添加一些带有全局状态的基本优化peep.c
,但由于没有,所以OP_IF
我很难了解如何处理控制流的全局。
if
被编译成and
oror
操作。Concise 中的操作码映射到名为in
name
的函数(有一些例外)。pp_name
pp*.c