Change name Scratch_Scope to Scoped_Arena

This commit is contained in:
Krzosa Karol
2023-03-31 17:39:00 +02:00
parent 277404fe95
commit b2e8012afa
12 changed files with 33 additions and 32 deletions

View File

@@ -130,12 +130,12 @@ arena_from_buffer(void *buffer, size_t size) {
return result; return result;
} }
struct Scratch_Scope { struct Scoped_Arena {
Arena *arena; Arena *arena;
int pos; int pos;
Scratch_Scope(Arena *arena) { Scoped_Arena(Arena *arena) {
this->arena = arena; this->arena = arena;
this->pos = arena->len; this->pos = arena->len;
} }
~Scratch_Scope() { this->arena->len = this->pos; } ~Scoped_Arena() { this->arena->len = this->pos; }
}; };

View File

@@ -459,7 +459,7 @@ struct String_Replace {
CORE_Static String CORE_Static String
string_replace(Arena *scratch, Allocator *allocator, String string, Array<String_Replace> pairs) { string_replace(Arena *scratch, Allocator *allocator, String string, Array<String_Replace> pairs) {
Scratch_Scope _scope(scratch); Scoped_Arena _scope(scratch);
String_Builder builder = {scratch}; String_Builder builder = {scratch};
for (S64 i = 0; i < string.len; i++) { for (S64 i = 0; i < string.len; i++) {
For(pairs) { For(pairs) {

View File

@@ -219,7 +219,7 @@ gen_value(Token *pos, Value a) {
switch (type->kind) { switch (type->kind) {
CASE_INT : { CASE_INT : {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
String postfix = get_type_postfix(type); String postfix = get_type_postfix(type);
const char *string = bigint_to_error_string(scratch.arena, &a.big_int_val, 10); const char *string = bigint_to_error_string(scratch.arena, &a.big_int_val, 10);
gen("%s%Q", string, postfix); gen("%s%Q", string, postfix);
@@ -560,7 +560,7 @@ gen_ast(Ast *ast) {
CASE(RETURN, Return) { CASE(RETURN, Return) {
if (is_tuple(node->resolved_type)) { if (is_tuple(node->resolved_type)) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Intern_String tuple_name = get_unique_name(node); Intern_String tuple_name = get_unique_name(node);
gen_simple_decl(node->resolved_type, tuple_name); gen_simple_decl(node->resolved_type, tuple_name);
@@ -799,7 +799,7 @@ gen_ast(Ast *ast) {
For(node->vars) For(node->vars)
gen_ast(it); gen_ast(it);
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Intern_String var_name = get_unique_name(node); Intern_String var_name = get_unique_name(node);
gen_simple_decl(node->resolved_type, var_name); gen_simple_decl(node->resolved_type, var_name);
@@ -1034,7 +1034,7 @@ compile_to_c_code() {
// Generate slice and tuple types // Generate slice and tuple types
For_Named(pctx->all_types, type) { For_Named(pctx->all_types, type) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
if (type->kind == TYPE_SLICE) { if (type->kind == TYPE_SLICE) {
genln("typedef struct Slice%llu{", type->type_id); genln("typedef struct Slice%llu{", type->type_id);

View File

@@ -211,7 +211,7 @@ parse_all_modules() {
CORE_Static Ast_Module * CORE_Static Ast_Module *
add_module(Token *pos, Intern_String filename, B32 command_line_module, bool string_only_module) { add_module(Token *pos, Intern_String filename, B32 command_line_module, bool string_only_module) {
Arena *scratch = pctx->scratch; Arena *scratch = pctx->scratch;
Scratch_Scope _scope(scratch); Scoped_Arena _scope(scratch);
String absolute_file_path = {}; String absolute_file_path = {};
String absolute_base_folder = {}; String absolute_base_folder = {};

View File

@@ -80,7 +80,7 @@ token_error(Token *t, String error_val) {
CORE_Static void CORE_Static void
lex_parse_u64(Core_Ctx *lexer, Token *t, S64 base) { lex_parse_u64(Core_Ctx *lexer, Token *t, S64 base) {
Scratch_Scope _scope(lexer->scratch); Scoped_Arena _scope(lexer->scratch);
Set_BigInt_Arena(lexer->scratch); Set_BigInt_Arena(lexer->scratch);
t->kind = TK_Integer; t->kind = TK_Integer;
@@ -692,7 +692,7 @@ lex_restream(Core_Ctx *lexer, String istream, String file) {
lexer->stream.line_begin = istream.str; lexer->stream.line_begin = istream.str;
lexer->stream.file = lexer->intern(file); lexer->stream.file = lexer->intern(file);
Scratch_Scope _scope(lexer->scratch); Scoped_Arena _scope(lexer->scratch);
lexer->stream.indent_stack.allocator = lexer->scratch; lexer->stream.indent_stack.allocator = lexer->scratch;
lexer->stream.indent_stack.add(&lexer->same_scope_token); lexer->stream.indent_stack.add(&lexer->same_scope_token);
lex__stream(lexer); lex__stream(lexer);

View File

@@ -109,7 +109,7 @@ static void compile_file(Allocator *allocator, String filename, U32 compile_flag
printf("%f - ", total_compiler_time); printf("%f - ", total_compiler_time);
Arena *scratch = pctx->scratch; Arena *scratch = pctx->scratch;
Scratch_Scope _scope(scratch); Scoped_Arena _scope(scratch);
F64 begin = os_time(); F64 begin = os_time();
String_Builder builder = {scratch}; String_Builder builder = {scratch};
@@ -175,7 +175,7 @@ int main(int argument_count, char **arguments) {
For(args) { For(args) {
if (it == "-testing"_s) { if (it == "-testing"_s) {
Scratch_Scope _scope(&scratch); Scoped_Arena _scope(&scratch);
Array<OS_File_Info> examples = os_list_dir(&scratch, &scratch, "examples"_s); Array<OS_File_Info> examples = os_list_dir(&scratch, &scratch, "examples"_s);
Array<OS_File_Info> tests = os_list_dir(&scratch, &scratch, "tests"_s); Array<OS_File_Info> tests = os_list_dir(&scratch, &scratch, "tests"_s);
For(examples) { For(examples) {

View File

@@ -225,7 +225,7 @@ parse_init_stmt(Ast_Expr *expr) {
CORE_Static Ast_Call * CORE_Static Ast_Call *
parse_expr_call(Ast_Expr *left, Token_Kind close_kind) { parse_expr_call(Ast_Expr *left, Token_Kind close_kind) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Token *pos = token_get(); Token *pos = token_get();
Array<Ast_Call_Item *> exprs = {scratch.arena}; Array<Ast_Call_Item *> exprs = {scratch.arena};
@@ -279,7 +279,7 @@ parse_stmt_scope(Ast_Scope *scope_defined_outside = 0) {
if (token_expect(OPEN_SCOPE)) { // @todo: Fix error message here, it doesn't show proper token context if (token_expect(OPEN_SCOPE)) { // @todo: Fix error message here, it doesn't show proper token context
Token *token_block = token_get(); Token *token_block = token_get();
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
if (!scope_defined_outside) scope = begin_stmt_scope(scratch.arena, token_block); if (!scope_defined_outside) scope = begin_stmt_scope(scratch.arena, token_block);
do { do {
Token *token = token_get(); Token *token = token_get();
@@ -499,7 +499,7 @@ parse_parameter_list(Arena *arena) {
CORE_Static Ast_Lambda * CORE_Static Ast_Lambda *
parse_lambda(Token *token) { parse_lambda(Token *token) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Array<Ast_Decl *> params = parse_parameter_list(scratch.arena); Array<Ast_Decl *> params = parse_parameter_list(scratch.arena);
Array<Ast_Expr *> ret = {scratch.arena}; Array<Ast_Expr *> ret = {scratch.arena};
@@ -723,7 +723,7 @@ parse_assign_expr() {
CORE_Static Ast_Decl * CORE_Static Ast_Decl *
parse_struct(Token *pos, Ast_Kind kind) { parse_struct(Token *pos, Ast_Kind kind) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Array<Ast_Decl *> params = {}; Array<Ast_Decl *> params = {};
if (token_match(TK_OpenParen)) { if (token_match(TK_OpenParen)) {
@@ -758,7 +758,7 @@ parse_struct(Token *pos, Ast_Kind kind) {
CORE_Static Ast_Decl * CORE_Static Ast_Decl *
parse_enum(Token *pos) { parse_enum(Token *pos) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Ast_Expr *typespec = parse_optional_type(); Ast_Expr *typespec = parse_optional_type();
Token *flag = token_match_pound(pctx->intern_flag); Token *flag = token_match_pound(pctx->intern_flag);
@@ -836,7 +836,7 @@ register_ast_file(Token *pos, String absolute_file_path, Ast_Module *module, B32
CORE_Static Intern_String CORE_Static Intern_String
preprocess_filename(Token *token_filename) { preprocess_filename(Token *token_filename) {
Scratch_Scope _scope(pctx->scratch); Scoped_Arena _scope(pctx->scratch);
String filename = token_filename->intern_val.s; String filename = token_filename->intern_val.s;
Array<String_Replace> replace = {pctx->scratch}; Array<String_Replace> replace = {pctx->scratch};
replace.add({"$OS"_s, OS_NAME}); replace.add({"$OS"_s, OS_NAME});
@@ -994,7 +994,7 @@ parse_decl(B32 is_global) {
CORE_Static void CORE_Static void
parse_file(Ast_File *file) { parse_file(Ast_File *file) {
assert(file); assert(file);
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
if (!file->filecontent.len) { if (!file->filecontent.len) {
file->filecontent = os_read_file(pctx->perm, file->absolute_file_path); file->filecontent = os_read_file(pctx->perm, file->absolute_file_path);

View File

@@ -40,6 +40,7 @@ void next(Ast_Iter *iter) {
Ast_Scope *node = (Ast_Scope *)ast; Ast_Scope *node = (Ast_Scope *)ast;
iter->stack.add(node); iter->stack.add(node);
For(node->stmts) iter->stack.add(it); For(node->stmts) iter->stack.add(it);
For(node->decls) iter->stack.add(it);
} break; } break;
case AST_MODULE: invalid_codepath; break; case AST_MODULE: invalid_codepath; break;

View File

@@ -114,7 +114,7 @@ CORE_Static void
check_value_bounds(Token *pos, Value *a) { check_value_bounds(Token *pos, Value *a) {
if (!is_int(a->type)) return; if (!is_int(a->type)) return;
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
if (!bigint_fits_in_bits(&a->big_int_val, a->type->size * 8, is_signed_int(a->type))) { if (!bigint_fits_in_bits(&a->big_int_val, a->type->size * 8, is_signed_int(a->type))) {
const char *string = bigint_to_error_string(scratch.arena, &a->big_int_val, 10); const char *string = bigint_to_error_string(scratch.arena, &a->big_int_val, 10);
compiler_error(pos, "Value %s doesn't fit in type %Q", string, typestring(a->type)); compiler_error(pos, "Value %s doesn't fit in type %Q", string, typestring(a->type));
@@ -518,7 +518,7 @@ make_scope_search(Allocator *arena, Ast_Scope *scope, Intern_String name) {
CORE_Static Ast_Decl * CORE_Static Ast_Decl *
search_for_single_decl(Ast_Scope *scope, Intern_String name, bool error_if_no_matches = true) { search_for_single_decl(Ast_Scope *scope, Intern_String name, bool error_if_no_matches = true) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Scope_Search search = make_scope_search(scratch.arena, scope, name); Scope_Search search = make_scope_search(scratch.arena, scope, name);
scope_search(&search); scope_search(&search);
@@ -536,7 +536,7 @@ search_for_single_decl(Ast_Scope *scope, Intern_String name, bool error_if_no_ma
CORE_Static Ast_Decl * CORE_Static Ast_Decl *
resolve_name(Ast_Scope *scope, Token *pos, Intern_String name, Search_Flag search_flags) { resolve_name(Ast_Scope *scope, Token *pos, Intern_String name, Search_Flag search_flags) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Scope_Search search = make_scope_search(scratch.arena, scope, name); Scope_Search search = make_scope_search(scratch.arena, scope, name);
search.search_only_current_scope = search_flags & SEARCH_ONLY_CURRENT_SCOPE; search.search_only_current_scope = search_flags & SEARCH_ONLY_CURRENT_SCOPE;
scope_search(&search); scope_search(&search);
@@ -569,7 +569,7 @@ resolve_operator_overload(Ast_Scope *scope, Ast_Type *left, Ast_Type *right, Tok
// Search for all possible candidates in three scopes // Search for all possible candidates in three scopes
// The current module, left type definition module, right type definition module // The current module, left type definition module, right type definition module
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Scope_Search search = make_scope_search(scratch.arena, scope, op_info->op); Scope_Search search = make_scope_search(scratch.arena, scope, op_info->op);
if (left->ast && left->ast->parent_scope) search.scopes.add(left->ast->parent_scope); if (left->ast && left->ast->parent_scope) search.scopes.add(left->ast->parent_scope);
if (right && right->ast && right->ast->parent_scope) search.scopes.add(right->ast->parent_scope); if (right && right->ast && right->ast->parent_scope) search.scopes.add(right->ast->parent_scope);
@@ -603,7 +603,7 @@ insert_into_scope(Ast_Scope *scope, Ast_Decl *decl) {
// //
// It's also called when scanning top level declarations of a module // It's also called when scanning top level declarations of a module
// as such we probably don't want to call any resolve stuff here // as such we probably don't want to call any resolve stuff here
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Scope_Search search = make_scope_search(scratch.arena, scope, decl->name); Scope_Search search = make_scope_search(scratch.arena, scope, decl->name);
search.search_only_current_scope = true; search.search_only_current_scope = true;
scope_search(&search); scope_search(&search);
@@ -739,7 +739,7 @@ resolve_stmt(Ast *ast, Ast_Type *ret) {
switch (ast->kind) { switch (ast->kind) {
CASE(RETURN, Return) { // @todo: need to check if all paths return a value CASE(RETURN, Return) { // @todo: need to check if all paths return a value
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Array<Ast_Type *> types = {scratch.arena}; Array<Ast_Type *> types = {scratch.arena};
int i = 0; int i = 0;
@@ -905,7 +905,7 @@ resolve_stmt(Ast *ast, Ast_Type *ret) {
CORE_Static Ast_Type * CORE_Static Ast_Type *
resolve_lambda_type(Ast_Lambda *lambda) { resolve_lambda_type(Ast_Lambda *lambda) {
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Array<Ast_Type *> args = {scratch.arena}; Array<Ast_Type *> args = {scratch.arena};
Array<Ast_Type *> ret = {scratch.arena}; Array<Ast_Type *> ret = {scratch.arena};
For(lambda->ret) { For(lambda->ret) {
@@ -1582,7 +1582,7 @@ resolve_expr(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_and_const_str
} }
node->resolved_decl = name.resolved_decl; node->resolved_decl = name.resolved_decl;
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
Array<Ast_Call_Item *> items = {scratch.arena}; Array<Ast_Call_Item *> items = {scratch.arena};
S64 default_iter = 0; S64 default_iter = 0;
@@ -1705,7 +1705,7 @@ resolve_decl(Ast_Decl *ast) {
try_resolving_lambda_scope(&result, lambda, node->type); try_resolving_lambda_scope(&result, lambda, node->type);
node->value = result.value; node->value = result.value;
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
node->unique_name = node->name; node->unique_name = node->name;
if (!is_flag_set(node->expr->flags, AST_FOREIGN)) { if (!is_flag_set(node->expr->flags, AST_FOREIGN)) {

View File

@@ -230,7 +230,7 @@ CORE_Static void type_complete(Ast_Type *type);
CORE_Static void CORE_Static void
type_struct_complete(Ast_Type *type, Ast_Decl *node) { type_struct_complete(Ast_Type *type, Ast_Decl *node) {
assert(node->kind == AST_STRUCT || node->kind == AST_UNION); assert(node->kind == AST_STRUCT || node->kind == AST_UNION);
Scratch_Scope scratch(pctx->scratch); Scoped_Arena scratch(pctx->scratch);
if (node->kind == AST_STRUCT) { if (node->kind == AST_STRUCT) {
// First resolve and compute sizes of struct members // First resolve and compute sizes of struct members

View File

@@ -82,7 +82,7 @@ os_get_working_dir(Allocator *allocator) {
CORE_Static Array<OS_File_Info> CORE_Static Array<OS_File_Info>
os_list_dir(Scratch_Arena *scratch, Allocator *a, String dir, U32 flags = LIST_RECURSE_INTO_DIRS) { os_list_dir(Scratch_Arena *scratch, Allocator *a, String dir, U32 flags = LIST_RECURSE_INTO_DIRS) {
Scratch_Scope _scope(scratch); Scoped_Arena _scope(scratch);
Array<String> dirs_to_read = {scratch}; Array<String> dirs_to_read = {scratch};
dirs_to_read.add(dir); dirs_to_read.add(dir);

View File

@@ -159,7 +159,7 @@ os_does_file_exist(String path) {
CORE_Static Array<OS_File_Info> CORE_Static Array<OS_File_Info>
os_list_dir(Arena *scratch, Allocator *a, String dir, U32 flags = LIST_NO_FLAGS) { os_list_dir(Arena *scratch, Allocator *a, String dir, U32 flags = LIST_NO_FLAGS) {
Scratch_Scope _scope(scratch); Scoped_Arena _scope(scratch);
Array<String> dirs_to_read = {scratch}; Array<String> dirs_to_read = {scratch};
dirs_to_read.add(dir); dirs_to_read.add(dir);