diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-10 18:03:32 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-10 18:03:32 +0330 |
commit | d523a165aee75e038a4ae4985de08443f4037b9c (patch) | |
tree | 76fb711ffc6524bd23259b449e34a8414e4fa425 | |
parent | 71b4af57bdcc91d948d436a459a223c402a6e17d (diff) |
fixing some parse order
-rw-r--r-- | code/lib/operator.felan | 12 | ||||
-rw-r--r-- | code/main.felan | 26 | ||||
-rw-r--r-- | src/compiler/ast-tree.c | 10 | ||||
-rw-r--r-- | src/compiler/lexer.h | 5 | ||||
-rw-r--r-- | src/compiler/parser.c | 9 |
5 files changed, 44 insertions, 18 deletions
diff --git a/code/lib/operator.felan b/code/lib/operator.felan index 0c72971..998a053 100644 --- a/code/lib/operator.felan +++ b/code/lib/operator.felan @@ -833,3 +833,15 @@ __set_item__ :: (left:*[]anytype,index:i64,item:@type_of(left.*.ptr.*)) -> (@typ __get_item_address__ :: (left:*[]anytype,index:i64) -> (@type_of(left.*.ptr)) { return (left.*.ptr + index); }; + +__get_item__ :: (left:*[]anytype,index:u64) -> (@type_of(left.*.ptr.*)) { + return (left.*.ptr + index).*; +}; + +__set_item__ :: (left:*[]anytype,index:u64,item:@type_of(left.*.ptr.*)) -> (@type_of(left.*.ptr.*)) { + return (left.*.ptr + index).* = item; +}; + +__get_item_address__ :: (left:*[]anytype,index:u64) -> (@type_of(left.*.ptr)) { + return (left.*.ptr + index); +}; diff --git a/code/main.felan b/code/main.felan index 44f620f..9eda0d2 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,13 +1,25 @@ @import("basic.felan"); -main :: () -> void { - // print_formatted("hello"); - str := string_from("Hey"); - - append(&str,"\nHello"); +t :: (a:[]u8) -> void { + i := 0u64; + while i < a.length { + print(a[i]); + i += 1u64; + break; + } +}; - print(slice(str,4,7)); +main :: () -> void { + a := (comptime { + a:[10]u8 = undefined; + i := 0u64; + while i < a.length { + a[i] = @cast(i,u8); + i += 1u64; + } + a; + }); - delete(str); + t(a); }; diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index f010067..8cea6f7 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -3750,6 +3750,11 @@ AstTree *astTreeParseBracket(const ParserNode *parserNode, AstTreeToken token) { metadata->operand = astTreeParse(node_metadata->operand); + if (metadata->operand == NULL) { + free(metadata); + return NULL; + } + metadata->parameters.size = node_metadata->params->size; metadata->parameters.data = a404m_malloc(sizeof(*metadata->parameters.data) * metadata->parameters.size); @@ -3762,6 +3767,11 @@ AstTree *astTreeParseBracket(const ParserNode *parserNode, AstTreeToken token) { } metadata->parameters.data[i] = astTreeParse(node_param); + + if (metadata->parameters.data[i] == NULL) { + free(metadata); + return NULL; + } } return newAstTree(token, metadata, NULL, parserNode->str_begin, diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h index 1802e41..568fabc 100644 --- a/src/compiler/lexer.h +++ b/src/compiler/lexer.h @@ -136,18 +136,15 @@ typedef enum LexerToken { LEXER_TOKEN_KEYWORD_BREAK, LEXER_TOKEN_KEYWORD_CONTINUE, LEXER_TOKEN_KEYWORD_COMPTIME, - LEXER_TOKEN_SYMBOL_EOL, - LEXER_TOKEN_ORDER14 = LEXER_TOKEN_SYMBOL_EOL, LEXER_TOKEN_SYMBOL_COMMA, LEXER_TOKEN_KEYWORD_IF, - LEXER_TOKEN_ORDER15 = LEXER_TOKEN_KEYWORD_IF, + LEXER_TOKEN_ORDER14 = LEXER_TOKEN_KEYWORD_IF, LEXER_TOKEN_KEYWORD_WHILE, LEXER_TOKEN_KEYWORD_ELSE, LEXER_TOKEN_END_ORDERS = LEXER_TOKEN_KEYWORD_ELSE, - LEXER_TOKEN_SYMBOL, LEXER_TOKEN_SYMBOL_OPEN_PARENTHESIS, LEXER_TOKEN_SYMBOL_OPEN_BRACKET, diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 1becd88..ea54e52 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -201,18 +201,13 @@ static const ParserOrder PARSER_ORDER[] = { .end = LEXER_TOKEN_ORDER13, }, { - .ltr = false, + .ltr = true, .begin = LEXER_TOKEN_ORDER13, .end = LEXER_TOKEN_ORDER14, }, { - .ltr = true, - .begin = LEXER_TOKEN_ORDER14, - .end = LEXER_TOKEN_ORDER15, - }, - { .ltr = false, - .begin = LEXER_TOKEN_ORDER15, + .begin = LEXER_TOKEN_ORDER14, .end = LEXER_TOKEN_END_ORDERS, }, }; |