summaryrefslogtreecommitdiff
path: root/src/js/binaryen.js-post.js
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2020-04-20 23:01:26 +0200
committerGitHub <noreply@github.com>2020-04-20 14:01:26 -0700
commit483d759230f4693abfca3a74a97b1c1db6d2a0d6 (patch)
treec37b39802b9e5791abb3e329b88ba7185557de49 /src/js/binaryen.js-post.js
parent1dc820c913712a2c50d05caee77e90a7ec49d2e1 (diff)
downloadbinaryen-483d759230f4693abfca3a74a97b1c1db6d2a0d6.tar.gz
binaryen-483d759230f4693abfca3a74a97b1c1db6d2a0d6.tar.bz2
binaryen-483d759230f4693abfca3a74a97b1c1db6d2a0d6.zip
Refactor expression runner so it can be used via the C and JS APIs (#2702)
Refactors most of the precompute pass's expression runner into its base class so it can also be used via the C and JS APIs. Also adds the option to populate the runner with known constant local and global values upfront, and remembers assigned intermediate values as well as traversing into functions if requested.
Diffstat (limited to 'src/js/binaryen.js-post.js')
-rw-r--r--src/js/binaryen.js-post.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 44dc7174b..7bd88fadc 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -485,6 +485,13 @@ function initializeConstants() {
].forEach(function(name) {
Module['SideEffects'][name] = Module['_BinaryenSideEffect' + name]();
});
+
+ // ExpressionRunner flags
+ Module['ExpressionRunner']['Flags'] = {
+ 'Default': Module['_ExpressionRunnerFlagsDefault'](),
+ 'PreserveSideeffects': Module['_ExpressionRunnerFlagsPreserveSideeffects'](),
+ 'TraverseCalls': Module['_ExpressionRunnerFlagsTraverseCalls']()
+ };
}
// 'Module' interface
@@ -2427,6 +2434,24 @@ Module['Relooper'] = function(module) {
};
};
+// 'ExpressionRunner' interface
+Module['ExpressionRunner'] = function(module, flags, maxDepth, maxLoopIterations) {
+ var runner = Module['_ExpressionRunnerCreate'](module['ptr'], flags, maxDepth, maxLoopIterations);
+ this['ptr'] = runner;
+
+ this['setLocalValue'] = function(index, valueExpr) {
+ return Boolean(Module['_ExpressionRunnerSetLocalValue'](runner, index, valueExpr));
+ };
+ this['setGlobalValue'] = function(name, valueExpr) {
+ return preserveStack(function() {
+ return Boolean(Module['_ExpressionRunnerSetGlobalValue'](runner, strToStack(name), valueExpr));
+ });
+ };
+ this['runAndDispose'] = function(expr) {
+ return Module['_ExpressionRunnerRunAndDispose'](runner, expr);
+ };
+};
+
function getAllNested(ref, numFn, getFn) {
var num = numFn(ref);
var ret = new Array(num);