X87: Fix %FunctionGetName and %_ClassOf for bound functions.

port 8e303dd0b3 (r36276)

  original commit message:

BUG=

Review-Url: https://codereview.chromium.org/1989153002
Cr-Commit-Position: refs/heads/master@{#36305}
This commit is contained in:
zhengxing.li 2016-05-17 23:58:03 -07:00 committed by Commit bot
parent c5a71f029f
commit dcc283e823
2 changed files with 8 additions and 6 deletions

View File

@ -2520,11 +2520,12 @@ void LCodeGen::EmitClassOfTest(Label* is_true,
DCHECK(!temp.is(temp2)); DCHECK(!temp.is(temp2));
__ JumpIfSmi(input, is_false); __ JumpIfSmi(input, is_false);
__ CmpObjectType(input, JS_FUNCTION_TYPE, temp); __ CmpObjectType(input, FIRST_FUNCTION_TYPE, temp);
STATIC_ASSERT(LAST_FUNCTION_TYPE == LAST_TYPE);
if (String::Equals(isolate()->factory()->Function_string(), class_name)) { if (String::Equals(isolate()->factory()->Function_string(), class_name)) {
__ j(equal, is_true); __ j(above_equal, is_true);
} else { } else {
__ j(equal, is_false); __ j(above_equal, is_false);
} }
// Now we are in the FIRST-LAST_NONCALLABLE_SPEC_OBJECT_TYPE range. // Now we are in the FIRST-LAST_NONCALLABLE_SPEC_OBJECT_TYPE range.

View File

@ -2715,9 +2715,10 @@ void FullCodeGenerator::EmitClassOf(CallRuntime* expr) {
__ CmpObjectType(eax, FIRST_JS_RECEIVER_TYPE, eax); __ CmpObjectType(eax, FIRST_JS_RECEIVER_TYPE, eax);
__ j(below, &null, Label::kNear); __ j(below, &null, Label::kNear);
// Return 'Function' for JSFunction objects. // Return 'Function' for JSFunction and JSBoundFunction objects.
__ CmpInstanceType(eax, JS_FUNCTION_TYPE); __ CmpInstanceType(eax, FIRST_FUNCTION_TYPE);
__ j(equal, &function, Label::kNear); STATIC_ASSERT(LAST_FUNCTION_TYPE == LAST_TYPE);
__ j(above_equal, &function, Label::kNear);
// Check if the constructor in the map is a JS function. // Check if the constructor in the map is a JS function.
__ GetMapConstructor(eax, eax, ebx); __ GetMapConstructor(eax, eax, ebx);