Expr Visit(string name, FunctionBody function) { var parentScope = scope; scope = Scope.CreateFunctionChild(scope); var parameters = function.Parameters.Select(p => scope.AddLocal(p)).ToList(); if (function.Varargs) { parameters.Add(scope.AddLocal(Constant.VARARGS, typeof(Varargs))); } var bodyExpr = Expr.Block(Visit(function.Body), Expr.Label(scope.GetReturnLabel(), Expr.Constant(null))); var lambdaExpr = Expr.Lambda(bodyExpr, Constant.FUNCTION_PREFIX + name, parameters); scope = parentScope; return(lambdaExpr); }