Index: src/full-codegen/ia32/full-codegen-ia32.cc |
diff --git a/src/full-codegen/ia32/full-codegen-ia32.cc b/src/full-codegen/ia32/full-codegen-ia32.cc |
index 6c0435a804fc23b92d59b3b547e46acfb0232a0d..c26b78049c9d30b93fa5c3e5757c0196fd2d2d62 100644 |
--- a/src/full-codegen/ia32/full-codegen-ia32.cc |
+++ b/src/full-codegen/ia32/full-codegen-ia32.cc |
@@ -2737,6 +2737,25 @@ |
// All done. |
__ bind(&done); |
+ context()->Plug(eax); |
+} |
+ |
+ |
+void FullCodeGenerator::EmitValueOf(CallRuntime* expr) { |
+ ZoneList<Expression*>* args = expr->arguments(); |
+ DCHECK(args->length() == 1); |
+ |
+ VisitForAccumulatorValue(args->at(0)); // Load the object. |
+ |
+ Label done; |
+ // If the object is a smi return the object. |
+ __ JumpIfSmi(eax, &done, Label::kNear); |
+ // If the object is not a value type, return the object. |
+ __ CmpObjectType(eax, JS_VALUE_TYPE, ebx); |
+ __ j(not_equal, &done, Label::kNear); |
+ __ mov(eax, FieldOperand(eax, JSValue::kValueOffset)); |
+ |
+ __ bind(&done); |
context()->Plug(eax); |
} |