| #include <cassert> |
| #include <iostream> |
| |
| #include <binaryen-c.h> |
| #include <wasm.h> |
| |
| int main() { |
| BinaryenModuleRef module = BinaryenModuleCreate(); |
| |
| BinaryenType ii[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; |
| BinaryenType params = BinaryenTypeCreate(ii, 2); |
| BinaryenType results = BinaryenTypeNone(); |
| |
| BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()), |
| y = BinaryenLocalGet(module, 1, BinaryenTypeInt32()); |
| BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); |
| BinaryenExpressionRef drop = BinaryenDrop(module, add); |
| BinaryenExpressionRef funcBody = |
| BinaryenBlock(module, "", &drop, 1, BinaryenTypeNone()); |
| |
| BinaryenFunctionRef adder = |
| BinaryenAddFunction(module, "adder", params, results, NULL, 0, funcBody); |
| |
| BinaryenModuleAddDebugInfoFileName(module, "main"); |
| |
| BinaryenFunctionSetDebugLocation(adder, x, 0, 2, 13); |
| BinaryenFunctionSetDebugLocation(adder, drop, 0, 2, 2); |
| |
| BinaryenModuleValidate(module); |
| BinaryenSetDebugInfo(true); |
| const char* runPasses[] = {"propagate-debug-locs"}; |
| BinaryenModuleRunPasses(module, runPasses, 1); |
| |
| auto& debugLocations = module->getFunction("adder")->debugLocations; |
| assert(debugLocations.size() == 4); |
| assert(debugLocations[x]->columnNumber == 13); |
| assert(debugLocations[y]->columnNumber == 13); |
| assert(debugLocations[add]->columnNumber == 2); |
| assert(debugLocations[drop]->columnNumber == 2); |
| |
| BinaryenSetDebugInfo(false); |
| BinaryenModuleDispose(module); |
| |
| std::cout << "success." << std::endl; |
| |
| return 0; |
| } |