bd4sur / Animac

Scheme语言实现和运行时环境 / Scheme runtime & implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

【故障】Native函数的一等化未实现

bd4sur opened this issue · comments

复现用例与故障描述

((lambda (f x) (f x)) Native.Read "path..")
;; 报错“变量Native.Read未定义”

原因分析与补救措施

原因在于编译阶段未对Native函数名作特殊处理,而是当成普通变量直接load。再由于VM中也未处理,导致出错。

Native函数的本质是用于指明外部库的符号,因此Native函数的一等化,实际上是指将Native函数的名称作为符号原子处理。

补救措施是,在编译阶段增加相应分支,改load为push。另外Process类中的工具函数IsUseNative宜移动至AST类。