[Feat] 可变参数 variadic! 目前函数若使用可变参数,参数只能为1个

语法 func (arg...) 获取到的类型为 List
       若要判断类型,使用标准库 std.value.type
[Feat] 标准库 std.io std.value 实现,提供print,read等函数
       详见 Library/std 实现
[Impl] 分离 builtin value 和 function注册
This commit is contained in:
2025-12-26 22:26:06 +08:00
parent 20f39b7eba
commit 25c971118a
7 changed files with 143 additions and 21 deletions

View File

@@ -1338,17 +1338,8 @@ namespace Fig
nullptr);
evaluator.SetGlobalContext(modctx);
evaluator.RegisterBuiltins();
try
{
evaluator.Run(asts);
}
catch (std::exception &e)
{
std::cerr << "load module failed" << '\n';
throw e;
}
evaluator.RegisterBuiltinsValue();
evaluator.Run(asts);
return evaluator.global;
}
@@ -1356,11 +1347,16 @@ namespace Fig
StatementResult Evaluator::evalImportSt(Ast::Import i, ContextPtr ctx)
{
const std::vector<FString> &pathVec = i->path;
const FString &modName = pathVec.at(pathVec.size() - 1); // pathVec at least has 1 element
if (modName == u8"_builtins")
{
RegisterBuiltins();
return StatementResult::normal();
}
auto path = resolveModulePath(pathVec);
ContextPtr modCtx = loadModule(path);
const FString &modName = pathVec.at(pathVec.size() - 1);
// std::cerr << modName.toBasicString() << '\n'; DEBUG
if (ctx->containsInThisScope(modName))