core_log
This commit is contained in:
@@ -84,7 +84,7 @@ ast_t *parse_lit_expr(parser_t *par) {
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
return result;
|
||||
} else {
|
||||
lex_panicf(token, "got invalid token of kind: %S while parsing expression", lex_kind_to_s8(token->kind));
|
||||
parser_panicf(token, "got invalid token of kind: %S while parsing expression", lex_kind_to_s8(token->kind));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -130,7 +130,7 @@ ast_t *parse_expr(parser_t *par) {
|
||||
return expr;
|
||||
}
|
||||
|
||||
ast_t *parse_expr_str(ma_arena_t *arena, char *file_name, char *stream) {
|
||||
ast_t *parse_expr_str(ma_arena_t *arena, char *file_name, s8_t stream) {
|
||||
lex_array_t tokens = lex_tokens(arena, file_name, stream);
|
||||
parser_t *par = parser_make(arena, tokens.data);
|
||||
ast_t *result = parse_expr(par);
|
||||
@@ -153,18 +153,18 @@ i64 eval_const_expr(ast_t *expr) {
|
||||
case lex_kind_modulo: return left % right;
|
||||
case lex_kind_and: return left && right;
|
||||
case lex_kind_or: return left || right;
|
||||
default: lex_panicf(expr->pos, "unhandled binary operator: %S", lex_kind_to_s8(expr->integer));
|
||||
default: parser_panicf(expr->pos, "unhandled binary operator: %S", lex_kind_to_s8(expr->integer));
|
||||
}
|
||||
} else {
|
||||
ma_temp_t scratch = ma_begin_scratch();
|
||||
lex_panicf(expr->pos, "unhandled ast in const expression evaluation: %S", s8_serial_ast_flag_t(scratch.arena, expr->flags));
|
||||
parser_panicf(expr->pos, "unhandled ast in const expression evaluation: %S", s8_serial_ast_flag_t(scratch.arena, expr->flags));
|
||||
ma_end_scratch(scratch);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define test_expr(x) do {\
|
||||
lex_array_t tokens = lex_tokens(scratch.arena, "parser_test", #x);\
|
||||
lex_array_t tokens = lex_tokens(scratch.arena, "parser_test", s8_lit(#x));\
|
||||
parser_t *par = parser_make(scratch.arena, tokens.data);\
|
||||
ast_t *expr = parse_expr(par);\
|
||||
assert(expr != NULL);\
|
||||
@@ -194,7 +194,7 @@ ast_t *parse_struct_mem(parser_t *par, s8_t *name) {
|
||||
while (parser_match(par, lex_kind_multiply)) {
|
||||
ast_t *pointer = create_ast(par, par->at, set_bit(ast_flag_type_pointer) | set_bit(ast_flag_string));
|
||||
ast_append(pointer, type);
|
||||
pointer->string = s8_fmt(par->arena, "%S*", type->string);
|
||||
pointer->string = s8_printf(par->arena, "%S*", type->string);
|
||||
type = pointer;
|
||||
}
|
||||
|
||||
@@ -207,9 +207,9 @@ ast_t *parse_struct_mem(parser_t *par, s8_t *name) {
|
||||
if (num) {
|
||||
array->flags |= set_bit(ast_flag_integer);
|
||||
array->integer = (int)num->integer;
|
||||
array->string = s8_fmt(par->arena, "%S[%d]", type->string, (int)array->integer);
|
||||
array->string = s8_printf(par->arena, "%S[%d]", type->string, (int)array->integer);
|
||||
} else {
|
||||
array->string = s8_fmt(par->arena, "%S[]", type->string);
|
||||
array->string = s8_printf(par->arena, "%S[]", type->string);
|
||||
}
|
||||
parser_expect(par, lex_kind_close_bracket);
|
||||
type = array;
|
||||
@@ -218,7 +218,7 @@ ast_t *parse_struct_mem(parser_t *par, s8_t *name) {
|
||||
return type;
|
||||
}
|
||||
|
||||
ast_t *parse_decls(ma_arena_t *arena, char *file, char *code) {
|
||||
ast_t *parse_decls(ma_arena_t *arena, char *file, s8_t code) {
|
||||
lex_array_t tokens = lex_tokens(arena, file, code);
|
||||
parser_t *par = parser_make(arena, tokens.data);
|
||||
ast_t *result = create_ast(par, par->at, set_bit(ast_flag_string));
|
||||
@@ -271,7 +271,7 @@ ast_t *parse_decls(ma_arena_t *arena, char *file, char *code) {
|
||||
return result;
|
||||
}
|
||||
|
||||
ast_t *parse_table(ma_arena_t *arena, char *file, char *code) {
|
||||
ast_t *parse_table(ma_arena_t *arena, char *file, s8_t code) {
|
||||
lex_array_t tokens = lex_tokens(arena, file, code);
|
||||
parser_t *par = parser_make(arena, tokens.data);
|
||||
ast_t *table = create_ast(par, par->at, 0);
|
||||
@@ -299,7 +299,7 @@ ast_t *parse_table(ma_arena_t *arena, char *file, char *code) {
|
||||
} else if (parser_match(par, lex_kind_bit_or) || parser_match(par, lex_kind_eof)) {
|
||||
break;
|
||||
} else {
|
||||
lex_panicf(par->at, "invalid token: %S", lex_kind_to_s8(par->at->kind));
|
||||
parser_panicf(par->at, "invalid token: %S", lex_kind_to_s8(par->at->kind));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,12 @@ s8_t s8_ast_to_cvar(ma_arena_t *arena, ast_t *ast, s8_t *name) {
|
||||
return ast->string;
|
||||
} else if (ast->flags & set_bit(ast_flag_type_pointer)) {
|
||||
s8_t base = s8_ast_to_cvar(arena, ast->first, name);
|
||||
return s8_fmt(arena, "%S*", base);
|
||||
return s8_printf(arena, "%S*", base);
|
||||
} else if (ast->flags & set_bit(ast_flag_type_array)) {
|
||||
if (ast->flags & set_bit(ast_flag_integer)) {
|
||||
*name = s8_fmt(arena, "%S[%d]", *name, ast->integer);
|
||||
*name = s8_printf(arena, "%S[%d]", *name, ast->integer);
|
||||
} else {
|
||||
*name = s8_fmt(arena, "%S[%d]", *name, ast->integer);
|
||||
*name = s8_printf(arena, "%S[%d]", *name, ast->integer);
|
||||
}
|
||||
|
||||
s8_t base = s8_ast_to_cvar(arena, ast->first, name);
|
||||
@@ -86,15 +86,15 @@ s8_t s8_serial_ast_to_code(ma_arena_t *arena, ast_t *n) {
|
||||
|
||||
s8_t s8_serial_ast_type_to_type_info(ma_arena_t *arena, ast_t *n) {
|
||||
if (n->flags & set_bit(ast_flag_type_name)) {
|
||||
return s8_fmt(arena, "type__%S", n->string);
|
||||
return s8_printf(arena, "type__%S", n->string);
|
||||
} else if (n->flags & set_bit(ast_flag_type_pointer)) {
|
||||
s8_t base = s8_serial_ast_type_to_type_info(arena, n->first);
|
||||
return s8_fmt(arena, "(type_t){type_kind_pointer, s8_const_lit(\"%S\"), sizeof(void *), .base = &%S}", n->string, base);
|
||||
return s8_printf(arena, "(type_t){type_kind_pointer, s8_const_lit(\"%S\"), sizeof(void *), .base = &%S}", n->string, base);
|
||||
} else if (n->flags & set_bit(ast_flag_type_array)) {
|
||||
s8_t base = s8_serial_ast_type_to_type_info(arena, n->first);
|
||||
return s8_fmt(arena, "(type_t){type_kind_array, s8_const_lit(\"%S\"), sizeof(%S), %d, .base = &%S}", n->string, n->string, (int)n->integer, base);
|
||||
return s8_printf(arena, "(type_t){type_kind_array, s8_const_lit(\"%S\"), sizeof(%S), %d, .base = &%S}", n->string, n->string, (int)n->integer, base);
|
||||
} else {
|
||||
lex_panicf(n->pos, "expected type");
|
||||
parser_panicf(n->pos, "expected type");
|
||||
}
|
||||
return (s8_t){0};
|
||||
}
|
||||
@@ -182,7 +182,7 @@ void sb8_serial_table_enum(sb8_t *c, sb8_t *h, ast_t *table, s8_t decl) {
|
||||
int name_idx = row_findi(table->first, "name");
|
||||
int value_idx = row_findi(table->first, "value");
|
||||
|
||||
s8_t name_t = s8_fmt(c->arena, "%S_t", decl);
|
||||
s8_t name_t = s8_printf(c->arena, "%S_t", decl);
|
||||
|
||||
sb8_printf(h, "typedef enum {\n");
|
||||
for (ast_t *row = table->first->next; row; row = row->next) {
|
||||
@@ -219,6 +219,6 @@ void sb8_serial_table_enum(sb8_t *c, sb8_t *h, ast_t *table, s8_t decl) {
|
||||
#define gen_h(arena) _gen_filename(arena, s8_lit(__FILE__), s8_lit("h"))
|
||||
s8_t _gen_filename(ma_arena_t *arena, s8_t lit_file, s8_t ext) {
|
||||
s8_t file_noext = s8_chop_last_period(s8_chop_last_period(lit_file));
|
||||
s8_t file = s8_fmt(arena, "%S.gen.%S", file_noext, ext);
|
||||
s8_t file = s8_printf(arena, "%S.gen.%S", file_noext, ext);
|
||||
return file;
|
||||
}
|
||||
Reference in New Issue
Block a user