From f5246db6d045ffb86d6717e1b1c37f03bcb2b75b Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 10:30:02 +0000 Subject: feat(parser): parse OVERLOAD prefix on FUNCTION and PROCEDURE Co-Authored-By: Claude Opus 5.5 --- include/cps/FunctionAST.h | 6 ++++-- include/cps/Lexer.h | 1 + include/cps/Parser.h | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) (limited to 'include/cps') diff --git a/include/cps/FunctionAST.h b/include/cps/FunctionAST.h index 4dfe908..9995a4c 100644 --- a/include/cps/FunctionAST.h +++ b/include/cps/FunctionAST.h @@ -30,6 +30,7 @@ class PrototypeAST { std::vector Params; std::string ReturnType; bool IsExternal; + bool IsOverload; std::string OwnerClass; bool IsPublic; @@ -37,13 +38,14 @@ public: PrototypeAST(const std::string &Name, std::vector Params, const std::string &ReturnType, - bool IsExternal = false, std::string OwnerClass = {}, bool IsPublic = true) - : Name(Name), Params(std::move(Params)), ReturnType(ReturnType), IsExternal(IsExternal), + bool IsExternal = false, std::string OwnerClass = {}, bool IsPublic = true, bool IsOverload = false) + : Name(Name), Params(std::move(Params)), ReturnType(ReturnType), IsExternal(IsExternal), IsOverload(IsOverload), OwnerClass(std::move(OwnerClass)), IsPublic(IsPublic) {} const std::string &getName() const { return Name; } const std::vector &getParams() const { return Params; } const std::string &getReturnType() const { return ReturnType; } + bool isOverload() const { return IsOverload; } bool isExternal() const { return IsExternal; } const std::string &getOwnerClass() const { return OwnerClass; } bool isPublic() const { return IsPublic; } diff --git a/include/cps/Lexer.h b/include/cps/Lexer.h index 957ca48..40f168e 100644 --- a/include/cps/Lexer.h +++ b/include/cps/Lexer.h @@ -67,6 +67,7 @@ enum Token { tok_colon = -300, // : + tok_overload = -399, tok_function = -400, tok_endfunction = -401, tok_return = -402, diff --git a/include/cps/Parser.h b/include/cps/Parser.h index 9a53e95..d9e8358 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -73,8 +73,8 @@ class Parser { std::vector> *Methods = nullptr); bool ParseRecordField(std::vector &Out, bool IsPublic); - std::unique_ptr ParseFunction(const std::string &OwnerClass = {}, bool IsPublic = true); - std::unique_ptr ParseProcedure(const std::string &OwnerClass = {}, bool IsPublic = true); + std::unique_ptr ParseFunction(const std::string &OwnerClass = {}, bool IsPublic = true, bool IsOverload = false); + std::unique_ptr ParseProcedure(const std::string &OwnerClass = {}, bool IsPublic = true, bool IsOverload = false); std::unique_ptr ParseCallStmt(); std::unique_ptr ParseReturnStmt(); std::optional> ParsePrototypeArgs(bool AllowByRef); -- cgit v1.3.1-4-g156e