Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 682 if (property->key()->IsPropertyName()) { | 682 if (property->key()->IsPropertyName()) { |
| 683 ref->set_type(Reference::NAMED); | 683 ref->set_type(Reference::NAMED); |
| 684 } else { | 684 } else { |
| 685 Load(property->key()); | 685 Load(property->key()); |
| 686 ref->set_type(Reference::KEYED); | 686 ref->set_type(Reference::KEYED); |
| 687 } | 687 } |
| 688 } else if (var != NULL) { | 688 } else if (var != NULL) { |
| 689 // The expression is a variable proxy that does not rewrite to a | 689 // The expression is a variable proxy that does not rewrite to a |
| 690 // property. Global variables are treated as named property references. | 690 // property. Global variables are treated as named property references. |
| 691 if (var->is_global()) { | 691 if (var->is_global()) { |
| 692 // Named loads require object in eax. Named stores don't use references. | |
| 693 // Spilling eax makes it free, so LoadGlobal loads directly into eax. | |
|
Kevin Millikin (Chromium)
2010/02/19 10:23:04
The comment is still not quite right. LoadIC want
| |
| 694 frame_->Spill(eax); | |
| 692 LoadGlobal(); | 695 LoadGlobal(); |
| 693 ref->set_type(Reference::NAMED); | 696 ref->set_type(Reference::NAMED); |
| 694 } else { | 697 } else { |
| 695 ASSERT(var->slot() != NULL); | 698 ASSERT(var->slot() != NULL); |
| 696 ref->set_type(Reference::SLOT); | 699 ref->set_type(Reference::SLOT); |
| 697 } | 700 } |
| 698 } else { | 701 } else { |
| 699 // Anything else is a runtime error. | 702 // Anything else is a runtime error. |
| 700 Load(e); | 703 Load(e); |
| 701 frame_->CallRuntime(Runtime::kThrowReferenceError, 1); | 704 frame_->CallRuntime(Runtime::kThrowReferenceError, 1); |
| (...skipping 10054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10756 | 10759 |
| 10757 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 10760 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
| 10758 // tagged as a small integer. | 10761 // tagged as a small integer. |
| 10759 __ bind(&runtime); | 10762 __ bind(&runtime); |
| 10760 __ TailCallRuntime(ExternalReference(Runtime::kStringCompare), 2, 1); | 10763 __ TailCallRuntime(ExternalReference(Runtime::kStringCompare), 2, 1); |
| 10761 } | 10764 } |
| 10762 | 10765 |
| 10763 #undef __ | 10766 #undef __ |
| 10764 | 10767 |
| 10765 } } // namespace v8::internal | 10768 } } // namespace v8::internal |
| OLD | NEW |