]> git.lizzy.rs Git - uwu-lang.git/blob - api/str.c
37b8e7015ca5b97b641f1b0b843002effcbd072b
[uwu-lang.git] / api / str.c
1 #include <string.h>
2 #include "../src/util.h"
3 #include "str.h"
4
5 UwUVMValue uwustr_create(const char *value)
6 {
7         return (UwUVMValue) {
8                 .type = VT_STR,
9                 .value = {
10                         .str_value = strdup(value),
11                 },
12         };
13 }
14
15 char *uwustr_get(UwUVMValue vm_value)
16 {
17         switch (vm_value.type) {
18                 case VT_INT:
19                         return asprintf_wrapper("%d", vm_value.value.int_value);
20
21                 case VT_STR:
22                         return strdup(vm_value.value.str_value);
23
24                 case VT_REF:
25                         return asprintf_wrapper("[Function reference: %p]", vm_value.value.ref_value);
26
27                 case VT_NAT:
28                         return vm_value.value.nat_value.type->print
29                                 ? vm_value.value.nat_value.type->print(vm_value.value.nat_value.data)
30                                 : asprintf_wrapper("[Native value: %p: %p]", vm_value.value.nat_value.data, vm_value.value.nat_value.type);
31         }
32 }