mirror of
https://github.com/Ed94/Odin.git
synced 2026-07-15 07:31:26 -07:00
Complex numbers: complex64 complex128
This commit is contained in:
+37
-18
@@ -52,6 +52,10 @@ typedef enum BuiltinProcId {
|
||||
|
||||
BuiltinProc_swizzle,
|
||||
|
||||
BuiltinProc_complex,
|
||||
BuiltinProc_real,
|
||||
BuiltinProc_imag,
|
||||
|
||||
// BuiltinProc_ptr_offset,
|
||||
// BuiltinProc_ptr_sub,
|
||||
BuiltinProc_slice_ptr,
|
||||
@@ -87,8 +91,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 +100,10 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_Count] = {
|
||||
|
||||
{STR_LIT("swizzle"), 1, true, Expr_Expr},
|
||||
|
||||
{STR_LIT("complex"), 2, false, Expr_Expr},
|
||||
{STR_LIT("real"), 1, false, Expr_Expr},
|
||||
{STR_LIT("imag"), 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 +948,15 @@ 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;
|
||||
}
|
||||
} break;
|
||||
|
||||
@@ -1128,31 +1145,33 @@ void init_preload(Checker *c) {
|
||||
|
||||
|
||||
|
||||
if (record->variant_count != 19) {
|
||||
if (record->variant_count != 20) {
|
||||
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_string = record->variants[ 5]->type;
|
||||
t_type_info_boolean = record->variants[ 6]->type;
|
||||
t_type_info_any = record->variants[ 7]->type;
|
||||
t_type_info_pointer = record->variants[ 8]->type;
|
||||
t_type_info_procedure = record->variants[ 9]->type;
|
||||
t_type_info_array = record->variants[10]->type;
|
||||
t_type_info_dynamic_array = record->variants[11]->type;
|
||||
t_type_info_slice = record->variants[12]->type;
|
||||
t_type_info_vector = record->variants[13]->type;
|
||||
t_type_info_tuple = record->variants[14]->type;
|
||||
t_type_info_struct = record->variants[15]->type;
|
||||
t_type_info_raw_union = record->variants[16]->type;
|
||||
t_type_info_union = record->variants[17]->type;
|
||||
t_type_info_enum = record->variants[18]->type;
|
||||
t_type_info_map = record->variants[19]->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_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);
|
||||
|
||||
Reference in New Issue
Block a user