我正在尝试使用该funset_avltree
库,但编译器生成了无效的 C 代码。我正在使用 ATS/Postiats 版本 0.2.10。
我的代码相当简单:
(* ast.sats *)
staload "libats/SATS/funset_avltree.sats"
datatype ast =
| ast_var of string
fun free_vars (ast : ast) :<> set string
(* ast.dats *)
#include "share/atspre_staload.hats"
staload "./ast.sats"
staload "libats/SATS/funset_avltree.sats"
dynload "libats/DATS/funset_avltree.dats"
implement free_vars (ast : ast) : set string =
case+ ast of
| ast_var name => funset_sing name
然而,编译器的输出相当混乱:
ast_dats.c:359:51:警告:函数“S2EVar”的隐式声明无效 在 C99 中 [-Wimplicit-function-declaration] ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; ^ ast_dats.c:359:39:错误:使用未声明的标识符“funset_sing” ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; ^ ast_dats.c:359:64:错误:预期表达式 ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ; ^
我得到类似的错误funset
和funset_listord
。我一定错过了一些微不足道的东西。我需要包含一些东西或将一些标志传递给编译器吗?