aboutsummaryrefslogtreecommitdiff
path: root/core/math/big
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-08-08 12:10:01 +0100
committergingerBill <gingerBill@users.noreply.github.com>2025-08-08 12:10:01 +0100
commit7642e0a0e0bb0ff79da6ac7a2ba3b787afa32b78 (patch)
treeaec4baaf441f58b3c6c9a8a55c61e5f8c6218f4b /core/math/big
parent3194fda8f3b01affc086eec4102d924277fe9f43 (diff)
Require `@(init)` and `@(fini)` to be `proc "contextless" ()`
Diffstat (limited to 'core/math/big')
-rw-r--r--core/math/big/helpers.odin18
-rw-r--r--core/math/big/internal.odin9
2 files changed, 15 insertions, 12 deletions
diff --git a/core/math/big/helpers.odin b/core/math/big/helpers.odin
index ee09bb2c7..569f0b810 100644
--- a/core/math/big/helpers.odin
+++ b/core/math/big/helpers.odin
@@ -7,6 +7,7 @@
package math_big
import "base:intrinsics"
+import "base:runtime"
import rnd "core:math/rand"
/*
@@ -778,22 +779,23 @@ int_from_bytes_little_python :: proc(a: ^Int, buf: []u8, signed := false, alloca
INT_ONE, INT_ZERO, INT_MINUS_ONE, INT_INF, INT_MINUS_INF, INT_NAN := &Int{}, &Int{}, &Int{}, &Int{}, &Int{}, &Int{}
@(init, private)
-_init_constants :: proc() {
+_init_constants :: proc "contextless" () {
initialize_constants()
}
-initialize_constants :: proc() -> (res: int) {
- internal_set( INT_ZERO, 0); INT_ZERO.flags = {.Immutable}
- internal_set( INT_ONE, 1); INT_ONE.flags = {.Immutable}
- internal_set(INT_MINUS_ONE, -1); INT_MINUS_ONE.flags = {.Immutable}
+initialize_constants :: proc "contextless" () -> (res: int) {
+ context = runtime.default_context()
+ internal_int_set_from_integer( INT_ZERO, 0); INT_ZERO.flags = {.Immutable}
+ internal_int_set_from_integer( INT_ONE, 1); INT_ONE.flags = {.Immutable}
+ internal_int_set_from_integer(INT_MINUS_ONE, -1); INT_MINUS_ONE.flags = {.Immutable}
/*
We set these special values to -1 or 1 so they don't get mistake for zero accidentally.
This allows for shortcut tests of is_zero as .used == 0.
*/
- internal_set( INT_NAN, 1); INT_NAN.flags = {.Immutable, .NaN}
- internal_set( INT_INF, 1); INT_INF.flags = {.Immutable, .Inf}
- internal_set(INT_MINUS_INF, -1); INT_MINUS_INF.flags = {.Immutable, .Inf}
+ internal_int_set_from_integer( INT_NAN, 1); INT_NAN.flags = {.Immutable, .NaN}
+ internal_int_set_from_integer( INT_INF, 1); INT_INF.flags = {.Immutable, .Inf}
+ internal_int_set_from_integer(INT_MINUS_INF, -1); INT_MINUS_INF.flags = {.Immutable, .Inf}
return _DEFAULT_MUL_KARATSUBA_CUTOFF
}
diff --git a/core/math/big/internal.odin b/core/math/big/internal.odin
index 4707177c4..8b176e7c0 100644
--- a/core/math/big/internal.odin
+++ b/core/math/big/internal.odin
@@ -27,10 +27,11 @@
package math_big
-import "core:mem"
+import "base:builtin"
import "base:intrinsics"
+import "base:runtime"
+import "core:mem"
import rnd "core:math/rand"
-import "base:builtin"
/*
Low-level addition, unsigned. Handbook of Applied Cryptography, algorithm 14.7.
@@ -2885,12 +2886,12 @@ internal_clear_if_uninitialized_multi :: proc(args: ..^Int, allocator := context
}
internal_clear_if_uninitialized :: proc {internal_clear_if_uninitialized_single, internal_clear_if_uninitialized_multi, }
-internal_error_if_immutable_single :: proc(arg: ^Int) -> (err: Error) {
+internal_error_if_immutable_single :: proc "contextless" (arg: ^Int) -> (err: Error) {
if arg != nil && .Immutable in arg.flags { return .Assignment_To_Immutable }
return nil
}
-internal_error_if_immutable_multi :: proc(args: ..^Int) -> (err: Error) {
+internal_error_if_immutable_multi :: proc "contextless" (args: ..^Int) -> (err: Error) {
for i in args {
if i != nil && .Immutable in i.flags { return .Assignment_To_Immutable }
}