From ecc06c082036aa93f6810ec21e73610c55f5a57b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 30 Dec 2021 14:18:15 +0100 Subject: Initial commit --- api/str.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 api/str.c (limited to 'api/str.c') diff --git a/api/str.c b/api/str.c new file mode 100644 index 0000000..c634fc2 --- /dev/null +++ b/api/str.c @@ -0,0 +1,32 @@ +#include +#include "../src/util.h" +#include "str.h" + +UwUVMValue uwustr_create(const char *value) +{ + return (UwUVMValue) { + .type = VT_STR, + .value = { + .str_value = strdup(value), + }, + }; +} + +char *uwustr_get(UwUVMValue vm_value) +{ + switch (vm_value.type) { + case VT_INT: + return asprintf_wrapper("%d", vm_value.value.int_value); + + case VT_STR: + return strdup(vm_value.value.str_value); + + case VT_REF: + return asprintf_wrapper("[Function reference: %p]", vm_value.value.ref_value); + + case VT_NAT: + return vm_value.value.nat_value.type->print + ? vm_value.value.nat_value.type->print(vm_value.value.nat_value.data) + : asprintf_wrapper("[Native value: %p: %p]", vm_value.value.nat_value.data, vm_value.value.nat_value.type); + } +} -- cgit v1.2.3