private List <CilSigArg> CompleteSigArgs(CilInstructionMethod instruction, CilMethod method) { var isInstanceCall = instruction.CallConv.IsInstance; var instanceSigArg = new CilSigArg { Id = ".this", Type = instruction.TypeSpec.GetCilType(_program) }; var result = isInstanceCall ? (new List <CilSigArg> { instanceSigArg }).Concat(instruction.SigArgs).ToList() : instruction.SigArgs; var start = isInstanceCall ? 1 : 0; for (int i = start; i < result.Count; i++) { result[i].Id = isInstanceCall ? method.Arguments[i - 1].Id : method.Arguments[i].Id; } return(result); }
public override void Init(AstContext context, ParseTreeNode parseNode) { // paramAttr + type var children2 = AstChildren.Empty() .Add <ParamAttrAstNode>() .Add <TypeAstNode>(); if (children2.PopulateWith(parseNode)) { SigArg = new CilSigArg { Type = children2.Child2.Type }; return; } // paramAttr + type + id var idChildren = AstChildren.Empty() .Add <ParamAttrAstNode>() .Add <TypeAstNode>() .Add <IdAstNode>(); if (idChildren.PopulateWith(parseNode)) { SigArg = new CilSigArg { Type = idChildren.Child2.Type, Id = idChildren.Child3.Value }; return; } throw new NotImplementedException(); }