]> git.lizzy.rs Git - uwu-std.git/blob - str.c
Initial commit
[uwu-std.git] / str.c
1 #include <string.h>
2 #include <stdlib.h>
3 #include "api/vm.h"
4 #include "api/str.h"
5 #include "api/util.h"
6
7 UwUVMValue uwu_cat(UwUVMArgs *args)
8 {
9         size_t total_len = 0;
10         size_t lengths[args->num];
11         char  *substrs[args->num];
12
13         for (size_t i = 0; i < args->num; i++) {
14                 substrs[i] = uwustr_get(uwuvm_get_arg(args, i));
15                 lengths[i] = strlen(substrs[i]);
16                 total_len += lengths[i];
17         }
18
19         char result[total_len + 1];
20         char *result_ptr = result;
21
22         for (size_t i = 0; i < args->num; i++) {
23                 strcpy(result_ptr, substrs[i]);
24                 free(substrs[i]);
25                 result_ptr += lengths[i];
26         }
27
28         *result_ptr = 0;
29
30         return uwustr_create(result);
31 }
32
33 UwUVMValue uwu_is(UwUVMArgs *args)
34 {
35         return uwuutil_is_type("str.is", args, &uwustr_type);
36 }