summaryrefslogtreecommitdiff
path: root/src/c-writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/c-writer.cc')
-rw-r--r--src/c-writer.cc32
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;