aboutsummaryrefslogtreecommitdiff
path: root/src/checker.c
diff options
context:
space:
mode:
authorZachary Pierson <zacpiersonhehe@gmail.com>2017-04-02 03:29:51 -0500
committerZachary Pierson <zacpiersonhehe@gmail.com>2017-04-02 03:29:51 -0500
commitce0d874efd3bdd2cbfd24ca5b10c9326774c1530 (patch)
tree9f3b6ce4c83a7c7e45506b17cd36363c06f978e7 /src/checker.c
parent24b33374b7830fae01be1915adb14b4e45ff9550 (diff)
parent2c8b99337bb33d0f713026c5c38e05428cc52143 (diff)
Merge https://github.com/gingerBill/Odin
Diffstat (limited to 'src/checker.c')
-rw-r--r--src/checker.c74
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);