Example #1
0
 public void Read(BinaryReader reader)
 {
     Name       = reader.ReadString();
     Comment    = BindingsGenerator.Read(reader, Comment);
     Value      = BindingsGenerator.Read(reader, Value);
     Attributes = BindingsGenerator.Read(reader, Attributes);
 }
Example #2
0
        public override void Init(Builder.BuildData buildData)
        {
            base.Init(buildData);

            // Cache if it it Scripting Object type
            if (InBuildScriptingObjectTypes.Contains(Name))
            {
                _isScriptingObject = true;
            }
            else if (BaseType == null)
            {
                _isScriptingObject = false;
            }
            else if (InBuildScriptingObjectTypes.Contains(BaseType.Type))
            {
                _isScriptingObject = true;
            }
            else
            {
                var baseApiTypeInfo = BindingsGenerator.FindApiTypeInfo(buildData, BaseType, this);
                if (baseApiTypeInfo != null)
                {
                    if (!baseApiTypeInfo.IsInited)
                    {
                        baseApiTypeInfo.Init(buildData);
                    }
                    _isScriptingObject = baseApiTypeInfo.IsScriptingObject;
                }
                else
                {
                    _isScriptingObject = false;
                }
            }
        }
Example #3
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write(IsAlias);
            BindingsGenerator.Write(writer, Type);

            base.Write(writer);
        }
Example #4
0
        /// <summary>
        /// Gets a value indicating whether this type is POD (plain old data).
        /// </summary>
        public bool IsPod(Builder.BuildData buildData, ApiTypeInfo caller)
        {
            var apiType = BindingsGenerator.FindApiTypeInfo(buildData, this, caller);

            if (apiType != null)
            {
                if (!apiType.IsInited)
                {
                    apiType.Init(buildData);
                }
                return(apiType.IsPod);
            }

            if (IsPtr || IsRef)
            {
                return(true);
            }

            // Hardcoded cases
            if (Type == "String" || Type == "Array")
            {
                return(false);
            }

            // Fallback to default
            return(true);
        }
Example #5
0
        public List <TypeInfo> Inheritance; // Data from parsing, used to interfaces and base type construct in Init

        public override void Init(Builder.BuildData buildData)
        {
            base.Init(buildData);

            if (BaseType == null && Interfaces == null && Inheritance != null)
            {
                // Extract base class and interfaces from inheritance info
                for (int i = 0; i < Inheritance.Count; i++)
                {
                    var apiTypeInfo = BindingsGenerator.FindApiTypeInfo(buildData, Inheritance[i], Parent);
                    if (apiTypeInfo is InterfaceInfo interfaceInfo)
                    {
                        if (Interfaces == null)
                        {
                            Interfaces = new List <InterfaceInfo>();
                        }
                        Interfaces.Add(interfaceInfo);
                    }
                    else if (apiTypeInfo is ClassStructInfo otherInfo)
                    {
                        if (otherInfo == this)
                        {
                            throw new Exception($"Type '{Name}' inherits from itself.");
                        }
                        if (BaseType != null)
                        {
                            throw new Exception($"Invalid '{Name}' inheritance (only single base class is allowed for scripting types, excluding interfaces).");
                        }
                        BaseType = otherInfo;
                    }
                }
            }
            BaseType?.EnsureInited(buildData);
        }
Example #6
0
 public void Write(BinaryWriter writer)
 {
     writer.Write(Name);
     BindingsGenerator.Write(writer, Comment);
     BindingsGenerator.Write(writer, Value);
     BindingsGenerator.Write(writer, Attributes);
 }
Example #7
0
        public override void Read(BinaryReader reader)
        {
            IsAlias = reader.ReadBoolean();
            Type    = BindingsGenerator.Read(reader, Type);

            base.Read(reader);
        }
Example #8
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write((byte)Access);
            BindingsGenerator.Write(writer, UnderlyingType);
            BindingsGenerator.Write(writer, Entries);

            base.Write(writer);
        }
Example #9
0
        public override void Read(BinaryReader reader)
        {
            Type   = BindingsGenerator.Read(reader, Type);
            Getter = BindingsGenerator.Read(reader, Getter);
            Setter = BindingsGenerator.Read(reader, Setter);

            base.Read(reader);
        }
Example #10
0
 public virtual void Read(BinaryReader reader)
 {
     Name       = reader.ReadString();
     Comment    = BindingsGenerator.Read(reader, Comment);
     IsStatic   = reader.ReadBoolean();
     Access     = (AccessLevel)reader.ReadByte();
     Attributes = BindingsGenerator.Read(reader, Attributes);
 }
Example #11
0
        public override void Read(BinaryReader reader)
        {
            Access         = (AccessLevel)reader.ReadByte();
            UnderlyingType = BindingsGenerator.Read(reader, UnderlyingType);
            Entries        = BindingsGenerator.Read(reader, Entries);

            base.Read(reader);
        }
Example #12
0
        public override void Write(BinaryWriter writer)
        {
            BindingsGenerator.Write(writer, Type);
            BindingsGenerator.Write(writer, Getter);
            BindingsGenerator.Write(writer, Setter);

            base.Write(writer);
        }
Example #13
0
 public virtual void Write(BinaryWriter writer)
 {
     writer.Write(Name);
     BindingsGenerator.Write(writer, Comment);
     writer.Write(IsStatic);
     writer.Write((byte)Access);
     BindingsGenerator.Write(writer, Attributes);
 }
Example #14
0
        public override void Read(BinaryReader reader)
        {
            Access = (AccessLevel)reader.ReadByte();
            BaseTypeInheritance = (AccessLevel)reader.ReadByte();
            BaseType            = BindingsGenerator.Read(reader, BaseType);
            InterfaceNames      = BindingsGenerator.Read(reader, InterfaceNames);

            base.Read(reader);
        }
Example #15
0
        public override void Write(BinaryWriter writer)
        {
            BindingsGenerator.Write(writer, Fields);
            BindingsGenerator.Write(writer, Functions);
            writer.Write(IsAutoSerialization);
            writer.Write(ForceNoPod);

            base.Write(writer);
        }
Example #16
0
        public override void Read(BinaryReader reader)
        {
            Fields              = BindingsGenerator.Read(reader, Fields);
            Functions           = BindingsGenerator.Read(reader, Functions);
            IsAutoSerialization = reader.ReadBoolean();
            ForceNoPod          = reader.ReadBoolean();

            base.Read(reader);
        }
Example #17
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write((byte)Access);
            writer.Write((byte)BaseTypeInheritance);
            BindingsGenerator.Write(writer, BaseType);
            BindingsGenerator.Write(writer, InterfaceNames);

            base.Write(writer);
        }
Example #18
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write(Module.Name);
            writer.Write(Module.FilePath);
            BindingsGenerator.Write(writer, Module.BinaryModuleName);
            writer.Write(Module.BuildNativeCode);
            writer.Write(Module.BuildCSharp);

            base.Write(writer);
        }
Example #19
0
        public override void Write(BinaryWriter writer)
        {
            BindingsGenerator.Write(writer, Type);
            // TODO: convert into flags
            writer.Write(IsReadOnly);
            writer.Write(NoArray);
            BindingsGenerator.Write(writer, DefaultValue);

            base.Write(writer);
        }
Example #20
0
        public override void Read(BinaryReader reader)
        {
            Type = BindingsGenerator.Read(reader, Type);
            // TODO: convert into flags
            IsReadOnly   = reader.ReadBoolean();
            NoArray      = reader.ReadBoolean();
            DefaultValue = BindingsGenerator.Read(reader, DefaultValue);

            base.Read(reader);
        }
Example #21
0
 public virtual void Write(BinaryWriter writer)
 {
     BindingsGenerator.Write(writer, NativeName);
     BindingsGenerator.Write(writer, Name);
     BindingsGenerator.Write(writer, Namespace);
     BindingsGenerator.Write(writer, Attributes);
     BindingsGenerator.Write(writer, Comment);
     writer.Write(IsInBuild);
     BindingsGenerator.Write(writer, Children);
 }
Example #22
0
 public void Read(BinaryReader reader)
 {
     Name         = reader.ReadString();
     Type         = BindingsGenerator.Read(reader, Type);
     DefaultValue = BindingsGenerator.Read(reader, DefaultValue);
     Attributes   = BindingsGenerator.Read(reader, Attributes);
     // TODO: convert into flags
     IsRef = reader.ReadBoolean();
     IsOut = reader.ReadBoolean();
 }
Example #23
0
 public void Write(BinaryWriter writer)
 {
     writer.Write(Name);
     BindingsGenerator.Write(writer, Type);
     BindingsGenerator.Write(writer, DefaultValue);
     BindingsGenerator.Write(writer, Attributes);
     // TODO: convert into flags
     writer.Write(IsRef);
     writer.Write(IsOut);
 }
Example #24
0
 public virtual void Write(BinaryWriter writer)
 {
     writer.Write(Name);
     BindingsGenerator.Write(writer, Comment);
     writer.Write(IsStatic);
     writer.Write(IsConstexpr);
     writer.Write(IsDeprecated);
     writer.Write(IsHidden);
     writer.Write((byte)Access);
     BindingsGenerator.Write(writer, Attributes);
 }
Example #25
0
        public override void Read(BinaryReader reader)
        {
            Access = (AccessLevel)reader.ReadByte();
            BaseTypeInheritance = (AccessLevel)reader.ReadByte();
            IsTemplate          = reader.ReadBoolean();
            BaseType            = BindingsGenerator.Read(reader, BaseType);
            Inheritance         = BindingsGenerator.Read(reader, Inheritance);
            Functions           = BindingsGenerator.Read(reader, Functions);

            base.Read(reader);
        }
Example #26
0
        public override void Read(BinaryReader reader)
        {
            ReturnType = BindingsGenerator.Read(reader, ReturnType);
            Parameters = BindingsGenerator.Read(reader, Parameters);
            // TODO: convert into flags
            IsVirtual = reader.ReadBoolean();
            IsConst   = reader.ReadBoolean();
            NoProxy   = reader.ReadBoolean();

            base.Read(reader);
        }
Example #27
0
        public override void Write(BinaryWriter writer)
        {
            BindingsGenerator.Write(writer, ReturnType);
            BindingsGenerator.Write(writer, Parameters);
            // TODO: convert into flags
            writer.Write(IsVirtual);
            writer.Write(IsConst);
            writer.Write(NoProxy);

            base.Write(writer);
        }
Example #28
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write((byte)Access);
            writer.Write((byte)BaseTypeInheritance);
            writer.Write(IsTemplate);
            BindingsGenerator.Write(writer, BaseType);
            BindingsGenerator.Write(writer, Inheritance);
            BindingsGenerator.Write(writer, Functions);

            base.Write(writer);
        }
Example #29
0
        public override void Init(Builder.BuildData buildData)
        {
            base.Init(buildData);

            if (ForceNoPod || (Interfaces != null && Interfaces.Count != 0))
            {
                _isPod = false;
                return;
            }

            // Structure is POD (plain old data) only if all of it's fields are (and has no base type ro base type is also POD)
            _isPod = BaseType == null || (BaseType?.IsPod ?? false);
            for (int i = 0; _isPod && i < Fields.Count; i++)
            {
                var field = Fields[i];
                if (!field.IsStatic && !field.IsPod(buildData, this))
                {
                    _isPod = false;
                }
            }

            foreach (var fieldInfo in Fields)
            {
                if (fieldInfo.Type.IsBitField)
                {
                    throw new NotImplementedException($"TODO: support bit-fields in structure fields (found field {fieldInfo} in structure {Name})");
                }

                // Pointers are fine
                if (fieldInfo.Type.IsPtr)
                {
                    continue;
                }

                // In-build types
                if (BindingsGenerator.CSharpNativeToManagedBasicTypes.ContainsKey(fieldInfo.Type.Type))
                {
                    continue;
                }
                if (BindingsGenerator.CSharpNativeToManagedDefault.ContainsKey(fieldInfo.Type.Type))
                {
                    continue;
                }

                // Find API type info for this field type
                var apiType = BindingsGenerator.FindApiTypeInfo(buildData, fieldInfo.Type, this);
                if (apiType != null)
                {
                    continue;
                }

                throw new Exception($"Unknown field type '{fieldInfo.Type} {fieldInfo.Name}' in structure '{Name}'.");
            }
        }
Example #30
0
        public override void Write(BinaryWriter writer)
        {
            writer.Write(Module.Name);
            writer.Write(Module.FilePath);
            BindingsGenerator.Write(writer, Module.BinaryModuleName);
            writer.Write(Module.BuildNativeCode);
            writer.Write(Module.BuildCSharp);
            writer.Write(Globals.Project.Name);
            writer.Write(Globals.Project.Version.ToString());

            base.Write(writer);
        }