about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-06-11 00:10:59 +0200
committerBaitinq <[email protected]>2025-06-11 00:11:01 +0200
commit8fd13680a7b87dc1a9ba2119666f7b0e26bc62b5 (patch)
tree80e8e9319734e112558f1a9c31485b1c01bccb41
parentBoostrap: fix aarch64 linking (diff)
downloadinterpreter-8fd13680a7b87dc1a9ba2119666f7b0e26bc62b5.tar.gz
interpreter-8fd13680a7b87dc1a9ba2119666f7b0e26bc62b5.tar.bz2
interpreter-8fd13680a7b87dc1a9ba2119666f7b0e26bc62b5.zip
stdlib: Remove println
varargs forwarding is platform specific with llvm, so we cannot easily
have this function
-rw-r--r--examples/0.src2
-rw-r--r--examples/1.5.src4
-rw-r--r--examples/1.src2
-rw-r--r--examples/10.src2
-rw-r--r--examples/11.src4
-rw-r--r--examples/12.src4
-rw-r--r--examples/13.src4
-rw-r--r--examples/17.src4
-rw-r--r--examples/18.src8
-rw-r--r--examples/2.src2
-rw-r--r--examples/20.src2
-rw-r--r--examples/21.src6
-rw-r--r--examples/22.src6
-rw-r--r--examples/23.src4
-rw-r--r--examples/24.src4
-rw-r--r--examples/3.src2
-rw-r--r--examples/4.src4
-rw-r--r--examples/5.src6
-rw-r--r--examples/6.5.src2
-rw-r--r--examples/6.src4
-rw-r--r--examples/7.src2
-rw-r--r--examples/8.src2
-rw-r--r--examples/9.src2
-rw-r--r--src/bootstrap/codegen.src16
-rw-r--r--src/bootstrap/main.src4
-rw-r--r--src/bootstrap/parser.src14
-rw-r--r--src/bootstrap/tokenizer.src10
-rw-r--r--std/stdlib.src9
28 files changed, 64 insertions, 71 deletions
diff --git a/examples/0.src b/examples/0.src
index 7d1891d..56b540e 100644
--- a/examples/0.src
+++ b/examples/0.src
@@ -3,7 +3,7 @@
 import "!stdlib.src";
 
 let main = (argc: i64, argv: *i64) => i64 {
-	println("%d", argc);
+	printf("%d\n", argc);
 	
 	return 2;
 };
diff --git a/examples/1.5.src b/examples/1.5.src
index 9359498..6997d74 100644
--- a/examples/1.5.src
+++ b/examples/1.5.src
@@ -1,14 +1,14 @@
 import "!stdlib.src";
 
 let x = () => i64 {
-	println("%d", 22);
+	printf("%d\n", 22);
 	return 11;
 };
 
 let main = () => i64 {
 	let i = 4;
 
-	println("%d", i);
+	printf("%d\n", i);
 
 	return x();
 };
diff --git a/examples/1.src b/examples/1.src
index fa7c7e7..6fef25a 100644
--- a/examples/1.src
+++ b/examples/1.src
@@ -3,7 +3,7 @@ import "!stdlib.src";
 let main = () => i64 {
 	let s = "hello";
 
-	println("%s", s);
+	printf("%s\n", s);
 
 	return 0;
 };
diff --git a/examples/10.src b/examples/10.src
index 8e879b8..d8dde60 100644
--- a/examples/10.src
+++ b/examples/10.src
@@ -4,7 +4,7 @@ let main = () => i64 {
 	let counter = 0;
 
 	while counter < 10 {
-		println("%d", counter);
+		printf("%d\n", counter);
 		counter = counter + 1;
 	};
 
diff --git a/examples/11.src b/examples/11.src
index fd7f215..5c2acad 100644
--- a/examples/11.src
+++ b/examples/11.src
@@ -1,8 +1,8 @@
 import "!stdlib.src";
 
 let id = (a: i64) => i64 {
-	println("%d", a);
-	println("%d", 12);
+	printf("%d\n", a);
+	printf("%d\n", 12);
 	return a;
 };
 
diff --git a/examples/12.src b/examples/12.src
index 21207f2..1193e4c 100644
--- a/examples/12.src
+++ b/examples/12.src
@@ -31,10 +31,10 @@ let main = () => i64 {
     };
 
     let fact_val = factorial(6);
-    println("%d", fact_val);
+    printf("%d\n", fact_val);
 
     let even_sum = sum_if(is_even, 20);
-    println("%d", even_sum);
+    printf("%d\n", even_sum);
 
     return 0;
 };
diff --git a/examples/13.src b/examples/13.src
index 798d056..9de55ac 100644
--- a/examples/13.src
+++ b/examples/13.src
@@ -24,10 +24,10 @@ let main = () => i64 {
     };
 
     let fib_val = fibonacci_iter(10);
-    println("%d", fib_val);
+    printf("%d\n", fib_val);
 
     let gcd_val = gcd(48, 18);
-    println("%d", gcd_val);
+    printf("%d\n", gcd_val);
 
     return 0;
 };
diff --git a/examples/17.src b/examples/17.src
index 779ff74..93a313f 100644
--- a/examples/17.src
+++ b/examples/17.src
@@ -6,8 +6,8 @@ import "!stdlib.src";
 let main = () => i64 {
 	let x = malloc(8);
 	*x = 10;
-	println("%p", x);
-	println("%d", *x);
+	printf("%p\n", x);
+	printf("%d\n", *x);
 	free(x);
 	return 0;
 };
diff --git a/examples/18.src b/examples/18.src
index 17c9fee..741a460 100644
--- a/examples/18.src
+++ b/examples/18.src
@@ -8,10 +8,10 @@ let main = () => i64 {
 	(*(x+cast(*i8, 0))) = 10;
 	(*(x+cast(*i8, 1))) = 20;
 	(*(x+cast(*i8, 2))) = 40;
-	println("%p", x);
-	println("%d", *(x+cast(*i8, 0)));
-	println("%d", *(x+cast(*i8, 1)));
-	println("%d", *(x+cast(*i8, 2)));
+	printf("%p\n", x);
+	printf("%d\n", *(x+cast(*i8, 0)));
+	printf("%d\n", *(x+cast(*i8, 1)));
+	printf("%d\n", *(x+cast(*i8, 2)));
 	free(cast(*void, x));
 	return 0;
 };
diff --git a/examples/2.src b/examples/2.src
index 74e6400..d6a81b8 100644
--- a/examples/2.src
+++ b/examples/2.src
@@ -5,7 +5,7 @@ let main = () => i64 {
 
 	let uwu = test;
 
-	println("%d", uwu);
+	printf("%d\n", uwu);
 
 	return 0;
 };
diff --git a/examples/20.src b/examples/20.src
index 82356b2..6acabc8 100644
--- a/examples/20.src
+++ b/examples/20.src
@@ -20,7 +20,7 @@ let main = () => i64 {
 
 	let i = 0;
 	while i < n {
-		println("%d", *(arr + cast(*i64, i)));
+		printf("%d\n", *(arr + cast(*i64, i)));
 		i = i + 1;
 	};
 	
diff --git a/examples/21.src b/examples/21.src
index fbc4d3a..804b242 100644
--- a/examples/21.src
+++ b/examples/21.src
@@ -16,7 +16,7 @@ let init_array = (n: i64, arr: *i64) => void {
 let print_array = (n: i64, arr: *i64) => void {
 	let i = 0;
 	while i < n {
-		println("%d", *(arr + cast(*i64, i)));
+		printf("%d\n", *(arr + cast(*i64, i)));
 		i = i + 1;
 	};
 	return;
@@ -51,12 +51,12 @@ let main = () => i64 {
 	let arr = cast(*i64, malloc(n * 8));
 	init_array(n, arr);
 
-	println("Pre-sorted:");
+	printf("Pre-sorted:\n");
 	print_array(n, arr);
 
 	sort_array(n, arr);
 
-	println("Sorted:");
+	printf("Sorted:\n");
 	print_array(n, arr);
 	
 	free(cast(*void, arr));
diff --git a/examples/22.src b/examples/22.src
index b984202..cc367bf 100644
--- a/examples/22.src
+++ b/examples/22.src
@@ -20,14 +20,14 @@ let main = () => i64 {
 
 	let x = 0;
 
-	println("Inst x: %d", inst.x);
-	println("Inst y: %d", *(inst.y));
+	printf("Inst x: %d\n", inst.x);
+	printf("Inst y: %d\n", *(inst.y));
 
 	if inst.z {
 		x = 1;
 	};
 
-	println("Test: %d", x);
+	printf("Test: %d\n", x);
 
 	return 0;
 };
diff --git a/examples/23.src b/examples/23.src
index 9139428..31277c9 100644
--- a/examples/23.src
+++ b/examples/23.src
@@ -8,8 +8,8 @@ let test = struct {
 };
 
 let print_struct = (s: test) => void {
-	println("X: %d", s.x);
-	println("Y: %s", s.y);
+	printf("X: %d\n", s.x);
+	printf("Y: %s\n", s.y);
 	return;
 };
 
diff --git a/examples/24.src b/examples/24.src
index e0a3081..7349906 100644
--- a/examples/24.src
+++ b/examples/24.src
@@ -9,8 +9,8 @@ let test = struct {
 };
 
 let print_struct = (s: *test) => void {
-	println("X: %d", (*s).x);
-	println("Y: %s", (*s).y);
+	printf("X: %d\n", (*s).x);
+	printf("Y: %s\n", (*s).y);
 	if (*s).z != cast(*test, null) {
 		print_struct((*s).z);
 	};
diff --git a/examples/3.src b/examples/3.src
index d08cd7d..f10f05c 100644
--- a/examples/3.src
+++ b/examples/3.src
@@ -5,7 +5,7 @@ let main = () => i64 {
 
 	seventeen = seventeen + 1;
 
-	println("%d", seventeen);
+	printf("%d\n", seventeen);
 
 	return seventeen;
 };
diff --git a/examples/4.src b/examples/4.src
index f7b00e9..7787593 100644
--- a/examples/4.src
+++ b/examples/4.src
@@ -2,13 +2,13 @@ import "!stdlib.src";
 
 let main = () => i64 {
 	let print_one = () => i64 {
-		println("%d", 1);
+		printf("%d\n", 1);
 		return 4;
 	};
 
 	let y = print_one() + 2;
 
-	println("%d", y);
+	printf("%d\n", y);
 
 	return y;
 };
diff --git a/examples/5.src b/examples/5.src
index c397759..f6b2e62 100644
--- a/examples/5.src
+++ b/examples/5.src
@@ -6,15 +6,15 @@ let x = 18;
 
 let foo = () => i64 {
 	let x = 1;
-	println("%d", x);
+	printf("%d\n", x);
 	return x;
 };
 
 let main = () => i64 {
-	println("%d", x);
+	printf("%d\n", x);
 	let x = 2;
 	let y = foo();
-	println("%d", x);
+	printf("%d\n", x);
 	return x + y;
 };
 
diff --git a/examples/6.5.src b/examples/6.5.src
index d85fe34..f7d6229 100644
--- a/examples/6.5.src
+++ b/examples/6.5.src
@@ -3,7 +3,7 @@ import "!stdlib.src";
 let main = () => i64 {
 	let x = !(1 == 1);
 	if !x {
-		println("Condition");
+		printf("Condition\n");
 	};
 	return 0;
 };
diff --git a/examples/6.src b/examples/6.src
index ff4ed9e..3793f24 100644
--- a/examples/6.src
+++ b/examples/6.src
@@ -1,8 +1,8 @@
 import "!stdlib.src";
 
 let print_input = (input_a: i64, input_b: i64) => i64 {
-	println("%d", input_a);
-	println("%d", input_b);
+	printf("%d\n", input_a);
+	printf("%d\n", input_b);
 	return input_a + input_b;
 };
 
diff --git a/examples/7.src b/examples/7.src
index 6b45b73..a94891d 100644
--- a/examples/7.src
+++ b/examples/7.src
@@ -10,7 +10,7 @@ let main = () => i64 {
 	let i = 4;
 	
 	if (1 - -1 * 2) == 5 - (-1 + 1 + ten() / 2) + 3 {
-		println("%d", i);
+		printf("%d\n", i);
 		return i;
 	};
 
diff --git a/examples/8.src b/examples/8.src
index fe6b66d..671640b 100644
--- a/examples/8.src
+++ b/examples/8.src
@@ -12,7 +12,7 @@ let main = () => i64 {
 	};
 
 	let result = fib(30);
-	println("%d", result);
+	printf("%d\n", result);
 	return result;
 };
 
diff --git a/examples/9.src b/examples/9.src
index 9087c09..ae586c2 100644
--- a/examples/9.src
+++ b/examples/9.src
@@ -1,7 +1,7 @@
 import "!stdlib.src";
 
 let print_boolean = (b: bool) => i64 {
-	println("%d", b);
+	printf("%d\n", b);
 	return 0;
 };
 
diff --git a/src/bootstrap/codegen.src b/src/bootstrap/codegen.src
index fa4c45d..7059508 100644
--- a/src/bootstrap/codegen.src
+++ b/src/bootstrap/codegen.src
@@ -63,7 +63,7 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 	if ((*expression).type == NODE_PRIMARY_EXPRESSION_NUMBER) {
 		let n = (*cast(*NODE_PRIMARY_EXPRESSION_NUMBER_DATA, (*expression).data)).value;
 		
-		println("X: %d", n);
+		printf("X: %d\n", n);
 
 		let node_type = Node{};
 		node_type.type = NODE_TYPE_SIMPLE_TYPE;
@@ -77,9 +77,9 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 	};
 	
 	if ((*expression).type == NODE_FUNCTION_DEFINITION) {
-		println("ASS %d", (*expression).type);
+		printf("ASS %d\n", (*expression).type);
 		assert(false); /* TODO */
-		println("ERT");
+		printf("ERT\n");
 	};
 
 	assert(false);
@@ -93,7 +93,7 @@ let codegen_generate_assignment_statement = (c: *codegen, stmt: *NODE_ASSIGNMENT
 
 	if (lhs.type == NODE_PRIMARY_EXPRESSION_IDENTIFIER) {
 		let identifier = (*cast(*NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, lhs.data)).name;
-		println("XX %s", identifier);
+		printf("XX %s\n", identifier);
 		let variable = codegen_generate_expression_value(c, prhs, identifier);
 		assert(variable != cast(*Variable, null));
 		return 0;
@@ -111,7 +111,7 @@ let codegen_generate_statement = (c: *codegen, statement: *Node) => i64 {
 	if res != 0 {
 		return 1;
 	};
-	println("STMT: %d", stmt.type);
+	printf("STMT: %d\n", stmt.type);
 	return 0;
 };
 
@@ -145,7 +145,7 @@ let codegen_compile = (c: *codegen) => i64 {
         let message = cast(**i8, null);
         let result = LLVMGetTargetFromTriple(triple, target_ref, message);
         if result != 0 {
-            println("Target output: %s", *message);
+            printf("Target output: %s\n", *message);
             LLVMDisposeMessage(*message);
         };
         let target_machine = LLVMCreateTargetMachine(
@@ -160,7 +160,7 @@ let codegen_compile = (c: *codegen) => i64 {
         LLVMDisposeMessage(triple);
         result = LLVMVerifyModule((*c).llvm_module, LLVMAbortProcessAction, message);
         if result != 0 {
-            println("Verification output: %s", *message);
+            printf("Verification output: %s\n", *message);
             LLVMDisposeMessage(*message);
         };
 
@@ -174,7 +174,7 @@ let codegen_compile = (c: *codegen) => i64 {
             cast(**i8, null),
         );
         LLVMDisposeTargetMachine(target_machine);
-        println("Object file generated: %s", filename);
+        printf("Object file generated: %s\n", filename);
 
 	return 0;
 };
diff --git a/src/bootstrap/main.src b/src/bootstrap/main.src
index 6cb2949..571cc03 100644
--- a/src/bootstrap/main.src
+++ b/src/bootstrap/main.src
@@ -40,13 +40,13 @@ let read_file = (filename: *i8, alloc: *arena) => slice {
 
 let main = (argc: i64, argv: **i8) => i64 {
 	if argc < 2 {
-		println("Need filename!");
+		printf("Need filename!\n");
 		return 1;
 	};
 
 	let filename = *(argv + cast(**i8, 1));
 
-	println("%s", filename);
+	printf("%s\n", filename);
 
 	let alloc = arena_init(999999999);
 
diff --git a/src/bootstrap/parser.src b/src/bootstrap/parser.src
index 44e5761..daac296 100644
--- a/src/bootstrap/parser.src
+++ b/src/bootstrap/parser.src
@@ -379,7 +379,7 @@ let parser_parse_primary_expression = (p: *parser) => *Node {
 
 	let tok = parser_consume_token(p);
 	if tok == cast(*token, null) {
-	println("NO TOK");
+	printf("NO TOK\n");
 	    return cast(*Node, null); 
 	};
 
@@ -402,7 +402,7 @@ let parser_parse_primary_expression = (p: *parser) => *Node {
 	    return create_node(p, n);
 	};
 
-	println("DIFF TYPE: %d", (*tok).type);
+	printf("DIFF TYPE: %d\n", (*tok).type);
 
 	return cast(*Node, null);
 };
@@ -437,7 +437,7 @@ let parser_parse_expression = (p: *parser) => *Node {
 let parse_assignment_statement = (p: *parser) => *Node {
 	let is_declaration = false;
 	if parser_accept_token(p, TOKEN_LET) != cast(*token, null) {
-	    println("IS DECLARATION");
+	    printf("IS DECLARATION\n");
 	    is_declaration = true;
 	};
 
@@ -445,7 +445,7 @@ let parse_assignment_statement = (p: *parser) => *Node {
 
 	let lhs = parser_parse_expression(p); /* TODO */
 	if lhs == cast(*Node, null) {
-	println("ANOTHER BNLL");
+	printf("ANOTHER BNLL\n");
 	    return cast(*Node, null);
 	};	
 	
@@ -455,7 +455,7 @@ let parse_assignment_statement = (p: *parser) => *Node {
 	
 	let rhs = parser_parse_expression(p); /* TODO */
 	if rhs == cast(*Node, null) {
-		println("NUL EXP");
+		printf("NUL EXP\n");
 	    return cast(*Node, null);
 	};
 
@@ -467,7 +467,7 @@ let parse_assignment_statement = (p: *parser) => *Node {
 	let n = Node{};
 	n.type = NODE_ASSIGNMENT_STATEMENT;
 	n.data = cast(*void, d);
-	println("CONTINUE");
+	printf("CONTINUE\n");
 	return create_node(p, n);
 };
 
@@ -490,7 +490,7 @@ let parser_parse_statement = (p: *parser) => *Node {
 	};
 
 
-	println("None");
+	printf("None\n");
 	
 	return cast(*Node, null);
 };
diff --git a/src/bootstrap/tokenizer.src b/src/bootstrap/tokenizer.src
index 70ec1bb..8d7f997 100644
--- a/src/bootstrap/tokenizer.src
+++ b/src/bootstrap/tokenizer.src
@@ -503,7 +503,7 @@ let tokenizer_next = (t: *tokenizer) => *token {
 		return true;
 	});
 	if strlen(string) == 0 {
-		println("NO IDENT!");
+		printf("NO IDENT!\n");
 		return cast(*token, null);
 	};
 
@@ -520,9 +520,9 @@ let tokenizer_init = (alloc: *arena, file: slice) => *tokenizer {
 	(*t).buf = cast(*i8, file.data);
 	(*t).buf_len = file.data_len;
 
-	println("File size: %d", (*t).buf_len);
+	printf("File size: %d\n", (*t).buf_len);
 
-	println("%s", (*t).buf);
+	printf("%s\n", (*t).buf);
 
 	return t;
 };
@@ -536,13 +536,13 @@ let tokenizer_tokenize = (t: *tokenizer) => slice {
 		if tk == cast(*token, null) {
 			break;
 		};
-		println("Add token: %d", (*tk).type);
+		printf("Add token: %d\n", (*tk).type);
 
 		(*(tokens + cast(*token, tokens_len))) = *tk;
 		tokens_len = tokens_len + 1;
 	};
 
-	println("PRINT TOKENS: %d", tokens_len);
+	printf("PRINT TOKENS: %d\n", tokens_len);
 
 	print_tokens(tokens, tokens_len);
 
diff --git a/std/stdlib.src b/std/stdlib.src
index 9164f67..aecd4df 100644
--- a/std/stdlib.src
+++ b/std/stdlib.src
@@ -1,13 +1,6 @@
 extern printf = (*i8, varargs) => void;
 extern exit = (i64) => void;
 
-/* TODO: This has a bug (with varargs i think) */
-let println = (str: *i8, args: varargs) => void {
-	printf(str, args);
-	printf("\n");
-	return;
-};
-
 let strcmp = (stra: *i8, strb: *i8) => bool {
 	let i = 0;
 	while true {
@@ -82,7 +75,7 @@ let iswhitespace = (c: i8) => bool {
 
 let assert = (cond: bool) => void {
 	if !cond {
-		println("ASSERTION FAILED");
+		printf("ASSERTION FAILED\n");
 		exit(1);
 	};