Exemplo n.º 1
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, ITypeParameter typeParameter)
        {
            WriteString(typeParameter.Name, writer, nameTable);

            // Flags
            writer.Write((byte)typeParameter.TypeParameterModifier);

            // Variance

            writer.Write((byte)typeParameter.Variance);

            // Constraints

            writer.Write(typeParameter.Constraints.Count());
            foreach (IReturnType rt in typeParameter.Constraints)
            {
                Write(writer, nameTable, rt);
            }

            // Attributes

            writer.Write(typeParameter.Attributes.Count());
            foreach (IAttribute attr in typeParameter.Attributes)
            {
                Write(writer, nameTable, attr);
            }
        }
 public static void WriteTo(IParameter p, BinaryWriter writer, INameEncoder nameTable)
 {
     PersistentHelper.WriteString (p.Name, writer, nameTable);
     PersistentHelper.WriteString (p.Documentation, writer, nameTable);
     writer.Write((byte)p.Modifier);
     PersistentReturnType.WriteTo (p.ReturnType, writer, nameTable);
 }
Exemplo n.º 3
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, IMethod method)
        {
            Debug.Assert(method != null);
            WriteMemberInformation(writer, nameTable, method);
            writer.Write(method.ExplicitInterfaces.Count());
            foreach (IReturnType returnType in method.ExplicitInterfaces)
            {
                Write(writer, nameTable, returnType);
            }
            Write(writer, nameTable, method.BodyRegion);
            Write(writer, nameTable, method.ReturnType);
            writer.Write((int)method.MethodModifier);
            if (method.Parameters == null)
            {
                writer.Write(0);
            }
            else
            {
                writer.Write(method.Parameters.Count);
                foreach (IParameter param in method.Parameters)
                {
                    Write(writer, nameTable, param);
                }
            }

            writer.Write(method.TypeParameters.Count);
            foreach (ITypeParameter genArg in method.TypeParameters)
            {
                Write(writer, nameTable, genArg);
            }
        }
Exemplo n.º 4
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, DomLocation location)
		{
			if (WriteNull (writer, location)) 
				return;
			writer.Write (location.Line);
			writer.Write (location.Column);
		}
 public static void WriteTo(IEvent ev, BinaryWriter writer, INameEncoder nameTable)
 {
     PersistentHelper.WriteString (ev.FullyQualifiedName, writer, nameTable);
     PersistentHelper.WriteString (ev.Documentation, writer, nameTable);
     writer.Write ((uint)ev.Modifiers);
     PersistentReturnType.WriteTo (ev.ReturnType, writer, nameTable);
     PersistentRegion.WriteTo (ev.Region, writer, nameTable);
 }
 public static void WriteTo(IProperty p, BinaryWriter writer, INameEncoder nameTable)
 {
     PersistentHelper.WriteString (p.FullyQualifiedName, writer, nameTable);
     PersistentHelper.WriteString (p.Documentation, writer, nameTable);
     writer.Write((uint)p.Modifiers + (p.CanGet ? canGetFlag : 0) + (p.CanSet ? canSetFlag : 0));
     PersistentReturnType.WriteTo (p.ReturnType, writer, nameTable);
     PersistentRegion.WriteTo (p.Region, writer, nameTable);
 }
Exemplo n.º 7
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, CodeExpression[] exps)
 {
     writer.Write(exps.Length);
     foreach (CodeExpression exp in exps)
     {
         Write(writer, nameTable, exp);
     }
 }
Exemplo n.º 8
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, DomRegion region)
		{
			if (WriteNull (writer, region)) 
				return;
			writer.Write (region.Start.Line);
			writer.Write (region.Start.Column);
			writer.Write (region.End.Line);
			writer.Write (region.End.Column);
		}
Exemplo n.º 9
0
 internal static void WriteAttributeEntryList(BinaryWriter writer, INameEncoder nameTable, List <AttributeEntry> list)
 {
     writer.Write(list.Count);
     foreach (AttributeEntry e in list)
     {
         WriteString(e.File, writer, nameTable);
         Write(writer, nameTable, e.Attribute);
     }
 }
Exemplo n.º 10
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, DomLocation location)
 {
     if (WriteNull(writer, location))
     {
         return;
     }
     writer.Write(location.Line);
     writer.Write(location.Column);
 }
Exemplo n.º 11
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, DomRegion region)
 {
     if (WriteNull(writer, region))
     {
         return;
     }
     writer.Write(region.Start.Line);
     writer.Write(region.Start.Column);
     writer.Write(region.End.Line);
     writer.Write(region.End.Column);
 }
Exemplo n.º 12
0
        static void WriteMemberInformation(BinaryWriter writer, INameEncoder nameTable, IMember member)
        {
            WriteString(member.Name, writer, nameTable);
            WriteString(member.Documentation, writer, nameTable);
            writer.Write((uint)member.Modifiers);
            Write(writer, nameTable, member.Location);

            writer.Write(member.Attributes.Count());
            foreach (IAttribute attr in member.Attributes)
            {
                Write(writer, nameTable, attr);
            }
        }
        public static void WriteTo(IMethod met, BinaryWriter writer, INameEncoder nameTable)
        {
            PersistentHelper.WriteString (met.FullyQualifiedName, writer, nameTable);
            PersistentHelper.WriteString (met.Documentation, writer, nameTable);

            writer.Write ((uint)met.Modifiers);
            PersistentReturnType.WriteTo (met.ReturnType, writer, nameTable);

            writer.Write (met.Parameters != null ? (uint)met.Parameters.Count : (uint)0);
            foreach (IParameter p in met.Parameters) {
                PersistentParameter.WriteTo (p, writer, nameTable);
            }
            PersistentRegion.WriteTo (met.Region, writer, nameTable);
        }
        public static void WriteTo(IIndexer ind, BinaryWriter writer, INameEncoder nameTable)
        {
            PersistentHelper.WriteString (ind.FullyQualifiedName, writer, nameTable);
            PersistentHelper.WriteString (ind.Documentation, writer, nameTable);

            writer.Write((uint)ind.Modifiers);
            PersistentReturnType.WriteTo (ind.ReturnType, writer, nameTable);

            writer.Write ((uint)ind.Parameters.Count);
            foreach (IParameter p in ind.Parameters) {
                PersistentParameter.WriteTo (p, writer, nameTable);
            }
            PersistentRegion.WriteTo (ind.Region, writer, nameTable);
        }
        public static void WriteTo(IReturnType rt, BinaryWriter writer, INameEncoder nameTable)
        {
            if (PersistentHelper.WriteNull (rt, writer)) return;

            PersistentHelper.WriteString (rt.FullyQualifiedName, writer, nameTable);

            writer.Write (rt.PointerNestingLevel);
            if (rt.ArrayDimensions == null) {
                writer.Write((uint)0);
            } else {
                writer.Write((uint)rt.ArrayDimensions.Length);
                for (uint i = 0; i < rt.ArrayDimensions.Length; ++i) {
                    writer.Write (rt.ArrayDimensions[i]);
                }
            }
        }
Exemplo n.º 16
0
 static void WriteString(string s, BinaryWriter writer, INameEncoder nameTable)
 {
     if (s == null)
     {
         writer.Write(-2);
     }
     else
     {
         bool isNew;
         int  id = nameTable.GetStringId(s, out isNew);
         writer.Write(id);
         if (isNew)
         {
             writer.Write(s);
         }
     }
 }
Exemplo n.º 17
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, IParameter parameter)
        {
            Debug.Assert(parameter != null);
            WriteString(parameter.Name, writer, nameTable);

            writer.Write((uint)parameter.ParameterModifiers);
            Write(writer, nameTable, parameter.ReturnType);
            Write(writer, nameTable, parameter.Location);
            if (parameter.DefaultValue is CodePrimitiveExpression)
            {
                writer.Write(true);
                Write(writer, nameTable, (CodePrimitiveExpression)parameter.DefaultValue);
            }
            else
            {
                writer.Write(false);
            }
        }
Exemplo n.º 18
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, IEvent evt)
 {
     Debug.Assert(evt != null);
     WriteMemberInformation(writer, nameTable, evt);
     Write(writer, nameTable, evt.ReturnType);
     if (!WriteNull(writer, evt.AddMethod))
     {
         Write(writer, nameTable, evt.AddMethod);
     }
     if (!WriteNull(writer, evt.RemoveMethod))
     {
         Write(writer, nameTable, evt.RemoveMethod);
     }
     if (!WriteNull(writer, evt.RaiseMethod))
     {
         Write(writer, nameTable, evt.RaiseMethod);
     }
 }
Exemplo n.º 19
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, ITypeParameter typeParameter)
        {
            WriteString(typeParameter.Name, writer, nameTable);

            // Flags

            byte f = 0;

            if (typeParameter.ClassRequired)
            {
                f |= 1;
            }
            if (typeParameter.ValueTypeRequired)
            {
                f |= 2;
            }
            if (typeParameter.ConstructorRequired)
            {
                f |= 4;
            }
            writer.Write(f);

            // Variance

            writer.Write((byte)typeParameter.Variance);

            // Constraints

            writer.Write(typeParameter.Constraints.Count());
            foreach (IReturnType rt in typeParameter.Constraints)
            {
                Write(writer, nameTable, rt);
            }

            // Attributes

            writer.Write(typeParameter.Attributes.Count());
            foreach (IAttribute attr in typeParameter.Attributes)
            {
                Write(writer, nameTable, attr);
            }
        }
Exemplo n.º 20
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, IAttribute attr)
        {
            WriteString(attr.Name, writer, nameTable);
            Write(writer, nameTable, attr.Region);
            writer.Write((int)attr.AttributeTarget);
            Write(writer, nameTable, attr.AttributeType);

            CodeExpression[] exps = new CodeExpression [attr.PositionalArguments.Count + attr.NamedArguments.Count];
            // Save the named argument count. The remaining expressions will be considered positionl arguments.
            writer.Write((uint)attr.NamedArguments.Count);
            int n = 0;

            foreach (KeyValuePair <string, CodeExpression> na in attr.NamedArguments)
            {
                WriteString(na.Key, writer, nameTable);
                exps [n++] = na.Value;
            }
            attr.PositionalArguments.CopyTo(exps, n);
            Write(writer, nameTable, exps);
        }
Exemplo n.º 21
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, CodeExpression cexp)
 {
     if (cexp is CodePrimitiveExpression)
     {
         CodePrimitiveExpression exp = (CodePrimitiveExpression)cexp;
         if (exp.Value == null)
         {
             writer.Write((int)TypeCode.DBNull);
             return;
         }
         if (!(exp.Value is Array))
         {
             writer.Write((int)Type.GetTypeCode(exp.Value.GetType()));
             WriteString(Convert.ToString(exp.Value, CultureInfo.InvariantCulture), writer, nameTable);
             return;
         }
     }
     writer.Write((int)TypeCode.Object);
     serializer.Serialize(writer, cexp, typeof(CodeExpression));
 }
Exemplo n.º 22
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, IReturnType returnType)
        {
            if (WriteNull(writer, returnType))
            {
                return;
            }
            int index = DomReturnType.GetIndex(returnType);

            if (index >= 0)
            {
                writer.Write((byte)index);
                return;
            }

            writer.Write((byte)0xFF);
            WriteString(returnType.Namespace, writer, nameTable);
            writer.Write((uint)returnType.Parts.Count);
            foreach (ReturnTypePart part in returnType.Parts)
            {
                WriteString(part.Name, writer, nameTable);
                writer.Write(part.IsGenerated);
                writer.Write((uint)part.GenericArguments.Count);
                foreach (IReturnType rtp in part.GenericArguments)
                {
                    Write(writer, nameTable, rtp);
                }
            }
            writer.Write(returnType.PointerNestingLevel);
            writer.Write(returnType.IsNullable);
            writer.Write(returnType.IsByRef);
            writer.Write(returnType.ArrayDimensions);
            for (int n = 0; n < returnType.ArrayDimensions; n++)
            {
                writer.Write(returnType.GetDimension(n));
            }
        }
Exemplo n.º 23
0
        public static void Write(BinaryWriter writer, INameEncoder nameTable, IProperty property)
        {
            Debug.Assert(property != null);

            // WriteMemberInformation (changed for storing getter & setter modifiers)
            WriteString(property.Name, writer, nameTable);
            WriteString(property.Documentation, writer, nameTable);
            writer.Write((uint)property.GetterModifier);
            writer.Write((uint)property.SetterModifier);
            Write(writer, nameTable, property.Location);

            writer.Write(property.Attributes.Count());
            foreach (IAttribute attr in property.Attributes)
            {
                Write(writer, nameTable, attr);
            }
            // End

            writer.Write(property.ExplicitInterfaces.Count());
            foreach (IReturnType returnType in property.ExplicitInterfaces)
            {
                Write(writer, nameTable, returnType);
            }

            writer.Write(property.Parameters.Count);
            foreach (IParameter param in property.Parameters)
            {
                Write(writer, nameTable, param);
            }

            Write(writer, nameTable, property.BodyRegion);
            Write(writer, nameTable, property.ReturnType);
            writer.Write((int)property.PropertyModifier);
            Write(writer, nameTable, property.GetRegion);
            Write(writer, nameTable, property.SetRegion);
        }
Exemplo n.º 24
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IProperty property)
		{
			Debug.Assert (property != null);
			
			// WriteMemberInformation (changed for storing getter & setter modifiers)
			WriteString (property.Name, writer, nameTable);
			WriteString (property.Documentation, writer, nameTable);
			writer.Write ((uint)property.GetterModifier);
			writer.Write ((uint)property.SetterModifier);
			Write (writer, nameTable, property.Location);
			
			writer.Write (property.Attributes.Count ());
			foreach (IAttribute attr in property.Attributes)
				Write (writer, nameTable, attr);
			// End
			
			writer.Write (property.ExplicitInterfaces.Count ());
			foreach (IReturnType returnType in property.ExplicitInterfaces) {
				Write (writer, nameTable, returnType);
			}
			
			writer.Write (property.Parameters.Count);
			foreach (IParameter param in property.Parameters) {
				Write (writer, nameTable, param);
			}
			
			Write (writer, nameTable, property.BodyRegion);
			Write (writer, nameTable, property.ReturnType);
			writer.Write ((int)property.PropertyModifier);
			Write (writer, nameTable, property.GetRegion);
			Write (writer, nameTable, property.SetRegion);
		}
Exemplo n.º 25
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IEvent evt)
		{
			Debug.Assert (evt != null);
			WriteMemberInformation (writer, nameTable, evt);
			Write (writer, nameTable, evt.ReturnType);
			if (!WriteNull (writer, evt.AddMethod)) 
				Write (writer, nameTable, evt.AddMethod);
			if (!WriteNull (writer, evt.RemoveMethod)) 
				Write (writer, nameTable, evt.RemoveMethod);
			if (!WriteNull (writer, evt.RaiseMethod)) 
				Write (writer, nameTable, evt.RaiseMethod);
		}
Exemplo n.º 26
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, IField field)
 {
     Debug.Assert(field != null);
     WriteMemberInformation(writer, nameTable, field);
     Write(writer, nameTable, field.ReturnType);
 }
Exemplo n.º 27
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IType type)
		{
			nameTable.Reset ();
			WriteInternal (writer, nameTable, type);
		}
Exemplo n.º 28
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IReturnType returnType)
		{
			if (WriteNull (writer, returnType))
				return;
			int index = DomReturnType.GetIndex (returnType);
			if (index >= 0) {
				writer.Write ((byte)index);
				return;
			}
			
			writer.Write ((byte)0xFF);
			WriteString (returnType.Namespace, writer, nameTable);
			writer.Write ((uint) returnType.Parts.Count);
			foreach (ReturnTypePart part in returnType.Parts) {
				WriteString (part.Name, writer, nameTable);
				writer.Write (part.IsGenerated);
				writer.Write ((uint) part.GenericArguments.Count);
				foreach (IReturnType rtp in part.GenericArguments)
					Write (writer, nameTable, rtp);
			}
			writer.Write (returnType.PointerNestingLevel);
			writer.Write (returnType.IsNullable);
			writer.Write (returnType.IsByRef);
			writer.Write (returnType.ArrayDimensions);
			for (int n=0; n<returnType.ArrayDimensions; n++)
				writer.Write (returnType.GetDimension (n));
		}
Exemplo n.º 29
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IParameter parameter)
		{
			Debug.Assert (parameter != null);
			WriteString (parameter.Name, writer, nameTable);
			
			writer.Write ((uint)parameter.ParameterModifiers);
			Write (writer, nameTable, parameter.ReturnType);
			Write (writer, nameTable, parameter.Location);
			if(parameter.DefaultValue is CodePrimitiveExpression) {
				writer.Write (true);
				Write (writer, nameTable, (CodePrimitiveExpression) parameter.DefaultValue);
			} else
				writer.Write (false); 
		}
        public static void WriteTo(IRegion reg, BinaryWriter writer, INameEncoder nameTable)
        {
            if (PersistentHelper.WriteNull (reg, writer)) return;

            PersistentHelper.WriteString (reg.FileName, writer, nameTable);
            writer.Write (reg.BeginLine);
            writer.Write (reg.BeginColumn);
            writer.Write (reg.EndColumn);
            writer.Write (reg.EndLine);
        }
Exemplo n.º 31
0
		static void WriteInternal (BinaryWriter writer, INameEncoder nameTable, IType type)
		{
			Debug.Assert (type != null);
			if (type is DomTypeProxy)
				type = ((DomTypeProxy)type).WrappedType;
			if (type is CompoundType && ((CompoundType)type).PartsCount > 1) {
				CompoundType compoundType = type as CompoundType;
				writer.Write ((uint)compoundType.PartsCount);
				foreach (IType part in compoundType.Parts)
					WriteInternal (writer, nameTable, part);
				return;
			}
			
			writer.Write ((uint)1);
			WriteMemberInformation (writer, nameTable, type);
			writer.Write ((uint)type.TypeModifier);
			Write (writer, nameTable, type.BodyRegion);
			
			if (type.CompilationUnit != null) {
				if (string.IsNullOrEmpty (type.CompilationUnit.FileName)) {
					LoggingService.LogError ("compilation unit file name == null. Can't write invalid data for:" + type.Name);
					throw new InvalidDataException ("compilation unit file name == null. Can't write invalid data for:" + type.Name);
				}
				WriteString (type.CompilationUnit.FileName, writer, nameTable);
			} else {
				WriteString (null, writer, nameTable);
			}
			WriteString (type.Namespace, writer, nameTable);
			writer.Write ((uint)type.ClassType);
			Write (writer, nameTable, type.BaseType);
			if (type.ImplementedInterfaces == null) {
				writer.Write (0);
			} else {
				writer.Write (type.ImplementedInterfaces.Count);
				foreach (IReturnType iface in type.ImplementedInterfaces) {
					Write (writer, nameTable, iface);
				}
			}
			writer.Write (type.InnerTypeCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} inner types.", writer.BaseStream.Position, type.InnerTypeCount);
			foreach (IType innerType in type.InnerTypes) {
				WriteInternal (writer, nameTable, innerType);
			}
			writer.Write (type.FieldCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} fields.", writer.BaseStream.Position, type.FieldCount);
			foreach (IField field in type.Fields) {
				Write (writer, nameTable, field);
			}
			writer.Write (type.MethodCount + type.ConstructorCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} methods.", writer.BaseStream.Position, type.MethodCount + type.ConstructorCount);
			foreach (IMethod method in type.Methods) {
				Write (writer, nameTable, method);
			}
			writer.Write (type.PropertyCount + type.IndexerCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} properties.", writer.BaseStream.Position, type.PropertyCount + type.IndexerCount);
			foreach (IProperty property in type.Properties) {
				Write (writer, nameTable, property);
			}
			writer.Write (type.EventCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} events.", writer.BaseStream.Position, type.EventCount);
			foreach (IEvent evt in type.Events) {
				Write (writer, nameTable, evt);
			}
			writer.Write (type.TypeParameters.Count);
			foreach (TypeParameter tp in type.TypeParameters)
				Write (writer, nameTable, tp);
		}
Exemplo n.º 32
0
 public static void Write(BinaryWriter writer, INameEncoder nameTable, IType type)
 {
     nameTable.Reset();
     WriteInternal(writer, nameTable, type);
 }
Exemplo n.º 33
0
		internal static void WriteAttributeEntryList (BinaryWriter writer, INameEncoder nameTable, List<AttributeEntry> list)
		{
			writer.Write (list.Count);
			foreach (AttributeEntry e in list) {
				WriteString (e.File, writer, nameTable);
				Write (writer, nameTable, e.Attribute);
			}
		}
 public static void WriteString(string s, BinaryWriter writer, INameEncoder nameTable)
 {
     if (s == null)
         writer.Write (-2);
     else {
         int id = nameTable.GetStringId (s);
         writer.Write (id);
         if (id == -1)
             writer.Write (s);
     }
 }
Exemplo n.º 35
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, ITypeParameter typeParameter)
		{
			WriteString (typeParameter.Name, writer, nameTable);

			// Flags
			writer.Write ((byte)typeParameter.TypeParameterModifier);
			
			// Variance 

			writer.Write ((byte)typeParameter.Variance);
			
			// Constraints
			
			writer.Write (typeParameter.Constraints.Count ());
			foreach (IReturnType rt in typeParameter.Constraints)
				Write (writer, nameTable, rt);

			// Attributes
			
			writer.Write (typeParameter.Attributes.Count ());
			foreach (IAttribute attr in typeParameter.Attributes)
				Write (writer, nameTable, attr);
		}
Exemplo n.º 36
0
		static void WriteMemberInformation (BinaryWriter writer, INameEncoder nameTable, IMember member)
		{
			WriteString (member.Name, writer, nameTable);
			WriteString (member.Documentation, writer, nameTable);
			writer.Write ((uint)member.Modifiers);
			Write (writer, nameTable, member.Location);
			
			writer.Write (member.Attributes.Count ());
			foreach (IAttribute attr in member.Attributes)
				Write (writer, nameTable, attr);
		}
Exemplo n.º 37
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IAttribute attr)
		{
			WriteString (attr.Name, writer, nameTable);
			Write (writer, nameTable, attr.Region);
			writer.Write ((int)attr.AttributeTarget);
			Write (writer, nameTable, attr.AttributeType);
			
			CodeExpression[] exps = new CodeExpression [attr.PositionalArguments.Count + attr.NamedArguments.Count];
			// Save the named argument count. The remaining expressions will be considered positionl arguments.
			writer.Write ((uint)attr.NamedArguments.Count);
			int n = 0;
			foreach (KeyValuePair<string, CodeExpression> na in attr.NamedArguments) {
				WriteString (na.Key, writer, nameTable);
				exps [n++] = na.Value;
			}
			attr.PositionalArguments.CopyTo (exps, n);
			Write (writer, nameTable, exps);
		}
Exemplo n.º 38
0
        static void WriteInternal(BinaryWriter writer, INameEncoder nameTable, IType type)
        {
            Debug.Assert(type != null);
            if (type is CompoundType && ((CompoundType)type).PartsCount > 1)
            {
                CompoundType compoundType = type as CompoundType;
                writer.Write((uint)compoundType.PartsCount);
                foreach (IType part in compoundType.Parts)
                {
                    WriteInternal(writer, nameTable, part);
                }
                return;
            }

            writer.Write((uint)1);
            WriteMemberInformation(writer, nameTable, type);
            writer.Write((uint)type.TypeModifier);
            Write(writer, nameTable, type.BodyRegion);

            if (type.CompilationUnit != null)
            {
                WriteString(type.CompilationUnit.FileName, writer, nameTable);
            }
            else
            {
                WriteString(null, writer, nameTable);
            }
            WriteString(type.Namespace, writer, nameTable);
            writer.Write((uint)type.ClassType);
            Write(writer, nameTable, type.BaseType);
            if (type.ImplementedInterfaces == null)
            {
                writer.Write(0);
            }
            else
            {
                writer.Write(type.ImplementedInterfaces.Count);
                foreach (IReturnType iface in type.ImplementedInterfaces)
                {
                    Write(writer, nameTable, iface);
                }
            }
            writer.Write(type.InnerTypeCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} inner types.", writer.BaseStream.Position, type.InnerTypeCount);
            foreach (IType innerType in type.InnerTypes)
            {
                WriteInternal(writer, nameTable, innerType);
            }
            writer.Write(type.FieldCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} fields.", writer.BaseStream.Position, type.FieldCount);
            foreach (IField field in type.Fields)
            {
                Write(writer, nameTable, field);
            }
            writer.Write(type.MethodCount + type.ConstructorCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} methods.", writer.BaseStream.Position, type.MethodCount + type.ConstructorCount);
            foreach (IMethod method in type.Methods)
            {
                Write(writer, nameTable, method);
            }
            writer.Write(type.PropertyCount + type.IndexerCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} properties.", writer.BaseStream.Position, type.PropertyCount + type.IndexerCount);
            foreach (IProperty property in type.Properties)
            {
                Write(writer, nameTable, property);
            }
            writer.Write(type.EventCount);
//			if (verbose) System.Console.WriteLine("pos:{0}, write {1} events.", writer.BaseStream.Position, type.EventCount);
            foreach (IEvent evt in type.Events)
            {
                Write(writer, nameTable, evt);
            }
            writer.Write(type.TypeParameters.Count);
            foreach (TypeParameter tp in type.TypeParameters)
            {
                Write(writer, nameTable, tp);
            }
        }
Exemplo n.º 39
0
		static void WriteString (string s, BinaryWriter writer, INameEncoder nameTable)
		{
			if (s == null)
				writer.Write (-2);
			else {
				bool isNew;
				int id = nameTable.GetStringId (s, out isNew);
				writer.Write (id);
				if (isNew)
					writer.Write (s);
			}
		}
Exemplo n.º 40
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IField field)
		{
			Debug.Assert (field != null);
			WriteMemberInformation (writer, nameTable, field);
			Write (writer, nameTable, field.ReturnType);
		}
		public static void Write (BinaryWriter writer, INameEncoder nameTable, ITypeParameter typeParameter)
		{
			WriteString (typeParameter.Name, writer, nameTable);

			// Flags
			
			byte f = 0;
			if (typeParameter.ClassRequired)
				f |= 1;
			if (typeParameter.ValueTypeRequired)
				f |= 2;
			if (typeParameter.ConstructorRequired)
				f |= 4;
			writer.Write (f);

			// Variance 

			writer.Write ((byte)typeParameter.Variance);

			// Constraints
			
			writer.Write (typeParameter.Constraints.Count ());
			foreach (IReturnType rt in typeParameter.Constraints)
				Write (writer, nameTable, rt);

			// Attributes
			
			writer.Write (typeParameter.Attributes.Count ());
			foreach (IAttribute attr in typeParameter.Attributes)
				Write (writer, nameTable, attr);
		}
Exemplo n.º 42
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, CodeExpression[] exps)
		{
			writer.Write (exps.Length);
			foreach (CodeExpression exp in exps) {
				Write (writer, nameTable, exp);		
			}
		}
Exemplo n.º 43
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, IMethod method)
		{
			Debug.Assert (method != null);
			WriteMemberInformation (writer, nameTable, method);
			writer.Write (method.ExplicitInterfaces.Count());
			foreach (IReturnType returnType in method.ExplicitInterfaces) {
				Write (writer, nameTable, returnType);
			}
			Write (writer, nameTable, method.BodyRegion);
			Write (writer, nameTable, method.ReturnType);
			writer.Write ((int)method.MethodModifier);
			if (method.Parameters == null) {
				writer.Write (0);
			} else {
				writer.Write (method.Parameters.Count);
				foreach (IParameter param in method.Parameters) {
					Write (writer, nameTable, param);
				}
			}

			writer.Write (method.TypeParameters.Count);
			foreach (ITypeParameter genArg in method.TypeParameters) {
				Write (writer, nameTable, genArg);
			}
		}
Exemplo n.º 44
0
		public static void Write (BinaryWriter writer, INameEncoder nameTable, CodeExpression cexp)
		{
			if (cexp is CodePrimitiveExpression) {
				CodePrimitiveExpression exp = (CodePrimitiveExpression)cexp;
				if (exp.Value == null) {
					writer.Write ((int)TypeCode.DBNull);
					return;
				}
				if (!(exp.Value is Array)) {
					writer.Write ((int)Type.GetTypeCode (exp.Value.GetType ()));
					WriteString (Convert.ToString (exp.Value, CultureInfo.InvariantCulture), writer, nameTable);
					return;
				}
			}
			writer.Write ((int)TypeCode.Object);
			serializer.Serialize (writer, cexp, typeof(CodeExpression));
		}
        public static void WriteTo(IClass cls, BinaryWriter writer, INameEncoder nameTable)
        {
            PersistentHelper.WriteString (cls.FullyQualifiedName, writer, nameTable);
            PersistentHelper.WriteString (cls.Documentation, writer, nameTable);

            writer.Write((uint)cls.Modifiers);
            writer.Write((short)cls.ClassType);

            writer.Write((uint)(cls.BaseTypes.Count));
            foreach (string baseType in cls.BaseTypes)
                PersistentHelper.WriteString (baseType, writer, nameTable);

            writer.Write((uint)cls.InnerClasses.Count);
            foreach (IClass innerClass in cls.InnerClasses) {
                PersistentClass.WriteTo (innerClass, writer, nameTable);
            }

            writer.Write((uint)cls.Fields.Count);
            foreach (IField field in cls.Fields) {
                PersistentField.WriteTo (field, writer, nameTable);
            }

            writer.Write((uint)cls.Properties.Count);
            foreach (IProperty property in cls.Properties) {
                PersistentProperty.WriteTo (property, writer, nameTable);
            }

            writer.Write((uint)cls.Methods.Count);
            foreach (IMethod method in cls.Methods) {
                PersistentMethod.WriteTo (method, writer, nameTable);
            }

            writer.Write((uint)cls.Events.Count);
            foreach (IEvent e in cls.Events) {
                PersistentEvent.WriteTo (e, writer, nameTable);
            }

            writer.Write((uint)cls.Indexer.Count);
            foreach (IIndexer ind in cls.Indexer) {
                PersistentIndexer.WriteTo (ind, writer, nameTable);
            }

            PersistentRegion.WriteTo (cls.Region, writer, nameTable);
        }