Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 public void LinkData(MethodDefData pMethodDef)
 {
     if (LocalVarSigToken != 0)
     {
         LocalVarSignature         = (StandAloneSigData)pMethodDef.CLIFile.ExpandMetadataToken(LocalVarSigToken).Data;
         ExpandedLocalVarSignature = LocalVarSignature.ExpandedLocalVarSignature;
     }
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
		public virtual void VisitLocalVarSig (LocalVarSig localvar)
		{
		}
Пример #7
0
 public virtual void VisitLocalVarSig(LocalVarSig localvar)
 {
 }