#ifndef AMALGAM_AST_H #define AMALGAM_AST_H #include "buffer_view.h" #include "buffer.h" #include "misc.h" typedef struct FunctionDecl FunctionDecl; typedef struct FunctionCall FunctionCall; typedef struct LhsExpr LhsExpr; typedef union { FunctionDecl *func_decl; FunctionCall *func_call; LhsExpr *lhs_expr; } AstValue; typedef enum { AST_NONE, AST_FUNCTION_DECL, AST_FUNCTION_CALL, AST_LHS } AstType; typedef struct { AstValue value; AstType type; } Ast; struct FunctionDecl { BufferView name; Buffer body; }; struct FunctionCall { BufferView name; }; struct LhsExpr { int isConst; BufferView var_name; Ast rhs_expr; }; Ast ast_none(); CHECK_RESULT int funcdecl_init(FunctionDecl *self, ScopedAllocator *allocator); CHECK_RESULT int funcdecl_add_to_body(FunctionDecl *self, Ast ast); void funccall_init(FunctionCall *self, BufferView name); void lhsexpr_init(LhsExpr *self, int isConst, BufferView var_name); #endif