summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp18
-rw-r--r--src/binaryen-c.h10
-rw-r--r--test/example/c-api-kitchen-sink.c16
-rw-r--r--test/example/c-api-kitchen-sink.txt3
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