aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/ints.c
diff options
context:
space:
mode:
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;
+}