Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index 242d2ccbe483b1387155fbcef04d5e2a3c9081d3..823889aced4b952183c336d3319fc43e27edf68e 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -7777,29 +7777,23 @@ static Object* Runtime_SwapElements(Arguments args) { |
| ASSERT_EQ(3, args.length()); |
| - Handle<Object> object = args.at<Object>(0); |
| + CONVERT_ARG_CHECKED(JSObject, object, 0); |
| Handle<Object> key1 = args.at<Object>(1); |
|
Lasse Reichstein
2010/05/06 09:03:47
Consider using CONVERT_ARG_CHECKED for the remaini
antonm
2010/05/06 16:40:16
Lasse, any chances you meant some other macro:
Lasse Reichstein
2010/05/07 07:02:03
No, that's the one. See the definition of Argument
antonm
2010/05/07 10:06:01
Sorry, I use Handle<Object> key1 = arg.at<Object>(
Lasse Reichstein
2010/05/07 11:44:01
Whoops, my bad. Didn't read your rhs' properly (to
|
| Handle<Object> key2 = args.at<Object>(2); |
| uint32_t index1, index2; |
| - // That must be the most common case. |
| - if (object->IsJSObject() |
| - && Array::IndexFromObject(*key1, &index1) |
| - && Array::IndexFromObject(*key2, &index2)) { |
| - Handle<JSObject> jsobject = Handle<JSObject>::cast(object); |
| - Handle<Object> tmp1 = GetElement(jsobject, index1); |
| - Handle<Object> tmp2 = GetElement(jsobject, index2); |
| - |
| - SetElement(jsobject, index1, tmp2); |
| - SetElement(jsobject, index2, tmp1); |
| - } else { |
| - Handle<Object> tmp1 = GetProperty(object, key1); |
| - Handle<Object> tmp2 = GetProperty(object, key2); |
| - |
| - SetProperty(object, key1, tmp2, NONE); |
| - SetProperty(object, key2, tmp1, NONE); |
| + if (!Array::IndexFromObject(*key1, &index1) |
| + || !Array::IndexFromObject(*key2, &index2)) { |
| + return Top::ThrowIllegalOperation(); |
| } |
| + Handle<JSObject> jsobject = Handle<JSObject>::cast(object); |
| + Handle<Object> tmp1 = GetElement(jsobject, index1); |
| + Handle<Object> tmp2 = GetElement(jsobject, index2); |
| + |
| + SetElement(jsobject, index1, tmp2); |
| + SetElement(jsobject, index2, tmp1); |
| + |
| return Heap::undefined_value(); |
| } |