public override Expression Compile() { var scope = new ModuleScope(Compiler); var moduleVar = scope.Module as ParameterExpression; Expression header = Assign(moduleVar, GetModule()); header = CallFrame.Expressions.Push(null, header); Compiler.StartScope(scope); try { var body = Body.Accept(Compiler); body = Expression.TryFinally(body, CallFrame.Expressions.Pop()); return(scope.CompileBody(Expression.Block(header, body))); } finally { Compiler.EndScope(); } }