From c811a743a1528db1d05970e1aa14162ef7c70b75 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 21 Sep 2019 13:59:39 +0200 Subject: Implement vararg, verify arguments to parameters --- src/compiler.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/compiler.c') 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); -- cgit v1.2.3