| Index: src/full-codegen/x64/full-codegen-x64.cc
 | 
| diff --git a/src/full-codegen/x64/full-codegen-x64.cc b/src/full-codegen/x64/full-codegen-x64.cc
 | 
| index 354b52bcf944516bb44a152a28975cefe79c41f1..eda5207026b8fdff1484eb837f9252ace5646311 100644
 | 
| --- a/src/full-codegen/x64/full-codegen-x64.cc
 | 
| +++ b/src/full-codegen/x64/full-codegen-x64.cc
 | 
| @@ -3230,6 +3230,27 @@
 | 
|    PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 | 
|    __ JumpIfSmi(rax, if_true);
 | 
|    __ jmp(if_false);
 | 
| +
 | 
| +  context()->Plug(if_true, if_false);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void FullCodeGenerator::EmitIsNonNegativeSmi(CallRuntime* expr) {
 | 
| +  ZoneList<Expression*>* args = expr->arguments();
 | 
| +  DCHECK(args->length() == 1);
 | 
| +
 | 
| +  VisitForAccumulatorValue(args->at(0));
 | 
| +
 | 
| +  Label materialize_true, materialize_false;
 | 
| +  Label* if_true = NULL;
 | 
| +  Label* if_false = NULL;
 | 
| +  Label* fall_through = NULL;
 | 
| +  context()->PrepareTest(&materialize_true, &materialize_false,
 | 
| +                         &if_true, &if_false, &fall_through);
 | 
| +
 | 
| +  PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 | 
| +  Condition non_negative_smi = masm()->CheckNonNegativeSmi(rax);
 | 
| +  Split(non_negative_smi, if_true, if_false, fall_through);
 | 
|  
 | 
|    context()->Plug(if_true, if_false);
 | 
|  }
 | 
| @@ -5013,7 +5034,7 @@
 | 
|    switch (op) {
 | 
|      case Token::IN:
 | 
|        VisitForStackValue(expr->right());
 | 
| -      __ CallRuntime(Runtime::kHasProperty, 2);
 | 
| +      __ InvokeBuiltin(Builtins::IN, CALL_FUNCTION);
 | 
|        PrepareForBailoutBeforeSplit(expr, false, NULL, NULL);
 | 
|        __ CompareRoot(rax, Heap::kTrueValueRootIndex);
 | 
|        Split(equal, if_true, if_false, fall_through);
 | 
| 
 |