From bd799e42b40613983c6e3cb9aedf58866ac68605 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 30 Jan 2026 13:11:20 +0000 Subject: Added FUNCTION and PROCEDURE --- include/cps/FunctionAST.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 include/cps/FunctionAST.h (limited to 'include/cps/FunctionAST.h') diff --git a/include/cps/FunctionAST.h b/include/cps/FunctionAST.h new file mode 100644 index 0000000..155bd8c --- /dev/null +++ b/include/cps/FunctionAST.h @@ -0,0 +1,76 @@ +#pragma once +#include "cps/AST.h" +#include +#include +#include + +namespace cps { + +class PrototypeAST { + std::string Name; + std::vector> Args; + std::string ReturnType; + bool IsExternal; + +public: + PrototypeAST(const std::string &Name, + std::vector> Args, + const std::string &ReturnType, + bool IsExternal = false) + : Name(Name), Args(std::move(Args)), ReturnType(ReturnType), IsExternal(IsExternal) {} + + const std::string &getName() const { return Name; } + const std::vector> &getArgs() const { return Args; } + const std::string &getReturnType() const { return ReturnType; } + bool isExternal() const { return IsExternal; } +}; + +class FunctionDefAST : public StmtAST { + std::unique_ptr Proto; + std::vector> Body; + +public: + FunctionDefAST(std::unique_ptr Proto, + std::vector> Body) + : Proto(std::move(Proto)), Body(std::move(Body)) {} + + PrototypeAST *getProto() const { return Proto.get(); } + const std::vector> &getBody() const { return Body; } +}; + +class CallExprAST : public ExprAST { + std::string Callee; + std::vector> Args; + +public: + CallExprAST(const std::string &Callee, std::vector> Args) + : Callee(Callee), Args(std::move(Args)) {} + + const std::string &getCallee() const { return Callee; } + const std::vector> &getArgs() const { return Args; } +}; + +class CallStmtAST : public StmtAST { + std::string Callee; + std::vector> Args; + +public: + CallStmtAST(const std::string &Callee, std::vector> Args) + : Callee(Callee), Args(std::move(Args)) {} + + const std::string &getCallee() const { return Callee; } + const std::vector> &getArgs() const { return Args; } +}; + + +class ReturnStmtAST : public StmtAST { + std::unique_ptr RetVal; + +public: + ReturnStmtAST(std::unique_ptr RetVal = nullptr) + : RetVal(std::move(RetVal)) {} + + ExprAST *getRetVal() const { return RetVal.get(); } +}; + +} // namespace cps -- cgit v1.3.1-4-g156e