Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 15865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15876 int64_t low, int64_t high) { | 15876 int64_t low, int64_t high) { |
| 15877 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); | 15877 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); |
| 15878 i::Isolate* isolate = jsobj->GetIsolate(); | 15878 i::Isolate* isolate = jsobj->GetIsolate(); |
| 15879 obj->Set(v8_str("field"), v8::Int32::New(1503)); | 15879 obj->Set(v8_str("field"), v8::Int32::New(1503)); |
| 15880 context->Global()->Set(v8_str("ext_array"), obj); | 15880 context->Global()->Set(v8_str("ext_array"), obj); |
| 15881 v8::Handle<v8::Value> result = CompileRun("ext_array.field"); | 15881 v8::Handle<v8::Value> result = CompileRun("ext_array.field"); |
| 15882 CHECK_EQ(1503, result->Int32Value()); | 15882 CHECK_EQ(1503, result->Int32Value()); |
| 15883 result = CompileRun("ext_array[1]"); | 15883 result = CompileRun("ext_array[1]"); |
| 15884 CHECK_EQ(1, result->Int32Value()); | 15884 CHECK_EQ(1, result->Int32Value()); |
| 15885 | 15885 |
| 15886 // Check pass through of assigned smis | |
| 15887 result = CompileRun("var sum = 0;" | |
| 15888 "for (var i = 0; i < 8; i++) {" | |
| 15889 " sum += ext_array[i] = ext_array[i] = -i;" | |
| 15890 "}" | |
| 15891 "sum;"); | |
| 15892 CHECK_EQ(-28, result->Int32Value()); | |
| 15893 | |
| 15894 // Check assigned smis | 15886 // Check assigned smis |
| 15895 result = CompileRun("for (var i = 0; i < 8; i++) {" | 15887 result = CompileRun("for (var i = 0; i < 8; i++) {" |
| 15896 " ext_array[i] = i;" | 15888 " ext_array[i] = i;" |
| 15897 "}" | 15889 "}" |
| 15898 "var sum = 0;" | 15890 "var sum = 0;" |
| 15899 "for (var i = 0; i < 8; i++) {" | 15891 "for (var i = 0; i < 8; i++) {" |
| 15900 " sum += ext_array[i];" | 15892 " sum += ext_array[i];" |
| 15901 "}" | 15893 "}" |
| 15902 "sum;"); | 15894 "sum;"); |
| 15895 | |
| 15903 CHECK_EQ(28, result->Int32Value()); | 15896 CHECK_EQ(28, result->Int32Value()); |
| 15897 // Check pass through of assigned smis | |
| 15898 result = CompileRun("var sum = 0;" | |
| 15899 "for (var i = 0; i < 8; i++) {" | |
| 15900 " sum += ext_array[i] = ext_array[i] = -i;" | |
| 15901 "}" | |
| 15902 "sum;"); | |
| 15903 CHECK_EQ(-28, result->Int32Value()); | |
| 15904 | |
| 15904 | 15905 |
| 15905 // Check assigned smis in reverse order | 15906 // Check assigned smis in reverse order |
| 15906 result = CompileRun("for (var i = 8; --i >= 0; ) {" | 15907 result = CompileRun("for (var i = 8; --i >= 0; ) {" |
| 15907 " ext_array[i] = i;" | 15908 " ext_array[i] = i;" |
| 15908 "}" | 15909 "}" |
| 15909 "var sum = 0;" | 15910 "var sum = 0;" |
| 15910 "for (var i = 0; i < 8; i++) {" | 15911 "for (var i = 0; i < 8; i++) {" |
| 15911 " sum += ext_array[i];" | 15912 " sum += ext_array[i];" |
| 15912 "}" | 15913 "}" |
| 15913 "sum;"); | 15914 "sum;"); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 16161 "js_array.__proto__ = ext_array;" | 16162 "js_array.__proto__ = ext_array;" |
| 16162 "js_array.concat(ext_array);"); | 16163 "js_array.concat(ext_array);"); |
| 16163 CHECK_EQ(77, v8::Object::Cast(*result)->Get(v8_str("0"))->Int32Value()); | 16164 CHECK_EQ(77, v8::Object::Cast(*result)->Get(v8_str("0"))->Int32Value()); |
| 16164 CHECK_EQ(23, v8::Object::Cast(*result)->Get(v8_str("1"))->Int32Value()); | 16165 CHECK_EQ(23, v8::Object::Cast(*result)->Get(v8_str("1"))->Int32Value()); |
| 16165 | 16166 |
| 16166 result = CompileRun("ext_array[1] = 23;"); | 16167 result = CompileRun("ext_array[1] = 23;"); |
| 16167 CHECK_EQ(23, result->Int32Value()); | 16168 CHECK_EQ(23, result->Int32Value()); |
| 16168 } | 16169 } |
| 16169 | 16170 |
| 16170 | 16171 |
| 16172 template <class FixedTypedArrayClass, | |
| 16173 i::ElementsKind elements_kind, | |
| 16174 class ElementType> | |
| 16175 static void FixedTypedArrayTestHelper( | |
| 16176 v8::ExternalArrayType array_type, | |
| 16177 ElementType low, | |
| 16178 ElementType high) { | |
| 16179 LocalContext context; | |
| 16180 i::Isolate* isolate = CcTest::i_isolate(); | |
| 16181 i::Factory* factory = isolate->factory(); | |
| 16182 v8::HandleScope scope(context->GetIsolate()); | |
| 16183 const int kElementCount = 260; | |
| 16184 i::Handle<FixedTypedArrayClass> fixed_array = | |
| 16185 i::Handle<FixedTypedArrayClass>::cast( | |
| 16186 factory->NewFixedTypedArray(kElementCount, | |
|
Toon Verwaest
2013/12/23 10:40:32
Join lines
Dmitry Lomov (no reviews)
2014/01/07 15:48:43
Done.
| |
| 16187 array_type)); | |
| 16188 CHECK_EQ(FixedTypedArrayClass::kInstanceType, | |
| 16189 fixed_array->map()->instance_type()); | |
| 16190 CHECK_EQ(kElementCount, fixed_array->length()); | |
| 16191 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | |
| 16192 for (int i = 0; i < kElementCount; i++) { | |
| 16193 fixed_array->set(i, static_cast<ElementType>(i)); | |
| 16194 } | |
|
Toon Verwaest
2013/12/23 10:40:32
From what I can tell, out-of-bounds accesses are t
Dmitry Lomov (no reviews)
2014/01/07 15:48:43
Yes. 'set' just asserts on OOB
On 2013/12/23 10:40
| |
| 16195 // Force GC to trigger verification. | |
| 16196 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | |
| 16197 for (int i = 0; i < kElementCount; i++) { | |
| 16198 CHECK_EQ(static_cast<int64_t>(static_cast<ElementType>(i)), | |
| 16199 static_cast<int64_t>(fixed_array->get_scalar(i))); | |
| 16200 } | |
| 16201 v8::Handle<v8::Object> obj = v8::Object::New(); | |
| 16202 i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); | |
| 16203 i::Handle<i::Map> fixed_array_map = | |
| 16204 isolate->factory()->GetElementsTransitionMap( | |
| 16205 jsobj, | |
|
Toon Verwaest
2013/12/23 10:40:32
join lines
Dmitry Lomov (no reviews)
2014/01/07 15:48:43
Done.
| |
| 16206 elements_kind); | |
| 16207 jsobj->set_map(*fixed_array_map); | |
| 16208 jsobj->set_elements(*fixed_array); | |
| 16209 | |
| 16210 ObjectWithExternalArrayTestHelper<FixedTypedArrayClass, ElementType>( | |
| 16211 context.local(), | |
|
Toon Verwaest
2013/12/23 10:40:32
Don't all these arguments fit on a single line?
Dmitry Lomov (no reviews)
2014/01/07 15:48:43
Done.
| |
| 16212 obj, | |
| 16213 kElementCount, | |
| 16214 array_type, | |
| 16215 low, high); | |
| 16216 } | |
| 16217 | |
| 16218 | |
| 16219 THREADED_TEST(FixedUint8Array) { | |
| 16220 FixedTypedArrayTestHelper<i::FixedUint8Array, i::UINT8_ELEMENTS, uint8_t>( | |
| 16221 v8::kExternalUnsignedByteArray, | |
| 16222 0x0, 0xFF); | |
| 16223 } | |
| 16224 | |
| 16225 | |
| 16226 THREADED_TEST(FixedUint8ClampedArray) { | |
| 16227 FixedTypedArrayTestHelper<i::FixedUint8ClampedArray, | |
| 16228 i::UINT8_CLAMPED_ELEMENTS, uint8_t>( | |
| 16229 v8::kExternalPixelArray, | |
| 16230 0x0, 0xFF); | |
| 16231 } | |
| 16232 | |
| 16233 | |
| 16234 THREADED_TEST(FixedInt8Array) { | |
| 16235 FixedTypedArrayTestHelper<i::FixedInt8Array, i::INT8_ELEMENTS, int8_t>( | |
| 16236 v8::kExternalByteArray, | |
| 16237 -0x80, 0x7F); | |
| 16238 } | |
| 16239 | |
| 16240 | |
| 16241 THREADED_TEST(FixedUint16Array) { | |
| 16242 FixedTypedArrayTestHelper<i::FixedUint16Array, i::UINT16_ELEMENTS, uint16_t>( | |
| 16243 v8::kExternalUnsignedShortArray, | |
| 16244 0x0, 0xFFFF); | |
| 16245 } | |
| 16246 | |
| 16247 | |
| 16248 THREADED_TEST(FixedInt16Array) { | |
| 16249 FixedTypedArrayTestHelper<i::FixedInt16Array, i::INT16_ELEMENTS, int16_t>( | |
| 16250 v8::kExternalShortArray, | |
| 16251 -0x8000, 0x7FFF); | |
| 16252 } | |
| 16253 | |
| 16254 | |
| 16255 THREADED_TEST(FixedUint32Array) { | |
| 16256 FixedTypedArrayTestHelper<i::FixedUint32Array, i::UINT32_ELEMENTS, uint32_t>( | |
| 16257 v8::kExternalUnsignedIntArray, | |
| 16258 0x0, 0xFFFFFFFF); | |
| 16259 } | |
| 16260 | |
| 16261 | |
| 16262 THREADED_TEST(FixedInt32Array) { | |
| 16263 FixedTypedArrayTestHelper<i::FixedInt32Array, i::INT32_ELEMENTS, int32_t>( | |
| 16264 v8::kExternalIntArray, | |
| 16265 -0x80000000, 0x7FFFFFFF); | |
| 16266 } | |
| 16267 | |
| 16268 | |
| 16269 THREADED_TEST(FixedFloat32Array) { | |
| 16270 FixedTypedArrayTestHelper<i::FixedFloat32Array, i::FLOAT32_ELEMENTS, float>( | |
| 16271 v8::kExternalFloatArray, | |
| 16272 -500, 500); | |
| 16273 } | |
| 16274 | |
| 16275 | |
| 16276 THREADED_TEST(FixedFloat64Array) { | |
| 16277 FixedTypedArrayTestHelper<i::FixedFloat64Array, i::FLOAT64_ELEMENTS, float>( | |
| 16278 v8::kExternalDoubleArray, | |
| 16279 -500, 500); | |
| 16280 } | |
| 16281 | |
| 16282 | |
| 16171 template <class ExternalArrayClass, class ElementType> | 16283 template <class ExternalArrayClass, class ElementType> |
| 16172 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, | 16284 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| 16173 int64_t low, | 16285 int64_t low, |
| 16174 int64_t high) { | 16286 int64_t high) { |
| 16175 LocalContext context; | 16287 LocalContext context; |
| 16176 i::Isolate* isolate = CcTest::i_isolate(); | 16288 i::Isolate* isolate = CcTest::i_isolate(); |
| 16177 i::Factory* factory = isolate->factory(); | 16289 i::Factory* factory = isolate->factory(); |
| 16178 v8::HandleScope scope(context->GetIsolate()); | 16290 v8::HandleScope scope(context->GetIsolate()); |
| 16179 const int kElementCount = 40; | 16291 const int kElementCount = 40; |
| 16180 int element_size = ExternalArrayElementSize(array_type); | 16292 int element_size = ExternalArrayElementSize(array_type); |
| (...skipping 4894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 21075 } | 21187 } |
| 21076 for (int i = 0; i < runs; i++) { | 21188 for (int i = 0; i < runs; i++) { |
| 21077 Local<String> expected; | 21189 Local<String> expected; |
| 21078 if (i != 0) { | 21190 if (i != 0) { |
| 21079 CHECK_EQ(v8_str("escape value"), values[i]); | 21191 CHECK_EQ(v8_str("escape value"), values[i]); |
| 21080 } else { | 21192 } else { |
| 21081 CHECK(values[i].IsEmpty()); | 21193 CHECK(values[i].IsEmpty()); |
| 21082 } | 21194 } |
| 21083 } | 21195 } |
| 21084 } | 21196 } |
| OLD | NEW |