Ejemplo n.º 1
0
        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);
        }