| Index: src/parser.cc
 | 
| diff --git a/src/parser.cc b/src/parser.cc
 | 
| index 249c9ced35309b935b441a8d917f149c017f5ef5..685b4d93d3d08e9cb17cedb8393d310f20b91d62 100644
 | 
| --- a/src/parser.cc
 | 
| +++ b/src/parser.cc
 | 
| @@ -1634,34 +1634,49 @@ Block* Parser::ParseVariableDeclarations(bool accept_IN,
 | 
|  
 | 
|      if (top_scope_->is_global_scope()) {
 | 
|        // Compute the arguments for the runtime call.
 | 
| -      ZoneList<Expression*>* arguments = new ZoneList<Expression*>(2);
 | 
| -      // Be careful not to assign a value to the global variable if
 | 
| -      // we're in a with. The initialization value should not
 | 
| -      // necessarily be stored in the global object in that case,
 | 
| -      // which is why we need to generate a separate assignment node.
 | 
| +      ZoneList<Expression*>* arguments = new ZoneList<Expression*>(3);
 | 
|        arguments->Add(new Literal(name));  // we have at least 1 parameter
 | 
| -      if (is_const || (value != NULL && !inside_with())) {
 | 
| -        arguments->Add(value);
 | 
| -        value = NULL;  // zap the value to avoid the unnecessary assignment
 | 
| -      }
 | 
| -      // Construct the call to Runtime::DeclareGlobal{Variable,Const}Locally
 | 
| -      // and add it to the initialization statement block. Note that
 | 
| -      // this function does different things depending on if we have
 | 
| -      // 1 or 2 parameters.
 | 
|        CallRuntime* initialize;
 | 
| +
 | 
|        if (is_const) {
 | 
| +        arguments->Add(value);
 | 
| +        value = NULL;  // zap the value to avoid the unnecessary assignment
 | 
| +
 | 
| +        // Construct the call to Runtime_InitializeConstGlobal
 | 
| +        // and add it to the initialization statement block.
 | 
| +        // Note that the function does different things depending on
 | 
| +        // the number of arguments (1 or 2).
 | 
|          initialize =
 | 
| -          new CallRuntime(
 | 
| -            Factory::InitializeConstGlobal_symbol(),
 | 
| -            Runtime::FunctionForId(Runtime::kInitializeConstGlobal),
 | 
| -            arguments);
 | 
| +            new CallRuntime(
 | 
| +              Factory::InitializeConstGlobal_symbol(),
 | 
| +              Runtime::FunctionForId(Runtime::kInitializeConstGlobal),
 | 
| +              arguments);
 | 
|        } else {
 | 
| +        // Add strict mode.
 | 
| +        // We may want to pass singleton to avoid Literal allocations.
 | 
| +        arguments->Add(NewNumberLiteral(
 | 
| +            temp_scope_->StrictMode() ? kStrictMode : kNonStrictMode));
 | 
| +
 | 
| +        // Be careful not to assign a value to the global variable if
 | 
| +        // we're in a with. The initialization value should not
 | 
| +        // necessarily be stored in the global object in that case,
 | 
| +        // which is why we need to generate a separate assignment node.
 | 
| +        if (value != NULL && !inside_with()) {
 | 
| +          arguments->Add(value);
 | 
| +          value = NULL;  // zap the value to avoid the unnecessary assignment
 | 
| +        }
 | 
| +
 | 
| +        // Construct the call to Runtime_InitializeVarGlobal
 | 
| +        // and add it to the initialization statement block.
 | 
| +        // Note that the function does different things depending on
 | 
| +        // the number of arguments (2 or 3).
 | 
|          initialize =
 | 
| -          new CallRuntime(
 | 
| -            Factory::InitializeVarGlobal_symbol(),
 | 
| -            Runtime::FunctionForId(Runtime::kInitializeVarGlobal),
 | 
| -            arguments);
 | 
| +            new CallRuntime(
 | 
| +              Factory::InitializeVarGlobal_symbol(),
 | 
| +              Runtime::FunctionForId(Runtime::kInitializeVarGlobal),
 | 
| +              arguments);
 | 
|        }
 | 
| +
 | 
|        block->AddStatement(new ExpressionStatement(initialize));
 | 
|      }
 | 
|  
 | 
| 
 |