Skip to content

Commit 823bf60

Browse files
authored
C API: Add BinaryenFunctionAppendVar (#6213)
1 parent 2dfa01f commit 823bf60

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

src/binaryen-c.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5878,6 +5878,10 @@ BinaryenType BinaryenFunctionGetVar(BinaryenFunctionRef func,
58785878
assert(index < vars.size());
58795879
return vars[index].getID();
58805880
}
5881+
BinaryenIndex BinaryenFunctionAddVar(BinaryenFunctionRef func,
5882+
BinaryenType type) {
5883+
return Builder::addVar((Function*)func, (Type)type);
5884+
}
58815885
BinaryenIndex BinaryenFunctionGetNumLocals(BinaryenFunctionRef func) {
58825886
return ((Function*)func)->getNumLocals();
58835887
}

src/binaryen-c.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3197,6 +3197,10 @@ BINARYEN_API BinaryenIndex BinaryenFunctionGetNumVars(BinaryenFunctionRef func);
31973197
// specified `Function`.
31983198
BINARYEN_API BinaryenType BinaryenFunctionGetVar(BinaryenFunctionRef func,
31993199
BinaryenIndex index);
3200+
// Appends a local variable to the specified `Function`, returning its
3201+
// index.
3202+
BINARYEN_API BinaryenIndex BinaryenFunctionAddVar(BinaryenFunctionRef func,
3203+
BinaryenType type);
32003204
// Gets the number of locals within the specified function. Includes parameters.
32013205
BINARYEN_API BinaryenIndex
32023206
BinaryenFunctionGetNumLocals(BinaryenFunctionRef func);

test/example/c-api-kitchen-sink.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,6 +1417,16 @@ void test_core() {
14171417
BinaryenFunctionRef sinker = BinaryenAddFunction(
14181418
module, "kitchen()sinker", iIfF, BinaryenTypeInt32(), localTypes, 2, body);
14191419

1420+
BinaryenIndex numLocals = BinaryenFunctionGetNumLocals(sinker);
1421+
BinaryenIndex numParams =
1422+
BinaryenTypeArity(BinaryenFunctionGetParams(sinker));
1423+
BinaryenIndex newLocalIdx =
1424+
BinaryenFunctionAddVar(sinker, BinaryenTypeFloat32());
1425+
assert(newLocalIdx == numLocals);
1426+
assert(BinaryenFunctionGetNumLocals(sinker) == numLocals + 1);
1427+
assert(BinaryenFunctionGetVar(sinker, newLocalIdx - numParams) ==
1428+
BinaryenTypeFloat32());
1429+
14201430
// Globals
14211431

14221432
BinaryenAddGlobal(

test/example/c-api-kitchen-sink.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ BinaryenFeatureAll: 131071
102102
(func $"kitchen()sinker" (type $2) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32)
103103
(local $4 i32)
104104
(local $5 externref)
105+
(local $6 f32)
105106
(block $the-body (result i32)
106107
(block $the-nothing
107108
(drop

0 commit comments

Comments
 (0)