private static AstNode ParseLambda(TokenStream stream) { stream.Expect (TokenClass.Keyword, "lambda"); bool isInstanceMethod; bool isVariadic; bool acceptsKwargs; List<string> parameters = ParseFuncParameters (stream, out isInstanceMethod, out isVariadic, out acceptsKwargs); LambdaExpression decl = new LambdaExpression (stream.Location, isInstanceMethod, isVariadic, acceptsKwargs, parameters); if (stream.Accept (TokenClass.Operator, "=>")) decl.Add (new ReturnStatement (stream.Location, ParseExpression (stream))); else decl.Add (ParseStatement (stream)); return decl; }
private static AstNode ParseWhen(TokenStream stream) { WhenStatement caseStmt = new WhenStatement (stream.Location); stream.Expect (TokenClass.Keyword, "when"); AstNode value = ParseExpression (stream); AstNode body = ParseStatement (stream); AstNode lambda = new LambdaExpression (body.Location, false, false, false, new System.Collections.Generic.List<string> ()); lambda.Add (body); caseStmt.Add (value); caseStmt.Add (lambda); return caseStmt; }