public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            /// <summary>
            /// 参数名
            /// </summary>
            //public string name;
            writer.Write(name);
            ///// <summary>
            ///// 参数类型
            ///// </summary>
            //public RunTimeDataType type;
            writer.Write(type);
            ///// <summary>
            ///// 默认值
            ///// </summary>
            //public RightValueBase defaultValue;
            serizlizer.SerializeObject(writer, defaultValue);
            ///// <summary>
            ///// 是否是参数数组
            ///// </summary>
            //public bool isPara;
            writer.Write(isPara);


            ///// <summary>
            ///// 是否通过栈来传递
            ///// </summary>
            //public bool isOnStack;
            writer.Write(isOnStack);
            //public LeftValueBase varorreg;
            serizlizer.SerializeObject(writer, varorreg);
        }
        public static FunctionScope LoadFunctionScope(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            rtti.FunctionDefine function = serizlizer.DeserializeObject <rtti.FunctionDefine>(reader, rtti.FunctionDefine.LoadFunctionDefine);
            FunctionScope       scope    = new FunctionScope(function); serizlized.Add(key, scope);

            scope.LoadScopeBase(reader, serizlizer);
            return(scope);
        }
Beispiel #3
0
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write(RunTimeDataType.rt_string);
     writer.Write((value == null));
     if (value != null)
     {
         writer.Write(value);
     }
 }
Beispiel #4
0
        //public void CopyFrom(rtArray right)
        //{
        //    //_objid = right._objid;
        //    array = right.array;
        //    objHandle = right.objHandle;
        //}

        //public override int GetHashCode()
        //{
        //    return array.GetHashCode() ^ objHandle.GetHashCode();
        //}

        //public override bool Equals(object obj)
        //{
        //    rtArray right = obj as rtArray;
        //    if (right == null)
        //    {
        //        return false;
        //    }

        //    return array.Equals(right.array) && objHandle.Equals(right.objHandle);
        //}


        public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            writer.Write((int)rtType);

            writer.Write(array.Count);
            for (int i = 0; i < array.Count; i++)
            {
                array[i].Serialize(writer, serizlizer);
            }
        }
Beispiel #5
0
        public static RightValue LoadRightValue(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            RunTimeDataType  vtype = reader.ReadInt32();
            RunTimeValueBase v     = serizlizer.DeserializeObject <RunTimeValueBase>(reader, RunTimeValueBase.LoadRunTimeValueBase);

            RightValue rv = new RightValue(v); serizlized.Add(key, rv);

            rv.valueType = vtype;

            return(rv);
        }
Beispiel #6
0
        public virtual void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            serizlizer.SerializeObject(writer, (ScopeBase)_parent);

            writer.Write(memberlist.Count);
            for (int i = 0; i < memberlist.Count; i++)
            {
                //((ISWCSerializable)memberlist[i]).Serialize(writer, serizlizer);
                serizlizer.SerializeObject(writer, (ISWCSerializable)memberlist[i]);
            }
        }
Beispiel #7
0
        protected void LoadScopeBase(BinaryReader reader, CSWCSerizlizer serizlizer)
        {
            _parent = serizlizer.DeserializeObject <ScopeBase>(reader, Deserialize);

            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                memberlist.Add((IMember)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember));
            }
        }
Beispiel #8
0
		public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
		{
			//public List<FunctionParameter> parameters;
			writer.Write(parameters.Count);
			for (int i = 0; i < parameters.Count; i++)
			{
				serizlizer.SerializeObject(writer, parameters[i]);
			}

			//public RunTimeDataType returnType;
			writer.Write(returnType);
			//public int onStackParameters;
			writer.Write(onStackParameters);
		}
Beispiel #9
0
		public static FunctionSignature LoadSignature(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary<int, object> serizlized, int key)
		{
			FunctionSignature signature = new FunctionSignature();serizlized.Add(key, signature);
			signature.parameters = new List<FunctionParameter>();
			int count = reader.ReadInt32();
			for (int i = 0; i < count; i++)
			{
				signature.parameters.Add(serizlizer.DeserializeObject<FunctionParameter>(reader, FunctionParameter.LoadFunctionParameter ));
			}

			signature.returnType = reader.ReadInt32();
			signature.onStackParameters = reader.ReadInt32();

			return signature;
		}
        public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            //public readonly int functionid;
            writer.Write(functionid);
            //	public bool IsAnonymous;
            writer.Write(IsAnonymous);
            //public string name;
            writer.Write(name);
            //public bool isMethod;
            writer.Write(isMethod);
            //public bool isStatic;
            writer.Write(isStatic);
            //public bool isConstructor;
            writer.Write(isConstructor);

            //public int blockid;
            writer.Write(blockid);

            ///// <summary>
            ///// 是否本地函数
            ///// </summary>
            //public bool isNative;
            writer.Write(isNative);
            //public string native_name;
            if (native_name == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);
                writer.Write(native_name);
            }
            //public int native_index;
            writer.Write(native_index);
            ///// <summary>
            ///// 是否为yield返回
            ///// </summary>
            //public bool isYield;
            writer.Write(isYield);
            //public FunctionSignature signature;

            serizlizer.SerializeObject(writer, signature);
        }
        public static FunctionDefine LoadFunctionDefine(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            int            functionid     = reader.ReadInt32();
            FunctionDefine functionDefine = new FunctionDefine(functionid); serizlized.Add(key, functionDefine);

            //	public bool IsAnonymous;
            functionDefine.IsAnonymous = reader.ReadBoolean();
            //public string name;
            functionDefine.name = reader.ReadString();
            //public bool isMethod;
            functionDefine.isMethod = reader.ReadBoolean();
            //public bool isStatic;
            functionDefine.isStatic = reader.ReadBoolean();
            //public bool isConstructor;
            functionDefine.isConstructor = reader.ReadBoolean();

            //public int blockid;
            functionDefine.blockid = reader.ReadInt32();

            ///// <summary>
            ///// 是否本地函数
            ///// </summary>
            //public bool isNative;
            functionDefine.isNative = reader.ReadBoolean();
            //public string native_name;
            if (reader.ReadBoolean())
            {
                functionDefine.native_name = reader.ReadString();
            }
            //public int native_index;
            functionDefine.native_index = reader.ReadInt32();
            ///// <summary>
            ///// 是否为yield返回
            ///// </summary>
            //public bool isYield;
            functionDefine.isYield = reader.ReadBoolean();
            //public FunctionSignature signature;

            functionDefine.signature = serizlizer.DeserializeObject <FunctionSignature>(reader, FunctionSignature.LoadSignature);

            return(functionDefine);
        }
Beispiel #12
0
        public static ScopeBase Deserialize(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            string type = reader.ReadString();

            if (type == "FunctionScope")
            {
                return(FunctionScope.LoadFunctionScope(reader, serizlizer, serizlized, key));
            }
            else if (type == "ObjectInstanceScope")
            {
                return(ObjectInstanceScope.LoadObjectInstanceScope(reader, serizlizer, serizlized, key));
            }
            else if (type == "OutPackageMemberScope")
            {
                return(OutPackageMemberScope.LoadOutPackageMemberScope(reader, serizlizer, serizlized, key));
            }
            else
            {
                throw new IOException("异常的Scope类型");
            }
        }
        public static FunctionParameter LoadFunctionParameter(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            FunctionParameter parameter = new FunctionParameter(); serizlized.Add(key, parameter);

            /// <summary>
            /// 参数名
            /// </summary>
            //public string name;
            parameter.name = reader.ReadString();
            ///// <summary>
            ///// 参数类型
            ///// </summary>
            //public RunTimeDataType type;
            parameter.type = reader.ReadInt32();
            ///// <summary>
            ///// 默认值
            ///// </summary>
            //public RightValueBase defaultValue;
            parameter.defaultValue = (RightValueBase)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember);
            ///// <summary>
            ///// 是否是参数数组
            ///// </summary>
            //public bool isPara;
            parameter.isPara = reader.ReadBoolean();


            ///// <summary>
            ///// 是否通过栈来传递
            ///// </summary>
            //public bool isOnStack;
            parameter.isOnStack = reader.ReadBoolean();
            //public LeftValueBase varorreg;
            parameter.varorreg = (LeftValueBase)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember);

            return(parameter);
        }
Beispiel #14
0
        public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            ///// <summary>
            ///// 成员名
            ///// </summary>
            //public string name;
            writer.Write(name);

            serizlizer.SerializeObject(writer, refClass);

            //public readonly IMember bindField;
            serizlizer.SerializeObject(writer, bindField);


            //public bool isPublic;
            writer.Write(isPublic);
            //public bool isInternal;
            writer.Write(isInternal);
            //public bool isPrivate;
            writer.Write(isPrivate);
            //public bool isProtectd;
            writer.Write(isProtectd);

            ///// <summary>
            ///// 是否属性读取器
            ///// </summary>
            //public bool isGetter;
            writer.Write(isGetter);
            ///// <summary>
            ///// 是否属性设置器
            ///// </summary>
            //public bool isSetter;
            writer.Write(isSetter);

            ///// <summary>
            ///// 是否覆盖基类方法
            ///// </summary>
            //public bool isOverride;
            writer.Write(isOverride);

            //public bool isFinal;
            writer.Write(isFinal);

            ///// <summary>
            ///// 是否是静态成员
            ///// </summary>
            //public bool isStatic;
            writer.Write(isStatic);
            ///// <summary>
            ///// 是否是常量
            ///// </summary>
            //public bool isConst;
            writer.Write(isConst);
            ///// <summary>
            ///// 是否是构造函数
            ///// </summary>
            //public bool isConstructor;
            writer.Write(isConstructor);

            ///// <summary>
            ///// 成员字面值,比如1000,"aabc"等确定的字面值
            ///// </summary>
            //public RunTimeValueBase defaultValue;
            serizlizer.SerializeObject(writer, defaultValue);

            ///// <summary>
            ///// 从哪个类继承而来
            ///// </summary>
            //public Class inheritFrom;
            serizlizer.SerializeObject(writer, inheritFrom);

            ///// <summary>
            ///// 继承源
            ///// </summary>
            //public ClassMember inheritSrcMember;
            serizlizer.SerializeObject(writer, inheritSrcMember);

            //public ClassMember virtualLink;
            serizlizer.SerializeObject(writer, virtualLink);
            //public Class virtualLinkFromClass;
            //serizlizer.SerializeObject(writer, virtualLinkFromClass);

            //serizlizer.SerializeObject(writer, overridedMember);

            //private RunTimeDataType _type;
            writer.Write((int)_type);
        }
Beispiel #15
0
        public static ClassMember LoadClassMember(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            ///// <summary>
            ///// 成员名
            ///// </summary>
            //public string name;
            string name = reader.ReadString();

            ClassMember classMember = new ClassMember(); serizlized.Add(key, classMember);

            classMember.name = name;
            Class refClass = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass
                                                                  );
            //public readonly IMember bindField;
            IMember bindField = (IMember)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember
                                                                                         );



            classMember.refClass  = refClass;
            classMember.bindField = bindField;


            //public bool isPublic;
            classMember.isPublic = reader.ReadBoolean();
            //public bool isInternal;
            classMember.isInternal = reader.ReadBoolean();
            //public bool isPrivate;
            classMember.isPrivate = reader.ReadBoolean();
            //public bool isProtectd;
            classMember.isProtectd = reader.ReadBoolean();

            ///// <summary>
            ///// 是否属性读取器
            ///// </summary>
            //public bool isGetter;
            classMember.isGetter = reader.ReadBoolean();
            ///// <summary>
            ///// 是否属性设置器
            ///// </summary>
            //public bool isSetter;
            classMember.isSetter = reader.ReadBoolean();

            ///// <summary>
            ///// 是否覆盖基类方法
            ///// </summary>
            //public bool isOverride;
            classMember.isOverride = reader.ReadBoolean();

            //public bool isFinal;
            classMember.isFinal = reader.ReadBoolean();

            ///// <summary>
            ///// 是否是静态成员
            ///// </summary>
            //public bool isStatic;
            classMember.isStatic = reader.ReadBoolean();
            ///// <summary>
            ///// 是否是常量
            ///// </summary>
            //public bool isConst;
            classMember.isConst = reader.ReadBoolean();
            ///// <summary>
            ///// 是否是构造函数
            ///// </summary>
            //public bool isConstructor;
            classMember.isConstructor = reader.ReadBoolean();

            ///// <summary>
            ///// 成员字面值,比如1000,"aabc"等确定的字面值
            ///// </summary>
            //public RunTimeValueBase defaultValue;
            classMember.defaultValue = serizlizer.DeserializeObject <RunTimeValueBase>(reader, RunTimeValueBase.LoadRunTimeValueBase);

            ///// <summary>
            ///// 从哪个类继承而来
            ///// </summary>
            //public Class inheritFrom;
            classMember.inheritFrom = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);

            ///// <summary>
            ///// 继承源
            ///// </summary>
            //public ClassMember inheritSrcMember;
            classMember.inheritSrcMember = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);

            //public ClassMember virtualLink;
            classMember.virtualLink = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            //public Class virtualLinkFromClass;
            //classMember.virtualLinkFromClass = serizlizer.DeserializeObject<Class>(reader, Class.LoadClass);

            //classMember.overridedMember = serizlizer.DeserializeObject<ClassMember>(reader, ClassMember.LoadClassMember);

            //private RunTimeDataType _type;
            classMember._type = reader.ReadInt32();


            return(classMember);
        }
Beispiel #16
0
        public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
        {
            //	/// <summary>
            //	/// 指明这是否是一个接口定义
            //	/// </summary>
            //public bool isInterface;
            writer.Write(isInterface);
            ///// <summary>
            ///// 指明这是否是一个包级函数
            ///// </summary>
            //public bool isPackageFunction;
            writer.Write(isPackageFunction);
            ///// <summary>
            ///// 是否文档类
            ///// </summary>
            //public bool isdocumentclass;
            writer.Write(isdocumentclass);
            ///// <summary>
            ///// 是否是需要非托管类
            ///// </summary>
            //public bool isUnmanaged;
            writer.Write(isUnmanaged);
            ///// <summary>
            ///// 链接到的系统对象是否是一个结构体
            ///// </summary>
            //public bool isStruct;
            writer.Write(isStruct);
            ///// <summary>
            ///// 结构体排序序号(从1开始排起)
            ///// </summary>
            //public int structIndex;
            writer.Write(structIndex);
            ///// <summary>
            ///// 是否链接到系统对象
            ///// </summary>
            //public bool isLink_System;
            writer.Write(isLink_System);


            writer.Write(isCrossExtend);

            //public readonly string md5key;
            writer.Write(md5key);
            //public readonly int classid;
            writer.Write(classid);

            //	/// <summary>
            //	/// 类定义代码所在blockid
            //	/// </summary>
            //public readonly int blockid;
            writer.Write(blockid);

            ///// <summary>
            ///// 系统对象创建器
            ///// </summary>
            //public ClassMember linkObjCreator;
            serizlizer.SerializeObject <ClassMember>(writer, linkObjCreator);

            serizlizer.SerializeObject <ClassMember>(writer, crossExtendAdapterCreator);

            ///// <summary>
            ///// 是否已编译成功
            ///// </summary>
            //public bool isbuildSuccess;
            writer.Write(isbuildSuccess);
            ///// <summary>
            ///// 是否不可实例化
            ///// </summary>
            //public bool no_constructor;
            writer.Write(no_constructor);

            ///// <summary>
            ///// 包外代码所在blockid;
            ///// </summary>
            //public int outscopeblockid;
            writer.Write(outscopeblockid);

            ///// <summary>
            ///// 类名
            ///// </summary>
            //public string name;
            writer.Write(name);
            //public string package;
            writer.Write(package);
            //public bool dynamic;
            writer.Write(dynamic);
            //public bool final;
            writer.Write(final);



            ///// <summary>
            ///// 是否公开。如果不是,则只能在相同包内访问
            ///// </summary>
            //public bool isPublic;
            writer.Write(isPublic);
            ///// <summary>
            ///// 包含此类的静态成员。
            ///// </summary>
            //public Class staticClass;
            serizlizer.SerializeObject(writer, staticClass);
            ///// <summary>
            ///// 如果是静态成员类,则指向类的定义
            ///// </summary>
            //public Class instanceClass;
            serizlizer.SerializeObject(writer, instanceClass);
            ///// <summary>
            ///// 是否包外类
            ///// </summary>
            //public bool ispackageout;
            writer.Write(ispackageout);
            ///// <summary>
            ///// 如果是包外类,则显示所从属的主类
            ///// </summary>
            //public Class mainClass;
            serizlizer.SerializeObject(writer, mainClass);
            ///// <summary>
            ///// 构造函数
            ///// </summary>
            //public ClassMember constructor;
            serizlizer.SerializeObject(writer, constructor);
            ///// <summary>
            ///// 构造函数id
            ///// </summary>
            //public int constructor_functionid;
            writer.Write(constructor_functionid);
            ///// <summary>
            ///// 隐式类型转换到原始类型函数
            ///// </summary>
            //public ClassMember implicit_to;
            serizlizer.SerializeObject(writer, implicit_to);
            //public RunTimeDataType implicit_to_type;
            writer.Write((int)implicit_to_type);
            //public int implicit_to_functionid;
            writer.Write((int)implicit_to_functionid);

            ///// <summary>
            ///// 隐式从原始类型转换过来
            ///// </summary>
            //public ClassMember implicit_from;
            serizlizer.SerializeObject(writer, implicit_from);
            //public int implicit_from_functionid;
            writer.Write(implicit_from_functionid);
            //public RunTimeDataType implicit_from_type;
            writer.Write((int)implicit_from_type);

            ///// <summary>
            ///// 显式类型转换
            ///// </summary>
            //public ClassMember explicit_from;
            serizlizer.SerializeObject(writer, explicit_from);
            //public int explicit_from_functionid;
            writer.Write(explicit_from_functionid);
            //public RunTimeDataType explicit_from_type;
            writer.Write((int)explicit_from_type);

            ///// <summary>
            ///// 索引器 取值
            ///// </summary>
            //public ClassMember get_this_item;
            serizlizer.SerializeObject(writer, get_this_item);

            ///// <summary>
            ///// 索引器 赋值
            ///// </summary>
            //public ClassMember set_this_item;
            serizlizer.SerializeObject(writer, set_this_item);

            ///// <summary>
            ///// 类成员定义
            ///// </summary>
            //public ClassMemberList classMembers;
            writer.Write(classMembers.Count);
            for (int i = 0; i < classMembers.Count; i++)
            {
                serizlizer.SerializeObject(writer, classMembers[i]);
            }

            ///// <summary>
            ///// 数据字段表
            ///// </summary>
            //public List<ClassMember> fields;
            writer.Write(fields.Count);
            for (int i = 0; i < fields.Count; i++)
            {
                serizlizer.SerializeObject(writer, fields[i]);
            }

            ///// <summary>
            ///// 父类的定义(如果有)
            ///// </summary>
            //public Class super;
            serizlizer.SerializeObject(writer, super);

            ///// <summary>
            ///// 实现的各种接口
            ///// 记录了接口的一个方法对应类的哪个成员实现
            ///// </summary>
            //public Dictionary<Class, int[]> implements;

            if (!isInterface)
            {
                writer.Write(implements.Count);
                foreach (var item in implements)
                {
                    serizlizer.SerializeObject(writer, item.Key);
                    writer.Write(item.Value.Length);
                    for (int i = 0; i < item.Value.Length; i++)
                    {
                        writer.Write(item.Value[i]);
                    }
                }
            }
            else
            {
                writer.Write(0);
            }
        }
Beispiel #17
0
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write("FunctionScope");
     serizlizer.SerializeObject(writer, function);
     base.Serialize(writer, serizlizer);
 }
        public static ObjectInstanceScope LoadObjectInstanceScope(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            ObjectInstanceScope scope = new ObjectInstanceScope(null); serizlized.Add(key, scope);

            rtti.Class _class = serizlizer.DeserializeObject <rtti.Class>(reader, rtti.Class.LoadClass);
            scope._class = _class;

            scope.LoadScopeBase(reader, serizlizer);

            return(scope);
        }
Beispiel #19
0
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write(6);
     base.Serialize(writer, serizlizer);
     serizlizer.SerializeObject(writer, value);
 }
 public void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     throw new NotImplementedException();
 }
Beispiel #21
0
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write("OutPackageMemberScope");
     serizlizer.SerializeObject(writer, mainclass);
     base.Serialize(writer, serizlizer);
 }
Beispiel #22
0
		public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
		{
			writer.Write(rtType);
			writer.Write(value);
		}
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write("ObjectInstanceScope");
     serizlizer.SerializeObject(writer, _class);
     base.Serialize(writer, serizlizer);
 }
Beispiel #24
0
        public static rtti.Class LoadClass(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            //	/// <summary>
            //	/// 指明这是否是一个接口定义
            //	/// </summary>
            //public bool isInterface;
            bool isInterface = reader.ReadBoolean();
            ///// <summary>
            ///// 指明这是否是一个包级函数
            ///// </summary>
            //public bool isPackageFunction;
            bool isPackageFunction = reader.ReadBoolean();
            ///// <summary>
            ///// 是否文档类
            ///// </summary>
            //public bool isdocumentclass;
            bool isdocumentclass = reader.ReadBoolean();
            ///// <summary>
            ///// 是否是需要非托管类
            ///// </summary>
            //public bool isUnmanaged;
            bool isUnmanaged = reader.ReadBoolean();
            ///// <summary>
            ///// 链接到的系统对象是否是一个结构体
            ///// </summary>
            //public bool isStruct;
            bool isStruct = reader.ReadBoolean();
            ///// <summary>
            ///// 结构体排序序号(从1开始排起)
            ///// </summary>
            //public int structIndex;
            int structIndex = reader.ReadInt32();
            ///// <summary>
            ///// 是否链接到系统对象
            ///// </summary>
            //public bool isLink_System;
            bool isLink_System = reader.ReadBoolean();

            bool isCrossExtend = reader.ReadBoolean();

            //public readonly string md5key;
            string md5key = reader.ReadString();
            //public readonly int classid;
            int classid = reader.ReadInt32();
            //	/// <summary>
            //	/// 类定义代码所在blockid
            //	/// </summary>
            //public readonly int blockid;
            int blockid = reader.ReadInt32();

            rtti.Class _class = new Class(classid, blockid, serizlizer.loadingSwc, md5key); serizlized.Add(key, _class);
            _class.isInterface       = isInterface;
            _class.isPackageFunction = isPackageFunction;
            _class.isdocumentclass   = isdocumentclass;
            _class.isUnmanaged       = isUnmanaged;
            _class.isStruct          = isStruct;
            _class.structIndex       = structIndex;
            _class.isLink_System     = isLink_System;
            _class.isCrossExtend     = isCrossExtend;

            ///// <summary>
            ///// 系统对象创建器
            ///// </summary>
            //public ClassMember linkObjCreator;
            _class.linkObjCreator = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);

            _class.crossExtendAdapterCreator = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            ///// <summary>
            ///// 是否已编译成功
            ///// </summary>
            //public bool isbuildSuccess;
            _class.isbuildSuccess = reader.ReadBoolean();
            ///// <summary>
            ///// 是否不可实例化
            ///// </summary>
            //public bool no_constructor;
            _class.no_constructor = reader.ReadBoolean();

            ///// <summary>
            ///// 包外代码所在blockid;
            ///// </summary>
            //public int outscopeblockid;
            _class.outscopeblockid = reader.ReadInt32();

            ///// <summary>
            ///// 类名
            ///// </summary>
            //public string name;
            _class.name = reader.ReadString();
            //public string package;
            _class.package = reader.ReadString();
            //public bool dynamic;
            _class.dynamic = reader.ReadBoolean();
            //public bool final;
            _class.final = reader.ReadBoolean();


            ///// <summary>
            ///// 是否公开。如果不是,则只能在相同包内访问
            ///// </summary>
            //public bool isPublic;
            _class.isPublic = reader.ReadBoolean();
            ///// <summary>
            ///// 包含此类的静态成员。
            ///// </summary>
            //public Class staticClass;
            _class.staticClass = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);
            ///// <summary>
            ///// 如果是静态成员类,则指向类的定义
            ///// </summary>
            //public Class instanceClass;
            _class.instanceClass = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);
            ///// <summary>
            ///// 是否包外类
            ///// </summary>
            //public bool ispackageout;
            _class.ispackageout = reader.ReadBoolean();
            ///// <summary>
            ///// 如果是包外类,则显示所从属的主类
            ///// </summary>
            //public Class mainClass;
            _class.mainClass = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);
            ///// <summary>
            ///// 构造函数
            ///// </summary>
            //public ClassMember constructor;
            _class.constructor = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            ///// <summary>
            ///// 构造函数id
            ///// </summary>
            //public int constructor_functionid;
            _class.constructor_functionid = reader.ReadInt32();
            ///// <summary>
            ///// 隐式类型转换到原始类型函数
            ///// </summary>
            //public ClassMember implicit_to;
            _class.implicit_to = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            //public RunTimeDataType implicit_to_type;
            _class.implicit_to_type = reader.ReadInt32();
            //public int implicit_to_functionid;
            _class.implicit_to_functionid = reader.ReadInt32();

            ///// <summary>
            ///// 隐式从原始类型转换过来
            ///// </summary>
            //public ClassMember implicit_from;
            _class.implicit_from = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            //public int implicit_from_functionid;
            _class.implicit_from_functionid = reader.ReadInt32();
            //public RunTimeDataType implicit_from_type;
            _class.implicit_from_type = reader.ReadInt32();

            ///// <summary>
            ///// 显式类型转换
            ///// </summary>
            //public ClassMember explicit_from;
            _class.explicit_from = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);
            //public int explicit_from_functionid;
            _class.explicit_from_functionid = reader.ReadInt32();
            //public RunTimeDataType explicit_from_type;
            _class.explicit_from_type = reader.ReadInt32();

            ///// <summary>
            ///// 索引器 取值
            ///// </summary>
            //public ClassMember get_this_item;
            _class.get_this_item = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);

            ///// <summary>
            ///// 索引器 赋值
            ///// </summary>
            //public ClassMember set_this_item;
            _class.set_this_item = serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember);

            ///// <summary>
            ///// 类成员定义
            ///// </summary>
            //public ClassMemberList classMembers;
            int membercount = reader.ReadInt32();

            for (int i = 0; i < membercount; i++)
            {
                _class.classMembers.Add(serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember));
            }

            ///// <summary>
            ///// 数据字段表
            ///// </summary>
            //public List<ClassMember> fields;
            int fieldscount = reader.ReadInt32();

            for (int i = 0; i < fieldscount; i++)
            {
                _class.fields.Add(serizlizer.DeserializeObject <ClassMember>(reader, ClassMember.LoadClassMember));
            }

            ///// <summary>
            ///// 父类的定义(如果有)
            ///// </summary>
            //public Class super;
            _class.super = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);

            ///// <summary>
            ///// 实现的各种接口
            ///// 记录了接口的一个方法对应类的哪个成员实现
            ///// </summary>
            //public Dictionary<Class, int[]> implements;
            int implementscount = reader.ReadInt32();

            for (int i = 0; i < implementscount; i++)
            {
                Class keyclass = serizlizer.DeserializeObject <Class>(reader, Class.LoadClass);
                int   count    = reader.ReadInt32();
                int[] impls    = new int[count];
                for (int j = 0; j < count; j++)
                {
                    impls[j] = reader.ReadInt32();
                }
                _class.implements.Add(keyclass, impls);
            }

            return(_class);
        }
 public override void Serialize(BinaryWriter writer, CSWCSerizlizer serizlizer)
 {
     writer.Write(rtType);
     writer.Write(_functionid);
     writer.Write(_ismethod);
 }
Beispiel #26
0
        public static OutPackageMemberScope LoadOutPackageMemberScope(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            OutPackageMemberScope scope = new OutPackageMemberScope(null); serizlized.Add(key, scope);

            rtti.Class mainclass = serizlizer.DeserializeObject <rtti.Class>(reader, rtti.Class.LoadClass);
            scope.mainclass = mainclass;
            scope.LoadScopeBase(reader, serizlizer);
            return(scope);
        }