aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-06-21 16:04:00 +0800
committerMistivia <i@mistivia.com>2025-06-21 16:04:00 +0800
commitca22ae606ca674a91e28597a96641c01f7eacb24 (patch)
tree01fadb02db0ee2bffe9217373c304dae7c48e19d /src/main.c
parent1b2e36b342be527937ad350690023cb50190f1e0 (diff)
add tests
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 4fddea9..86a5d36 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,10 +2,28 @@
#include "parser.h"
#include "sexp.h"
-int main() {
- int ret = -1;
+int main(int argc, char **argv) {
+ int mainret = 0;
Interp interp;
Interp_init(&interp);
+ if (argc > 2) {
+ fprintf(stderr, "Usage: bamboo-lisp [file.lisp]\n");
+ return -1;
+ }
+ if (argc == 2) {
+ const char *filename = argv[1];
+ SExpRef ret = Interp_load_file(&interp, filename);
+ if (Interp_ref(&interp, ret)->type == kErrSignal) {
+ fprintf(stderr, "Error: %s", Interp_ref(&interp, ret)->str);
+ mainret = -1; goto end;
+ }
+ if (Interp_ref(&interp, ret)->type == kBreakSignal
+ || Interp_ref(&interp, ret)->type == kContinueSignal
+ || Interp_ref(&interp, ret)->type == kReturnSignal) {
+ fprintf(stderr, "Error: unexpected control flow signal.\n");
+ mainret = -1; goto end;
+ }
+ }
Parser_set_readline(interp.parser);
SExpRef sexp, res;
ParseResult parse_result;
@@ -34,5 +52,5 @@ int main() {
}
end:
Interp_free(&interp);
- return 0;
+ return mainret;
}