aboutsummaryrefslogtreecommitdiff
path: root/unused.jai
diff options
context:
space:
mode:
Diffstat (limited to 'unused.jai')
-rw-r--r--unused.jai50
1 files changed, 50 insertions, 0 deletions
diff --git a/unused.jai b/unused.jai
new file mode 100644
index 0000000..3529a46
--- /dev/null
+++ b/unused.jai
@@ -0,0 +1,50 @@
+checked_add :: (a: $T, b: T) -> result: T, overflow: bool
+#modify {
+ if T.type == .INTEGER return;
+ T = null;
+}
+{
+ overflow: bool;
+ result: T = a + b;
+
+ info := type_info(T);
+ if info.signed {
+ // (+A) + (+B) = −C
+ // (−A) + (−B) = +C
+ if ((a > 0) && (b > 0) && (result < 0)) || ((a < 0) && (b < 0) && (result > 0)) {
+ overflow = true;
+ }
+ } else {
+ if result < a {
+ overflow = true;
+ }
+ }
+
+ return result, overflow;
+}
+
+checked_sub :: (a: $T, b: T) -> result: T, overflow: bool
+#modify {
+ if T.type == .INTEGER return;
+ T = null;
+}
+{
+ overflow: bool;
+ result: T = a - b;
+
+ info := type_info(T);
+ if info.signed {
+ // (+A) − (−B) = −C
+ // (−A) − (+B) = +C
+ if ((a > 0) && (b < 0) && (result < 0)) || ((a < 0) && (b > 0) && (result > 0)) {
+ overflow = true;
+ }
+ } else {
+ if result > a {
+ overflow = true;
+ }
+ }
+
+ return result, overflow;
+}
+