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); }
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)); } }