diff options
Diffstat (limited to 'src/binaryen-c.cpp')
-rw-r--r-- | src/binaryen-c.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 44f323339..d70f31912 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -30,6 +30,7 @@ #include "wasm-builder.h" #include "wasm-interpreter.h" #include "wasm-s-parser.h" +#include "wasm-stack.h" #include "wasm-validator.h" #include "wasm.h" #include "wasm2js.h" @@ -3908,6 +3909,10 @@ void BinaryenModulePrint(BinaryenModuleRef module) { std::cout << *(Module*)module; } +void BinaryenModulePrintStackIR(BinaryenModuleRef module) { + wasm::printStackIR(std::cout, (Module*)module); +} + void BinaryenModulePrintAsmjs(BinaryenModuleRef module) { auto* wasm = (Module*)module; Wasm2JSBuilder::Flags flags; @@ -4090,6 +4095,21 @@ size_t BinaryenModuleWriteText(BinaryenModuleRef module, return std::min(outputSize, temp.size()); } +size_t BinaryenModuleWriteStackIR(BinaryenModuleRef module, + char* output, + size_t outputSize) { + // use a stringstream as an std::ostream. Extract the std::string + // representation, and then store in the output. + std::stringstream ss; + wasm::printStackIR(ss, (Module*)module); + + const auto temp = ss.str(); + const auto ctemp = temp.c_str(); + + strncpy(output, ctemp, outputSize); + return std::min(outputSize, temp.size()); +} + BinaryenBufferSizes BinaryenModuleWriteWithSourceMap(BinaryenModuleRef module, const char* url, char* output, @@ -4139,6 +4159,21 @@ char* BinaryenModuleAllocateAndWriteText(BinaryenModuleRef module) { return cout; } +char* BinaryenModuleAllocateAndWriteStackIR(BinaryenModuleRef module) { + std::stringstream ss; + bool colors = Colors::isEnabled(); + + Colors::setEnabled(false); // do not use colors for writing + wasm::printStackIR(ss, (Module*)module); + Colors::setEnabled(colors); // restore colors state + + const std::string out = ss.str(); + const int len = out.length() + 1; + char* cout = (char*)malloc(len); + strncpy(cout, out.c_str(), len); + return cout; +} + BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { auto* wasm = new Module; std::vector<char> buffer(false); |