about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-07 23:57:54 +0200
committerBaitinq <[email protected]>2025-07-07 23:57:54 +0200
commit9a97a4ed18d7814c12448e6a747f81eb03e894cf (patch)
tree9c6bf595284b63c6495f50048cff5e1899f74f15
parentBootstrap: Codegen: Support bool types (diff)
downloadpry-lang-9a97a4ed18d7814c12448e6a747f81eb03e894cf.tar.gz
pry-lang-9a97a4ed18d7814c12448e6a747f81eb03e894cf.tar.bz2
pry-lang-9a97a4ed18d7814c12448e6a747f81eb03e894cf.zip
Bootstrap: Codegen: Support char types
-rw-r--r--src/bootstrap/codegen.pry15
-rw-r--r--src/bootstrap/parser.pry9
2 files changed, 23 insertions, 1 deletions
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);