summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJF Bastien <jfb@chromium.org>2016-01-04 17:11:16 -0800
committerJF Bastien <jfb@chromium.org>2016-01-04 17:11:16 -0800
commit3f4b5c1a4286ced0f1ffab14226246fe8b83b89e (patch)
tree7c12085c44846c280ccc83b3160d45796cf764cb /src
parentc6d08d97c196e2ceae5e3b960befcd6c66916cad (diff)
downloadbinaryen-3f4b5c1a4286ced0f1ffab14226246fe8b83b89e.tar.gz
binaryen-3f4b5c1a4286ced0f1ffab14226246fe8b83b89e.tar.bz2
binaryen-3f4b5c1a4286ced0f1ffab14226246fe8b83b89e.zip
Move file input / output to support.
Diffstat (limited to 'src')
-rw-r--r--src/s2wasm-main.cpp42
-rw-r--r--src/support/file.cpp51
-rw-r--r--src/support/file.h51
3 files changed, 106 insertions, 38 deletions
diff --git a/src/s2wasm-main.cpp b/src/s2wasm-main.cpp
index a7060dd6e..d8faa29f1 100644
--- a/src/s2wasm-main.cpp
+++ b/src/s2wasm-main.cpp
@@ -19,6 +19,7 @@
//
#include "support/command-line.h"
+#include "support/file.h"
#include "s2wasm.h"
using namespace cashew;
@@ -42,43 +43,8 @@ int main(int argc, const char *argv[]) {
});
options.parse(argc, argv);
- std::string input;
- {
- if (options.debug) {
- std::cerr << "Loading '" << options.extra["infile"] << "'..."
- << std::endl;
- }
- std::ifstream infile(options.extra["infile"]);
- if (!infile.is_open()) {
- std::cerr << "Failed opening '" << options.extra["infile"] << "'"
- << std::endl;
- exit(EXIT_FAILURE);
- }
- infile.seekg(0, std::ios::end);
- size_t insize = infile.tellg();
- input.resize(insize + 1);
- infile.seekg(0);
- infile.read(&input[0], insize);
- }
-
- std::streambuf *buffer;
- std::ofstream outfile;
- if (options.extra["output"].size()) {
- if (options.debug) {
- std::cerr << "Opening '" << options.extra["output"] << std::endl;
- }
- outfile.open(options.extra["output"],
- std::ofstream::out | std::ofstream::trunc);
- if (!outfile.is_open()) {
- std::cerr << "Failed opening '" << options.extra["output"] << "'"
- << std::endl;
- exit(EXIT_FAILURE);
- }
- buffer = outfile.rdbuf();
- } else {
- buffer = std::cout.rdbuf();
- }
- std::ostream out(buffer);
+ std::string input(read_file(options.extra["infile"], options.debug));
+ Output output(options.extra["output"], options.debug);
if (options.debug) std::cerr << "Parsing and wasming..." << std::endl;
AllocatingModule wasm;
@@ -93,7 +59,7 @@ int main(int argc, const char *argv[]) {
s2wasm.emscriptenGlue(meta);
if (options.debug) std::cerr << "Printing..." << std::endl;
- out << wasm << meta.str() << std::endl;
+ output << wasm << meta.str() << std::endl;
if (options.debug) std::cerr << "Done." << std::endl;
}
diff --git a/src/support/file.cpp b/src/support/file.cpp
new file mode 100644
index 000000000..470d07737
--- /dev/null
+++ b/src/support/file.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2015 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 "support/file.h"
+
+#include <cstdlib>
+
+std::string wasm::read_file(const std::string &filename, bool debug) {
+ if (debug) std::cerr << "Loading '" << filename << "'..." << std::endl;
+ std::ifstream infile(filename);
+ if (!infile.is_open()) {
+ std::cerr << "Failed opening '" << filename << "'" << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ infile.seekg(0, std::ios::end);
+ size_t insize = infile.tellg();
+ std::string input(insize + 1, '\0');
+ infile.seekg(0);
+ infile.read(&input[0], insize);
+ return input;
+}
+
+wasm::Output::Output(const std::string &filename, bool debug)
+ : outfile(), out([this, filename, debug]() {
+ std::streambuf *buffer;
+ if (filename.size()) {
+ if (debug) std::cerr << "Opening '" << filename << std::endl;
+ outfile.open(filename, std::ofstream::out | std::ofstream::trunc);
+ if (!outfile.is_open()) {
+ std::cerr << "Failed opening '" << filename << "'" << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ buffer = outfile.rdbuf();
+ } else {
+ buffer = std::cout.rdbuf();
+ }
+ return buffer;
+ }()) {}
diff --git a/src/support/file.h b/src/support/file.h
new file mode 100644
index 000000000..e9c35f5f3
--- /dev/null
+++ b/src/support/file.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2015 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.
+ */
+
+//
+// FIle helpers.
+//
+
+#ifndef wasm_support_file_h
+#define wasm_support_file_h
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <utility>
+
+namespace wasm {
+std::string read_file(const std::string &filename, bool debug);
+
+class Output {
+ public:
+ // An empty filename will open stdout instead.
+ Output(const std::string &filename, bool debug);
+ ~Output() = default;
+ template <typename T>
+ std::ostream &operator<<(const T &v) {
+ return out << v;
+ }
+
+ private:
+ Output() = delete;
+ Output(const Output &) = delete;
+ Output &operator=(const Output &) = delete;
+ std::ofstream outfile;
+ std::ostream out;
+};
+}
+
+#endif // wasm_support_file_h