private static void buildPhase1Routine(BnfProduction p) { Token t = p.ReturnTypeTokens[0]; bool voidReturn = t.kind == CSharpCCParserConstants.VOID; CSharpCCGlobals.PrintTokenSetup(t); CSharpCCGlobals.ccol = 1; CSharpCCGlobals.PrintLeadingComments(t, ostr); ostr.Write(" " + CSharpCCGlobals.staticOpt() + " " + (p.AccessModifier ?? "public") + " "); CSharpCCGlobals.cline = t.beginLine; CSharpCCGlobals.ccol = t.beginColumn; CSharpCCGlobals.PrintTokenOnly(t, ostr); for (int i = 1; i < p.ReturnTypeTokens.Count; i++) { t = p.ReturnTypeTokens[i]; CSharpCCGlobals.PrintToken(t, ostr); } CSharpCCGlobals.PrintTrailingComments(t, ostr); ostr.Write(" " + p.Lhs + "("); if (p.ParameterTokens.Count != 0) { CSharpCCGlobals.PrintTokenSetup(p.ParameterTokens[0]); foreach (var token in p.ParameterTokens) { t = token; CSharpCCGlobals.PrintToken(t, ostr); } CSharpCCGlobals.PrintTrailingComments(t, ostr); } ostr.Write(") {"); indentamt = 4; if (Options.getDebugParser()) { ostr.WriteLine(""); ostr.WriteLine(" trace_call(\"" + p.Lhs + "\");"); ostr.Write(" try {"); indentamt = 6; } if (p.DeclarationTokens.Count != 0) { CSharpCCGlobals.PrintTokenSetup(p.DeclarationTokens[0]); CSharpCCGlobals.cline--; foreach (var token in p.DeclarationTokens) { t = token; CSharpCCGlobals.PrintToken(t, ostr); } CSharpCCGlobals.PrintTrailingComments(t, ostr); } String code = phase1ExpansionGen(p.Expansion); dumpFormattedString(code); ostr.WriteLine(""); if (p.IsJumpPatched && !voidReturn) { ostr.WriteLine(" throw new InvalidOperationException(\"Missing return statement in function\");"); } if (Options.getDebugParser()) { ostr.WriteLine(" } finally {"); ostr.WriteLine(" trace_return(\"" + p.Lhs + "\");"); ostr.WriteLine(" }"); } ostr.WriteLine(" }"); ostr.WriteLine(""); }
public static void production_addexpansion(BnfProduction p, Expansion e) { e.Parent = p; p.Expansion = e; }