summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-03-15 19:45:43 +0100
committerkdx <kikoodx@paranoici.org>2023-03-15 19:49:03 +0100
commit4b069f86578ecf84301b80a66f3cce722005d94b (patch)
tree2f1bbb5807da798645dc624ddc7bf870e2129234
parent0d7f156145be397af2d36890d8126f75b70ee377 (diff)
downloadgolem-4b069f86578ecf84301b80a66f3cce722005d94b.tar.gz
get rid of duplicate TOK_END
-rw-r--r--lexer.c7
-rw-r--r--main.c17
-rw-r--r--mvp.golem2
-rw-r--r--onlymain.golem4
-rwxr-xr-xtest.sh1
5 files changed, 23 insertions, 8 deletions
diff --git a/lexer.c b/lexer.c
index 83043e9..48b58b3 100644
--- a/lexer.c
+++ b/lexer.c
@@ -59,9 +59,12 @@ lexer(Slice slice)
// Single character tokens.
if (simple_token(slice.str[i]) != TOK_NONE) {
- token_append(&toks,
- token_create(slice_sub(slice, i, i + 1),
+ Slice sub = slice_sub(slice, i, i + 1);
+ token_append(&toks, token_create(sub,
simple_token(slice.str[i])));
+ if (slice.str[i] == '}')
+ token_append(&toks,
+ token_create(sub, TOK_END));
i += 1;
continue;
}
diff --git a/main.c b/main.c
index 36b2145..5d52792 100644
--- a/main.c
+++ b/main.c
@@ -6,6 +6,14 @@
#include <stdio.h>
#include <stdlib.h>
+static void
+destroy_duplicates(Token **list, unsigned int type)
+{
+ for (Token *e = (*list)->next; e != NULL; e = e->next)
+ if (e->type == type && e->prev->type == type)
+ token_delete(list, e->prev);
+}
+
int
main(int argc, char **argv)
{
@@ -24,11 +32,12 @@ main(int argc, char **argv)
fclose(file);
Token *tokens = lexer(slice);
+ destroy_duplicates(&tokens, TOK_END);
group_scope(&tokens);
- group_deref(&tokens);
- group_funcall(&tokens);
- group_global(&tokens);
- group_local(&tokens);
+ //group_deref(&tokens);
+ //group_funcall(&tokens);
+ //group_global(&tokens);
+ //group_local(&tokens);
token_print(tokens, 1, 0);
token_destroy(tokens);
diff --git a/mvp.golem b/mvp.golem
index 41c9db5..efa081d 100644
--- a/mvp.golem
+++ b/mvp.golem
@@ -11,7 +11,7 @@ main(argc argv) {
local world;
g_heap = 8000;
- hello = (strdup "bonjour");
+ hello = (strdup "bonjour");;;
world = (strdup "monde");
(print hello);
(print " ");
diff --git a/onlymain.golem b/onlymain.golem
new file mode 100644
index 0000000..e973537
--- /dev/null
+++ b/onlymain.golem
@@ -0,0 +1,4 @@
+main(argc argv) {
+ (print [argv (sub argc 1)]);
+ return (less argc 2);
+};
diff --git a/test.sh b/test.sh
index 9e8fd3b..081f056 100755
--- a/test.sh
+++ b/test.sh
@@ -1,4 +1,3 @@
#!/bin/sh
./build.sh || exit 1
-./golem mvp.golem || exit 1
valgrind ./golem mvp.golem || exit 1