Index: src/wasm/asm-wasm-builder.cc |
diff --git a/src/wasm/asm-wasm-builder.cc b/src/wasm/asm-wasm-builder.cc |
index 69777b5e14123c9e3c9ea9b3bc122666409edeee..30f84642f82acd53cc9b88b3f1e37c47d858ab29 100644 |
--- a/src/wasm/asm-wasm-builder.cc |
+++ b/src/wasm/asm-wasm-builder.cc |
@@ -47,12 +47,24 @@ class AsmWasmBuilderImpl : public AstVisitor { |
cache_(TypeCache::Get()), |
breakable_blocks_(zone), |
block_size_(0), |
- init_function_initialized(false), |
init_function_index(0) { |
InitializeAstVisitor(isolate); |
} |
- void Compile() { RECURSE(VisitFunctionLiteral(literal_)); } |
+ void InitializeInitFunction() { |
+ unsigned char init[] = "__init__"; |
+ init_function_index = builder_->AddFunction(); |
+ current_function_builder_ = builder_->FunctionAt(init_function_index); |
+ current_function_builder_->SetName(init, 8); |
+ current_function_builder_->ReturnType(kAstStmt); |
+ current_function_builder_->Exported(1); |
+ current_function_builder_ = nullptr; |
+ } |
+ |
+ void Compile() { |
+ InitializeInitFunction(); |
+ RECURSE(VisitFunctionLiteral(literal_)); |
+ } |
void VisitVariableDeclaration(VariableDeclaration* decl) {} |
@@ -380,12 +392,6 @@ class AsmWasmBuilderImpl : public AstVisitor { |
AddLeb128(LookupOrInsertLocal(var, var_type), true); |
} |
} |
- } else if (marking_exported) { |
- Variable* var = expr->var(); |
- if (var->is_function()) { |
- uint16_t index = LookupOrInsertFunction(var); |
- builder_->FunctionAt(index)->Exported(1); |
- } |
} |
} |
@@ -425,25 +431,28 @@ class AsmWasmBuilderImpl : public AstVisitor { |
ZoneList<ObjectLiteralProperty*>* props = expr->properties(); |
for (int i = 0; i < props->length(); ++i) { |
ObjectLiteralProperty* prop = props->at(i); |
- RECURSE(Visit(prop->value())); |
+ DCHECK(marking_exported); |
+ VariableProxy* expr = prop->value()->AsVariableProxy(); |
+ DCHECK(expr != nullptr); |
+ Variable* var = expr->var(); |
+ Literal* name = prop->key()->AsLiteral(); |
+ DCHECK(name != nullptr); |
+ DCHECK(name->IsPropertyName()); |
+ const AstRawString* raw_name = name->AsRawPropertyName(); |
+ 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()); |
+ } |
} |
} |
void VisitArrayLiteral(ArrayLiteral* expr) { UNREACHABLE(); } |
void LoadInitFunction() { |
- if (!init_function_initialized) { |
- init_function_initialized = true; |
- unsigned char init[] = "__init__"; |
- init_function_index = builder_->AddFunction(init, 8); |
- current_function_builder_ = builder_->FunctionAt(init_function_index); |
- current_function_builder_->ReturnType(kAstStmt); |
- current_function_builder_->Exported(1); |
- in_function_ = true; |
- } else { |
- current_function_builder_ = builder_->FunctionAt(init_function_index); |
- in_function_ = true; |
- } |
+ current_function_builder_ = builder_->FunctionAt(init_function_index); |
+ in_function_ = true; |
} |
void UnLoadInitFunction() { |
@@ -465,7 +474,6 @@ class AsmWasmBuilderImpl : public AstVisitor { |
if (value_op != nullptr && MatchBinaryOperation(value_op) == kAsIs) { |
VariableProxy* target_var = expr->target()->AsVariableProxy(); |
VariableProxy* effective_value_var = GetLeft(value_op)->AsVariableProxy(); |
- // TODO(aseemgarg): simplify block_size_ or replace with a kNop |
if (target_var != nullptr && effective_value_var != nullptr && |
target_var->var() == effective_value_var->var()) { |
block_size_--; |
@@ -969,8 +977,7 @@ class AsmWasmBuilderImpl : public AstVisitor { |
DCHECK(builder_ != nullptr); |
ZoneHashMap::Entry* entry = functions_.Lookup(v, ComputePointerHash(v)); |
if (entry == nullptr) { |
- uint16_t index = builder_->AddFunction(v->raw_name()->raw_data(), |
- v->raw_name()->length()); |
+ uint16_t index = builder_->AddFunction(); |
IndexContainer* container = new (zone()) IndexContainer(); |
container->index = index; |
entry = functions_.LookupOrInsert(v, ComputePointerHash(v), |
@@ -1013,7 +1020,6 @@ class AsmWasmBuilderImpl : public AstVisitor { |
TypeCache const& cache_; |
ZoneVector<std::pair<BreakableStatement*, bool>> breakable_blocks_; |
int block_size_; |
- bool init_function_initialized; |
uint16_t init_function_index; |
DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |