diff options
Diffstat (limited to 'src/c-writer.cc')
-rw-r--r-- | src/c-writer.cc | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/c-writer.cc b/src/c-writer.cc index 280ef5f7..0e8d6f91 100644 --- a/src/c-writer.cc +++ b/src/c-writer.cc @@ -240,8 +240,9 @@ class CWriter { void WriteInit(); void WriteFuncs(); void Write(const Func&); - void WriteParams(); - void WriteLocals(); + void WriteParamsAndLocals(); + void WriteParams(const std::vector<std::string>& index_to_name); + void WriteLocals(const std::vector<std::string>& index_to_name); void WriteStackVarDeclarations(); void Write(const ExprList&); @@ -1281,8 +1282,7 @@ void CWriter::Write(const Func& func) { Write("static ", ResultType(func.decl.sig.result_types), " ", GlobalName(func.name), "("); - WriteParams(); - WriteLocals(); + WriteParamsAndLocals(); Write("FUNC_PROLOGUE;", Newline()); stream_ = &func_stream_; @@ -1316,13 +1316,18 @@ void CWriter::Write(const Func& func) { func_ = nullptr; } -void CWriter::WriteParams() { - if (func_->decl.sig.param_types.empty()) { +void CWriter::WriteParamsAndLocals() { + std::vector<std::string> index_to_name; + MakeTypeBindingReverseMapping(func_->GetNumParamsAndLocals(), func_->bindings, + &index_to_name); + WriteParams(index_to_name); + WriteLocals(index_to_name); +} + +void CWriter::WriteParams(const std::vector<std::string>& index_to_name) { + if (func_->GetNumParams() == 0) { Write("void"); } else { - std::vector<std::string> index_to_name; - MakeTypeBindingReverseMapping(func_->decl.sig.param_types.size(), - func_->param_bindings, &index_to_name); Indent(4); for (Index i = 0; i < func_->GetNumParams(); ++i) { if (i != 0) { @@ -1338,10 +1343,8 @@ void CWriter::WriteParams() { Write(") ", OpenBrace()); } -void CWriter::WriteLocals() { - std::vector<std::string> index_to_name; - MakeTypeBindingReverseMapping(func_->local_types.size(), - func_->local_bindings, &index_to_name); +void CWriter::WriteLocals(const std::vector<std::string>& index_to_name) { + Index num_params = func_->GetNumParams(); for (Type type : {Type::I32, Type::I64, Type::F32, Type::F64}) { Index local_index = 0; size_t count = 0; @@ -1356,7 +1359,8 @@ void CWriter::WriteLocals() { Write(Newline()); } - Write(DefineLocalScopeName(index_to_name[local_index]), " = 0"); + Write(DefineLocalScopeName(index_to_name[num_params + local_index]), + " = 0"); ++count; } ++local_index; |