public override void Visit(BlockExpression expression) { Block newblock = new Block(null, this.block); // TODO Review is the copy of argument and local names is needed foreach (var parname in this.block.ParameterNames) newblock.CompileArgument(parname); foreach (var locname in this.block.LocalNames) newblock.CompileLocal(locname); if (expression.ParameterNames != null) foreach (var parname in expression.ParameterNames) newblock.CompileArgument(parname); if (expression.LocalVariables != null) foreach (var locname in expression.LocalVariables) newblock.CompileLocal(locname); var compiler = new BytecodeCompiler(newblock); compiler.Visit(expression.Body); this.block.CompileGetBlock(newblock); }