5 #include "src/wasm/local-decl-encoder.h" 7 #include "src/signature.h" 8 #include "src/wasm/leb-helper.h" 14 void LocalDeclEncoder::Prepend(Zone* zone,
const byte** start,
15 const byte** end)
const {
16 size_t size = (*end - *start);
17 byte* buffer =
reinterpret_cast<byte*
>(zone->New(Size() + size));
18 size_t pos = Emit(buffer);
19 memcpy(buffer + pos, *start, size);
25 size_t LocalDeclEncoder::Emit(byte* buffer)
const {
27 LEBHelper::write_u32v(&pos, static_cast<uint32_t>(local_decls.size()));
28 for (
auto& local_decl : local_decls) {
29 LEBHelper::write_u32v(&pos, local_decl.first);
30 *pos = ValueTypes::ValueTypeCodeFor(local_decl.second);
33 DCHECK_EQ(Size(), pos - buffer);
34 return static_cast<size_t>(pos - buffer);
39 static_cast<uint32_t>(total + (sig ? sig->parameter_count() : 0));
41 if (local_decls.size() > 0 && local_decls.back().second == type) {
42 count += local_decls.back().first;
43 local_decls.pop_back();
45 local_decls.push_back(std::pair<uint32_t, ValueType>(count, type));
49 size_t LocalDeclEncoder::Size()
const {
50 size_t size = LEBHelper::sizeof_u32v(local_decls.size());
51 for (
auto p : local_decls) size += 1 + LEBHelper::sizeof_u32v(p.first);