| Index: runtime/lib/array.cc
|
| ===================================================================
|
| --- runtime/lib/array.cc (revision 19164)
|
| +++ runtime/lib/array.cc (working copy)
|
| @@ -14,20 +14,29 @@
|
|
|
| DEFINE_NATIVE_ENTRY(ObjectArray_allocate, 2) {
|
| const AbstractTypeArguments& type_arguments =
|
| - AbstractTypeArguments::CheckedHandle(arguments->NativeArgAt(0));
|
| + AbstractTypeArguments::CheckedHandle(isolate, arguments->NativeArgAt(0));
|
| ASSERT(type_arguments.IsNull() ||
|
| (type_arguments.IsInstantiated() && (type_arguments.Length() == 1)));
|
| - GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(1));
|
| - intptr_t len = length.Value();
|
| + const Instance& length = Instance::CheckedHandle(
|
| + isolate, arguments->NativeArgAt(1));
|
| + if (!length.IsSmi()) {
|
| + const String& error = String::Handle(String::NewFormatted(
|
| + "Length must be an integer in the range [0..%"Pd"].",
|
| + Array::kMaxElements));
|
| + const Array& args = Array::Handle(Array::New(1));
|
| + args.SetAt(0, error);
|
| + Exceptions::ThrowByType(Exceptions::kArgument, args);
|
| + }
|
| + intptr_t len = Smi::Cast(length).Value();
|
| if (len < 0 || len > Array::kMaxElements) {
|
| const String& error = String::Handle(String::NewFormatted(
|
| - "length (%"Pd") must be in the range [0..%"Pd"]",
|
| + "Length (%"Pd") must be an integer in the range [0..%"Pd"].",
|
| len, Array::kMaxElements));
|
| const Array& args = Array::Handle(Array::New(1));
|
| args.SetAt(0, error);
|
| Exceptions::ThrowByType(Exceptions::kArgument, args);
|
| }
|
| - const Array& new_array = Array::Handle(Array::New(length.Value()));
|
| + const Array& new_array = Array::Handle(Array::New(len));
|
| new_array.SetTypeArguments(type_arguments);
|
| return new_array.raw();
|
| }
|
|
|