aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2019-09-29 23:47:52 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-25 14:36:46 +0200
commitf5dc9ad48db4d22e7d6f15e340063dc7cb14c1e1 (patch)
tree4465a81a77e936dc2ed6ecd90183ba6af9cc2dae /src/parser.c
parentc811a743a1528db1d05970e1aa14162ef7c70b75 (diff)
Implicit cast from str to ?&c_char, fix use of parameters (to use sys v registers)
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/src/parser.c b/src/parser.c
index dc39a6a..be19a33 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -290,14 +290,9 @@ void parser_parse_var_type(Parser *self, VariableType *result) {
if(match)
result->variable_type_flags |= VARIABLE_TYPE_FLAG_OPTIONAL;
- throw_if_error(tokenizer_consume_if(&self->tokenizer, TOK_BINOP, &match));
- if(match) {
- if(self->tokenizer.value.binop_type != BINOP_MUL) {
- self->error = tokenizer_create_error(&self->tokenizer, tokenizer_get_error_index(&self->tokenizer), "Expected '*', type or closure signature");
- throw(PARSER_UNEXPECTED_TOKEN);
- }
+ throw_if_error(tokenizer_consume_if(&self->tokenizer, TOK_AMPERSAND, &match));
+ if(match)
result->variable_type_flags |= VARIABLE_TYPE_FLAG_BORROW;
- }
throw_if_error(tokenizer_consume_if(&self->tokenizer, TOK_IDENTIFIER, &match));
if(match) {
@@ -329,7 +324,7 @@ void parser_parse_var_type_def(Parser *self, VariableType *result) {
if(result->type == VARIABLE_TYPE_NONE) {
self->error = tokenizer_create_error(&self->tokenizer,
tokenizer_get_error_index(&self->tokenizer),
- "Expected type or closure signature");
+ "Expected '?', '&', type or closure signature");
throw(PARSER_UNEXPECTED_TOKEN);
}
}