aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/ints.c
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-15 15:47:58 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-15 15:47:58 +0000
commit3ed2ca517aa5f2424f238817844d8a8eb98e64c2 (patch)
tree8dc70ba88ce76b22f2539adc932deab0c00ac0c1 /runtime/src/ints.c
parent549ec911f67484c875a09d4b5b8a9a4fc0ecc806 (diff)
Implement int ops in runtime
Diffstat (limited to 'runtime/src/ints.c')
-rw-r--r--runtime/src/ints.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/runtime/src/ints.c b/runtime/src/ints.c
new file mode 100644
index 00000000..32bc15bb
--- /dev/null
+++ b/runtime/src/ints.c
@@ -0,0 +1,43 @@
+#include <stdbool.h>
+
+#include "./shed.h"
+
+struct ShedInt {
+ PatioInt value;
+};
+
+ShedObject shed__runtime__int_create(PatioInt value) {
+ struct ShedInt* result = shed__runtime__alloc(sizeof(struct ShedInt));
+ result->value = value;
+ return (ShedObject) result;
+}
+
+PatioInt shed__runtime__int_value(ShedObject object) {
+ return ((struct ShedInt*) object)->value;
+}
+
+ShedObject shed__runtime__int_add(ShedObject left, ShedObject right) {
+ PatioInt left_value = shed__runtime__int_value(left);
+ PatioInt right_value = shed__runtime__int_value(right);
+ PatioInt result_value = left_value + right_value;
+ return shed__runtime__int_create(result_value);
+}
+
+ShedObject shed__runtime__int_sub(ShedObject left, ShedObject right) {
+ PatioInt left_value = shed__runtime__int_value(left);
+ PatioInt right_value = shed__runtime__int_value(right);
+ PatioInt result_value = left_value - right_value;
+ return shed__runtime__int_create(result_value);
+}
+
+bool shed__runtime__int_equals(ShedObject left, ShedObject right) {
+ PatioInt left_value = shed__runtime__int_value(left);
+ PatioInt right_value = shed__runtime__int_value(right);
+ return left_value == right_value;
+}
+
+bool shed__runtime__int_not_equal(ShedObject left, ShedObject right) {
+ PatioInt left_value = shed__runtime__int_value(left);
+ PatioInt right_value = shed__runtime__int_value(right);
+ return left_value != right_value;
+}