summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-04-04 16:45:11 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-04-04 17:38:40 -0700
commit70a61e1b1fc2f85c81201b6a1e7d2e71e36dcee3 (patch)
tree728d5bb76af50057a7804c78cbae833d3f3ece7e
parent178b869dcdab8ad5877101cbc0347a23e80b02c0 (diff)
downloadbinaryen-70a61e1b1fc2f85c81201b6a1e7d2e71e36dcee3.tar.gz
binaryen-70a61e1b1fc2f85c81201b6a1e7d2e71e36dcee3.tar.bz2
binaryen-70a61e1b1fc2f85c81201b6a1e7d2e71e36dcee3.zip
add simpler constructor for SExpressionWasmBuilder
-rwxr-xr-xbuild.sh6
-rw-r--r--src/binaryen-js.cpp30
-rw-r--r--src/js/binaryen.idl51
-rw-r--r--src/wasm-s-parser.h3
-rw-r--r--test/binaryen.js/test.js27
5 files changed, 115 insertions, 2 deletions
diff --git a/build.sh b/build.sh
index 77648ef9b..e6072d1be 100755
--- a/build.sh
+++ b/build.sh
@@ -10,6 +10,8 @@ make -j
#g++ -O2 -std=c++11 src/wasm2asm-main.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp -Isrc/ -o bin/wasm2asm
#echo "building s2wasm"
#g++ -O2 -std=c++11 src/s2wasm-main.cpp src/support/command-line.cpp src/support/file.cpp src/support/colors.cpp -Isrc/ -o bin/s2wasm
-echo "building interpreter/js"
+echo "building wasm.js"
em++ -std=c++11 src/wasm-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/Print.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/PostEmscripten.cpp src/passes/SimplifyLocals.cpp src/passes/ReorderLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp src/support/safe_integer.cpp src/support/bits.cpp -Isrc/ -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2
-
+echo "building binaryen.js"
+python ~/Dev/emscripten/tools/webidl_binder.py src/js/binaryen.idl glue
+em++ -std=c++11 src/binaryen-js.cpp src/binaryen-shell.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/Print.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/PostEmscripten.cpp src/passes/SimplifyLocals.cpp src/passes/ReorderLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp src/support/safe_integer.cpp src/support/bits.cpp -Isrc/ -o bin/binaryen.js -s MODULARIZE=1 -s 'EXPORT_NAME="Binaryen"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 -s INVOKE_RUN=0 --post-js glue.js
diff --git a/src/binaryen-js.cpp b/src/binaryen-js.cpp
new file mode 100644
index 000000000..3112fe703
--- /dev/null
+++ b/src/binaryen-js.cpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2016 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <memory>
+
+#include "pass.h"
+#include "support/command-line.h"
+#include "support/file.h"
+#include "wasm-interpreter.h"
+#include "wasm-printing.h"
+#include "wasm-s-parser.h"
+#include "wasm-validator.h"
+
+using namespace wasm;
+
+#include "../glue.cpp"
+
diff --git a/src/js/binaryen.idl b/src/js/binaryen.idl
new file mode 100644
index 000000000..2297cfd5f
--- /dev/null
+++ b/src/js/binaryen.idl
@@ -0,0 +1,51 @@
+
+interface Literal {
+ void Literal(double x);
+};
+
+interface Name {
+ void Name(DOMString x);
+};
+
+interface Module {
+};
+
+interface AllocatingModule {
+};
+
+AllocatingModule implements Module;
+
+[Prefix="ModuleInstance::", NoDelete]
+interface ExternalInterface {
+};
+
+interface ShellExternalInterface {
+};
+
+ShellExternalInterface implements ExternalInterface;
+
+interface ModuleInstance {
+ void ModuleInstance([Ref] Module m, ExternalInterface i);
+
+ [Value] Literal callExport([Ref] Name name, [Ref] LiteralList arguments);
+};
+
+[Prefix="ModuleInstance::"]
+interface LiteralList {
+ void push_back([Ref] Literal l);
+};
+
+// S-Expressions
+
+interface Element {
+};
+
+interface SExpressionParser {
+ void SExpressionParser(DOMString input);
+ attribute Element root;
+};
+
+interface SExpressionWasmBuilder {
+ void SExpressionWasmBuilder([Ref] AllocatingModule wasm, [Ref] Element input, boolean debug);
+};
+
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index c13cd3512..fb3268877 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -255,6 +255,9 @@ public:
}
}
+ // constructor without onError
+ SExpressionWasmBuilder(AllocatingModule& wasm, Element& module, bool debug=false) : SExpressionWasmBuilder(wasm, module, [&]() { abort(); }, debug) {}
+
private:
// pre-parse types and function definitions, so we know function return types before parsing their contents
diff --git a/test/binaryen.js/test.js b/test/binaryen.js/test.js
new file mode 100644
index 000000000..c090d94b2
--- /dev/null
+++ b/test/binaryen.js/test.js
@@ -0,0 +1,27 @@
+
+var input =
+ '(module\n' +
+ ' (export "add" $add)\n' +
+ ' (func $add (param $x f64) (param $y f64) (result f64)\n' +
+ ' (f64.add\n' +
+ ' (get_local $x)\n' +
+ ' (get_local $y)\n' +
+ ' )\n' +
+ ' )\n' +
+ ')\n';
+
+var module = new Binaryen.AllocatingModule();
+var parser = new Binaryen.SExpressionParser(input);
+var builder = new Binaryen.SExpressionWasmBuilder(module, parser.get_root(), false);
+
+var interface_ = new Binaryen.ShellExternalInterface();
+var instance = new Binaryen.ModuleInstance(module, interface_);
+
+var name = Binaryen.Name('add');
+
+var args = new Binaryen.LiteralList();
+args.push_back(new Binaryen.Literal(40));
+args.push_back(new Binaryen.Literal(2));
+
+console.log('answer is ' + instance.callExport(name, args).getf64() + '.');
+