summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2022-12-12 16:25:02 -0500
committerKyle Gunger <kgunger12@gmail.com>2022-12-12 16:25:02 -0500
commitecf3e4075141163459200a2b2d05bd8b866c371d (patch)
treea36a0ba031087fb3c4913aa4115b5c2fba225cef
parentb343dcdcb4e6b9297257dc066885aa530b8a04c1 (diff)
Module include syntax
-rw-r--r--tnslc/compile/compile.tnsl18
-rw-r--r--tnslc/paths.tnsl20
2 files changed, 34 insertions, 4 deletions
diff --git a/tnslc/compile/compile.tnsl b/tnslc/compile/compile.tnsl
index 677cf55..c884cca 100644
--- a/tnslc/compile/compile.tnsl
+++ b/tnslc/compile/compile.tnsl
@@ -43,11 +43,11 @@
/; get_offset({}charp name) [int]
;int out = 0
- /; loop (int i = 0; i < len (self.sub_types)) [i = i + 2]
- /; if (string_equate(~name, ~(self.sub_types{i + 1})))
+ /; loop (int i = 0; i < len (self.on_stack)) [i++]
+ /; if (string_equate(~name, ~(self.sub_types{i*2 + 1})))
;return out
- ;; else
- ;VType tmp = vtype_by_name(self.sub_types{i})
+ ;; else if (self.on_stack{i})
+ ;VType tmp = vtype_by_name(self.sub_types{i*2})
;out = out + tmp.size
;/
;/
@@ -621,6 +621,16 @@
;/
/; compile_include (Path file_path, ~VTrack global, ~{}charp hsec, csec, dsec)
+ # Autocomplete in the case of module syntax
+ ;bool d = file_path.extension_is("tnsl")
+ /; if (!d)
+ ;file_path.dirs.append(file_path.file)
+ ;{}charp ftmp = file_path.file
+ ;{}charp tmp = ".tnsl"
+ ;add_strings(~ftmp, ~tmp)
+ ;file_path.file = ftmp
+ ;/
+
;tnsl.io.print("[TNSLC:INCLUDE] ")
;tnsl.io.println(file_path.full_path())
diff --git a/tnslc/paths.tnsl b/tnslc/paths.tnsl
index 1e8c705..1a97f08 100644
--- a/tnslc/paths.tnsl
+++ b/tnslc/paths.tnsl
@@ -38,6 +38,26 @@
;return tnsl.io.readFile(self.full_path())
;/
+ /; extension_is ({}charp chk) [bool]
+ ;{}charp ext = ""
+ ;int dot = -1
+ /; loop (int i = len (self.file) - 1; i > 0) [i = i - 1]
+ /; if (self.file{i} == '.')
+ ;dot = i
+ ;break
+ ;/
+ ;/
+
+ /; if (dot > 0)
+ ;dot++
+ /; loop (dot < len (self.file)) [dot++]
+ ;ext.append(self.file{dot})
+ ;/
+ ;/
+
+ ;return string_equate(chk, ext)
+ ;/
+
;/
/; split({}charp str, charp c) [{}{}charp]