diff options
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 086b9751e..381176390 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -123,14 +123,26 @@ private: Literal callFunction(IString name, LiteralList& arguments) { class FunctionScope { - public: + public: std::map<IString, Literal> locals; Function* function; - FunctionScope(Function* function, LiteralList& arguments) : function(function) { - assert(function->params.size() == arguments.size()); + FunctionScope(Function* function, LiteralList& arguments) + : function(function) { + if (function->params.size() != arguments.size()) { + std::cerr << "Function `" << function->name << "` expects " + << function->params.size() << " parameters, got " + << arguments.size() << " arguments." << std::endl; + abort(); + } for (size_t i = 0; i < arguments.size(); i++) { - assert(function->params[i].type == arguments[i].type); + if (function->params[i].type != arguments[i].type) { + std::cerr << "Function `" << function->name << "` expects type " + << printWasmType(function->params[i].type) + << " for parameter " << i << ", got " + << printWasmType(arguments[i].type) << "." << std::endl; + abort(); + } locals[function->params[i].name] = arguments[i]; } for (auto& local : function->locals) { |