Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 8a97b2d7852ee628af7ae2da45d9acc53981f1ee..c42aebc411b80f9b865f7bdf9b372b567c39de4b 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -228,6 +228,17 @@ MaybeHandle<Object> Object::ToLength(Isolate* isolate, Handle<Object> input) { |
return isolate->factory()->NewNumber(len); |
} |
+// static |
+MaybeHandle<Object> Object::ToIndex(Isolate* isolate, Handle<Object> input) { |
+ if (input->IsUndefined(isolate)) return isolate->factory()->NewNumber(0.0); |
+ ASSIGN_RETURN_ON_EXCEPTION(isolate, input, ToNumber(input), Object); |
+ double len = DoubleToInteger(input->Number()) + 0.0; |
+ if (len < 0.0 || len > kMaxSafeInteger) { |
+ THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kInvalidIndex), |
+ Object); |
+ } |
+ return isolate->factory()->NewNumber(len); |
+} |
bool Object::BooleanValue() { |
if (IsSmi()) return Smi::cast(this)->value() != 0; |