public ExportSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null) { _functionOffsetProvider = functionOffsetProvider; Name = input.ReadString(); Description = (ImpexDesc)input.ReadByte(); Index = input.ReadIntULEB128(); }
public ElementSection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null) : base(WASMSectionId.ElementSection) { Capacity = (int)input.ReadIntULEB128(); for (int i = 0; i < Capacity; i++) { Add(new ElementSubsection(ref input, functionOffsetProvider)); } }
public ElementSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null) { _functionOffsetProvider = functionOffsetProvider; TableIndex = input.ReadIntULEB128(); Expression = input.ReadExpression(); FunctionIndices = new List <uint>((int)input.ReadIntULEB128()); for (int i = 0; i < FunctionIndices.Capacity; i++) { FunctionIndices.Add(input.ReadIntULEB128()); } }
public List <WASMInstruction> ReadExpression(IFunctionOffsetProvider functionOffsetProvider, bool isBreakingOnElseInstruction = false) { var expression = new List <WASMInstruction>(3); while (Position < Length) { var op = (OPCode)ReadByte(); var instruction = WASMInstruction.Create(ref this, op, functionOffsetProvider); expression.Add(instruction); if (op == OPCode.End || (isBreakingOnElseInstruction && op == OPCode.Else)) { break; } } return(expression); }
public CodeSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider) { _functionOffsetProvider = functionOffsetProvider; int funcSize = (int)input.ReadIntULEB128(); int funcEnd = input.Position + funcSize; Locals = new List <Local>((int)input.ReadIntULEB128()); for (int i = 0; i < Locals.Capacity; i++) { Locals.Add(new Local(ref input)); } Bytecode = new byte[funcEnd - input.Position]; input.ReadBytes(Bytecode); if (funcEnd != input.Position) { throw new Exception("Malformed subsection, since the expected ending position did not match the actual ending position."); } }
public CallIns(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null) : this(input.ReadIntULEB128()) { _functionOffsetProvider = functionOffsetProvider; }