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