protected override void Emit(CodeTypeDeclaration ctd) { EmitEmptyCtor (ctd); // Parameter fields foreach (string name in sparams.Keys) EmitParameter (ctd, name); // ApplyDefaults EmitApplyDefaults (ctd); // Apply prologue CodeParameterDeclarationExpression p1 = new CodeParameterDeclarationExpression (ProjBuilder, "proj"); CodeParameterDeclarationExpression p2 = new CodeParameterDeclarationExpression (CDH.String, "declloc"); CodeParameterDeclarationExpression p3 = new CodeParameterDeclarationExpression (CDH.ILog, "log"); CodeMemberMethod apply = new CodeMemberMethod (); apply.Name = "Apply"; apply.Attributes = MemberAttributes.Public | MemberAttributes.Override; apply.ReturnType = CDH.Bool; apply.Parameters.Add (p1); apply.Parameters.Add (p2); apply.Parameters.Add (p3); CDH.EmitBaseChainBool (apply); // Elements if (elts.Count > 0) { apply.Statements.Add (CDH.Variable (ProvBuilder, "pb")); apply.Statements.Add (CDH.Variable (TargBuilder, "tb")); CodeArgumentReferenceExpression proj = CDH.ARef ("proj"); CodeArgumentReferenceExpression declloc = CDH.ARef ("declloc"); CodeArgumentReferenceExpression log = CDH.ARef ("log"); CodeVariableReferenceExpression pb = CDH.VRef ("pb"); CodeVariableReferenceExpression tb = CDH.VRef ("tb"); foreach (StructureElement se in elts) se.EmitApply (apply, proj, declloc, log, pb, tb); } // Apply epilogue apply.Statements.Add (new CodeMethodReturnStatement (CDH.False)); ctd.Members.Add (apply); }