diff options
-rw-r--r-- | src/binaryen-c.cpp | 18 | ||||
-rw-r--r-- | src/binaryen-c.h | 10 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 16 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 3 |
4 files changed, 47 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 8b4021c5b..0cc4bb115 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -184,6 +184,24 @@ BinaryenPackedType BinaryenPackedTypeInt16(void) { return Field::PackedType::i16; } +// TypeSystem + +BinaryenTypeSystem BinaryenTypeSystemEquirecursive() { + return static_cast<BinaryenTypeSystem>(TypeSystem::Equirecursive); +} +BinaryenTypeSystem BinaryenTypeSystemNominal() { + return static_cast<BinaryenTypeSystem>(TypeSystem::Nominal); +} +BinaryenTypeSystem BinaryenTypeSystemIsorecursive() { + return static_cast<BinaryenTypeSystem>(TypeSystem::Isorecursive); +} +BinaryenTypeSystem BinaryenGetTypeSystem() { + return BinaryenTypeSystem(getTypeSystem()); +} +void BinaryenSetTypeSystem(BinaryenTypeSystem typeSystem) { + setTypeSystem(TypeSystem(typeSystem)); +} + // Expression ids BinaryenExpressionId BinaryenInvalidId(void) { diff --git a/src/binaryen-c.h b/src/binaryen-c.h index bd8e19048..bf8ed01bb 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -129,6 +129,16 @@ BINARYEN_API BinaryenPackedType BinaryenPackedTypeNotPacked(void); BINARYEN_API BinaryenPackedType BinaryenPackedTypeInt8(void); BINARYEN_API BinaryenPackedType BinaryenPackedTypeInt16(void); +// TypeSystem + +typedef uint32_t BinaryenTypeSystem; + +BINARYEN_API BinaryenTypeSystem BinaryenTypeSystemEquirecursive(void); +BINARYEN_API BinaryenTypeSystem BinaryenTypeSystemNominal(void); +BINARYEN_API BinaryenTypeSystem BinaryenTypeSystemIsorecursive(void); +BINARYEN_API BinaryenTypeSystem BinaryenGetTypeSystem(void); +BINARYEN_API void BinaryenSetTypeSystem(BinaryenTypeSystem typeSystem); + // Expression ids (call to get the value of each; you can cache them) typedef uint32_t BinaryenExpressionId; diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 9f8c9a640..64a386a51 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -1693,6 +1693,21 @@ void test_func_opt() { BinaryenModuleDispose(module); } +void test_typesystem() { + BinaryenTypeSystem defaultTypeSystem = BinaryenGetTypeSystem(); + assert(defaultTypeSystem == BinaryenTypeSystemEquirecursive()); + printf("BinaryenTypeSystemEquirecursive: %d\n", + BinaryenTypeSystemEquirecursive()); + BinaryenSetTypeSystem(BinaryenTypeSystemNominal()); + assert(BinaryenGetTypeSystem() == BinaryenTypeSystemNominal()); + printf("BinaryenTypeSystemNominal: %d\n", BinaryenTypeSystemNominal()); + BinaryenSetTypeSystem(BinaryenTypeSystemIsorecursive()); + assert(BinaryenGetTypeSystem() == BinaryenTypeSystemIsorecursive()); + printf("BinaryenTypeSystemIsorecursive: %d\n", + BinaryenTypeSystemIsorecursive()); + BinaryenSetTypeSystem(defaultTypeSystem); +} + int main() { test_types(); test_features(); @@ -1705,6 +1720,7 @@ int main() { test_color_status(); test_for_each(); test_func_opt(); + test_typesystem(); return 0; } diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 211c7003b..0793da811 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -2703,3 +2703,6 @@ optimized: (i32.const 4) ) ) +BinaryenTypeSystemEquirecursive: 0 +BinaryenTypeSystemNominal: 1 +BinaryenTypeSystemIsorecursive: 2 |