aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/parse.h
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-07 10:12:57 +0900
committernsfisis <nsfisis@gmail.com>2026-02-07 10:12:57 +0900
commit0034f84a38e8cb41a753d2def1daccd14bbfd552 (patch)
tree6e734a8450c7f7fece5eda4c33ff72bc6ab277fb /src/parse.h
parent107c517b22e88d760c375a4b9da6dffd6da26d85 (diff)
downloadducc-0034f84a38e8cb41a753d2def1daccd14bbfd552.tar.gz
ducc-0034f84a38e8cb41a753d2def1daccd14bbfd552.tar.zst
ducc-0034f84a38e8cb41a753d2def1daccd14bbfd552.zip
feat: implement global variables referencing string literals
Diffstat (limited to 'src/parse.h')
-rw-r--r--src/parse.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/parse.h b/src/parse.h
index 17ffe2c..d5a443c 100644
--- a/src/parse.h
+++ b/src/parse.h
@@ -7,6 +7,37 @@
Program* parse(TokenArray* tokens);
bool pp_eval_constant_expr(TokenArray* pp_tokens);
-void eval_init_expr(StrBuilder* buf, AstNode* expr, Type* ty);
+
+typedef enum {
+ InitDataBlockKind_addr,
+ InitDataBlockKind_bytes,
+} InitDataBlockKind;
+
+// Static address to global variable or ROM area.
+typedef struct {
+ const char* label;
+} InitDataBlockAddr;
+
+// Static byte array.
+typedef struct {
+ size_t len;
+ const char* buf;
+} InitDataBlockBytes;
+
+typedef struct {
+ InitDataBlockKind kind;
+ union {
+ InitDataBlockAddr addr;
+ InitDataBlockBytes bytes;
+ } as;
+} InitDataBlock;
+
+typedef struct {
+ size_t len;
+ size_t capacity;
+ InitDataBlock* blocks;
+} InitData;
+
+InitData* eval_init_expr(AstNode* expr, Type* ty);
#endif