Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 public void Write(HighFileBuilder fileBuilder, HighMethodBuilder methodBuilder, bool haveDebugInfo, BinaryWriter writer)
 {
     writer.Write(fileBuilder.IndexTypeSpecTag(m_catchType));
     m_region.Write(fileBuilder, methodBuilder, haveDebugInfo, writer);
 }
Exemplo n.º 4
0
        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();
        }