summaryrefslogtreecommitdiff
path: root/src/wasm-builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-builder.h')
-rw-r--r--src/wasm-builder.h29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/wasm-builder.h b/src/wasm-builder.h
index a3b0febaa..876474223 100644
--- a/src/wasm-builder.h
+++ b/src/wasm-builder.h
@@ -43,12 +43,13 @@ public:
// make* functions create an expression instance.
static std::unique_ptr<Function> makeFunction(Name name,
- Signature sig,
+ HeapType type,
std::vector<Type>&& vars,
Expression* body = nullptr) {
+ assert(type.isSignature());
auto func = std::make_unique<Function>();
func->name = name;
- func->sig = sig;
+ func->type = type;
func->body = body;
func->vars.swap(vars);
return func;
@@ -56,20 +57,21 @@ public:
static std::unique_ptr<Function> makeFunction(Name name,
std::vector<NameType>&& params,
- Type resultType,
+ HeapType type,
std::vector<NameType>&& vars,
Expression* body = nullptr) {
+ assert(type.isSignature());
auto func = std::make_unique<Function>();
func->name = name;
+ func->type = type;
func->body = body;
- std::vector<Type> paramVec;
- for (auto& param : params) {
- paramVec.push_back(param.type);
+ for (size_t i = 0; i < params.size(); ++i) {
+ NameType& param = params[i];
+ assert(func->getParams()[i] == param.type);
Index index = func->localNames.size();
func->localIndices[param.name] = index;
func->localNames[index] = param.name;
}
- func->sig = Signature(Type(paramVec), resultType);
for (auto& var : vars) {
func->vars.push_back(var.type);
Index index = func->localNames.size();
@@ -948,11 +950,12 @@ public:
static Index addParam(Function* func, Name name, Type type) {
// only ok to add a param if no vars, otherwise indices are invalidated
- assert(func->localIndices.size() == func->sig.params.size());
+ assert(func->localIndices.size() == func->getParams().size());
assert(name.is());
- std::vector<Type> params(func->sig.params.begin(), func->sig.params.end());
+ Signature sig = func->getSig();
+ std::vector<Type> params(sig.params.begin(), sig.params.end());
params.push_back(type);
- func->sig.params = Type(params);
+ func->type = Signature(Type(params), sig.results);
Index index = func->localNames.size();
func->localIndices[name] = index;
func->localNames[index] = name;
@@ -980,12 +983,6 @@ public:
func->localIndices.clear();
}
- static void clearLocals(Function* func) {
- func->sig.params = Type::none;
- func->vars.clear();
- clearLocalNames(func);
- }
-
// ensure a node is a block, if it isn't already, and optionally append to the
// block
Block* blockify(Expression* any, Expression* append = nullptr) {