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(')');
            }
Exemple #2
0
            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("\")");
 }
Exemple #4
0
            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.");
                }
            }
Exemple #5
0
            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.");
                }
            }
Exemple #6
0
            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(')');
            }
Exemple #9
0
            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;
            }
Exemple #10
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)}))");
 }
Exemple #12
0
 public override string ToString()
 {
     return($"({GetType().Name} (return {return_type?.ToString() ?? "void"}) (params {WebAssemblyHelper.ToString(param_types)}))");
 }
Exemple #13
0
 public override string ToString()
 {
     return($"({GetType().Name} (globals {WebAssemblyHelper.ToString(globals)}))");
 }
Exemple #14
0
 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("-", "")}))");
 }
Exemple #16
0
 public override string ToString()
 {
     return($"({GetType().Name} (table_index {table_index}) {offset} (function_index {WebAssemblyHelper.ToString(function_index)}))");
 }