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));
 }
Exemple #9
0
            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));
 }
Exemple #14
0
 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());
 }