A recursive call to the code generator could (conceivably) clobber any

register.  Generate code to evaluate both arguments of FastCharCodeAt
before popping either from the stack.
Review URL: http://codereview.chromium.org/13706

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@958 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
kmillikin@chromium.org 2008-12-10 13:49:19 +00:00
parent 5afca497cb
commit 6ef835e5d2

View File

@ -2919,18 +2919,16 @@ void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) {
Label ascii_string;
Label got_char_code;
// Load the string into eax.
// Load the string into eax and the index into ebx.
Load(args->at(0));
Load(args->at(1));
frame_->Pop(ebx);
frame_->Pop(eax);
// If the receiver is a smi return undefined.
ASSERT(kSmiTag == 0);
__ test(eax, Immediate(kSmiTagMask));
__ j(zero, &slow_case, not_taken);
// Load the index into ebx.
Load(args->at(1));
frame_->Pop(ebx);
// Check for negative or non-smi index.
ASSERT(kSmiTag == 0);
__ test(ebx, Immediate(kSmiTagMask | 0x80000000));