diff -r f9c4371d59d4 -r 7721042bdb67 src/compiler/NameBinding.cpp --- a/src/compiler/NameBinding.cpp Thu Dec 27 21:07:03 2012 -0800 +++ b/src/compiler/NameBinding.cpp Fri Dec 28 17:13:51 2012 -0800 @@ -335,12 +335,26 @@ node->setScope(env.scope()); } void visitBlockStatement(BlockStatement *node) { - SymbolEnv env(&env_); + if (node->type() == TOK_NEW) { + // Don't create a symbol environment for this block, since it + // was created solely to house multiple variable decls. + for (size_t i = 0; i < node->statements()->length(); i++) + node->statements()->at(i)->accept(this); + } else { + assert(node->type() == TOK_LBRACE); + + SymbolEnv env(&env_); - for (size_t i = 0; i < node->statements()->length(); i++) - node->statements()->at(i)->accept(this); + for (size_t i = 0; i < node->statements()->length(); i++) + node->statements()->at(i)->accept(this); + + if (node->type() == TOK_NEW) { + assert(!env.scope()); + return; + } - node->setScope(env.scope()); + node->setScope(env.scope()); + } } void visitIntegerLiteral(IntegerLiteral *node) { } @@ -856,6 +870,9 @@ fun->setReturnType(type); } + if (sig.variadic()) + fun->setVariadic(); + Local params(zone_, FixedArray::New(zone_, sig.parameters()->length(), Heap::Tenure_Old)); if (!params) return false;