src/compiler/NameBinding.cpp
changeset 247 7721042bdb67
parent 246 f9c4371d59d4
child 249 82b1f8bc93a9
     1.1 --- a/src/compiler/NameBinding.cpp	Thu Dec 27 21:07:03 2012 -0800
     1.2 +++ b/src/compiler/NameBinding.cpp	Fri Dec 28 17:13:51 2012 -0800
     1.3 @@ -335,12 +335,26 @@
     1.4          node->setScope(env.scope());
     1.5      }
     1.6      void visitBlockStatement(BlockStatement *node) {
     1.7 -        SymbolEnv env(&env_);
     1.8 +        if (node->type() == TOK_NEW) {
     1.9 +            // Don't create a symbol environment for this block, since it
    1.10 +            // was created solely to house multiple variable decls.
    1.11 +            for (size_t i = 0; i < node->statements()->length(); i++)
    1.12 +                node->statements()->at(i)->accept(this);
    1.13 +        } else {
    1.14 +            assert(node->type() == TOK_LBRACE);
    1.15 +
    1.16 +            SymbolEnv env(&env_);
    1.17  
    1.18 -        for (size_t i = 0; i < node->statements()->length(); i++)
    1.19 -            node->statements()->at(i)->accept(this);
    1.20 +            for (size_t i = 0; i < node->statements()->length(); i++)
    1.21 +                node->statements()->at(i)->accept(this);
    1.22 +        
    1.23 +            if (node->type() == TOK_NEW) {
    1.24 +                assert(!env.scope());
    1.25 +                return;
    1.26 +            }
    1.27  
    1.28 -        node->setScope(env.scope());
    1.29 +            node->setScope(env.scope());
    1.30 +        }
    1.31      }
    1.32      void visitIntegerLiteral(IntegerLiteral *node) {
    1.33      }
    1.34 @@ -856,6 +870,9 @@
    1.35              fun->setReturnType(type);
    1.36          }
    1.37  
    1.38 +        if (sig.variadic())
    1.39 +            fun->setVariadic();
    1.40 +
    1.41          Local<FixedArray> params(zone_, FixedArray::New(zone_, sig.parameters()->length(), Heap::Tenure_Old));
    1.42          if (!params)
    1.43              return false;