Fix bug in instanceof of bound functions on ARM.
Implement same on Mips. BUG=v8:1774 TEST=mjsunit/function-bind Review URL: http://codereview.chromium.org/8337012 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9677 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
56c763f023
commit
b15cfedf38
@ -2044,7 +2044,8 @@ void MacroAssembler::TryGetFunctionPrototype(Register function,
|
||||
FieldMemOperand(function, JSFunction::kSharedFunctionInfoOffset));
|
||||
ldr(scratch,
|
||||
FieldMemOperand(scratch, SharedFunctionInfo::kCompilerHintsOffset));
|
||||
tst(scratch, Operand(1 << SharedFunctionInfo::kBoundFunction));
|
||||
tst(scratch,
|
||||
Operand(Smi::FromInt(1 << SharedFunctionInfo::kBoundFunction)));
|
||||
b(ne, miss);
|
||||
}
|
||||
|
||||
|
@ -4071,7 +4071,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
||||
}
|
||||
|
||||
// Get the prototype of the function.
|
||||
__ TryGetFunctionPrototype(function, prototype, scratch, &slow);
|
||||
__ TryGetFunctionPrototype(function, prototype, scratch, &slow, true);
|
||||
|
||||
// Check that the function prototype is a JS object.
|
||||
__ JumpIfSmi(prototype, &slow);
|
||||
|
@ -3674,7 +3674,8 @@ void MacroAssembler::IsObjectJSStringType(Register object,
|
||||
void MacroAssembler::TryGetFunctionPrototype(Register function,
|
||||
Register result,
|
||||
Register scratch,
|
||||
Label* miss) {
|
||||
Label* miss,
|
||||
bool miss_on_bound_function) {
|
||||
// Check that the receiver isn't a smi.
|
||||
JumpIfSmi(function, miss);
|
||||
|
||||
@ -3682,6 +3683,16 @@ void MacroAssembler::TryGetFunctionPrototype(Register function,
|
||||
GetObjectType(function, result, scratch);
|
||||
Branch(miss, ne, scratch, Operand(JS_FUNCTION_TYPE));
|
||||
|
||||
if (miss_on_bound_function) {
|
||||
lw(scratch,
|
||||
FieldMemOperand(function, JSFunction::kSharedFunctionInfoOffset));
|
||||
lw(scratch,
|
||||
FieldMemOperand(scratch, SharedFunctionInfo::kCompilerHintsOffset));
|
||||
And(scratch, scratch,
|
||||
Operand(Smi::FromInt(1 << SharedFunctionInfo::kBoundFunction)));
|
||||
Branch(miss, ne, scratch, Operand(zero_reg));
|
||||
}
|
||||
|
||||
// Make sure that the function has an instance prototype.
|
||||
Label non_instance;
|
||||
lbu(scratch, FieldMemOperand(result, Map::kBitFieldOffset));
|
||||
|
@ -887,7 +887,8 @@ class MacroAssembler: public Assembler {
|
||||
void TryGetFunctionPrototype(Register function,
|
||||
Register result,
|
||||
Register scratch,
|
||||
Label* miss);
|
||||
Label* miss,
|
||||
bool miss_on_bound_function = false);
|
||||
|
||||
void GetObjectType(Register function,
|
||||
Register map,
|
||||
|
Loading…
Reference in New Issue
Block a user