static bool RenderExport(WasmRenderContext& c, AstExport& export_, const AstModule::FuncVector& funcs) { if (!RenderIndent(c)) return false; if (!c.buffer.append("(export \"")) return false; if (!RenderEscapedString(c, export_.name())) return false; if (!c.buffer.append("\" ")) return false; if (export_.kind() == DefinitionKind::Memory) { if (!c.buffer.append("memory")) return false; } else { const AstFunc* func = funcs[export_.ref().index()]; if (func->name().empty()) { if (!RenderInt32(c, export_.ref().index())) return false; } else { if (!RenderName(c, func->name())) return false; } } if (!c.buffer.append(")\n")) return false; return true; }
static bool RenderExport(WasmRenderContext& c, AstExport& export_, const AstModule::NameVector& funcImportNames, const AstModule::FuncVector& funcs) { if (!RenderIndent(c)) return false; if (!c.buffer.append("(export \"")) return false; if (!RenderEscapedString(c, export_.name())) return false; if (!c.buffer.append("\" ")) return false; switch (export_.kind()) { case DefinitionKind::Function: { uint32_t index = export_.ref().index(); AstName name = index < funcImportNames.length() ? funcImportNames[index] : funcs[index - funcImportNames.length()]->name(); if (name.empty()) { if (!RenderInt32(c, index)) return false; } else { if (!RenderName(c, name)) return false; } break; } case DefinitionKind::Table: { if (!c.buffer.append("table")) return false; break; } case DefinitionKind::Memory: { if (!c.buffer.append("memory")) return false; break; } case DefinitionKind::Global: { if (!c.buffer.append("global")) return false; if (!RenderRef(c, export_.ref())) return false; break; } } return c.buffer.append(")\n"); }