aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/lib/operator.felan12
-rw-r--r--code/main.felan26
-rw-r--r--src/compiler/ast-tree.c10
-rw-r--r--src/compiler/lexer.h5
-rw-r--r--src/compiler/parser.c9
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,
},
};