aboutsummaryrefslogtreecommitdiff
path: root/src/parse/functions.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-08-25 12:12:02 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-08-25 12:12:02 -0400
commit55479cbf9e4a8f36afe41d84df687f05fc7661f0 (patch)
tree0bb00769f319716b75f5e0a3b0e73934de89aa88 /src/parse/functions.c
parentc3bcb504a07823ec8a096d34d0f4fe8dc5b27196 (diff)
Initial work to pass metadata for code
Diffstat (limited to 'src/parse/functions.c')
-rw-r--r--src/parse/functions.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/parse/functions.c b/src/parse/functions.c
index 0779bb7b..e820182b 100644
--- a/src/parse/functions.c
+++ b/src/parse/functions.c
@@ -13,8 +13,8 @@
#include "context.h"
#include "controlflow.h"
#include "errors.h"
-#include "functions.h"
#include "expressions.h"
+#include "functions.h"
#include "types.h"
#include "utils.h"
@@ -32,15 +32,15 @@ arg_ast_t *parse_args(parse_ctx_t *ctx, const char **pos) {
name_list_t *names = NULL;
for (;;) {
- whitespace(pos);
+ whitespace(ctx, pos);
const char *name = get_id(pos);
if (!name) break;
- whitespace(pos);
+ whitespace(ctx, pos);
if (match(pos, ":")) {
type = expect(ctx, *pos - 1, pos, parse_type, "I expected a type here");
names = new (name_list_t, .name = name, .next = names);
- whitespace(pos);
+ whitespace(ctx, pos);
if (match(pos, "="))
default_val = expect(ctx, *pos - 1, pos, parse_term, "I expected a value after this '='");
break;
@@ -66,7 +66,7 @@ arg_ast_t *parse_args(parse_ctx_t *ctx, const char **pos) {
for (; names; names = names->next)
args = new (arg_ast_t, .name = names->name, .type = type, .value = default_val, .next = args);
- if (!match_separator(pos)) break;
+ if (!match_separator(ctx, pos)) break;
}
REVERSE_LIST(args);
@@ -87,19 +87,19 @@ ast_t *parse_func_def(parse_ctx_t *ctx, const char *pos) {
arg_ast_t *args = parse_args(ctx, &pos);
spaces(&pos);
type_ast_t *ret_type = match(&pos, "->") ? optional(ctx, &pos, parse_type) : NULL;
- whitespace(&pos);
+ whitespace(ctx, &pos);
bool is_inline = false;
ast_t *cache_ast = NULL;
- for (bool specials = match(&pos, ";"); specials; specials = match_separator(&pos)) {
+ for (bool specials = match(&pos, ";"); specials; specials = match_separator(ctx, &pos)) {
const char *flag_start = pos;
if (match_word(&pos, "inline")) {
is_inline = true;
} else if (match_word(&pos, "cached")) {
if (!cache_ast) cache_ast = NewAST(ctx->file, pos, pos, Int, .str = "-1");
} else if (match_word(&pos, "cache_size")) {
- whitespace(&pos);
+ whitespace(ctx, &pos);
if (!match(&pos, "=")) parser_err(ctx, flag_start, pos, "I expected a value for 'cache_size'");
- whitespace(&pos);
+ whitespace(ctx, &pos);
cache_ast = expect(ctx, start, &pos, parse_expr, "I expected a maximum size for the cache");
}
}
@@ -121,19 +121,19 @@ ast_t *parse_convert_def(parse_ctx_t *ctx, const char *pos) {
arg_ast_t *args = parse_args(ctx, &pos);
spaces(&pos);
type_ast_t *ret_type = match(&pos, "->") ? optional(ctx, &pos, parse_type) : NULL;
- whitespace(&pos);
+ whitespace(ctx, &pos);
bool is_inline = false;
ast_t *cache_ast = NULL;
- for (bool specials = match(&pos, ";"); specials; specials = match_separator(&pos)) {
+ for (bool specials = match(&pos, ";"); specials; specials = match_separator(ctx, &pos)) {
const char *flag_start = pos;
if (match_word(&pos, "inline")) {
is_inline = true;
} else if (match_word(&pos, "cached")) {
if (!cache_ast) cache_ast = NewAST(ctx->file, pos, pos, Int, .str = "-1");
} else if (match_word(&pos, "cache_size")) {
- whitespace(&pos);
+ whitespace(ctx, &pos);
if (!match(&pos, "=")) parser_err(ctx, flag_start, pos, "I expected a value for 'cache_size'");
- whitespace(&pos);
+ whitespace(ctx, &pos);
cache_ast = expect(ctx, start, &pos, parse_expr, "I expected a maximum size for the cache");
}
}