-
Notifications
You must be signed in to change notification settings - Fork 256
Closed
Description
// ./wit/issue.wit
default world issue {
union union-list-u8 {
list<u8>,
}
record record-tuple-u8 {
field: tuple<u8>,
}
variant variant-list-tuple-bool {
field(list<tuple<bool>>),
}
import func-using-list-u8-in-args: func(body: list<u8>) -> ()
export func-using-tuple-u8-in-return: func() -> tuple<u8>
export func-using-list-tuple-bool-in-return: func() -> list<tuple<bool>>
}just a simple WIT file, and using wit-bindgen c --out-dir=gen ./wit, it generates:
Generated .h file
// Generated by `wit-bindgen` 0.4.0. DO NOT EDIT!
#ifndef __BINDINGS_ISSUE_H
#define __BINDINGS_ISSUE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
typedef struct {
bool f0;
} issue_tuple1_bool_t;
typedef struct {
issue_tuple1_bool_t *ptr;
size_t len;
} issue_list_tuple1_bool_t;
typedef struct {
uint8_t tag;
union {
issue_list_tuple1_bool_t field;
} val;
} issue_variant_list_tuple_bool_t;
#define ISSUE_VARIANT_LIST_TUPLE_BOOL_FIELD 0
typedef struct {
uint8_t *ptr;
size_t len;
} issue_list_u8_t;
typedef struct {
uint8_t tag;
union {
issue_list_u8_t f0;
} val;
} issue_union_list_u8_t;
typedef struct {
uint8_t f0;
} issue_tuple1_u8_t;
typedef struct {
issue_tuple1_u8_t field;
} issue_record_tuple_u8_t;
typedef struct {
uint8_t *ptr;
size_t len;
} issue_list_u8_t;
typedef struct {
bool f0;
} issue_tuple1_bool_t;
typedef struct {
issue_tuple1_bool_t *ptr;
size_t len;
} issue_list_tuple1_bool_t;
typedef struct {
uint8_t f0;
} issue_tuple1_u8_t;
// Imported Functions from `issue`
void issue_func_using_list_u8_in_args(issue_list_u8_t *body);
// Exported Functions from `issue`
void issue_func_using_tuple_u8_in_return(issue_tuple1_u8_t *ret);
void issue_func_using_list_tuple_bool_in_return(issue_list_tuple1_bool_t *ret);
// Helper Functions
void issue_list_tuple1_bool_free(issue_list_tuple1_bool_t *ptr);
void issue_variant_list_tuple_bool_free(issue_variant_list_tuple_bool_t *ptr);
void issue_list_u8_free(issue_list_u8_t *ptr);
void issue_union_list_u8_free(issue_union_list_u8_t *ptr);
void issue_list_u8_free(issue_list_u8_t *ptr);
void issue_list_tuple1_bool_free(issue_list_tuple1_bool_t *ptr);
#ifdef __cplusplus
}
#endif
#endif
You can see it defines thoose type/function twice:
- type
issue_list_u8_tand functionissue_list_u8_free - type
issue_tuple1_bool_t - type
issue_list_tuple1_bool_tand functionissue_list_tuple1_bool_free - type
issue_tuple1_u8_t
Then it makes compiling fail.
I meet this issue when trying the tinygo generator, and the golang wrap type is defined twice too, so it seems to be a common behavior, is this by design?
And I tried type alias, this can fix redefinition issue, so I should alias each complex type instead of using them directly?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels