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:
parent
5afca497cb
commit
6ef835e5d2
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user