internal override uint BinarySize() { var module_len = Encoding.UTF8.GetByteCount(module_str); var field_len = Encoding.UTF8.GetByteCount(field_str); uint size = LEB128.SizeOf(module_len) + LEB128.SizeOf(field_len) + (uint)module_len + (uint)field_len + sizeof(byte); switch (kind) { case WebAssemblyExternalKind.Function: size += LEB128.SizeOf((uint)type); break; case WebAssemblyExternalKind.Table: size += ((TableType)type).BinarySize(); break; case WebAssemblyExternalKind.Memory: size += ((MemoryType)type).BinarySize(); break; case WebAssemblyExternalKind.Global: size += ((GlobalType)type).BinarySize(); break; } return(size); }
internal override uint BinarySize() { uint local_count = (uint)locals.Length; long body_size = LEB128.SizeOf(local_count) + (uint)locals.Select(x => (long)x.BinarySize()).Sum() + code.Length; return(LEB128.SizeOf((uint)body_size) + LEB128.SizeOf(local_count) + (uint)locals.Select(x => (long)x.BinarySize()).Sum() + (uint)code.Length); }
internal override void SaveAsWASM(BinaryWriter writer) { uint local_count = (uint)locals.Length; uint body_size = LEB128.SizeOf(local_count) + (uint)locals.Select(x => (long)x.BinarySize()).Sum() + (uint)code.Length; LEB128.WriteUInt32(writer, body_size); LEB128.WriteUInt32(writer, local_count); foreach (var local in locals) { local.SaveAsWASM(writer); } writer.Write(code); }
public CustomSection(string name, byte[] payload_data) : base(WebAssemblyModuleID.Custom) { if (payload_data.LongLength > int.MaxValue) { throw new NotImplementedException($"Payload longer than {int.MaxValue} bytes not supported."); } this.name = name; this.payload_data = payload_data; uint name_bytes = (uint)Encoding.UTF8.GetByteCount(name); payload_len = LEB128.SizeOf(name_bytes) + name_bytes + (uint)payload_data.Length; }
public void SizeOfTest() { // sizeof(Int7) is always 1 byte Assert.AreEqual(LEB128.SizeOf((byte)0), 1u); Assert.AreEqual(LEB128.SizeOf((byte)255), 1u); Assert.AreEqual(LEB128.SizeOf((sbyte)-1), 1u); Assert.AreEqual(LEB128.SizeOf((sbyte)127), 1u); Assert.AreEqual(LEB128.SizeOf(0), 1u); Assert.AreEqual(LEB128.SizeOf(0u), 1u); Assert.AreEqual(LEB128.SizeOf(int.MaxValue), 5u); Assert.AreEqual(LEB128.SizeOf(int.MinValue), 5u); Assert.AreEqual(LEB128.SizeOf(uint.MaxValue), 5u); }
public CustomSection(BinaryReader reader) : base(reader) { uint name_len = LEB128.ReadUInt32(reader); name = Encoding.UTF8.GetString(reader.ReadBytes((int)name_len)); uint payload_size = payload_len - (LEB128.SizeOf(name_len) + name_len); if (payload_size > int.MaxValue) { throw new NotImplementedException($"Payload longer than {int.MaxValue} bytes not supported."); } payload_data = reader.ReadBytes((int)payload_size); }
internal override uint BinarySize() { return(base.BinarySize() + (uint)entries.Select(x => (long)x.BinarySize()).Sum() + LEB128.SizeOf((uint)entries.Length)); }
internal override uint BinarySize() { return(sizeof(byte) + LEB128.SizeOf((uint)param_types.Length) + (uint)param_types.Length + sizeof(byte) * (return_type == null ? 1u : 2u)); }
internal override uint BinarySize() { var field = Encoding.UTF8.GetByteCount(field_str); return(LEB128.SizeOf((uint)field) + (uint)field + sizeof(byte) + LEB128.SizeOf(index)); }
internal override uint BinarySize() { return(base.BinarySize() + LEB128.SizeOf(index)); }
public StartSection(uint index) : base(WebAssemblyModuleID.Start) { this.index = index; payload_len = LEB128.SizeOf(index); }
internal override uint BinarySize() { return(sizeof(byte) + LEB128.SizeOf(initial) + (maximum != null ? LEB128.SizeOf((uint)maximum) : 0)); }
internal override uint BinarySize() { return(LEB128.SizeOf(count) + sizeof(byte)); }
internal override uint BinarySize() { return(LEB128.SizeOf(table_index) + offset.BinarySize() + (uint)function_index.Length + (uint)function_index.Select(x => (long)LEB128.SizeOf(x)).Sum()); }
internal override uint BinarySize() { int str_size = Encoding.UTF8.GetByteCount(name); return(base.BinarySize() + LEB128.SizeOf(str_size) + (uint)str_size + (uint)payload_data.Length); }
internal override uint BinarySize() { return(LEB128.SizeOf(memory_index) + LEB128.SizeOf((uint)data.Length) + (uint)data.Length + offset.BinarySize()); }