diff options
-rw-r--r-- | src/binaryen-c.cpp | 15 | ||||
-rw-r--r-- | src/binaryen-c.h | 9 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 9 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 0cc4bb115..e2afe66dc 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -184,6 +184,21 @@ BinaryenPackedType BinaryenPackedTypeInt16(void) { return Field::PackedType::i16; } +// Heap types + +BinaryenHeapType BinaryenTypeGetHeapType(BinaryenType type) { + return Type(type).getHeapType().getID(); +} +bool BinaryenTypeIsNullable(BinaryenType type) { + return Type(type).isNullable(); +} +BinaryenType BinaryenTypeFromHeapType(BinaryenHeapType heapType, + bool nullable) { + return Type(HeapType(heapType), + nullable ? Nullability::Nullable : Nullability::NonNullable) + .getID(); +} + // TypeSystem BinaryenTypeSystem BinaryenTypeSystemEquirecursive() { diff --git a/src/binaryen-c.h b/src/binaryen-c.h index bf8ed01bb..7b5c22bf9 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -129,6 +129,15 @@ BINARYEN_API BinaryenPackedType BinaryenPackedTypeNotPacked(void); BINARYEN_API BinaryenPackedType BinaryenPackedTypeInt8(void); BINARYEN_API BinaryenPackedType BinaryenPackedTypeInt16(void); +// Heap types + +typedef uintptr_t BinaryenHeapType; + +BINARYEN_API BinaryenHeapType BinaryenTypeGetHeapType(BinaryenType type); +BINARYEN_API bool BinaryenTypeIsNullable(BinaryenType type); +BINARYEN_API BinaryenType BinaryenTypeFromHeapType(BinaryenHeapType heapType, + bool nullable); + // TypeSystem typedef uint32_t BinaryenTypeSystem; diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index cb156c7c1..28e784a05 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -287,6 +287,15 @@ void test_types() { printf("BinaryenPackedTypeInt8: %d\n", i8); BinaryenPackedType i16 = BinaryenPackedTypeInt16(); printf("BinaryenPackedTypeInt16: %d\n", i16); + + BinaryenHeapType eq = BinaryenTypeGetHeapType(eqref); + BinaryenType ref_null_eq = BinaryenTypeFromHeapType(eq, true); + assert(BinaryenTypeGetHeapType(ref_null_eq) == eq); + assert(BinaryenTypeIsNullable(ref_null_eq)); + BinaryenType ref_eq = BinaryenTypeFromHeapType(eq, false); + assert(ref_eq != ref_null_eq); + assert(BinaryenTypeGetHeapType(ref_eq) == eq); + assert(!BinaryenTypeIsNullable(ref_eq)); } void test_features() { |