diff options
author | KinderGartenKiller <33396195+mobsceneZ@users.noreply.github.com> | 2024-01-18 05:37:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-17 13:37:42 -0800 |
commit | 823bf60c7eb78cd345e1f29fd1fff186194655d8 (patch) | |
tree | 386e72bab3395507ed5e700e90118a95b13066fb | |
parent | 2dfa01f09071ab78e8134fee5c96bcd022330635 (diff) | |
download | binaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.tar.gz binaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.tar.bz2 binaryen-823bf60c7eb78cd345e1f29fd1fff186194655d8.zip |
C API: Add BinaryenFunctionAppendVar (#6213)
-rw-r--r-- | src/binaryen-c.cpp | 4 | ||||
-rw-r--r-- | src/binaryen-c.h | 4 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 10 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 1 |
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 |