Chromium Code Reviews| Index: src/x64/full-codegen-x64.cc |
| =================================================================== |
| --- src/x64/full-codegen-x64.cc (revision 5322) |
| +++ src/x64/full-codegen-x64.cc (working copy) |
| @@ -3014,6 +3014,33 @@ |
| } |
| +void FullCodeGenerator::VisitCompareToNull(CompareToNull* expr) { |
| + Comment cmnt(masm_, "[ CompareToNull"); |
| + Label materialize_true, materialize_false; |
|
Mads Ager (chromium)
2010/08/24 07:17:45
Indentation.
|
| + Label* if_true = NULL; |
| + Label* if_false = NULL; |
| + PrepareTest(&materialize_true, &materialize_false, &if_true, &if_false); |
| + |
| + VisitForValue(expr->expression(), kAccumulator); |
| + __ CompareRoot(rax, Heap::kNullValueRootIndex); |
| + if (expr->is_strict()) { |
| + Split(equal, if_true, if_false, NULL); |
| + } else { |
| + __ j(equal, if_true); |
| + __ CompareRoot(rax, Heap::kUndefinedValueRootIndex); |
| + __ j(equal, if_true); |
| + Condition is_smi = masm_->CheckSmi(rax); |
| + __ j(is_smi, if_false); |
| + // It can be an undetectable object. |
| + __ movq(rdx, FieldOperand(rax, HeapObject::kMapOffset)); |
| + __ testb(FieldOperand(rdx, Map::kBitFieldOffset), |
| + Immediate(1 << Map::kIsUndetectable)); |
| + Split(not_zero, if_true, if_false, NULL); |
| + } |
| + Apply(context_, if_true, if_false); |
| +} |
| + |
| + |
| void FullCodeGenerator::VisitThisFunction(ThisFunction* expr) { |
| __ movq(rax, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset)); |
| Apply(context_, rax); |