Exemplo n.º 1
0
        public SetMemberCallSite AddSetMemberCallSite(String fieldName)
        {
            SetMemberCallSite csr = new SetMemberCallSite(CallSiteReferences.Count, fieldName, this);

            CallSiteReferences.Add(csr);
            return(csr);
        }
        protected override void InstrospectiveFieldAssignation(Expression node, string memberName, Object obj)
        {
            InheritedAttributes ia       = (InheritedAttributes)obj;
            SetMemberCallSite   callSite = GetCallSiteContainer(ia.CurrentMethod).AddSetMemberCallSite(memberName);
            string id = GetAuxFielVar() + memberName;

            this.codeGenerator.WriteAuxiliarLocalVariable(this.indent, id, "object");
            this.codeGenerator.stloc(this.indent, id);
            this.codeGenerator.pop(this.indent);
            this.codeGenerator.WriteLine(indent, "ldsfld class " + callSite.CallSiteType + " class " + callSite.FullName);
            this.codeGenerator.WriteLine(indent, "ldfld !0 class " + callSite.CallSiteType + "::Target");
            this.codeGenerator.WriteLine(indent, "ldsfld class " + callSite.CallSiteType + " class " + callSite.FullName);
            node.Accept(this, obj);
            this.codeGenerator.ldloc(this.indent, id);
            this.codeGenerator.WriteLine(indent, "callvirt instance void class " + callSite.CallSiteSubType + "::Invoke(!0, !1, !2)");
        }