示例#1
0
        internal override void Parse(ObjWastTranspiler transpiler)
        {
            // ex. (func private $test (param i32) (result i32) (local i32) ... )

            if (identifier == null && !parseBody)
            {
                string name = transpiler.ParseName();
                access = OwMemberAccess.Private;

                if (!string.IsNullOrWhiteSpace(name))
                {
                    var tempAccess = transpiler.ParseAccess(name);

                    if (tempAccess == null)
                    {
                        throw new Exception();
                    }

                    access = tempAccess.Value;
                }

                identifier = transpiler.ParseIdentifier();
                return;
            }

            parseBody = true;
        }
示例#2
0
 public OwMethodInfo(OwType declaringType, OwMemberAccess access, string identifier, OwType resultType,
                     OwParameterInfo[] parameters)
     : base(declaringType, access, identifier)
 {
     ResultType = resultType;
     Parameters = parameters;
 }
示例#3
0
        internal override void Parse(ObjWastTranspiler transpiler)
        {
            string         identifier = null;
            OwMemberAccess access     = OwMemberAccess.Private;
            OwType         type;

            string name = transpiler.ParseName();

            if (string.IsNullOrWhiteSpace(name))
            {
                // ex. (field $test i32)

                identifier = transpiler.ParseIdentifier();

                if (identifier == null)
                {
                    throw new Exception();
                }

                type = transpiler.ParseType(@struct.Module);
            }
            else
            {
                // ex. (field i32)
                // ex. (field private i32)
                // ex. (field private $test i32)

                OwMemberAccess?tempAccess = transpiler.ParseAccess(name);

                if (tempAccess == null)
                {
                    // ex. (field i32)
                    type = transpiler.ParseType(@struct.Module, name);
                }
                else
                {
                    // ex. (field private i32)
                    // ex. (field private $test i32)

                    access     = tempAccess.Value;
                    identifier = transpiler.ParseIdentifier();
                    type       = transpiler.ParseType(@struct.Module);
                }
            }

            @struct.DefineField(access, identifier, type);
        }
示例#4
0
 internal void AddMethod(OwMemberAccess access, string identifier, OwType resultType, OwParameterInfo[] parameters)
 {
     members.Add(new OwMethodInfo(this, access, identifier, resultType, parameters));
 }
示例#5
0
 internal void AddField(OwMemberAccess access, string identifier, OwType type)
 {
     members.Add(new OwFieldInfo(this, access, identifier, type));
 }
示例#6
0
 public OwFieldInfo(OwType declaringType, OwMemberAccess access, string identifier, OwType fieldType)
     : base(declaringType, access, identifier)
 {
     FieldType = fieldType;
 }
示例#7
0
 public OwMemberInfo(OwType declaringType, OwMemberAccess access, string identifier)
 {
     DeclaringType = declaringType;
     Access        = access;
     Identifier    = identifier;
 }
示例#8
0
 internal void DefineMethod(OwMemberAccess access, string identifier, OwType resultType, OwParameterInfo[] parameters)
 {
     type.AddMethod(access, identifier, resultType, parameters);
 }
示例#9
0
 internal void DefineField(OwMemberAccess access, string identifier, OwType fieldType)
 {
     type.AddField(access, identifier, fieldType);
 }