aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.c
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2019-03-02 21:48:30 +0100
committerdec05eba <dec05eba@protonmail.com>2020-07-25 14:36:46 +0200
commitaf74ddb119e3c5167a10bf5468af3960c8db42c0 (patch)
tree678034785d3127d2bdb41c5e27f8a3d58fa99340 /src/tokenizer.c
parent5e240bdab90c45f935e7d2b33181de13295e7e6b (diff)
Use 'fn' to define closure to make parsing/reading the language easier
It caused issues when you have parentheses to surround math expression, for example: ((func() + 34) * 54) is easier to parse if closure has to begin with 'fn'. Also removed requirement for semicolons. Semicolons can't even be used optionally yet.
Diffstat (limited to 'src/tokenizer.c')
-rw-r--r--src/tokenizer.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/tokenizer.c b/src/tokenizer.c
index 41d46fb..b996354 100644
--- a/src/tokenizer.c
+++ b/src/tokenizer.c
@@ -146,6 +146,13 @@ static CHECK_RESULT int __tokenizer_next(Tokenizer *self, Token *token) {
self->value.identifier = create_buffer_view(self->code.data + identifier_start, self->index - identifier_start);
switch(self->value.identifier.size) {
+ case 2: {
+ if(am_memeql(self->value.identifier.data, "fn", 2)) {
+ *token = TOK_FN;
+ return TOKENIZER_OK;
+ }
+ break;
+ }
case 3: {
if(am_memeql(self->value.identifier.data, "var", 3)) {
*token = TOK_VAR;
@@ -324,6 +331,9 @@ static BufferView tokenizer_expected_token_as_string(Token token) {
case TOK_STRING:
str = "string";
break;
+ case TOK_FN:
+ str = "fn";
+ break;
case TOK_EQUALS:
str = "=";
break;