| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 void BuildForeignInitFunction() { | 84 void BuildForeignInitFunction() { |
| 85 foreign_init_function_index_ = builder_->AddFunction(); | 85 foreign_init_function_index_ = builder_->AddFunction(); |
| 86 FunctionSig::Builder b(zone(), 0, foreign_variables_.size()); | 86 FunctionSig::Builder b(zone(), 0, foreign_variables_.size()); |
| 87 for (auto i = foreign_variables_.begin(); i != foreign_variables_.end(); | 87 for (auto i = foreign_variables_.begin(); i != foreign_variables_.end(); |
| 88 ++i) { | 88 ++i) { |
| 89 b.AddParam(i->type); | 89 b.AddParam(i->type); |
| 90 } | 90 } |
| 91 current_function_builder_ = | 91 current_function_builder_ = |
| 92 builder_->FunctionAt(foreign_init_function_index_); | 92 builder_->FunctionAt(foreign_init_function_index_); |
| 93 current_function_builder_->Exported(1); | 93 current_function_builder_->SetExported(); |
| 94 std::string raw_name = "__foreign_init__"; | 94 std::string raw_name = "__foreign_init__"; |
| 95 current_function_builder_->SetName(raw_name.data(), | 95 current_function_builder_->SetName(raw_name.data(), |
| 96 static_cast<int>(raw_name.size())); | 96 static_cast<int>(raw_name.size())); |
| 97 current_function_builder_->SetSignature(b.Build()); | 97 current_function_builder_->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 current_function_builder_->EmitGetLocal(static_cast<uint32_t>(pos)); | 99 current_function_builder_->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 current_function_builder_->EmitWithVarInt(kExprStoreGlobal, index); | 102 current_function_builder_->EmitWithVarInt(kExprStoreGlobal, index); |
| 103 } | 103 } |
| 104 current_function_builder_ = nullptr; | 104 current_function_builder_ = nullptr; |
| 105 } | 105 } |
| 106 | 106 |
| 107 i::Handle<i::FixedArray> GetForeignArgs() { | 107 i::Handle<i::FixedArray> GetForeignArgs() { |
| 108 i::Handle<FixedArray> ret = isolate_->factory()->NewFixedArray( | 108 i::Handle<FixedArray> ret = isolate_->factory()->NewFixedArray( |
| 109 static_cast<int>(foreign_variables_.size())); | 109 static_cast<int>(foreign_variables_.size())); |
| 110 for (size_t i = 0; i < foreign_variables_.size(); ++i) { | 110 for (size_t i = 0; i < foreign_variables_.size(); ++i) { |
| 111 ForeignVariable* fv = &foreign_variables_[i]; | 111 ForeignVariable* fv = &foreign_variables_[i]; |
| 112 ret->set(static_cast<int>(i), *fv->name); | 112 ret->set(static_cast<int>(i), *fv->name); |
| 113 } | 113 } |
| 114 return ret; | 114 return ret; |
| 115 } | 115 } |
| 116 | 116 |
| 117 void Compile() { | 117 void Build() { |
| 118 InitializeInitFunction(); | 118 InitializeInitFunction(); |
| 119 RECURSE(VisitFunctionLiteral(literal_)); | 119 RECURSE(VisitFunctionLiteral(literal_)); |
| 120 BuildForeignInitFunction(); | 120 BuildForeignInitFunction(); |
| 121 } | 121 } |
| 122 | 122 |
| 123 void VisitVariableDeclaration(VariableDeclaration* decl) {} | 123 void VisitVariableDeclaration(VariableDeclaration* decl) {} |
| 124 | 124 |
| 125 void VisitFunctionDeclaration(FunctionDeclaration* decl) { | 125 void VisitFunctionDeclaration(FunctionDeclaration* decl) { |
| 126 DCHECK_EQ(kModuleScope, scope_); | 126 DCHECK_EQ(kModuleScope, scope_); |
| 127 DCHECK_NULL(current_function_builder_); | 127 DCHECK_NULL(current_function_builder_); |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 DCHECK_EQ(kExportScope, scope_); | 600 DCHECK_EQ(kExportScope, scope_); |
| 601 VariableProxy* expr = prop->value()->AsVariableProxy(); | 601 VariableProxy* expr = prop->value()->AsVariableProxy(); |
| 602 DCHECK_NOT_NULL(expr); | 602 DCHECK_NOT_NULL(expr); |
| 603 Variable* var = expr->var(); | 603 Variable* var = expr->var(); |
| 604 Literal* name = prop->key()->AsLiteral(); | 604 Literal* name = prop->key()->AsLiteral(); |
| 605 DCHECK_NOT_NULL(name); | 605 DCHECK_NOT_NULL(name); |
| 606 DCHECK(name->IsPropertyName()); | 606 DCHECK(name->IsPropertyName()); |
| 607 const AstRawString* raw_name = name->AsRawPropertyName(); | 607 const AstRawString* raw_name = name->AsRawPropertyName(); |
| 608 if (var->is_function()) { | 608 if (var->is_function()) { |
| 609 uint32_t index = LookupOrInsertFunction(var); | 609 uint32_t index = LookupOrInsertFunction(var); |
| 610 builder_->FunctionAt(index)->Exported(1); | 610 builder_->FunctionAt(index)->SetExported(); |
| 611 builder_->FunctionAt(index)->SetName( | 611 builder_->FunctionAt(index)->SetName( |
| 612 reinterpret_cast<const char*>(raw_name->raw_data()), | 612 reinterpret_cast<const char*>(raw_name->raw_data()), |
| 613 raw_name->length()); | 613 raw_name->length()); |
| 614 } | 614 } |
| 615 } | 615 } |
| 616 } | 616 } |
| 617 | 617 |
| 618 void VisitArrayLiteral(ArrayLiteral* expr) { UNREACHABLE(); } | 618 void VisitArrayLiteral(ArrayLiteral* expr) { UNREACHABLE(); } |
| 619 | 619 |
| 620 void LoadInitFunction() { | 620 void LoadInitFunction() { |
| (...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1754 }; | 1754 }; |
| 1755 | 1755 |
| 1756 AsmWasmBuilder::AsmWasmBuilder(Isolate* isolate, Zone* zone, | 1756 AsmWasmBuilder::AsmWasmBuilder(Isolate* isolate, Zone* zone, |
| 1757 FunctionLiteral* literal, AsmTyper* typer) | 1757 FunctionLiteral* literal, AsmTyper* typer) |
| 1758 : isolate_(isolate), zone_(zone), literal_(literal), typer_(typer) {} | 1758 : isolate_(isolate), zone_(zone), literal_(literal), typer_(typer) {} |
| 1759 | 1759 |
| 1760 // TODO(aseemgarg): probably should take zone (to write wasm to) as input so | 1760 // TODO(aseemgarg): probably should take zone (to write wasm to) as input so |
| 1761 // that zone in constructor may be thrown away once wasm module is written. | 1761 // that zone in constructor may be thrown away once wasm module is written. |
| 1762 ZoneBuffer* AsmWasmBuilder::Run(i::Handle<i::FixedArray>* foreign_args) { | 1762 ZoneBuffer* AsmWasmBuilder::Run(i::Handle<i::FixedArray>* foreign_args) { |
| 1763 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, typer_); | 1763 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, typer_); |
| 1764 impl.Compile(); | 1764 impl.Build(); |
| 1765 *foreign_args = impl.GetForeignArgs(); | 1765 *foreign_args = impl.GetForeignArgs(); |
| 1766 ZoneBuffer* buffer = new (zone_) ZoneBuffer(zone_); | 1766 ZoneBuffer* buffer = new (zone_) ZoneBuffer(zone_); |
| 1767 WasmModuleWriter* writer = impl.builder_->Build(zone_); | 1767 impl.builder_->WriteTo(*buffer); |
| 1768 writer->WriteTo(*buffer); | |
| 1769 return buffer; | 1768 return buffer; |
| 1770 } | 1769 } |
| 1771 } // namespace wasm | 1770 } // namespace wasm |
| 1772 } // namespace internal | 1771 } // namespace internal |
| 1773 } // namespace v8 | 1772 } // namespace v8 |
| OLD | NEW |