public FunctionDef funcdef()
{
var start = Expect(TokenType.Def).Start;
var token = Expect(TokenType.ID);
var fnName = new Identifier((string) token.Value, filename, token.Start, token.End);
Debug.Print(" Parsing {0}", fnName.Name);
List<Parameter> parms = parameters();
Exp t = null;
if (PeekAndDiscard(TokenType.LARROW))
{
t = test();
}
Expect(TokenType.COLON);
var s = suite();
var vararg = parms.Where(p => p.vararg).SingleOrDefault();
var kwarg = parms.Where(p => p.keyarg).SingleOrDefault();
return new FunctionDef(
fnName,
parms,
vararg!= null? vararg.Id : null,
kwarg != null ? kwarg.Id : null,
t,
s,
filename, start, s.End);
}