forked from PuqiAR/Fig-TreeWalker
[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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user