diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-07-11 18:38:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-11 18:38:32 -0700 |
commit | e6ea66898b90cd7b468aa5a78589672edf557389 (patch) | |
tree | 96772fc2b58c3690416df37a7881544990009c94 /src | |
parent | 812943d51bac4767c4b7f749f17c26277e27f796 (diff) | |
download | binaryen-e6ea66898b90cd7b468aa5a78589672edf557389.tar.gz binaryen-e6ea66898b90cd7b468aa5a78589672edf557389.tar.bz2 binaryen-e6ea66898b90cd7b468aa5a78589672edf557389.zip |
add docs and error hints when a Call should be a CallImport (#1081)
* add docs and error hints when a Call should be a CallImport
* fix binaryen API docs in docs/
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.h | 3 | ||||
-rw-r--r-- | src/wasm/wasm-validator.cpp | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 90c7795f0..f37bcf085 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -281,6 +281,9 @@ BinaryenExpressionRef BinaryenSwitch(BinaryenModuleRef module, const char **name // type returned by the function being called, as that // function might not have been created yet, so we don't // know what it is. +// Also note that WebAssembly does not differentiate +// between Call and CallImport, but Binaryen does, so you +// must use CallImport if calling an import, and vice versa. BinaryenExpressionRef BinaryenCall(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType); BinaryenExpressionRef BinaryenCallImport(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType); BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, const char* type); diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index 9421070e7..21bf68b62 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -168,7 +168,12 @@ void WasmValidator::visitSwitch(Switch *curr) { void WasmValidator::visitCall(Call *curr) { if (!validateGlobally) return; auto* target = getModule()->getFunctionOrNull(curr->target); - if (!shouldBeTrue(!!target, curr, "call target must exist")) return; + if (!shouldBeTrue(!!target, curr, "call target must exist")) { + if (getModule()->getImportOrNull(curr->target)) { + std::cerr << "(perhaps it should be a CallImport instead of Call?)\n"; + } + return; + } if (!shouldBeTrue(curr->operands.size() == target->params.size(), curr, "call param number must match")) return; for (size_t i = 0; i < curr->operands.size(); i++) { if (!shouldBeEqualOrFirstIsUnreachable(curr->operands[i]->type, target->params[i], curr, "call param types must match")) { |