Example #1
0
        public MethodInfo ReadMethodInfo(ConstantPoolInfo constantPool, uint index)
        {
            MethodInfo result     = new MethodInfo(index);
            uint       paramCount = ReadU30();

            result.ReturnType     = constantPool.GetMultinameAt(ReadU30());
            result.ParamTypeArray = (from n in ReadU30Array(paramCount) select constantPool.GetMultinameAt(n)).ToArray();
            result.Name           = constantPool.GetStringAt(ReadU30());
            result.Flags          = (MethodFlags)ReadByte();
            if (result.Flags.HasFlag(MethodFlags.HAS_OPTIONAL))
            {
                result.OptionalParamArray = new OptionalParam[ReadU30()];
                for (int i = 0; i < result.OptionalParamArray.Length; i++)
                {
                    result.OptionalParamArray[i]       = new OptionalParam();
                    result.OptionalParamArray[i].Value = ReadU30();
                    result.OptionalParamArray[i].Kind  = (ValueKind)ReadByte();
                }
            }

            if (result.Flags.HasFlag(MethodFlags.HAS_PARAM_NAMES))
            {
                result.ParamNameArray = ReadU30Array(paramCount);
            }

            return(result);
        }
Example #2
0
        public void WriteConstantPool(ConstantPoolInfo value)
        {
            WriteU30(value.IntArrayLength);
            for (uint i = 1; i < value.IntArrayLength; i++)
            {
                WriteS32(value.GetIntAt(i));
            }

            WriteU30(value.UIntArrayLength);
            for (uint i = 1; i < value.UIntArrayLength; i++)
            {
                WriteU30(value.GetUIntAt(i));
            }

            WriteU30(value.DoubleArrayLength);
            for (uint i = 1; i < value.DoubleArrayLength; i++)
            {
                WriteDouble(value.GetDoubleAt(i));
            }

            WriteU30(value.StringArrayLength);
            for (uint i = 1; i < value.StringArrayLength; i++)
            {
                StringInfo stringInfo = value.GetStringAt(i);

                WriteString(stringInfo);
            }


            WriteU30(value.NamespaceArrayLength);
            for (uint i = 1; i < value.NamespaceArrayLength; i++)
            {
                var namespaceInfo = value.GetNamespaceAt(i);
                WriteByte((Byte)namespaceInfo.Kind);
                WriteU30(namespaceInfo.Name?.Index ?? 0);
            }

            WriteU30(value.NamespaceSetArrayLength);
            for (uint i = 1; i < value.NamespaceSetArrayLength; i++)
            {
                WriteU30Array((from n in value.GetNamespaceSetAt(i).NamespaceArray select n.Index).ToArray(), true);
            }

            WriteU30(value.MultinameArrayLength);
            for (uint i = 1; i < value.MultinameArrayLength; i++)
            {
                WriteMultinameInfo(value.GetMultinameAt(i));
            }
        }