summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKinderGartenKiller <33396195+mobsceneZ@users.noreply.github.com>2024-01-18 05:37:42 +0800
committerGitHub <noreply@github.com>2024-01-17 13:37:42 -0800
commit823bf60c7eb78cd345e1f29fd1fff186194655d8 (patch)
tree386e72bab3395507ed5e700e90118a95b13066fb
parent2dfa01f09071ab78e8134fee5c96bcd022330635 (diff)
downloadbinaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.tar.gz
binaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.tar.bz2
binaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.zip
C API: Add BinaryenFunctionAppendVar (#6213)
-rw-r--r--src/binaryen-c.cpp4
-rw-r--r--src/binaryen-c.h4
-rw-r--r--test/example/c-api-kitchen-sink.c10
-rw-r--r--test/example/c-api-kitchen-sink.txt1
4 files changed, 19 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index c273a3af4..21e650650 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -5878,6 +5878,10 @@ BinaryenType BinaryenFunctionGetVar(BinaryenFunctionRef func,
assert(index < vars.size());
return vars[index].getID();
}
+BinaryenIndex BinaryenFunctionAddVar(BinaryenFunctionRef func,
+ BinaryenType type) {
+ return Builder::addVar((Function*)func, (Type)type);
+}
BinaryenIndex BinaryenFunctionGetNumLocals(BinaryenFunctionRef func) {
return ((Function*)func)->getNumLocals();
}
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 82de2dae9..b12cdc213 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -3197,6 +3197,10 @@ BINARYEN_API BinaryenIndex BinaryenFunctionGetNumVars(BinaryenFunctionRef func);
// specified `Function`.
BINARYEN_API BinaryenType BinaryenFunctionGetVar(BinaryenFunctionRef func,
BinaryenIndex index);
+// Appends a local variable to the specified `Function`, returning its
+// index.
+BINARYEN_API BinaryenIndex BinaryenFunctionAddVar(BinaryenFunctionRef func,
+ BinaryenType type);
// Gets the number of locals within the specified function. Includes parameters.
BINARYEN_API BinaryenIndex
BinaryenFunctionGetNumLocals(BinaryenFunctionRef func);
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c
index f91733a8d..6db92276e 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -1417,6 +1417,16 @@ void test_core() {
BinaryenFunctionRef sinker = BinaryenAddFunction(
module, "kitchen()sinker", iIfF, BinaryenTypeInt32(), localTypes, 2, body);
+ BinaryenIndex numLocals = BinaryenFunctionGetNumLocals(sinker);
+ BinaryenIndex numParams =
+ BinaryenTypeArity(BinaryenFunctionGetParams(sinker));
+ BinaryenIndex newLocalIdx =
+ BinaryenFunctionAddVar(sinker, BinaryenTypeFloat32());
+ assert(newLocalIdx == numLocals);
+ assert(BinaryenFunctionGetNumLocals(sinker) == numLocals + 1);
+ assert(BinaryenFunctionGetVar(sinker, newLocalIdx - numParams) ==
+ BinaryenTypeFloat32());
+
// Globals
BinaryenAddGlobal(
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index 75c71b4ab..5342236e1 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -102,6 +102,7 @@ BinaryenFeatureAll: 131071
(func $"kitchen()sinker" (type $2) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32)
(local $4 i32)
(local $5 externref)
+ (local $6 f32)
(block $the-body (result i32)
(block $the-nothing
(drop