| 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/signature.h" | 5 #include "src/signature.h" |
| 6 | 6 |
| 7 #include "src/handles.h" | 7 #include "src/handles.h" |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 #include "src/zone/zone-containers.h" | 9 #include "src/zone/zone-containers.h" |
| 10 | 10 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 } | 48 } |
| 49 | 49 |
| 50 WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) | 50 WasmFunctionBuilder::WasmFunctionBuilder(WasmModuleBuilder* builder) |
| 51 : builder_(builder), | 51 : builder_(builder), |
| 52 locals_(builder->zone()), | 52 locals_(builder->zone()), |
| 53 signature_index_(0), | 53 signature_index_(0), |
| 54 exported_(0), | 54 exported_(0), |
| 55 func_index_(static_cast<uint32_t>(builder->functions_.size())), | 55 func_index_(static_cast<uint32_t>(builder->functions_.size())), |
| 56 body_(builder->zone()), | 56 body_(builder->zone()), |
| 57 name_(builder->zone()), | 57 name_(builder->zone()), |
| 58 exported_name_(builder->zone()), |
| 58 i32_temps_(builder->zone()), | 59 i32_temps_(builder->zone()), |
| 59 i64_temps_(builder->zone()), | 60 i64_temps_(builder->zone()), |
| 60 f32_temps_(builder->zone()), | 61 f32_temps_(builder->zone()), |
| 61 f64_temps_(builder->zone()), | 62 f64_temps_(builder->zone()), |
| 62 direct_calls_(builder->zone()) {} | 63 direct_calls_(builder->zone()) {} |
| 63 | 64 |
| 64 void WasmFunctionBuilder::EmitVarInt(uint32_t val) { | 65 void WasmFunctionBuilder::EmitVarInt(uint32_t val) { |
| 65 byte buffer[8]; | 66 byte buffer[8]; |
| 66 byte* ptr = buffer; | 67 byte* ptr = buffer; |
| 67 LEBHelper::write_u32v(&ptr, val); | 68 LEBHelper::write_u32v(&ptr, val); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 DirectCallIndex call; | 136 DirectCallIndex call; |
| 136 call.offset = body_.size(); | 137 call.offset = body_.size(); |
| 137 call.direct_index = index; | 138 call.direct_index = index; |
| 138 direct_calls_.push_back(call); | 139 direct_calls_.push_back(call); |
| 139 byte code[] = {U32V_5(0)}; | 140 byte code[] = {U32V_5(0)}; |
| 140 EmitCode(code, sizeof(code)); | 141 EmitCode(code, sizeof(code)); |
| 141 } | 142 } |
| 142 | 143 |
| 143 void WasmFunctionBuilder::SetExported() { exported_ = true; } | 144 void WasmFunctionBuilder::SetExported() { exported_ = true; } |
| 144 | 145 |
| 146 void WasmFunctionBuilder::SetExportedWithName(const char* name, |
| 147 int name_length) { |
| 148 exported_ = true; |
| 149 exported_name_.resize(name_length); |
| 150 memcpy(exported_name_.data(), name, name_length); |
| 151 } |
| 152 |
| 145 void WasmFunctionBuilder::SetName(const char* name, int name_length) { | 153 void WasmFunctionBuilder::SetName(const char* name, int name_length) { |
| 146 name_.clear(); | 154 name_.resize(name_length); |
| 147 if (name_length > 0) { | 155 memcpy(name_.data(), name, name_length); |
| 148 for (int i = 0; i < name_length; ++i) { | |
| 149 name_.push_back(*(name + i)); | |
| 150 } | |
| 151 } | |
| 152 } | 156 } |
| 153 | 157 |
| 154 void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { | 158 void WasmFunctionBuilder::WriteSignature(ZoneBuffer& buffer) const { |
| 155 buffer.write_u32v(signature_index_); | 159 buffer.write_u32v(signature_index_); |
| 156 } | 160 } |
| 157 | 161 |
| 158 void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { | 162 void WasmFunctionBuilder::WriteExport(ZoneBuffer& buffer) const { |
| 159 if (exported_) { | 163 if (exported_) { |
| 160 buffer.write_size(name_.size()); | 164 const ZoneVector<char>* exported_name = |
| 161 if (name_.size() > 0) { | 165 exported_name_.size() == 0 ? &name_ : &exported_name_; |
| 162 buffer.write(reinterpret_cast<const byte*>(&name_[0]), name_.size()); | 166 buffer.write_size(exported_name->size()); |
| 163 } | 167 buffer.write(reinterpret_cast<const byte*>(exported_name->data()), |
| 168 exported_name->size()); |
| 164 buffer.write_u8(kExternalFunction); | 169 buffer.write_u8(kExternalFunction); |
| 165 buffer.write_u32v(func_index_ + | 170 buffer.write_u32v(func_index_ + |
| 166 static_cast<uint32_t>(builder_->imports_.size())); | 171 static_cast<uint32_t>(builder_->imports_.size())); |
| 167 } | 172 } |
| 168 } | 173 } |
| 169 | 174 |
| 170 void WasmFunctionBuilder::WriteBody(ZoneBuffer& buffer) const { | 175 void WasmFunctionBuilder::WriteBody(ZoneBuffer& buffer) const { |
| 171 size_t locals_size = locals_.Size(); | 176 size_t locals_size = locals_.Size(); |
| 172 buffer.write_size(locals_size + body_.size()); | 177 buffer.write_size(locals_size + body_.size()); |
| 173 buffer.EnsureSpace(locals_size); | 178 buffer.EnsureSpace(locals_size); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 function->name_.size()); | 493 function->name_.size()); |
| 489 } | 494 } |
| 490 buffer.write_u8(0); | 495 buffer.write_u8(0); |
| 491 } | 496 } |
| 492 FixupSection(buffer, start, payload_offset); | 497 FixupSection(buffer, start, payload_offset); |
| 493 } | 498 } |
| 494 } | 499 } |
| 495 } // namespace wasm | 500 } // namespace wasm |
| 496 } // namespace internal | 501 } // namespace internal |
| 497 } // namespace v8 | 502 } // namespace v8 |
| OLD | NEW |