public override void Write(HighFileBuilder highFileBuilder, BinaryWriter catalogWriter) { uint typeName = highFileBuilder.IndexTypeNameTag(m_typeNameTag); List<uint> argTypes = new List<uint>(); foreach (TypeSpecTag typeTag in m_argTypes) argTypes.Add(highFileBuilder.IndexTypeSpecTag(typeTag)); catalogWriter.Write((byte)SubTypeCode.Class); catalogWriter.Write(typeName); foreach (uint argType in argTypes) catalogWriter.Write(argType); }
public void WriteDestinationDef(HighFileBuilder fileBuilder, HighRegionBuilder regionBuilder, BinaryWriter writer) { if (this.IsConstant) throw new Exception("Can't use constant as a destination"); writer.Write((byte)m_valueType); writer.Write(fileBuilder.IndexTypeSpecTag(m_type)); }
public void Write(HighFileBuilder fileBuilder, HighMethodBuilder methodBuilder, bool haveDebugInfo, BinaryWriter writer) { writer.Write(fileBuilder.IndexTypeSpecTag(m_catchType)); m_region.Write(fileBuilder, methodBuilder, haveDebugInfo, writer); }
public void WriteConstant(HighFileBuilder fileBuilder, HighRegionBuilder regionBuilder, BinaryWriter writer) { if (!this.IsConstant) throw new Exception("Can't use non-constant as a constant"); writer.Write((byte)m_valueType); writer.Write(fileBuilder.IndexTypeSpecTag(m_type)); if (m_valueType == HighValueType.Null) { } else if (m_valueType == HighValueType.ConstantString) writer.Write(fileBuilder.IndexString((string)m_constValue)); else if (m_valueType == HighValueType.ConstantValue) { TypeSpecClassTag classTag = (TypeSpecClassTag)m_type; TypeNameTag className = classTag.TypeName; string classNameStr = className.TypeName; if (classNameStr == "SByte") writer.Write((sbyte)m_constValue); else if (classNameStr == "Byte") writer.Write((byte)m_constValue); else if (classNameStr == "Int16") writer.Write((short)m_constValue); else if (classNameStr == "UInt16") writer.Write((ushort)m_constValue); else if (classNameStr == "Int32") writer.Write((int)m_constValue); else if (classNameStr == "UInt32") writer.Write((uint)m_constValue); else if (classNameStr == "Int64") writer.Write((long)m_constValue); else if (classNameStr == "UInt64") writer.Write((ulong)m_constValue); else if (classNameStr == "IntPtr") writer.Write((long)m_constValue); else if (classNameStr == "UIntPtr") writer.Write((ulong)m_constValue); else if (classNameStr == "Single") writer.Write((float)m_constValue); else if (classNameStr == "Double") writer.Write((double)m_constValue); else throw new ArgumentException(); } else throw new Exception(); }