| Index: src/full-codegen.cc
 | 
| diff --git a/src/full-codegen.cc b/src/full-codegen.cc
 | 
| index 0f44cf233ea9efc1497ff78c151ae08bf6b82ede..8911dcc4596a6af9b832b59b0ca855f30311515c 100644
 | 
| --- a/src/full-codegen.cc
 | 
| +++ b/src/full-codegen.cc
 | 
| @@ -190,9 +190,9 @@ void BreakableStatementChecker::VisitArrayLiteral(ArrayLiteral* expr) {
 | 
|  void BreakableStatementChecker::VisitAssignment(Assignment* expr) {
 | 
|    // If assigning to a property (including a global property) the assignment is
 | 
|    // breakable.
 | 
| -  Variable* var = expr->target()->AsVariableProxy()->AsVariable();
 | 
| +  VariableProxy* proxy = expr->target()->AsVariableProxy();
 | 
|    Property* prop = expr->target()->AsProperty();
 | 
| -  if (prop != NULL || (var != NULL && var->is_global())) {
 | 
| +  if (prop != NULL || (proxy != NULL && proxy->var()->IsUnallocated())) {
 | 
|      is_breakable_ = true;
 | 
|      return;
 | 
|    }
 | 
| @@ -395,26 +395,6 @@ void FullCodeGenerator::RecordStackCheck(int ast_id) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -int FullCodeGenerator::SlotOffset(Slot* slot) {
 | 
| -  ASSERT(slot != NULL);
 | 
| -  // Offset is negative because higher indexes are at lower addresses.
 | 
| -  int offset = -slot->index() * kPointerSize;
 | 
| -  // Adjust by a (parameter or local) base offset.
 | 
| -  switch (slot->type()) {
 | 
| -    case Slot::PARAMETER:
 | 
| -      offset += (info_->scope()->num_parameters() + 1) * kPointerSize;
 | 
| -      break;
 | 
| -    case Slot::LOCAL:
 | 
| -      offset += JavaScriptFrameConstants::kLocal0Offset;
 | 
| -      break;
 | 
| -    case Slot::CONTEXT:
 | 
| -    case Slot::LOOKUP:
 | 
| -      UNREACHABLE();
 | 
| -  }
 | 
| -  return offset;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  bool FullCodeGenerator::ShouldInlineSmiCase(Token::Value op) {
 | 
|    // Inline smi case inside loops, but not division and modulo which
 | 
|    // are too complicated and take up too much space.
 | 
| @@ -529,34 +509,21 @@ void FullCodeGenerator::DoTest(const TestContext* context) {
 | 
|  void FullCodeGenerator::VisitDeclarations(
 | 
|      ZoneList<Declaration*>* declarations) {
 | 
|    int length = declarations->length();
 | 
| -  int globals = 0;
 | 
| +  int global_count = 0;
 | 
|    for (int i = 0; i < length; i++) {
 | 
|      Declaration* decl = declarations->at(i);
 | 
| -    Variable* var = decl->proxy()->var();
 | 
| -    Slot* slot = var->AsSlot();
 | 
| -
 | 
| -    // If it was not possible to allocate the variable at compile
 | 
| -    // time, we need to "declare" it at runtime to make sure it
 | 
| -    // actually exists in the local context.
 | 
| -    if ((slot != NULL && slot->type() == Slot::LOOKUP) || !var->is_global()) {
 | 
| -      VisitDeclaration(decl);
 | 
| -    } else {
 | 
| -      // Count global variables and functions for later processing
 | 
| -      globals++;
 | 
| -    }
 | 
| +    EmitDeclaration(decl->proxy(), decl->mode(), decl->fun(), &global_count);
 | 
|    }
 | 
|  
 | 
| -  // Compute array of global variable and function declarations.
 | 
| -  // Do nothing in case of no declared global functions or variables.
 | 
| -  if (globals > 0) {
 | 
| +  // Batch declare global functions and variables.
 | 
| +  if (global_count > 0) {
 | 
|      Handle<FixedArray> array =
 | 
| -        isolate()->factory()->NewFixedArray(2 * globals, TENURED);
 | 
| +        isolate()->factory()->NewFixedArray(2 * global_count, TENURED);
 | 
|      for (int j = 0, i = 0; i < length; i++) {
 | 
|        Declaration* decl = declarations->at(i);
 | 
|        Variable* var = decl->proxy()->var();
 | 
| -      Slot* slot = var->AsSlot();
 | 
|  
 | 
| -      if ((slot == NULL || slot->type() != Slot::LOOKUP) && var->is_global()) {
 | 
| +      if (var->IsUnallocated()) {
 | 
|          array->set(j++, *(var->name()));
 | 
|          if (decl->fun() == NULL) {
 | 
|            if (var->mode() == Variable::CONST) {
 | 
| @@ -578,7 +545,7 @@ void FullCodeGenerator::VisitDeclarations(
 | 
|        }
 | 
|      }
 | 
|      // Invoke the platform-dependent code generator to do the actual
 | 
| -    // declaration the global variables and functions.
 | 
| +    // declaration the global functions and variables.
 | 
|      DeclareGlobals(array);
 | 
|    }
 | 
|  }
 | 
| 
 |