From 12f274a8523d99481106aff3a652d3b583f38551 Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Thu, 28 Mar 2024 16:43:08 -0400 Subject: Vector updates --- tnslc/tnslc.tnsl | 20 +++++++++------- tnslc/vector.tnsl | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 82 insertions(+), 10 deletions(-) diff --git a/tnslc/tnslc.tnsl b/tnslc/tnslc.tnsl index 8fb65c3..efc8922 100644 --- a/tnslc/tnslc.tnsl +++ b/tnslc/tnslc.tnsl @@ -17,6 +17,8 @@ usage: \0" +~uint8 split_test = "test/whatever/file.tnsl\0" + /; main (int argc, ~~uint8 argv) [int] asm "mov r10, rdi" asm "mov r11, rsi" @@ -26,16 +28,18 @@ usage: return 1 ;/ - utils.File in, out + utils.Artifact art + + art.init() + # art.push(split_test) + # _printf(art.strings{0}) - in.init(argv{1}) - /; if (argc < 3) - out.init(argv{2}) - ;; else - out.init(DEFAULT_FOUT) - ;/ + art.split_cstr(split_test, '/') + ~uint8 file = art.to_cstr('/') + _printf(file) + _delete(file) - compile.generate(in, out) + art.end() return 0 ;/ diff --git a/tnslc/vector.tnsl b/tnslc/vector.tnsl index ea61d78..af0a665 100644 --- a/tnslc/vector.tnsl +++ b/tnslc/vector.tnsl @@ -21,6 +21,11 @@ uint VECTOR_MAX_GROW = 256 self.data = _alloc(self.size * self._elsz) ;/ + /; from_cstr(~uint8 cstr) + self.init(1) + self.push_cstr(cstr) + ;/ + /; _grow (uint i) self.size = self.size + i self.data = _realloc(self.data, self.size * self._elsz) @@ -60,7 +65,6 @@ uint VECTOR_MAX_GROW = 256 /; loop (ch` !== 0) [ch++] self.push(ch) ;/ - self.push(ch) ;/ /; as_cstr [~uint8] @@ -92,7 +96,71 @@ struct Artifact { /; init self.size = VECTOR_MIN_ELEMENTS self.count = 0 - self.strings = _alloc(self.size * 8) + self.strings = _alloc(len self.strings * self.size) + ;/ + + /; split_cstr (~uint8 str, uint8 split) + Vector track + track.init(1) + + /; loop (str` !== 0) [str++] + /; if (str` == split) + self.push(track.as_cstr()) + track.init(1) + ;; else + track.push(str) + ;/ + ;/ + + self.push(track.as_cstr()) + _print_num(NUM_STR, self.count) + ;/ + + /; _grow (uint i) + self.size = self.size + i + self.strings = _realloc(self.strings, len self.strings * self.size) + ;/ + + /; push (~uint8 str) + /; if (self.size == self.count + 1) + /; if (self.size < VECTOR_MAX_GROW) + self._grow(self.size) + ;; else + self._grow(VECTOR_MAX_GROW) + ;/ + ;/ + + self.strings{self.count} = str + self.count++ + ;/ + + /; get (uint index) [~uint8] + /; if (index !< self.count) + return NULL + ;/ + + return self.strings{index} + ;/ + + /; to_cstr (uint8 join) [~uint8] + Vector out + out.init(1) + + /; loop (int i = 0; i < self.count) [i++] + out.push_cstr(self.get(i)) + /; if (i < self.count - 1) + out.push(~join) + ;/ + ;/ + + return out.as_cstr() + ;/ + + /; end + /; loop (int i = 0; i < self.count) [i++] + _delete(self.get(i)) + ;/ + _delete(self.strings) ;/ ;/ -- cgit v1.2.3