summaryrefslogtreecommitdiff
path: root/tnslc/tnslc.tnsl
diff options
context:
space:
mode:
authorKai Gunger <kgunger12@gmail.com>2026-02-28 17:49:43 -0500
committerKai Gunger <kgunger12@gmail.com>2026-02-28 17:49:43 -0500
commit411733084c3f64872657e6803ecf4380c907626e (patch)
tree78d9e926d6211034178c6c2ad2ac17e5822a16c6 /tnslc/tnslc.tnsl
parent3b0dd26823b62e13bf38376f0a0211ce7861c150 (diff)
[tnslc] flags to control stages of comporigin
Diffstat (limited to 'tnslc/tnslc.tnsl')
-rw-r--r--tnslc/tnslc.tnsl60
1 files changed, 49 insertions, 11 deletions
diff --git a/tnslc/tnslc.tnsl b/tnslc/tnslc.tnsl
index e95a63b..d49bcc9 100644
--- a/tnslc/tnslc.tnsl
+++ b/tnslc/tnslc.tnsl
@@ -5,10 +5,20 @@
~uint8 DEFAULT_FOUT = "out.asm\0"
~uint8 USAGE = "
-TNSLC v0.6.0 (C) 2024 CircleShift (MPL 2.0)
+TNSLC v0.7.0 (C) 2026 CircleShift (MPL 2.0)
usage:
- tnslc (file in) [file out]
+ tnslc [options] (file in)
+
+options:
+ -o [output file]
+ Sets the file to output asm code to (default is \"out.asm\")
+
+ -p
+ Print the parse tree and exit without compiling
+
+ -m
+ Print the module tree and exit without compiling
\0"
@@ -25,20 +35,48 @@ usage:
_printf(USAGE)
return 1
;/
-
+
utils.File fin, fout
- fin.init(argv{1})
-
- /; if (argc > 2)
- fout.init(argv{2})
- ;; else
- fout.init(DEFAULT_FOUT)
+ int arg_counter = 1
+ int mode = 0
+ ~uint8 first_str = argv{arg_counter}
+
+ /; if (first_str{0} == '-')
+ /; if (utils.strcmp(argv{arg_counter}, "-p\0") == true)
+ mode = 1
+ arg_counter++
+ ;; else if (utils.strcmp(argv{arg_counter}, "-m\0") == true)
+ mode = 2
+ arg_counter++
+ ;; else if (utils.strcmp(argv{arg_counter}, "-o\0") == true)
+ arg_counter++
+ /; if (arg_counter !< argc)
+ _printf(USAGE)
+ return 1
+ ;/
+ fout.init(argv{arg_counter})
+ ;; else
+ fout.init(DEFAULT_FOUT)
+ ;/
;/
- compile.generate(~fin, ~fout)
+ /; if (arg_counter !< argc)
+ _printf(USAGE)
+ return 1
+ ;/
+
+ fin.init(argv{arg_counter})
+
+ /; if (mode == 0)
+ compile.generate(~fin, ~fout)
+ fout.end()
+ ;; else if (mode == 1)
+ compile.parse_tree(~fin)
+ ;; else if (mode == 2)
+ compile.mod_tree(~fin)
+ ;/
fin.end()
- fout.end()
return 0
;/