diff options
author | dcode <dcode@dcode.io> | 2022-10-18 23:16:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-18 14:16:07 -0700 |
commit | e4fd739f72eae49aa47bef06af9f38625a3a9f33 (patch) | |
tree | 6ee226d199c05535a06539b6868d77b060854a0b | |
parent | 34e7e49cd7fbf520e4f3cfb976b1c88713b18e45 (diff) | |
download | binaryen-e4fd739f72eae49aa47bef06af9f38625a3a9f33.tar.gz binaryen-e4fd739f72eae49aa47bef06af9f38625a3a9f33.tar.bz2 binaryen-e4fd739f72eae49aa47bef06af9f38625a3a9f33.zip |
[C API] Add bottom heap types and array heap type (#5150)
Adds `BinaryenHeapTypeNone`, `BinaryenHeapTypeNoext` and `BinaryenHeapTypeNofunc` to obtain the bottom heap types. Also adds `BinaryenHeapTypeIsBottom` to test whether a given heap type is a bottom type, and `BinaryenHeapTypeGetBottom` to obtain the respective bottom type given a heap type.
-rw-r--r-- | src/binaryen-c.cpp | 22 | ||||
-rw-r--r-- | src/binaryen-c.h | 9 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 34 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 8 |
4 files changed, 73 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index ec70baef2..cd3806810 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -202,6 +202,9 @@ BinaryenType BinaryenTypeI31ref(void) { BinaryenType BinaryenTypeDataref(void) { return Type(HeapType::data, NonNullable).getID(); } +BinaryenType BinaryenTypeArrayref(void) { + return Type(HeapType::array, Nullable).getID(); +} BinaryenType BinaryenTypeStringref() { return Type(HeapType::string, Nullable).getID(); } @@ -284,6 +287,9 @@ BinaryenHeapType BinaryenHeapTypeI31() { BinaryenHeapType BinaryenHeapTypeData() { return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::data); } +BinaryenHeapType BinaryenHeapTypeArray() { + return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::array); +} BinaryenHeapType BinaryenHeapTypeString() { return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::string); } @@ -299,6 +305,22 @@ BinaryenHeapType BinaryenHeapTypeStringviewIter() { return static_cast<BinaryenHeapType>( HeapType::BasicHeapType::stringview_iter); } +BinaryenHeapType BinaryenHeapTypeNone() { + return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::none); +} +BinaryenHeapType BinaryenHeapTypeNoext() { + return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::noext); +} +BinaryenHeapType BinaryenHeapTypeNofunc() { + return static_cast<BinaryenHeapType>(HeapType::BasicHeapType::nofunc); +} + +bool BinaryenHeapTypeIsBottom(BinaryenHeapType heapType) { + return HeapType(heapType).isBottom(); +} +BinaryenHeapType BinaryenHeapTypeGetBottom(BinaryenHeapType heapType) { + return static_cast<BinaryenHeapType>(HeapType(heapType).getBottom()); +} BinaryenHeapType BinaryenTypeGetHeapType(BinaryenType type) { return Type(type).getHeapType().getID(); diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 9cc282721..ea3988cae 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -105,6 +105,7 @@ BINARYEN_API BinaryenType BinaryenTypeAnyref(void); BINARYEN_API BinaryenType BinaryenTypeEqref(void); BINARYEN_API BinaryenType BinaryenTypeI31ref(void); BINARYEN_API BinaryenType BinaryenTypeDataref(void); +BINARYEN_API BinaryenType BinaryenTypeArrayref(void); BINARYEN_API BinaryenType BinaryenTypeStringref(void); BINARYEN_API BinaryenType BinaryenTypeStringviewWTF8(void); BINARYEN_API BinaryenType BinaryenTypeStringviewWTF16(void); @@ -146,10 +147,18 @@ BINARYEN_API BinaryenHeapType BinaryenHeapTypeAny(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeEq(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeI31(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeData(void); +BINARYEN_API BinaryenHeapType BinaryenHeapTypeArray(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeString(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeStringviewWTF8(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeStringviewWTF16(void); BINARYEN_API BinaryenHeapType BinaryenHeapTypeStringviewIter(void); +BINARYEN_API BinaryenHeapType BinaryenHeapTypeNone(void); +BINARYEN_API BinaryenHeapType BinaryenHeapTypeNoext(void); +BINARYEN_API BinaryenHeapType BinaryenHeapTypeNofunc(void); + +BINARYEN_API bool BinaryenHeapTypeIsBottom(BinaryenHeapType heapType); +BINARYEN_API BinaryenHeapType +BinaryenHeapTypeGetBottom(BinaryenHeapType heapType); BINARYEN_API BinaryenHeapType BinaryenTypeGetHeapType(BinaryenType type); BINARYEN_API bool BinaryenTypeIsNullable(BinaryenType type); diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 251aa3b90..f333da4a2 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -270,6 +270,13 @@ void test_types() { BinaryenTypeExpand(dataref, &valueType); assert(valueType == dataref); + BinaryenType arrayref = BinaryenTypeArrayref(); + printf("BinaryenTypeArrayref: (ptr)\n"); + assert(arrayref == BinaryenTypeArrayref()); + assert(BinaryenTypeArity(arrayref) == 1); + BinaryenTypeExpand(arrayref, &valueType); + assert(valueType == arrayref); + BinaryenType stringref = BinaryenTypeStringref(); printf("BinaryenTypeStringref: (ptr)\n"); assert(BinaryenTypeArity(stringref) == 1); @@ -294,6 +301,24 @@ void test_types() { BinaryenTypeExpand(stringview_iter_, &valueType); assert(valueType == stringview_iter_); + BinaryenType nullref = BinaryenTypeNullref(); + printf("BinaryenTypeNullref: (ptr)\n"); + assert(BinaryenTypeArity(nullref) == 1); + BinaryenTypeExpand(nullref, &valueType); + assert(valueType == nullref); + + BinaryenType nullexternref = BinaryenTypeNullExternref(); + printf("BinaryenTypeNullExternref: (ptr)\n"); + assert(BinaryenTypeArity(nullexternref) == 1); + BinaryenTypeExpand(nullexternref, &valueType); + assert(valueType == nullexternref); + + BinaryenType nullfuncref = BinaryenTypeNullFuncref(); + printf("BinaryenTypeNullFuncref: (ptr)\n"); + assert(BinaryenTypeArity(nullfuncref) == 1); + BinaryenTypeExpand(nullfuncref, &valueType); + assert(valueType == nullfuncref); + printf("BinaryenTypeAuto: %zd\n", BinaryenTypeAuto()); BinaryenType pair[] = {i32, i32}; @@ -324,6 +349,7 @@ void test_types() { printf("BinaryenHeapTypeEq: %zd\n", BinaryenHeapTypeEq()); printf("BinaryenHeapTypeI31: %zd\n", BinaryenHeapTypeI31()); printf("BinaryenHeapTypeData: %zd\n", BinaryenHeapTypeData()); + printf("BinaryenHeapTypeArray: %zd\n", BinaryenHeapTypeArray()); printf("BinaryenHeapTypeString: %zd\n", BinaryenHeapTypeString()); printf("BinaryenHeapTypeStringviewWTF8: %zd\n", BinaryenHeapTypeStringviewWTF8()); @@ -331,6 +357,14 @@ void test_types() { BinaryenHeapTypeStringviewWTF16()); printf("BinaryenHeapTypeStringviewIter: %zd\n", BinaryenHeapTypeStringviewIter()); + printf("BinaryenHeapTypeNone: %zd\n", BinaryenHeapTypeNone()); + printf("BinaryenHeapTypeNoext: %zd\n", BinaryenHeapTypeNoext()); + printf("BinaryenHeapTypeNofunc: %zd\n", BinaryenHeapTypeNofunc()); + + assert(!BinaryenHeapTypeIsBottom(BinaryenHeapTypeExt())); + assert(BinaryenHeapTypeIsBottom(BinaryenHeapTypeNoext())); + assert(BinaryenHeapTypeGetBottom(BinaryenHeapTypeExt()) == + BinaryenHeapTypeNoext()); BinaryenHeapType eq = BinaryenTypeGetHeapType(eqref); assert(eq == BinaryenHeapTypeEq()); diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 983c80d90..0d7ef581b 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -11,10 +11,14 @@ BinaryenTypeAnyref: (ptr) BinaryenTypeEqref: (ptr) BinaryenTypeI31ref: (ptr) BinaryenTypeDataref: (ptr) +BinaryenTypeArrayref: (ptr) BinaryenTypeStringref: (ptr) BinaryenTypeStringviewWTF8: (ptr) BinaryenTypeStringviewWTF16: (ptr) BinaryenTypeStringviewIter: (ptr) +BinaryenTypeNullref: (ptr) +BinaryenTypeNullExternref: (ptr) +BinaryenTypeNullFuncref: (ptr) BinaryenTypeAuto: -1 BinaryenPackedTypeNotPacked: 0 BinaryenPackedTypeInt8: 1 @@ -25,10 +29,14 @@ BinaryenHeapTypeAny: 2 BinaryenHeapTypeEq: 3 BinaryenHeapTypeI31: 4 BinaryenHeapTypeData: 5 +BinaryenHeapTypeArray: 6 BinaryenHeapTypeString: 7 BinaryenHeapTypeStringviewWTF8: 8 BinaryenHeapTypeStringviewWTF16: 9 BinaryenHeapTypeStringviewIter: 10 +BinaryenHeapTypeNone: 11 +BinaryenHeapTypeNoext: 12 +BinaryenHeapTypeNofunc: 13 BinaryenFeatureMVP: 0 BinaryenFeatureAtomics: 1 BinaryenFeatureBulkMemory: 16 |