OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // TODO(jochen): Remove this after the setting is turned on globally. | 5 // TODO(jochen): Remove this after the setting is turned on globally. |
6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
7 | 7 |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, | 307 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, |
308 NONE) | 308 NONE) |
309 .Check(); | 309 .Check(); |
310 // no change in elements_kind => no map transition | 310 // no change in elements_kind => no map transition |
311 CHECK_EQ(array->map(), *previous_map); | 311 CHECK_EQ(array->map(), *previous_map); |
312 CHECK_EQ(array->map()->elements_kind(), FAST_SMI_ELEMENTS); | 312 CHECK_EQ(array->map()->elements_kind(), FAST_SMI_ELEMENTS); |
313 CHECK_EQ(1, Smi::cast(array->length())->value()); | 313 CHECK_EQ(1, Smi::cast(array->length())->value()); |
314 | 314 |
315 // `delete array[0]` does not alter length, but changes the elments_kind | 315 // `delete array[0]` does not alter length, but changes the elments_kind |
316 name = MakeString("0"); | 316 name = MakeString("0"); |
317 JSReceiver::DeletePropertyOrElement(array, name).Check(); | 317 CHECK(JSReceiver::DeletePropertyOrElement(array, name).FromMaybe(false)); |
318 CHECK_NE(array->map(), *previous_map); | 318 CHECK_NE(array->map(), *previous_map); |
319 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_SMI_ELEMENTS); | 319 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_SMI_ELEMENTS); |
320 CHECK_EQ(1, Smi::cast(array->length())->value()); | 320 CHECK_EQ(1, Smi::cast(array->length())->value()); |
321 previous_map = handle(array->map()); | 321 previous_map = handle(array->map()); |
322 | 322 |
323 // add a couple of elements again | 323 // add a couple of elements again |
324 name = MakeString("0"); | 324 name = MakeString("0"); |
325 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, | 325 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, |
326 NONE) | 326 NONE) |
327 .Check(); | 327 .Check(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, | 380 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, |
381 NONE) | 381 NONE) |
382 .Check(); | 382 .Check(); |
383 // no change in elements_kind => no map transition | 383 // no change in elements_kind => no map transition |
384 CHECK_EQ(array->map(), *previous_map); | 384 CHECK_EQ(array->map(), *previous_map); |
385 CHECK_EQ(array->map()->elements_kind(), FAST_ELEMENTS); | 385 CHECK_EQ(array->map()->elements_kind(), FAST_ELEMENTS); |
386 CHECK_EQ(1, Smi::cast(array->length())->value()); | 386 CHECK_EQ(1, Smi::cast(array->length())->value()); |
387 | 387 |
388 // `delete array[0]` does not alter length, but changes the elments_kind | 388 // `delete array[0]` does not alter length, but changes the elments_kind |
389 name = MakeString("0"); | 389 name = MakeString("0"); |
390 JSReceiver::DeletePropertyOrElement(array, name).Check(); | 390 CHECK(JSReceiver::DeletePropertyOrElement(array, name).FromMaybe(false)); |
391 CHECK_NE(array->map(), *previous_map); | 391 CHECK_NE(array->map(), *previous_map); |
392 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_ELEMENTS); | 392 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_ELEMENTS); |
393 CHECK_EQ(1, Smi::cast(array->length())->value()); | 393 CHECK_EQ(1, Smi::cast(array->length())->value()); |
394 previous_map = handle(array->map()); | 394 previous_map = handle(array->map()); |
395 | 395 |
396 // add a couple of elements, elements_kind stays HOLEY | 396 // add a couple of elements, elements_kind stays HOLEY |
397 name = MakeString("0"); | 397 name = MakeString("0"); |
398 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_string, | 398 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_string, |
399 NONE) | 399 NONE) |
400 .Check(); | 400 .Check(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 name = MakeString("1"); | 437 name = MakeString("1"); |
438 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, | 438 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_smi, |
439 NONE) | 439 NONE) |
440 .Check(); | 440 .Check(); |
441 CHECK_EQ(array->map(), *previous_map); | 441 CHECK_EQ(array->map(), *previous_map); |
442 CHECK_EQ(array->map()->elements_kind(), FAST_DOUBLE_ELEMENTS); | 442 CHECK_EQ(array->map()->elements_kind(), FAST_DOUBLE_ELEMENTS); |
443 CHECK_EQ(2, Smi::cast(array->length())->value()); | 443 CHECK_EQ(2, Smi::cast(array->length())->value()); |
444 | 444 |
445 // `delete array[0]` does not alter length, but changes the elments_kind | 445 // `delete array[0]` does not alter length, but changes the elments_kind |
446 name = MakeString("0"); | 446 name = MakeString("0"); |
447 JSReceiver::DeletePropertyOrElement(array, name).Check(); | 447 CHECK(JSReceiver::DeletePropertyOrElement(array, name).FromMaybe(false)); |
448 CHECK_NE(array->map(), *previous_map); | 448 CHECK_NE(array->map(), *previous_map); |
449 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_DOUBLE_ELEMENTS); | 449 CHECK_EQ(array->map()->elements_kind(), FAST_HOLEY_DOUBLE_ELEMENTS); |
450 CHECK_EQ(2, Smi::cast(array->length())->value()); | 450 CHECK_EQ(2, Smi::cast(array->length())->value()); |
451 previous_map = handle(array->map()); | 451 previous_map = handle(array->map()); |
452 | 452 |
453 // filling the hole `array[0] = value_smi` again doesn't transition back | 453 // filling the hole `array[0] = value_smi` again doesn't transition back |
454 name = MakeString("0"); | 454 name = MakeString("0"); |
455 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_double, | 455 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_double, |
456 NONE) | 456 NONE) |
457 .Check(); | 457 .Check(); |
(...skipping 11 matching lines...) Expand all Loading... |
469 CHECK_EQ(2, Smi::cast(array->length())->value()); | 469 CHECK_EQ(2, Smi::cast(array->length())->value()); |
470 previous_map = handle(array->map()); | 470 previous_map = handle(array->map()); |
471 | 471 |
472 // Adding a double doesn't change the map | 472 // Adding a double doesn't change the map |
473 name = MakeString("0"); | 473 name = MakeString("0"); |
474 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_double, | 474 JSObject::DefinePropertyOrElementIgnoreAttributes(array, name, value_double, |
475 NONE) | 475 NONE) |
476 .Check(); | 476 .Check(); |
477 CHECK_EQ(array->map(), *previous_map); | 477 CHECK_EQ(array->map(), *previous_map); |
478 } | 478 } |
OLD | NEW |