Files
brolang/examples/interop/header/native.c
T

77 lines
1.5 KiB
C

#include "include/native.h"
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
struct Imported_Handle {
int value;
};
static struct Imported_Handle handle = {7};
int child_value(int value) {
return value;
}
int imported_add(imported_int left, int right) {
return left + right;
}
unsigned long imported_scalar(unsigned char value, unsigned long extra) {
return value + extra;
}
Imported_Handle *imported_handle(void) {
return &handle;
}
int imported_read(const Imported_Handle *value) {
return value->value;
}
int imported_string(const char *value) {
if (strcmp(value, "hello") != 0) {
abort();
}
return 0;
}
int imported_apply(Imported_Mapper mapper, int value) {
if (mapper == NULL) {
abort();
}
int result = mapper(value);
if (result != value * 2) {
abort();
}
return result;
}
int imported_variadic(int marker, ...) {
va_list args;
va_start(args, marker);
int narrow_signed = va_arg(args, int);
int narrow_unsigned = va_arg(args, int);
double float_value = va_arg(args, double);
double c_float_value = va_arg(args, double);
const unsigned char *pointer = va_arg(args, const unsigned char *);
const unsigned char *nullable = va_arg(args, const unsigned char *);
va_end(args);
if (!(marker == 7 &&
narrow_signed == -2 &&
narrow_unsigned == 3 &&
float_value == 4.0 &&
c_float_value == 5.0 &&
pointer[0] == 'o' &&
nullable == pointer)) {
abort();
}
return 0;
}
#ifdef BROLANG_FEATURE
int configured_value(int value) {
return value;
}
#endif