aboutsummaryrefslogtreecommitdiff
path: root/src/compiler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler.c')
-rw-r--r--src/compiler.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/compiler.c b/src/compiler.c
index 4d43329..5b48aaf 100644
--- a/src/compiler.c
+++ b/src/compiler.c
@@ -82,6 +82,7 @@ static CHECK_RESULT int init_default_types(amal_compiler *compiler) {
return_if_error(create_default_type_fixed_size(compiler, "c_int", sizeof(int), &compiler->default_types.c_int));
return_if_error(create_default_type_fixed_size(compiler, "c_long", sizeof(long), &compiler->default_types.c_long));
return_if_error(create_default_type_num_pointers(compiler, "c_void", 0, &compiler->default_types.c_void));
+ return_if_error(create_default_type_num_pointers(compiler, "...", 0, &compiler->default_types.c_varargs));
compiler->default_types.arithmetic_types[0] = compiler->default_types.i8;
compiler->default_types.arithmetic_types[1] = compiler->default_types.u8;
@@ -94,6 +95,11 @@ static CHECK_RESULT int init_default_types(amal_compiler *compiler) {
compiler->default_types.arithmetic_types[8] = compiler->default_types.isize;
compiler->default_types.arithmetic_types[9] = compiler->default_types.usize;
+ compiler->default_types.arithmetic_types[10] = compiler->default_types.c_char;
+ compiler->default_types.arithmetic_types[11] = compiler->default_types.c_short;
+ compiler->default_types.arithmetic_types[12] = compiler->default_types.c_int;
+ compiler->default_types.arithmetic_types[13] = compiler->default_types.c_long;
+
compiler->default_types.i8->is_signed = bool_true;
compiler->default_types.u8->is_signed = bool_false;
compiler->default_types.i16->is_signed = bool_true;
@@ -106,7 +112,15 @@ static CHECK_RESULT int init_default_types(amal_compiler *compiler) {
compiler->default_types.usize->is_signed = bool_false;
compiler->default_types.f32->is_signed = bool_true;
compiler->default_types.f64->is_signed = bool_true;
+ compiler->default_types.bool->is_signed = bool_false;
compiler->default_types.str->is_signed = bool_false;
+
+ compiler->default_types.c_char->is_signed = bool_true;
+ compiler->default_types.c_short->is_signed = bool_true;
+ compiler->default_types.c_int->is_signed = bool_true;
+ compiler->default_types.c_long->is_signed = bool_true;
+ compiler->default_types.c_void->is_signed = bool_false;
+ compiler->default_types.c_varargs->is_signed = bool_false;
return 0;
}
@@ -199,8 +213,10 @@ static CHECK_RESULT int amal_compiler_load_in_this_thread(amal_compiler *compile
parser_allocator = NULL;
result = AMAL_COMPILER_ERR;
- return_if_error(arena_allocator_alloc(&compiler->allocator, sizeof(ArenaAllocator), (void**)&parser_allocator));
+ cleanup_if_error(amal_mutex_lock(&compiler->mutex, "amal_compiler_load_in_this_thread, create allocator for parser"));
+ cleanup_if_error(arena_allocator_alloc(&compiler->allocator, sizeof(ArenaAllocator), (void**)&parser_allocator));
cleanup_if_error(arena_allocator_init(parser_allocator));
+ amal_mutex_tryunlock(&compiler->mutex);
filepath = create_buffer_view(file_scope->canonical_path.data, file_scope->canonical_path.size);
amal_log_info("Started parsing %.*s", filepath.size, filepath.data);