blob: 06bf8ab48fcfda625d7fcf937ac00793e4247069 [file] [log] [blame] [edit]
#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;
}