Skip to content

Instantly share code, notes, and snippets.

@maxsei
Last active October 25, 2024 18:51
Show Gist options
  • Save maxsei/0589c33c6f49b9faf0c7f22745b9e9e3 to your computer and use it in GitHub Desktop.
Save maxsei/0589c33c6f49b9faf0c7f22745b9e9e3 to your computer and use it in GitHub Desktop.
// Generated by `wit-bindgen` 0.33.0. DO NOT EDIT!
#include "strings.h"
#include <stdlib.h>
#include <string.h>
// Exported Functions from `x:strings/upper`
__attribute__((__weak__, __export_name__("cabi_post_x:strings/upper#upper")))
void __wasm_export_exports_x_strings_upper_upper_post_return(uint8_t * arg0) {
switch ((int32_t) (int32_t) *((uint8_t*) (arg0 + 0))) {
case 0: {
if ((*((size_t*) (arg0 + 8))) > 0) {
free(*((uint8_t **) (arg0 + 4)));
}
break;
}
case 1: {
break;
}
}
}
__attribute__((__weak__, __export_name__("cabi_post_x:strings/upper#upper2")))
void __wasm_export_exports_x_strings_upper_upper2_post_return(uint8_t * arg0) {
if ((*((size_t*) (arg0 + 4))) > 0) {
free(*((uint8_t **) (arg0 + 0)));
}
}
// Canonical ABI intrinsics
__attribute__((__weak__, __export_name__("cabi_realloc")))
void *cabi_realloc(void *ptr, size_t old_size, size_t align, size_t new_size) {
(void) old_size;
if (new_size == 0) return (void*) align;
void *ret = realloc(ptr, new_size);
if (!ret) abort();
return ret;
}
// Helper Functions
void exports_x_strings_upper_result_string_void_free(exports_x_strings_upper_result_string_void_t *ptr) {
if (!ptr->is_err) {
strings_string_free(&ptr->val.ok);
}
}
void strings_string_set(strings_string_t *ret, const char*s) {
ret->ptr = (uint8_t*) s;
ret->len = strlen(s);
}
void strings_string_dup(strings_string_t *ret, const char*s) {
ret->len = strlen(s);
ret->ptr = (uint8_t*) cabi_realloc(NULL, 0, 1, ret->len * 1);
memcpy(ret->ptr, s, ret->len * 1);
}
void strings_string_free(strings_string_t *ret) {
if (ret->len > 0) {
free(ret->ptr);
}
ret->ptr = NULL;
ret->len = 0;
}
// Component Adapters
__attribute__((__aligned__(4)))
static uint8_t RET_AREA[12];
__attribute__((__export_name__("x:strings/upper#upper")))
uint8_t * __wasm_export_exports_x_strings_upper_upper(uint8_t * arg, size_t arg0) {
strings_string_t arg1 = (strings_string_t) { (uint8_t*)(arg), (arg0) };
exports_x_strings_upper_result_string_void_t ret;
strings_string_t ok;
ret.is_err = !exports_x_strings_upper_upper(&arg1, &ok);
if (!ret.is_err) {
ret.val.ok = ok;
}
uint8_t *ptr = (uint8_t *) &RET_AREA;
if ((ret).is_err) {
*((int8_t*)(ptr + 0)) = 1;
} else {
const strings_string_t *payload = &(ret).val.ok;*((int8_t*)(ptr + 0)) = 0;
*((size_t*)(ptr + 8)) = (*payload).len;
*((uint8_t **)(ptr + 4)) = (uint8_t *) (*payload).ptr;
}
return ptr;
}
__attribute__((__export_name__("x:strings/upper#upper2")))
uint8_t * __wasm_export_exports_x_strings_upper_upper2(uint8_t * arg, size_t arg0) {
strings_string_t arg1 = (strings_string_t) { (uint8_t*)(arg), (arg0) };
strings_string_t ret;
exports_x_strings_upper_upper2(&arg1, &ret);
uint8_t *ptr = (uint8_t *) &RET_AREA;
*((size_t*)(ptr + 4)) = (ret).len;
*((uint8_t **)(ptr + 0)) = (uint8_t *) (ret).ptr;
return ptr;
}
// Ensure that the *_component_type.o object is linked in
extern void __component_type_object_force_link_strings(void);
void __component_type_object_force_link_strings_public_use_in_this_compilation_unit(void) {
__component_type_object_force_link_strings();
}
// Generated by `wit-bindgen` 0.33.0. DO NOT EDIT!
#ifndef __BINDINGS_STRINGS_H
#define __BINDINGS_STRINGS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
typedef struct strings_string_t {
uint8_t*ptr;
size_t len;
} strings_string_t;
typedef struct {
bool is_err;
union {
strings_string_t ok;
} val;
} exports_x_strings_upper_result_string_void_t;
// Exported Functions from `x:strings/upper`
bool exports_x_strings_upper_upper(strings_string_t *s, strings_string_t *ret);
void exports_x_strings_upper_upper2(strings_string_t *s, strings_string_t *ret);
// Helper Functions
void exports_x_strings_upper_result_string_void_free(exports_x_strings_upper_result_string_void_t *ptr);
// Transfers ownership of `s` into the string `ret`
void strings_string_set(strings_string_t *ret, const char*s);
// Creates a copy of the input nul-terminate string `s` and
// stores it into the component model string `ret`.
void strings_string_dup(strings_string_t *ret, const char*s);
// Deallocates the string pointed to by `ret`, deallocating
// the memory behind the string.
void strings_string_free(strings_string_t *ret);
#ifdef __cplusplus
}
#endif
#endif
#include "strings.h"
#include <stdlib.h>
#define OK true
bool exports_x_strings_upper_upper(strings_string_t *s, strings_string_t *ret) {
ret->len = s->len;
ret->ptr = (uint8_t *)malloc(ret->len);
if (ret->ptr == NULL) {
return !OK;
};
const int n = s->len;
for (int i = 0; i < n; ++i) {
const uint8_t c = s->ptr[i];
if (!(c < 97 || 122 > c)) {
continue;
}
ret->ptr[i] = c - 32;
}
return OK;
}
void exports_x_strings_upper_upper2(strings_string_t *s, strings_string_t *ret) {
ret->len = s->len;
ret->ptr = (uint8_t *)malloc(ret->len);
const int n = s->len;
for (int i = 0; i < n; ++i) {
const uint8_t c = s->ptr[i];
if (!(c < 97 || 122 > c)) {
continue;
}
ret->ptr[i] = c - 32;
}
}
package x:strings;
interface upper {
upper: func(s: string) -> result<string>;
upper2: func(s: string) -> string;
}
world strings {
export upper;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment