summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/c-writer.cc39
1 files changed, 16 insertions, 23 deletions
diff --git a/src/c-writer.cc b/src/c-writer.cc
index 2e490dab..b28b6919 100644
--- a/src/c-writer.cc
+++ b/src/c-writer.cc
@@ -453,6 +453,8 @@ class CWriter {
void PushFuncSection(std::string_view include_condition = "");
+ bool IsImport(const std::string& name) const;
+
const WriteCOptions& options_;
const Module* module_ = nullptr;
const Func* func_ = nullptr;
@@ -473,7 +475,6 @@ class CWriter {
StackVarSymbolMap stack_var_sym_map_;
SymbolSet global_syms_;
SymbolSet local_syms_;
- SymbolSet import_syms_;
TypeVector type_stack_;
std::vector<Label> label_stack_;
std::vector<TryCatchLabel> try_catch_stack_;
@@ -878,7 +879,6 @@ void CWriter::DefineImportName(const Import* import,
break;
}
- import_syms_.insert(name);
import_module_sym_map_.emplace(name, import->module_name);
const std::string mangled = ExportName(module, field_name);
@@ -1053,24 +1053,21 @@ void CWriter::Write(const GlobalName& name) {
}
void CWriter::Write(const ExternalPtr& name) {
- bool is_import = import_syms_.count(name.name) != 0;
- if (!is_import) {
+ if (!IsImport(name.name)) {
Write("&");
}
Write(GlobalName(name));
}
void CWriter::Write(const ExternalInstancePtr& name) {
- bool is_import = import_syms_.count(name.name) != 0;
- if (!is_import) {
+ if (!IsImport(name.name)) {
Write("&");
}
Write("instance->", GlobalName(name));
}
void CWriter::Write(const ExternalRef& name) {
- bool is_import = import_syms_.count(name.name) != 0;
- if (is_import) {
+ if (IsImport(name.name)) {
Write("(*", GlobalName(name), ")");
} else {
Write(GlobalName(name));
@@ -1078,8 +1075,7 @@ void CWriter::Write(const ExternalRef& name) {
}
void CWriter::Write(const ExternalInstanceRef& name) {
- bool is_import = import_syms_.count(name.name) != 0;
- if (is_import) {
+ if (IsImport(name.name)) {
Write("(*instance->", GlobalName(name), ")");
} else {
Write("instance->", GlobalName(name));
@@ -1386,8 +1382,7 @@ void CWriter::WriteInitExprTerminal(const Expr* expr) {
"(wasm_rt_function_ptr_t)",
ExternalPtr(ModuleFieldType::Func, func->name), ", ");
- bool is_import = import_module_sym_map_.count(func->name) != 0;
- if (is_import) {
+ if (IsImport(func->name)) {
Write("instance->", GlobalName(ModuleFieldType::Import,
import_module_sym_map_[func->name]));
} else {
@@ -2159,8 +2154,7 @@ void CWriter::WriteElemInitializers() {
const FuncType* func_type = module_->GetFuncType(func->decl.type_var);
Write("{", FuncTypeExpr(func_type), ", (wasm_rt_function_ptr_t)",
ExternalPtr(ModuleFieldType::Func, func->name), ", ");
- const bool is_import = import_module_sym_map_.count(func->name) != 0;
- if (is_import) {
+ if (IsImport(func->name)) {
Write("offsetof(", ModuleInstanceTypeName(), ", ",
GlobalName(ModuleFieldType::Import,
import_module_sym_map_[func->name]),
@@ -2346,8 +2340,7 @@ void CWriter::WriteExports(CWriterPhase kind) {
Write("return ", ExternalRef(ModuleFieldType::Func, internal_name),
"(");
- bool is_import = import_module_sym_map_.count(internal_name) != 0;
- if (is_import) {
+ if (IsImport(internal_name)) {
Write("instance->",
GlobalName(ModuleFieldType::Import,
import_module_sym_map_[internal_name]));
@@ -2435,9 +2428,7 @@ void CWriter::WriteInit() {
for (Var* var : module_->starts) {
Write(ExternalRef(ModuleFieldType::Func, module_->GetFunc(*var)->name));
- bool is_import =
- import_module_sym_map_.count(module_->GetFunc(*var)->name) != 0;
- if (is_import) {
+ if (IsImport(module_->GetFunc(*var)->name)) {
Write("(instance->",
GlobalName(ModuleFieldType::Import,
import_module_sym_map_[module_->GetFunc(*var)->name]),
@@ -2623,6 +2614,10 @@ void CWriter::PushFuncSection(std::string_view include_condition) {
stream_ = &func_sections_.back().second;
}
+bool CWriter::IsImport(const std::string& name) const {
+ return import_module_sym_map_.count(name);
+}
+
void CWriter::Write(const Func& func) {
func_ = &func;
local_syms_.clear();
@@ -3060,8 +3055,7 @@ void CWriter::Write(const ExprList& exprs) {
assert(var.is_name());
Write(ExternalRef(ModuleFieldType::Func, var.name()), "(");
- bool is_import = import_module_sym_map_.count(func.name) != 0;
- if (is_import) {
+ if (IsImport(func.name)) {
Write("instance->", GlobalName(ModuleFieldType::Import,
import_module_sym_map_[func.name]));
} else {
@@ -3391,8 +3385,7 @@ void CWriter::Write(const ExprList& exprs) {
", (wasm_rt_function_ptr_t)",
ExternalPtr(ModuleFieldType::Func, func->name), ", ");
- bool is_import = import_module_sym_map_.count(func->name) != 0;
- if (is_import) {
+ if (IsImport(func->name)) {
Write("instance->", GlobalName(ModuleFieldType::Import,
import_module_sym_map_[func->name]));
} else {