summaryrefslogtreecommitdiff
path: root/test/run-gen-spec-js.py
diff options
context:
space:
mode:
authorBen Smith <binji@chromium.org>2016-11-08 12:25:58 -0800
committerBen Smith <binji@chromium.org>2016-12-05 15:41:36 -0800
commit98355e73ef121b8c3e2a0433e31fc8bac7057c70 (patch)
tree55536508a775e31ea652bdf1f780c4a5b7643ba2 /test/run-gen-spec-js.py
parent538f5e61d10b19a0d7283e765589432bbeedcfa8 (diff)
downloadwabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.tar.gz
wabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.tar.bz2
wabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.zip
Fix gen-spec-js.py
This now (mostly) matches the output from the spec interpreter.
Diffstat (limited to 'test/run-gen-spec-js.py')
-rwxr-xr-xtest/run-gen-spec-js.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/test/run-gen-spec-js.py b/test/run-gen-spec-js.py
new file mode 100755
index 00000000..73daee12
--- /dev/null
+++ b/test/run-gen-spec-js.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import argparse
+import os
+import subprocess
+import sys
+
+import find_exe
+import utils
+from utils import Error
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+GEN_SPEC_JS_PY = os.path.join(SCRIPT_DIR, 'gen-spec-js.py')
+
+
+def main(args):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-o', '--out-dir', metavar='PATH',
+ help='output directory for files.')
+ parser.add_argument('--wast2wasm', metavar='PATH',
+ help='override wast2wasm executable.')
+ parser.add_argument('--wasm2wast', metavar='PATH',
+ help='override wasm2wast executable.')
+ parser.add_argument('--js-engine', metavar='PATH',
+ help='the path to the JavaScript engine with which to run'
+ ' the generated JavaScript. If not specified, JavaScript'
+ ' output will be written to stdout.')
+ parser.add_argument('--js-engine-flags', metavar='FLAGS',
+ help='additional flags for JavaScript engine.',
+ action='append', default=[])
+ parser.add_argument('--prefix-js',
+ help='Prefix JavaScript file to pass to gen-spec-js')
+ parser.add_argument('-v', '--verbose', help='print more diagnotic messages.',
+ action='store_true')
+ parser.add_argument('--no-error-cmdline',
+ help='don\'t display the subprocess\'s commandline when' +
+ ' an error occurs', dest='error_cmdline',
+ action='store_false')
+ parser.add_argument('-p', '--print-cmd', help='print the commands that are run.',
+ action='store_true')
+ parser.add_argument('--use-libc-allocator', action='store_true')
+ parser.add_argument('file', help='wast file.')
+ options = parser.parse_args(args)
+
+ with utils.TempDirectory(options.out_dir, 'run-gen-spec-js-') as out_dir:
+ wast2wasm = utils.Executable(
+ find_exe.GetWast2WasmExecutable(options.wast2wasm),
+ '--spec',
+ '--no-check-assert-invalid',
+ error_cmdline=options.error_cmdline)
+ wast2wasm.AppendOptionalArgs({
+ '-v': options.verbose,
+ '--use-libc-allocator': options.use_libc_allocator
+ })
+
+ gen_spec_js = utils.Executable(
+ sys.executable, GEN_SPEC_JS_PY,
+ '--temp-dir', out_dir,
+ error_cmdline=options.error_cmdline)
+ gen_spec_js.AppendOptionalArgs({
+ '--wast2wasm': options.wast2wasm,
+ '--wasm2wast': options.wasm2wast,
+ '--prefix': options.prefix_js,
+ })
+ gen_spec_js.verbose = options.print_cmd
+
+ json_file = utils.ChangeDir(utils.ChangeExt(options.file, '.json'), out_dir)
+ js_file = utils.ChangeExt(json_file, '.js')
+ wast2wasm.RunWithArgs(options.file, '-o', json_file)
+
+ if options.js_engine:
+ gen_spec_js.RunWithArgs(json_file, '-o', js_file)
+ js = utils.Executable(options.js_engine, *options.js_engine_flags)
+ js.RunWithArgs(js_file)
+ else:
+ # Write JavaScript output to stdout
+ gen_spec_js.RunWithArgs(json_file)
+
+if __name__ == '__main__':
+ try:
+ sys.exit(main(sys.argv[1:]))
+ except Error as e:
+ sys.stderr.write(str(e) + '\n')
+ sys.exit(1)