public TableType(BinaryReader reader) { sbyte type = LEB128.ReadInt7(reader); if (type != (int)WebAssemblyType.anyfunc) { throw new Exception($"File is invalid. Expected byte '{WebAssemblyType.anyfunc}', received '{type}'."); } element_type = WebAssemblyType.anyfunc; limits = new ResizeLimit(reader); }
public void ReadTest(MemoryStream stream) { BinaryReader reader = new BinaryReader(stream); Assert.AreEqual(LEB128.ReadUInt32(reader), 0xFF00FF00u); Assert.AreEqual(LEB128.ReadUInt32(reader), 0xAABBAAu); Assert.AreEqual(LEB128.ReadUInt32(reader), 0xCCu); Assert.AreEqual(LEB128.ReadUInt7(reader), 0x11u); Assert.AreEqual(LEB128.ReadUInt7(reader), 0x7Fu); Assert.AreEqual(LEB128.ReadInt32(reader), 0x7F00FF00); Assert.AreEqual(LEB128.ReadInt32(reader), 0xAABBAA); Assert.AreEqual(LEB128.ReadInt32(reader), 0xCC); Assert.AreEqual(LEB128.ReadInt32(reader), -1); Assert.AreEqual(LEB128.ReadInt7(reader), 0x11); Assert.AreEqual(LEB128.ReadInt7(reader), -1); }
public FuncType(BinaryReader reader) { int form = LEB128.ReadInt7(reader); if (form != (int)WebAssemblyType.func) { throw new Exception($"File is invalid. Expected byte '{WebAssemblyType.func}', received '{form}'."); } uint param_count = LEB128.ReadUInt32(reader); if (param_count > int.MaxValue) { throw new NotImplementedException($"Count larger than {int.MaxValue} bytes not supported."); } param_types = new WebAssemblyType[param_count]; for (uint i = 0; i < param_count; i++) { param_types[i] = (WebAssemblyType)LEB128.ReadInt7(reader); if (!WebAssemblyHelper.IsValueType(param_types[i])) { throw new Exception($"File is invalid. Expected valid value type, received '{param_types[i]}'."); } } int return_count = LEB128.ReadInt7(reader); if (return_count != 0 && return_count != 1) { throw new Exception($"File is invalid. Expected byte 0 or 1, received {return_count}."); } if (return_count == 1) { return_type = (WebAssemblyType)LEB128.ReadInt7(reader); if (!WebAssemblyHelper.IsValueType((WebAssemblyType)return_type)) { throw new Exception($"File is invalid. Expected valid value type, received '{return_type}'."); } } }