| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 // Required to get M_E etc. in MSVC. | 7 // Required to get M_E etc. in MSVC. |
| 8 #if defined(_WIN32) | 8 #if defined(_WIN32) |
| 9 #define _USE_MATH_DEFINES | 9 #define _USE_MATH_DEFINES |
| 10 #endif | 10 #endif |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 } | 94 } |
| 95 foreign_init_function_->ExportAs( | 95 foreign_init_function_->ExportAs( |
| 96 CStrVector(AsmWasmBuilder::foreign_init_name)); | 96 CStrVector(AsmWasmBuilder::foreign_init_name)); |
| 97 foreign_init_function_->SetSignature(b.Build()); | 97 foreign_init_function_->SetSignature(b.Build()); |
| 98 for (size_t pos = 0; pos < foreign_variables_.size(); ++pos) { | 98 for (size_t pos = 0; pos < foreign_variables_.size(); ++pos) { |
| 99 foreign_init_function_->EmitGetLocal(static_cast<uint32_t>(pos)); | 99 foreign_init_function_->EmitGetLocal(static_cast<uint32_t>(pos)); |
| 100 ForeignVariable* fv = &foreign_variables_[pos]; | 100 ForeignVariable* fv = &foreign_variables_[pos]; |
| 101 uint32_t index = LookupOrInsertGlobal(fv->var, fv->type); | 101 uint32_t index = LookupOrInsertGlobal(fv->var, fv->type); |
| 102 foreign_init_function_->EmitWithVarInt(kExprSetGlobal, index); | 102 foreign_init_function_->EmitWithVarInt(kExprSetGlobal, index); |
| 103 } | 103 } |
| 104 foreign_init_function_->Emit(kExprEnd); |
| 104 } | 105 } |
| 105 | 106 |
| 106 Handle<FixedArray> GetForeignArgs() { | 107 Handle<FixedArray> GetForeignArgs() { |
| 107 Handle<FixedArray> ret = isolate_->factory()->NewFixedArray( | 108 Handle<FixedArray> ret = isolate_->factory()->NewFixedArray( |
| 108 static_cast<int>(foreign_variables_.size())); | 109 static_cast<int>(foreign_variables_.size())); |
| 109 for (size_t i = 0; i < foreign_variables_.size(); ++i) { | 110 for (size_t i = 0; i < foreign_variables_.size(); ++i) { |
| 110 ForeignVariable* fv = &foreign_variables_[i]; | 111 ForeignVariable* fv = &foreign_variables_[i]; |
| 111 ret->set(static_cast<int>(i), *fv->name); | 112 ret->set(static_cast<int>(i), *fv->name); |
| 112 } | 113 } |
| 113 return ret; | 114 return ret; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 124 return false; | 125 return false; |
| 125 } | 126 } |
| 126 if (!typer_finished_) { | 127 if (!typer_finished_) { |
| 127 typer_->FailWithMessage("Module missing export section."); | 128 typer_->FailWithMessage("Module missing export section."); |
| 128 typer_failed_ = true; | 129 typer_failed_ = true; |
| 129 } | 130 } |
| 130 if (typer_failed_) { | 131 if (typer_failed_) { |
| 131 return false; | 132 return false; |
| 132 } | 133 } |
| 133 BuildForeignInitFunction(); | 134 BuildForeignInitFunction(); |
| 135 init_function_->Emit(kExprEnd); // finish init function. |
| 134 return true; | 136 return true; |
| 135 } | 137 } |
| 136 | 138 |
| 137 void VisitVariableDeclaration(VariableDeclaration* decl) {} | 139 void VisitVariableDeclaration(VariableDeclaration* decl) {} |
| 138 | 140 |
| 139 void VisitFunctionDeclaration(FunctionDeclaration* decl) { | 141 void VisitFunctionDeclaration(FunctionDeclaration* decl) { |
| 140 DCHECK_EQ(kModuleScope, scope_); | 142 DCHECK_EQ(kModuleScope, scope_); |
| 141 DCHECK_NULL(current_function_builder_); | 143 DCHECK_NULL(current_function_builder_); |
| 142 FunctionLiteral* old_func = decl->fun(); | 144 FunctionLiteral* old_func = decl->fun(); |
| 143 Zone zone(isolate_->allocator(), ZONE_NAME); | 145 Zone zone(isolate_->allocator(), ZONE_NAME); |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 DCHECK_NE(kWasmStmt, type); | 538 DCHECK_NE(kWasmStmt, type); |
| 537 InsertParameter(scope->parameter(i), type, i); | 539 InsertParameter(scope->parameter(i), type, i); |
| 538 } | 540 } |
| 539 } else { | 541 } else { |
| 540 UNREACHABLE(); | 542 UNREACHABLE(); |
| 541 } | 543 } |
| 542 } | 544 } |
| 543 RECURSE(VisitDeclarations(scope->declarations())); | 545 RECURSE(VisitDeclarations(scope->declarations())); |
| 544 if (typer_failed_) return; | 546 if (typer_failed_) return; |
| 545 RECURSE(VisitStatements(expr->body())); | 547 RECURSE(VisitStatements(expr->body())); |
| 548 if (scope_ == kFuncScope) { |
| 549 // Finish the function-body scope block. |
| 550 current_function_builder_->Emit(kExprEnd); |
| 551 } |
| 546 } | 552 } |
| 547 | 553 |
| 548 void VisitNativeFunctionLiteral(NativeFunctionLiteral* expr) { | 554 void VisitNativeFunctionLiteral(NativeFunctionLiteral* expr) { |
| 549 UNREACHABLE(); | 555 UNREACHABLE(); |
| 550 } | 556 } |
| 551 | 557 |
| 552 void VisitConditional(Conditional* expr) { | 558 void VisitConditional(Conditional* expr) { |
| 553 DCHECK_EQ(kFuncScope, scope_); | 559 DCHECK_EQ(kFuncScope, scope_); |
| 554 RECURSE(Visit(expr->condition())); | 560 RECURSE(Visit(expr->condition())); |
| 555 // WASM ifs come with implicit blocks for both arms. | 561 // WASM ifs come with implicit blocks for both arms. |
| (...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1995 impl.builder_->WriteAsmJsOffsetTable(*asm_offsets_buffer); | 2001 impl.builder_->WriteAsmJsOffsetTable(*asm_offsets_buffer); |
| 1996 return {module_buffer, asm_offsets_buffer, success}; | 2002 return {module_buffer, asm_offsets_buffer, success}; |
| 1997 } | 2003 } |
| 1998 | 2004 |
| 1999 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; | 2005 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; |
| 2000 const char* AsmWasmBuilder::single_function_name = "__single_function__"; | 2006 const char* AsmWasmBuilder::single_function_name = "__single_function__"; |
| 2001 | 2007 |
| 2002 } // namespace wasm | 2008 } // namespace wasm |
| 2003 } // namespace internal | 2009 } // namespace internal |
| 2004 } // namespace v8 | 2010 } // namespace v8 |
| OLD | NEW |