Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index b274b2fe42aea26ad74784bab6a50931839ee45c..19b9aa4cdc0dde32c3e0f3c49984e632d1aa22e6 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -2030,7 +2030,8 @@ void MacroAssembler::DispatchMap(Register obj, |
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); |
@@ -2038,6 +2039,15 @@ void MacroAssembler::TryGetFunctionPrototype(Register function, |
CompareObjectType(function, result, scratch, JS_FUNCTION_TYPE); |
b(ne, miss); |
+ if (miss_on_bound_function) { |
+ ldr(scratch, |
+ FieldMemOperand(function, JSFunction::kSharedFunctionInfoOffset)); |
+ ldr(scratch, |
+ FieldMemOperand(scratch, SharedFunctionInfo::kCompilerHintsOffset)); |
+ tst(scratch, Operand(1 << SharedFunctionInfo::kBoundFunction)); |
+ b(ne, miss); |
+ } |
+ |
// Make sure that the function has an instance prototype. |
Label non_instance; |
ldrb(scratch, FieldMemOperand(result, Map::kBitFieldOffset)); |