示例#1
0
 private ImportEntry(string module_str, string field_str, WebAssemblyExternalKind kind, object type)
 {
     this.module_str = module_str ?? throw new ArgumentException(nameof(module_str));
     this.field_str  = field_str ?? throw new ArgumentException(nameof(field_str));
     this.kind       = kind;
     this.type       = type ?? throw new ArgumentException(nameof(type));
 }
示例#2
0
 public ExportEntry(string field_str, WebAssemblyExternalKind kind, uint index)
 {
     this.field_str = field_str ?? throw new ArgumentException(nameof(field_str));
     this.index     = index;
     if (!Enum.IsDefined(typeof(WebAssemblyExternalKind), kind))
     {
         throw new ArgumentException(nameof(kind));
     }
     this.kind = kind;
 }
示例#3
0
            public ImportEntry(BinaryReader reader)
            {
                uint module_len = LEB128.ReadUInt32(reader);

                if (module_len > int.MaxValue)
                {
                    throw new NotImplementedException($"String longer than {int.MaxValue} bytes not supported.");
                }
                module_str = Encoding.UTF8.GetString(reader.ReadBytes((int)module_len));

                uint field_len = LEB128.ReadUInt32(reader);

                if (field_len > int.MaxValue)
                {
                    throw new NotImplementedException($"String longer than {int.MaxValue} bytes not supported.");
                }
                field_str = Encoding.UTF8.GetString(reader.ReadBytes((int)field_len));

                byte tmp_kind = reader.ReadByte();

                if (!Enum.IsDefined(typeof(WebAssemblyExternalKind), tmp_kind))
                {
                    throw new Exception($"File is invalid. Expected 0, 1, 2, or 3, received '{tmp_kind}'.");
                }

                kind = (WebAssemblyExternalKind)tmp_kind;

                switch (kind)
                {
                case WebAssemblyExternalKind.Function:
                    type = LEB128.ReadUInt32(reader);
                    break;

                case WebAssemblyExternalKind.Table:
                    var table_tmp = new TableType(reader);
                    type = table_tmp;
                    break;

                case WebAssemblyExternalKind.Memory:
                    var memory_tmp = new MemoryType(reader);
                    type = memory_tmp;
                    break;

                case WebAssemblyExternalKind.Global:
                    var global_tmp = new GlobalType(reader);
                    type = global_tmp;
                    break;
                }
            }
示例#4
0
            public ExportEntry(BinaryReader reader)
            {
                uint field_len = LEB128.ReadUInt32(reader);

                if (field_len > int.MaxValue)
                {
                    throw new NotImplementedException($"String longer than {int.MaxValue} bytes not supported.");
                }
                field_str = Encoding.UTF8.GetString(reader.ReadBytes((int)field_len));

                var tmp_kind = reader.ReadByte();

                if (!Enum.IsDefined(typeof(WebAssemblyExternalKind), tmp_kind))
                {
                    throw new Exception($"File is invalid. Expected byte 0, 1, 2, or 3, received '{tmp_kind}'.");
                }

                kind = (WebAssemblyExternalKind)tmp_kind;

                index = LEB128.ReadUInt32(reader);
            }