From 9a97a4ed18d7814c12448e6a747f81eb03e894cf Mon Sep 17 00:00:00 2001 From: Baitinq Date: Mon, 7 Jul 2025 23:57:54 +0200 Subject: Bootstrap: Codegen: Support char types --- src/bootstrap/codegen.pry | 15 ++++++++++++++- src/bootstrap/parser.pry | 9 +++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry index 1bb20ca..55be4fa 100644 --- a/src/bootstrap/codegen.pry +++ b/src/bootstrap/codegen.pry @@ -259,7 +259,6 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: * }; if ((*expression).type == NODE_PRIMARY_EXPRESSION_BOOLEAN) { - printf("THIS\n"); let b = (*cast(*NODE_PRIMARY_EXPRESSION_BOOLEAN_DATA, (*expression).data)).value; let node_type = Node{}; @@ -278,6 +277,20 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: * return codegen_generate_literal(c, LLVMConstInt(LLVMInt1Type(), int_value, 0), name, expression, create_node(c, node_type)); }; + if ((*expression).type == NODE_PRIMARY_EXPRESSION_CHAR) { + let ch = cast(i64, (*cast(*NODE_PRIMARY_EXPRESSION_CHAR_DATA, (*expression).data)).value); + + let node_type = Node{}; + node_type.type = NODE_TYPE_SIMPLE_TYPE; + + let d = cast(*NODE_TYPE_SIMPLE_TYPE_DATA, arena_alloc((*c).arena, sizeof(NODE_TYPE_SIMPLE_TYPE_DATA))); + (*d).name = "i8"; + (*d).underlying_type = cast(*Node, null); + node_type.data = cast(*void, d); + + return codegen_generate_literal(c, LLVMConstInt(LLVMInt8Type(), cast(i64, ch), 0), name, expression, create_node(c, node_type)); + }; + if ((*expression).type == NODE_PRIMARY_EXPRESSION_STRING) { printf("THIS8\n"); let str = (*cast(*NODE_PRIMARY_EXPRESSION_STRING_DATA, (*expression).data)).value; diff --git a/src/bootstrap/parser.pry b/src/bootstrap/parser.pry index 63d17c8..be1ffb7 100644 --- a/src/bootstrap/parser.pry +++ b/src/bootstrap/parser.pry @@ -532,6 +532,15 @@ let parser_parse_primary_expression = (p: *parser) => *Node { return create_node(p, n); }; + if (*tok).type == TOKEN_CHAR { + let d = cast(*NODE_PRIMARY_EXPRESSION_CHAR_DATA, arena_alloc((*p).arena, sizeof(NODE_PRIMARY_EXPRESSION_CHAR_DATA))); + (*d).value = *(cast(*i8, (*tok).data)); + let n = Node{}; + n.type = NODE_PRIMARY_EXPRESSION_CHAR; + n.data = cast(*void, d); + return create_node(p, n); + }; + if (*tok).type == TOKEN_STRING { let d = cast(*NODE_PRIMARY_EXPRESSION_STRING_DATA, arena_alloc((*p).arena, sizeof(NODE_PRIMARY_EXPRESSION_STRING_DATA))); (*d).value = cast(*i8, (*tok).data); -- cgit 1.4.1