diff options
author | Daniel Wirtz <dcode@dcode.io> | 2020-05-11 20:48:51 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-11 11:48:51 -0700 |
commit | 655fd6b5cd1e3dd7441139cfca95a905004d2209 (patch) | |
tree | 58c688490493b5beb2ba3b273d13668cb4888065 /src | |
parent | 3de8c98b682e1347e5c50c58eaddc4b01f3e26ab (diff) | |
download | binaryen-655fd6b5cd1e3dd7441139cfca95a905004d2209.tar.gz binaryen-655fd6b5cd1e3dd7441139cfca95a905004d2209.tar.bz2 binaryen-655fd6b5cd1e3dd7441139cfca95a905004d2209.zip |
Add C/JS APIs to copy expressions (#2840)
This API enables use cases where we want to keep the original expression, yet utilize passes like `vacuum` or `precompute` to evaluate it without implicitly modifying the original.
C-API: **BinaryenExpressionCopy**(expr, module)
JS-API: **Module#copyExpression**(expr)
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 5 | ||||
-rw-r--r-- | src/binaryen-c.h | 2 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 3 |
3 files changed, 10 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index c57beeb22..a64c46fbf 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -1319,6 +1319,11 @@ void BinaryenExpressionPrint(BinaryenExpressionRef expr) { std::cout << '\n'; } +BinaryenExpressionRef BinaryenExpressionCopy(BinaryenExpressionRef expr, + BinaryenModuleRef module) { + return ExpressionManipulator::copy(expr, *(Module*)module); +} + // Specific expression utility // Block diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 0e1c88327..e460671b9 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -848,6 +848,8 @@ BINARYEN_API BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr); BINARYEN_API BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr); BINARYEN_API void BinaryenExpressionPrint(BinaryenExpressionRef expr); +BINARYEN_API BinaryenExpressionRef +BinaryenExpressionCopy(BinaryenExpressionRef expr, BinaryenModuleRef module); BINARYEN_API const char* BinaryenBlockGetName(BinaryenExpressionRef expr); BINARYEN_API BinaryenIndex diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 75d6bf401..1706d2b97 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -2407,6 +2407,9 @@ function wrapModule(module, self) { self['setDebugLocation'] = function(func, expr, fileIndex, lineNumber, columnNumber) { return Module['_BinaryenFunctionSetDebugLocation'](func, expr, fileIndex, lineNumber, columnNumber); }; + self['copyExpression'] = function(expr) { + return Module['_BinaryenExpressionCopy'](expr, module); + }; return self; } |