From e8aed221de2d9aaaa62a195dbc4de5b7b412ed61 Mon Sep 17 00:00:00 2001 From: PuqiAR Date: Wed, 4 Feb 2026 18:28:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ebuiltin=E5=87=BD=E6=95=B0=20t?= =?UTF-8?q?ype=EF=BC=8C=E6=8E=A5=E6=94=B6=E4=B8=80=E4=B8=AA=E5=8F=82?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E8=8E=B7=E5=8F=96=E7=B1=BB=E5=9E=8B=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E3=80=82(=E7=B1=BB=E4=BC=BC=20js)=20?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=BA=93=20std.value.type=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=9B=B4=E5=90=8D=20=5Ftype=E8=BF=94=E5=9B=9E=E5=BA=95?= =?UTF-8?q?=E5=B1=82=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Evaluator/Core/EvalFunctionCall.cpp | 2 +- src/Evaluator/Core/EvalStatement.cpp | 2 +- src/Module/Library/std/value/value.fig | 2 +- src/Module/builtins.cpp | 24 +++++++++++++++++------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Evaluator/Core/EvalFunctionCall.cpp b/src/Evaluator/Core/EvalFunctionCall.cpp index 01e10e0..c52ae7d 100644 --- a/src/Evaluator/Core/EvalFunctionCall.cpp +++ b/src/Evaluator/Core/EvalFunctionCall.cpp @@ -64,7 +64,7 @@ namespace Fig fnName.toBasicString(), fn.builtinParamCount, evaluatedArgs.getLength()), - fnArgs.argv.back()); + (fnArgs.getLength() > 0 ? fnArgs.argv.back() : call)); } return executeFunction(fn, evaluatedArgs, nullptr); } diff --git a/src/Evaluator/Core/EvalStatement.cpp b/src/Evaluator/Core/EvalStatement.cpp index 6fc34b8..629b2be 100644 --- a/src/Evaluator/Core/EvalStatement.cpp +++ b/src/Evaluator/Core/EvalStatement.cpp @@ -1,4 +1,4 @@ -#include "Evaluator/Core/ExprResult.hpp" +#include #include #include #include diff --git a/src/Module/Library/std/value/value.fig b/src/Module/Library/std/value/value.fig index 481afc6..d3a8dd7 100644 --- a/src/Module/Library/std/value/value.fig +++ b/src/Module/Library/std/value/value.fig @@ -7,7 +7,7 @@ import _builtins; -public func type(object: Any) -> String +public func _type(object: Any) -> String { return __fvalue_type(object); } diff --git a/src/Module/builtins.cpp b/src/Module/builtins.cpp index 95541ea..6e6dbb6 100644 --- a/src/Module/builtins.cpp +++ b/src/Module/builtins.cpp @@ -1,10 +1,10 @@ -#include "Ast/Expressions/BinaryExpr.hpp" -#include "Ast/Expressions/FunctionCall.hpp" -#include "Ast/Expressions/ValueExpr.hpp" -#include "Ast/Expressions/VarExpr.hpp" -#include "Ast/Statements/ControlSt.hpp" -#include "Ast/astBase.hpp" -#include "Ast/functionParameters.hpp" +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -75,6 +75,16 @@ namespace Fig::Builtins {u8"Map", std::make_shared(StructType(ValueType::Map, nullptr, {}, true))}, // Type `StructType` `StructInstance` `Module` `InterfaceType` // Not allowed to call constructor! + + {u8"type", std::make_shared(Function( + u8"type", + [](const std::vector &_args) -> ObjectPtr + { + const ObjectPtr &arg = _args[0]; + return std::make_shared(prettyType(arg)); + }, + 1 + ))}, }; return builtinValues; }