From e25b738656928b38781458ed85880e8ae7bdd5a6 Mon Sep 17 00:00:00 2001
From: Kyle Gunger <kgunger12@gmail.com>
Date: Thu, 14 Mar 2024 01:11:23 -0400
Subject: Test vector impl

---
 compiler.c                | 16 ++++++++--------
 tests/test_funcall_5.tnsl | 12 ++++++++++++
 tnslc/build.sh            |  2 +-
 tnslc/main.tnsl           | 13 +++++--------
 tnslc/vector.tnsl         | 32 ++++++++++++++++++++++++++++++++
 5 files changed, 58 insertions(+), 17 deletions(-)
 create mode 100644 tests/test_funcall_5.tnsl
 create mode 100644 tnslc/vector.tnsl

diff --git a/compiler.c b/compiler.c
index 9901e2e..9d66258 100644
--- a/compiler.c
+++ b/compiler.c
@@ -1846,7 +1846,7 @@ void *mod_find_rec(Module *mod, Artifact *art, size_t sub, int find_type) {
 		char **to_check = vect_get(art, sub);
 
 		Vector e_check = vect_from_string("@@"); // In case it is a variable inside an enum
-		Vector t_check = vect_from_string("@"); // In case it is a function inside a method block
+		Vector t_check = vect_from_string("_#"); // In case it is a function inside a method block
 		vect_push_string(&e_check, *to_check);
 		vect_as_string(&e_check);
 		vect_push_string(&t_check, *to_check);
@@ -1939,7 +1939,7 @@ void mod_full_path_rec(Module *m, Vector *v) {
 		mod_full_path_rec(m->parent, v);
 	
 	char dot = '.';
-	if(v->count > 0 || (v->count == 0 && m->name[0] == '@'))
+	if(v->count > 0)
 		vect_push(v, &dot);
 	vect_push_string(v, m->name);
 }
@@ -3094,7 +3094,7 @@ void p1_parse_method(Module *root, Vector *tokens, size_t *pos) {
 		return;
 	}
 
-	Vector mod_name = vect_from_string("@");
+	Vector mod_name = vect_from_string("_#");
 	vect_push_string(&mod_name, t->data);
 	Module out = mod_init(vect_as_string(&mod_name), root, root->exported);
 	vect_end(&mod_name);
@@ -3290,7 +3290,7 @@ void p1_size_type (Module *root, Type *t) {
 	int sum = 0;
 	t->size = -1;
 
-	Vector tmp = vect_from_string("@");
+	Vector tmp = vect_from_string("_#");
 	vect_push_string(&tmp, t->name);
 	t->module = mod_find_sub(root, vect_as_string(&tmp));
 	vect_end(&tmp);
@@ -3349,7 +3349,7 @@ void p1_size_type (Module *root, Type *t) {
 
 void p1_resolve_func_types(Module *root, Function *func) {
 
-	bool method = root->name != NULL && strlen(root->name) > 0 && root->name[0] == '@';
+	bool method = root->name != NULL && strlen(root->name) > 1 && root->name[0] == '_' && root->name[1] == '#';
 
 	int reg = 1;
 	if (method)
@@ -5036,7 +5036,7 @@ void p2_compile_control(Scope *s, CompData *out, Vector *tokens, size_t *pos, Ve
 void _p2_handle_method_scope(Module *root, CompData *out, Scope *fs, Function *f) {
 	
 	// load type for method
-	Artifact t_art = art_from_str((root->name + 1), '.');
+	Artifact t_art = art_from_str((root->name + 2), '.');
 	Type *t = mod_find_type(root, &t_art);
 	art_end(&t_art);
 	
@@ -5148,7 +5148,7 @@ void p2_compile_function(Module *root, CompData *out, Vector *tokens, size_t *po
 	// Scope init
 	Scope fs = scope_init(t->data, root);
 	_p2_func_scope_init(root, out, &fs, f, &p_list);
-	if(root->name != NULL && strlen(root->name) > 0 && root->name[0] == '@') {
+	if(root->name != NULL && strlen(root->name) > 1 && root->name[0] == '_' && root->name[1] == '#') {
 		_p2_handle_method_scope(root, out, &fs, f);
 	}
 
@@ -5253,7 +5253,7 @@ void p2_compile_method(Module *root, CompData *out, Vector *tokens, size_t *pos)
 		return;
 	}
 
-	Vector sub_name = vect_from_string("@");
+	Vector sub_name = vect_from_string("_#");
 	vect_push_string(&sub_name, t->data);
 
 	// TODO: method loop
diff --git a/tests/test_funcall_5.tnsl b/tests/test_funcall_5.tnsl
new file mode 100644
index 0000000..48bd4fe
--- /dev/null
+++ b/tests/test_funcall_5.tnsl
@@ -0,0 +1,12 @@
+/; f_a (int a) [int]
+	return a
+;/
+
+/; f_b (int a, ~int b) [int]
+	return a + b`
+;/
+
+/; main [int]
+	int a = 60
+	return f_b(f_a(1) * 9, ~a)
+;/
diff --git a/tnslc/build.sh b/tnslc/build.sh
index b492dcd..798e77d 100755
--- a/tnslc/build.sh
+++ b/tnslc/build.sh
@@ -3,5 +3,5 @@
 ../ctc main.tnsl tnslc.asm
 nasm -f elf64 -o tnslc.o tnslc.asm
 gcc -o tnslc tnslc.o
-rm tnslc.asm tnslc.o
+# rm tnslc.asm tnslc.o
 
diff --git a/tnslc/main.tnsl b/tnslc/main.tnsl
index 1abedb3..ac56836 100644
--- a/tnslc/main.tnsl
+++ b/tnslc/main.tnsl
@@ -1,14 +1,11 @@
 :import "c_wrap_linux.tnsl"
+:import "vector.tnsl"
 
-~uint8 str_a = "Hello World\n\0"
-~uint8 str_b = "!\n\0"
+/; main [int]
 
-/; main (int argc, ~~uint8 argv) [int]
-	_printf(str_a)
+	Vector a
+	a.init(1)
 
-	/; if (argc > 2)
-		_printf(str_b)
-	;/
-	
 	return 0
 ;/
+
diff --git a/tnslc/vector.tnsl b/tnslc/vector.tnsl
new file mode 100644
index 0000000..1377938
--- /dev/null
+++ b/tnslc/vector.tnsl
@@ -0,0 +1,32 @@
+struct Vector {
+	~void data,
+	int
+		size,
+		count,
+		_elsz
+}
+
+int VECT_DEFAULT_SIZE = 4
+
+/; method Vector
+	
+	/; init (int elsz)
+		self._elsz = elsz
+		self.size = VECT_DEFAULT_SIZE
+		self.data = _alloc(elsz * self.size)
+		self.count = 0
+	;/
+
+	/; get (int index) [~void]
+		return self.data
+	;/
+
+	/; end
+		_delete(self.data)
+		self.size = 0
+		self._elsz = 0
+		self.count = 0
+	;/
+
+;/
+
-- 
cgit v1.2.3