Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 __ pop(Operand(rbp, SlotOffset(var->slot()))); | 375 __ pop(Operand(rbp, SlotOffset(var->slot()))); |
| 376 } | 376 } |
| 377 break; | 377 break; |
| 378 case Slot::CONTEXT: | 378 case Slot::CONTEXT: |
| 379 // The variable in the decl always resides in the current context. | 379 // The variable in the decl always resides in the current context. |
| 380 ASSERT(function_->scope()->ContextChainLength(slot->var()->scope()) == 0); | 380 ASSERT(function_->scope()->ContextChainLength(slot->var()->scope()) == 0); |
| 381 if (decl->mode() == Variable::CONST) { | 381 if (decl->mode() == Variable::CONST) { |
| 382 __ Move(rax, Factory::the_hole_value()); | 382 __ Move(rax, Factory::the_hole_value()); |
| 383 if (FLAG_debug_code) { | 383 if (FLAG_debug_code) { |
| 384 // Check if we have the correct context pointer. | 384 // Check if we have the correct context pointer. |
| 385 __ movq(rbx, CodeGenerator::ContextOperand( | 385 __ movq(rbx, CodeGenerator::ContextOperand(rsi, |
| 386 rsi, Context::FCONTEXT_INDEX)); | 386 Context::FCONTEXT_INDEX)); |
| 387 __ cmpq(rbx, rsi); | 387 __ cmpq(rbx, rsi); |
| 388 __ Check(equal, "Unexpected declaration in current context."); | 388 __ Check(equal, "Unexpected declaration in current context."); |
| 389 } | 389 } |
| 390 __ movq(CodeGenerator::ContextOperand(rsi, slot->index()), rax); | 390 __ movq(CodeGenerator::ContextOperand(rsi, slot->index()), rax); |
| 391 // No write barrier since the_hole_value is in old space. | 391 // No write barrier since the_hole_value is in old space. |
| 392 ASSERT(Heap::InNewSpace(*Factory::the_hole_value())); | 392 ASSERT(!Heap::InNewSpace(*Factory::the_hole_value())); |
|
Lasse Reichstein
2009/11/24 14:21:36
I can't see how we could have been hitting this at
fschneider
2009/11/25 01:02:59
Thanks for fixing this along the way. I'm not sure
Lasse Reichstein
2009/11/25 08:56:26
Since the code isn't hit at all now, it's an easy
| |
| 393 } else if (decl->fun() != NULL) { | 393 } else if (decl->fun() != NULL) { |
| 394 Visit(decl->fun()); | 394 Visit(decl->fun()); |
| 395 __ pop(rax); | 395 __ pop(rax); |
| 396 if (FLAG_debug_code) { | 396 if (FLAG_debug_code) { |
| 397 // Check if we have the correct context pointer. | 397 // Check if we have the correct context pointer. |
| 398 __ movq(rbx, CodeGenerator::ContextOperand( | 398 __ movq(rbx, CodeGenerator::ContextOperand(rsi, |
| 399 rsi, Context::FCONTEXT_INDEX)); | 399 Context::FCONTEXT_INDEX)); |
| 400 __ cmpq(rbx, rsi); | 400 __ cmpq(rbx, rsi); |
| 401 __ Check(equal, "Unexpected declaration in current context."); | 401 __ Check(equal, "Unexpected declaration in current context."); |
| 402 } | 402 } |
| 403 __ movq(CodeGenerator::ContextOperand(rsi, slot->index()), rax); | 403 __ movq(CodeGenerator::ContextOperand(rsi, slot->index()), rax); |
| 404 int offset = FixedArray::kHeaderSize + slot->index() * kPointerSize; | 404 int offset = Context::SlotOffset(slot->index()); |
| 405 __ RecordWrite(rsi, offset, rax, rcx); | 405 __ RecordWrite(rsi, offset, rax, rcx); |
| 406 } | 406 } |
| 407 break; | 407 break; |
| 408 default: | 408 default: |
| 409 UNREACHABLE(); | 409 UNREACHABLE(); |
| 410 } | 410 } |
| 411 } | 411 } |
| 412 | 412 |
| 413 | 413 |
| 414 void FastCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) { | 414 void FastCodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) { |
| (...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1548 true_label_ = saved_true; | 1548 true_label_ = saved_true; |
| 1549 false_label_ = saved_false; | 1549 false_label_ = saved_false; |
| 1550 // Convert current context to test context: End post-test code. | 1550 // Convert current context to test context: End post-test code. |
| 1551 } | 1551 } |
| 1552 | 1552 |
| 1553 | 1553 |
| 1554 #undef __ | 1554 #undef __ |
| 1555 | 1555 |
| 1556 | 1556 |
| 1557 } } // namespace v8::internal | 1557 } } // namespace v8::internal |
| OLD | NEW |