From d38c6f91db3bef0eea2ab50e0a2aa3c6d263a81d Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Mon, 19 Jul 2021 16:37:45 -0400 Subject: [PATCH] sketched out new ssa-based API --- cerise/src/ast.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/cerise/src/ast.c b/cerise/src/ast.c index ac1c78a..559b766 100644 --- a/cerise/src/ast.c +++ b/cerise/src/ast.c @@ -25,6 +25,31 @@ */ +/* Node Variants + + Literal Value + Identifier Reference + Binary Operation + Unary Operation + Procedure Return + If Statement + Basic Block + +*/ +#if 0 +AstNode* ast_bool(AstNode* block, bool val); +AstNode* ast_int(AstNode* block, long long val); +AstNode* ast_real(AstNode* block, double val); +AstNode* ast_ident(AstNode* block, Parser* p, long long index); +AstNode* ast_op(AstNode* block, int op, AstNode* left, AstNode* right); +AstNode* ast_store(AstNode* block, AstNode* dest, AstNode* offset, AstNode* value); +AstNode* ast_return(AstNode* block, AstNode* expr, AstNode* dest); +AstNode* ast_if(AstNode* block, AstNode* cond, AstNode* dest1, AstNode* dest2); +// while +// foreach +// case + +/* identifier references and literal values */ typedef struct { AstNodeHeader hdr; union { @@ -35,6 +60,33 @@ typedef struct { long long tag; } AstValue; +typedef struct { + AstNodeHeader hdr; + AstNode* dest; + AstNode* left; + AstNode* right; +} AstOp; + +typedef struct { + AstNodeHeader hdr; + AstNode* head; + AstNode* tail; +} AstBlock; + +#else + +typedef struct { + AstNodeHeader hdr; + union { + long long i; + double f; + char* s; + } val; + long long tag; +} AstValue; + +#endif + bool ast_isconst(AstNode* node) { bool ret; -- 2.49.0