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