internal override void SaveAsWAT(BinaryWriter writer) { writer.Write("(import \""); writer.Write(WebAssemblyHelper.EscapeString(module_str)); writer.Write("\" \""); writer.Write(WebAssemblyHelper.EscapeString(field_str)); writer.Write("\" ("); switch (kind) { case WebAssemblyExternalKind.Function: writer.Write((uint)type); break; case WebAssemblyExternalKind.Table: ((TableType)type).SaveAsWAT(writer); break; case WebAssemblyExternalKind.Memory: ((MemoryType)type).SaveAsWAT(writer); break; case WebAssemblyExternalKind.Global: ((GlobalType)type).SaveAsWAT(writer); break; } writer.Write(')'); }
internal override void SaveAsWAT(BinaryWriter writer) { writer.Write($"(export \"{WebAssemblyHelper.EscapeString(field_str)}\" ("); switch (kind) { case WebAssemblyExternalKind.Function: writer.Write("func "); break; case WebAssemblyExternalKind.Memory: writer.Write("memory "); break; case WebAssemblyExternalKind.Table: writer.Write("table "); break; case WebAssemblyExternalKind.Global: writer.Write("global "); break; } writer.Write(index); writer.Write("))"); }
internal override void SaveAsWAT(BinaryWriter writer) { writer.Write("(data "); offset.SaveAsWAT(writer); writer.Write(" \""); writer.Write(WebAssemblyHelper.EscapeString(Encoding.UTF8.GetString(data))); writer.Write("\")"); }
public GlobalVariable(BinaryReader reader) { type = new GlobalType(reader); init = new InitExpr(reader); if (type.content_type != WebAssemblyHelper.GetInitExprType(init)) { throw new Exception("Global variable type and expression mismatch."); } }
public GlobalVariable(GlobalType type, InitExpr init) { this.type = type ?? throw new ArgumentException(nameof(type)); this.init = init ?? throw new ArgumentException(nameof(init)); if (type.content_type != WebAssemblyHelper.GetInitExprType(init)) { throw new Exception("Global variable type and expression mismatch."); } }
public GlobalType(WebAssemblyType content_type, bool mutability) { if (!WebAssemblyHelper.IsValueType(content_type)) { throw new ArgumentException(nameof(content_type)); } this.content_type = content_type; this.mutability = mutability; }
public FuncType(WebAssemblyType[] param_types, WebAssemblyType?return_type) { this.param_types = param_types ?? throw new ArgumentException(nameof(param_types)); this.return_type = return_type; if (param_types.Any(x => !WebAssemblyHelper.IsValueType(x))) { throw new ArgumentException(nameof(param_types)); } if (return_type != null && !WebAssemblyHelper.IsValueType((WebAssemblyType)this.return_type)) { throw new ArgumentException(nameof(return_type)); } }
internal override void SaveAsWAT(BinaryWriter writer) { writer.Write("(func "); if (param_types.Length > 0) { writer.Write($"(param {WebAssemblyHelper.ToString(param_types)}) "); } if (return_type != null) { writer.Write($"(result {return_type.ToString()})"); } writer.Write(')'); }
public GlobalType(BinaryReader reader) { content_type = (WebAssemblyType)LEB128.ReadUInt7(reader); if (!WebAssemblyHelper.IsValueType(content_type)) { throw new Exception($"File is invalid. Expected value type, received '{content_type}'."); } byte mut = LEB128.ReadUInt7(reader); if (mut != 0 && mut != 1) { throw new Exception($"File is invalid. Expected 0 or 1, received '{mut}'."); } mutability = mut != 0; }
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}'."); } } }
public override string ToString() { return($"({GetType().Name} (bodies {WebAssemblyHelper.ToString(entries)}))"); }
public override string ToString() { return($"({GetType().Name} (return {return_type?.ToString() ?? "void"}) (params {WebAssemblyHelper.ToString(param_types)}))"); }
public override string ToString() { return($"({GetType().Name} (globals {WebAssemblyHelper.ToString(globals)}))"); }
internal override void SaveAsWAT(BinaryWriter writer) { writer.Write($"(i32.const {WebAssemblyHelper.GetOffset(this)})"); }
public override string ToString() { return($"({GetType().Name} (locals {WebAssemblyHelper.ToString(locals)}) (code {BitConverter.ToString(code).Replace("-", "")}))"); }
public override string ToString() { return($"({GetType().Name} (table_index {table_index}) {offset} (function_index {WebAssemblyHelper.ToString(function_index)}))"); }