diff options
| author | Zachary Pierson <zacpiersonhehe@gmail.com> | 2017-04-02 03:29:51 -0500 |
|---|---|---|
| committer | Zachary Pierson <zacpiersonhehe@gmail.com> | 2017-04-02 03:29:51 -0500 |
| commit | ce0d874efd3bdd2cbfd24ca5b10c9326774c1530 (patch) | |
| tree | 9f3b6ce4c83a7c7e45506b17cd36363c06f978e7 /src/checker.c | |
| parent | 24b33374b7830fae01be1915adb14b4e45ff9550 (diff) | |
| parent | 2c8b99337bb33d0f713026c5c38e05428cc52143 (diff) | |
Merge https://github.com/gingerBill/Odin
Diffstat (limited to 'src/checker.c')
| -rw-r--r-- | src/checker.c | 74 |
1 files changed, 56 insertions, 18 deletions
diff --git a/src/checker.c b/src/checker.c index e942916df..3a458d099 100644 --- a/src/checker.c +++ b/src/checker.c @@ -52,6 +52,14 @@ typedef enum BuiltinProcId { BuiltinProc_swizzle, + BuiltinProc_complex, + BuiltinProc_quaternion, + BuiltinProc_real, + BuiltinProc_imag, + BuiltinProc_jmag, + BuiltinProc_kmag, + BuiltinProc_conj, + // BuiltinProc_ptr_offset, // BuiltinProc_ptr_sub, BuiltinProc_slice_ptr, @@ -87,8 +95,8 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_Count] = { {STR_LIT("type_info"), 1, false, Expr_Expr}, {STR_LIT("type_info_of_val"), 1, false, Expr_Expr}, - {STR_LIT("compile_assert"), 1, false, Expr_Stmt}, - {STR_LIT("assert"), 1, false, Expr_Stmt}, + {STR_LIT("compile_assert"), 1, false, Expr_Expr}, + {STR_LIT("assert"), 1, false, Expr_Expr}, {STR_LIT("panic"), 1, false, Expr_Stmt}, {STR_LIT("copy"), 2, false, Expr_Expr}, @@ -96,6 +104,14 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_Count] = { {STR_LIT("swizzle"), 1, true, Expr_Expr}, + {STR_LIT("complex"), 2, false, Expr_Expr}, + {STR_LIT("quaternion"), 4, false, Expr_Expr}, + {STR_LIT("real"), 1, false, Expr_Expr}, + {STR_LIT("imag"), 1, false, Expr_Expr}, + {STR_LIT("jmag"), 1, false, Expr_Expr}, + {STR_LIT("kmag"), 1, false, Expr_Expr}, + {STR_LIT("conj"), 1, false, Expr_Expr}, + // {STR_LIT("ptr_offset"), 2, false, Expr_Expr}, // {STR_LIT("ptr_sub"), 2, false, Expr_Expr}, {STR_LIT("slice_ptr"), 2, true, Expr_Expr}, @@ -940,6 +956,24 @@ void add_type_info_type(Checker *c, Type *t) { add_type_info_type(c, t_type_info_ptr); add_type_info_type(c, t_rawptr); break; + + case Basic_complex64: + add_type_info_type(c, t_type_info_float); + add_type_info_type(c, t_f32); + break; + case Basic_complex128: + add_type_info_type(c, t_type_info_float); + add_type_info_type(c, t_f64); + break; + + case Basic_quaternion128: + add_type_info_type(c, t_type_info_float); + add_type_info_type(c, t_f32); + break; + case Basic_quaternion256: + add_type_info_type(c, t_type_info_float); + add_type_info_type(c, t_f64); + break; } } break; @@ -1128,31 +1162,35 @@ void init_preload(Checker *c) { - if (record->variant_count != 19) { + if (record->variant_count != 21) { compiler_error("Invalid `Type_Info` layout"); } t_type_info_named = record->variants[ 1]->type; t_type_info_integer = record->variants[ 2]->type; t_type_info_float = record->variants[ 3]->type; - t_type_info_string = record->variants[ 4]->type; - t_type_info_boolean = record->variants[ 5]->type; - t_type_info_any = record->variants[ 6]->type; - t_type_info_pointer = record->variants[ 7]->type; - t_type_info_procedure = record->variants[ 8]->type; - t_type_info_array = record->variants[ 9]->type; - t_type_info_dynamic_array = record->variants[10]->type; - t_type_info_slice = record->variants[11]->type; - t_type_info_vector = record->variants[12]->type; - t_type_info_tuple = record->variants[13]->type; - t_type_info_struct = record->variants[14]->type; - t_type_info_raw_union = record->variants[15]->type; - t_type_info_union = record->variants[16]->type; - t_type_info_enum = record->variants[17]->type; - t_type_info_map = record->variants[18]->type; + t_type_info_complex = record->variants[ 4]->type; + t_type_info_quaternion = record->variants[ 5]->type; + t_type_info_string = record->variants[ 6]->type; + t_type_info_boolean = record->variants[ 7]->type; + t_type_info_any = record->variants[ 8]->type; + t_type_info_pointer = record->variants[ 9]->type; + t_type_info_procedure = record->variants[10]->type; + t_type_info_array = record->variants[11]->type; + t_type_info_dynamic_array = record->variants[12]->type; + t_type_info_slice = record->variants[13]->type; + t_type_info_vector = record->variants[14]->type; + t_type_info_tuple = record->variants[15]->type; + t_type_info_struct = record->variants[16]->type; + t_type_info_raw_union = record->variants[17]->type; + t_type_info_union = record->variants[18]->type; + t_type_info_enum = record->variants[19]->type; + t_type_info_map = record->variants[20]->type; t_type_info_named_ptr = make_type_pointer(c->allocator, t_type_info_named); t_type_info_integer_ptr = make_type_pointer(c->allocator, t_type_info_integer); t_type_info_float_ptr = make_type_pointer(c->allocator, t_type_info_float); + t_type_info_complex_ptr = make_type_pointer(c->allocator, t_type_info_complex); + t_type_info_quaternion_ptr = make_type_pointer(c->allocator, t_type_info_quaternion); t_type_info_string_ptr = make_type_pointer(c->allocator, t_type_info_string); t_type_info_boolean_ptr = make_type_pointer(c->allocator, t_type_info_boolean); t_type_info_any_ptr = make_type_pointer(c->allocator, t_type_info_any); |