From 5c7d6fcfd08a6e99e6e493e7adc3ef51d10e2fcc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 4 Jan 2020 18:04:12 +0000 Subject: [PATCH] Improve minimum dependency for complex numbers and quaternion numbers. --- core/runtime/core.odin | 2 ++ src/check_expr.cpp | 16 ++++++++++++++++ src/checker.cpp | 10 +--------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/core/runtime/core.odin b/core/runtime/core.odin index 05f425eb3..ac623a53e 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -437,12 +437,14 @@ default_logger :: proc() -> Logger { } +@private __init_context_from_ptr :: proc "contextless" (c: ^Context, other: ^Context) { if c == nil do return; c^ = other^; __init_context(c); } +@private __init_context :: proc "contextless" (c: ^Context) { if c == nil do return; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index f0353e25b..b7318ca1d 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2668,6 +2668,22 @@ void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Type *type_hint return; } + if (op.kind == Token_Quo || op.kind == Token_QuoEq) { + Type *bt = base_type(x->type); + if (bt->kind == Type_Basic) switch (bt->Basic.kind) { + case Basic_complex64: add_package_dependency(c, "runtime", "quo_complex64"); break; + case Basic_complex128: add_package_dependency(c, "runtime", "quo_complex128"); break; + case Basic_quaternion128: add_package_dependency(c, "runtime", "quo_quaternion128"); break; + case Basic_quaternion256: add_package_dependency(c, "runtime", "quo_quaternion256"); break; + } + } else if (op.kind == Token_Mul || op.kind == Token_MulEq) { + Type *bt = base_type(x->type); + if (bt->kind == Type_Basic) switch (bt->Basic.kind) { + case Basic_quaternion128: add_package_dependency(c, "runtime", "mul_quaternion128"); break; + case Basic_quaternion256: add_package_dependency(c, "runtime", "mul_quaternion256"); break; + } + } + x->mode = Addressing_Value; } diff --git a/src/checker.cpp b/src/checker.cpp index 9db6b94e9..a7570bd95 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1665,12 +1665,10 @@ void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("mem_zero"), str_lit("__init_context"), - str_lit("default_assertion_failure_proc"), str_lit("args__"), str_lit("type_table"), str_lit("__type_info_of"), - str_lit("global_default_temp_allocator_data"), str_lit("default_temp_allocator"), str_lit("default_temp_allocator_init"), str_lit("default_temp_allocator_destroy"), @@ -1680,13 +1678,7 @@ void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("Source_Code_Location"), str_lit("Context"), - str_lit("quo_complex64"), - str_lit("quo_complex128"), - str_lit("mul_quaternion128"), - str_lit("mul_quaternion256"), - str_lit("quo_quaternion128"), - str_lit("quo_quaternion256"), - str_lit("cstring_to_string"), + str_lit("cstring_to_string"), // Is tihs needed? str_lit("umodti3"), str_lit("udivti3"),