Index: src/wasm/asm-wasm-builder.cc |
diff --git a/src/wasm/asm-wasm-builder.cc b/src/wasm/asm-wasm-builder.cc |
index a675debc56a3f2557f735c2c5042c2a688b8e06b..99f06e4a66d9b130456f7d60f005daef8724eabb 100644 |
--- a/src/wasm/asm-wasm-builder.cc |
+++ b/src/wasm/asm-wasm-builder.cc |
@@ -566,8 +566,9 @@ class AsmWasmBuilderImpl : public AstVisitor { |
if (var->is_function()) { |
uint16_t index = LookupOrInsertFunction(var); |
builder_->FunctionAt(index)->Exported(1); |
- builder_->FunctionAt(index) |
- ->SetName(raw_name->raw_data(), raw_name->length()); |
+ builder_->FunctionAt(index)->SetName( |
+ reinterpret_cast<const char*>(raw_name->raw_data()), |
+ raw_name->length()); |
} |
} |
} |
@@ -632,12 +633,11 @@ class AsmWasmBuilderImpl : public AstVisitor { |
private: |
class ImportedFunctionIndices : public ZoneObject { |
public: |
- const unsigned char* name_; |
+ const char* name_; |
int name_length_; |
WasmModuleBuilder::SignatureMap signature_to_index_; |
- ImportedFunctionIndices(const unsigned char* name, int name_length, |
- Zone* zone) |
+ ImportedFunctionIndices(const char* name, int name_length, Zone* zone) |
: name_(name), name_length_(name_length), signature_to_index_(zone) {} |
}; |
ZoneHashMap table_; |
@@ -649,7 +649,7 @@ class AsmWasmBuilderImpl : public AstVisitor { |
ZoneAllocationPolicy(builder->zone())), |
builder_(builder) {} |
- void AddImport(Variable* v, const unsigned char* name, int name_length) { |
+ void AddImport(Variable* v, const char* name, int name_length) { |
ImportedFunctionIndices* indices = new (builder_->zone()) |
ImportedFunctionIndices(name, name_length, builder_->zone()); |
ZoneHashMap::Entry* entry = table_.LookupOrInsert( |
@@ -667,17 +667,9 @@ class AsmWasmBuilderImpl : public AstVisitor { |
if (pos != indices->signature_to_index_.end()) { |
return pos->second; |
} else { |
- uint16_t index = builder_->builder_->AddFunction(); |
+ uint32_t index = builder_->builder_->AddImport( |
+ indices->name_, indices->name_length_, sig); |
indices->signature_to_index_[sig] = index; |
- WasmFunctionBuilder* function = builder_->builder_->FunctionAt(index); |
- function->External(1); |
- function->SetName(indices->name_, indices->name_length_); |
- if (sig->return_count() > 0) { |
- function->ReturnType(sig->GetReturn()); |
- } |
- for (size_t i = 0; i < sig->parameter_count(); i++) { |
- function->AddParam(sig->GetParam(i)); |
- } |
return index; |
} |
} |
@@ -803,8 +795,9 @@ class AsmWasmBuilderImpl : public AstVisitor { |
if (bounds_->get(target).lower->Is(Type::Function())) { |
const AstRawString* name = |
prop->key()->AsLiteral()->AsRawPropertyName(); |
- imported_function_table_.AddImport(target->var(), name->raw_data(), |
- name->length()); |
+ imported_function_table_.AddImport( |
+ target->var(), reinterpret_cast<const char*>(name->raw_data()), |
+ name->length()); |
} |
} |
// Property values in module scope don't emit code, so return. |
@@ -1275,13 +1268,17 @@ class AsmWasmBuilderImpl : public AstVisitor { |
} |
index = |
imported_function_table_.GetFunctionIndex(vp->var(), sig.Build()); |
+ VisitCallArgs(expr); |
+ current_function_builder_->Emit(kExprCallImport); |
+ current_function_builder_->EmitVarInt(expr->arguments()->length()); |
+ current_function_builder_->EmitVarInt(index); |
} else { |
index = LookupOrInsertFunction(vp->var()); |
+ VisitCallArgs(expr); |
+ current_function_builder_->Emit(kExprCallFunction); |
+ current_function_builder_->EmitVarInt(expr->arguments()->length()); |
+ current_function_builder_->EmitVarInt(index); |
} |
- VisitCallArgs(expr); |
- current_function_builder_->Emit(kExprCallFunction); |
- current_function_builder_->EmitVarInt(expr->arguments()->length()); |
- current_function_builder_->EmitVarInt(index); |
break; |
} |
case Call::KEYED_PROPERTY_CALL: { |