public override void VisitVariableDefinitionCollection(VariableDefinitionCollection variables) { MethodBody body = variables.Container as MethodBody; if (body == null || body.LocalVarToken == 0) { return; } StandAloneSigTable sasTable = m_reflectReader.TableReader.GetStandAloneSigTable(); StandAloneSigRow sasRow = sasTable [(int)GetRid(body.LocalVarToken) - 1]; LocalVarSig sig = m_reflectReader.SigReader.GetLocalVarSig(sasRow.Signature); for (int i = 0; i < sig.Count; i++) { LocalVarSig.LocalVariable lv = sig.LocalVariables [i]; TypeReference varType = m_reflectReader.GetTypeRefFromSig( lv.Type, new GenericContext(body.Method)); if (lv.ByRef) { varType = new ReferenceType(varType); } if ((lv.Constraint & Constraint.Pinned) != 0) { varType = new PinnedType(varType); } varType = m_reflectReader.GetModifierType(lv.CustomMods, varType); body.Variables.Add(new VariableDefinition( string.Concat("V_", i), i, body.Method, varType)); } }
LocalVarSig GetLocalVarSig(VariableDefinitionCollection vars) { LocalVarSig lvs = new LocalVarSig(); lvs.CallingConvention |= 0x7; lvs.Count = vars.Count; lvs.LocalVariables = new LocalVarSig.LocalVariable [lvs.Count]; for (int i = 0; i < lvs.Count; i++) { LocalVarSig.LocalVariable lv = new LocalVarSig.LocalVariable(); TypeReference type = vars [i].VariableType; lv.CustomMods = m_reflectWriter.GetCustomMods(type); if (type is PinnedType) { lv.Constraint |= Constraint.Pinned; type = (type as PinnedType).ElementType; } if (type is ReferenceType) { lv.ByRef = true; type = (type as ReferenceType).ElementType; } lv.Type = m_reflectWriter.GetSigType(type); lvs.LocalVariables [i] = lv; } return(lvs); }
public void LinkData(MethodDefData pMethodDef) { if (LocalVarSigToken != 0) { LocalVarSignature = (StandAloneSigData)pMethodDef.CLIFile.ExpandMetadataToken(LocalVarSigToken).Data; ExpandedLocalVarSignature = LocalVarSignature.ExpandedLocalVarSignature; } }
public LocalVarSig GetLocalVarSig(VariableDefinitionCollection vars) { LocalVarSig lvs = new LocalVarSig(); lvs.CallingConvention |= 0x7; lvs.Count = vars.Count; lvs.LocalVariables = new LocalVarSig.LocalVariable [lvs.Count]; for (int i = 0; i < lvs.Count; i++) { lvs.LocalVariables [i] = GetLocalVariableSig(vars [i]); } return(lvs); }
private void LinkData(CLIFile pFile) { int cursor = 0; if (Signature[0] == 0x06) { ExpandedFieldSignature = new FieldSig(pFile, Signature, ref cursor); } else if (Signature[0] == 0x07) { ExpandedLocalVarSignature = new LocalVarSig(pFile, Signature, ref cursor); } else { ExpandedMethodSignature = new MethodSig(pFile, Signature, ref cursor); } }
public virtual void VisitLocalVarSig (LocalVarSig localvar) { }
public virtual void VisitLocalVarSig(LocalVarSig localvar) { }