#pragma once #include #include #include namespace Fig::Ast { /* func greet(greeting, name:String, age:Int, split:String=":") -> Null { io.println("{}, {}{}{}", greeting, name, split, age); } `greeting`, `name`, `age` -> positional parameters `split` -> default parameter */ class FunctionDefSt final : public StatementAst // for definition { public: String name; FunctionParameters paras; bool isPublic; Expression retType; BlockStatement body; FunctionDefSt() { type = AstType::FunctionDefSt; } FunctionDefSt( String _name, FunctionParameters _paras, bool _isPublic, Expression _retType, BlockStatement _body) { type = AstType::FunctionDefSt; name = std::move(_name); paras = std::move(_paras); isPublic = _isPublic; retType = std::move(_retType); body = std::move(_body); } }; using FunctionDef = std::shared_ptr; }; // namespace Fig::Ast