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 6526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6537 "[yield]", | 6537 "[yield]", |
| 6538 "{ x : yield }", | 6538 "{ x : yield }", |
| 6539 NULL}; | 6539 NULL}; |
| 6540 // clang-format on | 6540 // clang-format on |
| 6541 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6541 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
| 6542 arraysize(always_flags)); | 6542 arraysize(always_flags)); |
| 6543 } | 6543 } |
| 6544 } | 6544 } |
| 6545 | 6545 |
| 6546 | 6546 |
| 6547 TEST(DestructuringAssignmentPositiveTests) { | |
| 6548 i::FLAG_harmony_destructuring = true; | |
| 6549 i::FLAG_harmony_computed_property_names = true; | |
| 6550 | |
| 6551 const char* context_data[][2] = { | |
| 6552 {"'use strict'; let x, y, z; (", " = {});"}, | |
| 6553 {"var x, y, z; (", " = {});"}, | |
| 6554 {"'use strict'; let x, y, z; for (x in ", " = {});"}, | |
| 6555 {"'use strict'; let x, y, z; for (x of ", " = {});"}, | |
| 6556 {"var x, y, z; for (x in ", " = {});"}, | |
|
arv (Not doing code reviews)
2015/06/05 18:45:26
This was not what I had in mind. Here is an exampl
caitp (gmail)
2015/06/05 19:00:20
They're both valid, but we may be reporting an err
| |
| 6557 {"var x, y, z; for (x of ", " = {});"}, | |
| 6558 {NULL, NULL}}; | |
| 6559 | |
| 6560 // clang-format off | |
| 6561 const char* data[] = { | |
| 6562 "x", | |
| 6563 "{ x : y }", | |
| 6564 "{ x : y = 1 }", | |
| 6565 "{ x }", | |
| 6566 "{ x, y, z }", | |
| 6567 "{ x = 1, y: z, z: y }", | |
| 6568 "{x = 42, y = 15}", | |
| 6569 "[x]", | |
| 6570 "[x = 1]", | |
| 6571 "[x,y,z]", | |
| 6572 "[x, y = 42, z]", | |
| 6573 "{ x : x, y : y }", | |
| 6574 "{ x : x = 1, y : y }", | |
| 6575 "{ x : x, y : y = 42 }", | |
| 6576 "[]", | |
| 6577 "{}", | |
| 6578 "[{x:x, y:y}, [,x,z,]]", | |
| 6579 "[{x:x = 1, y:y = 2}, [z = 3, z = 4, z = 5]]", | |
| 6580 "[x,,y]", | |
| 6581 "[(x),,(y)]", | |
| 6582 "[(x)]", | |
| 6583 "{42 : x}", | |
| 6584 "{42 : x = 42}", | |
| 6585 "{42e-2 : x}", | |
| 6586 "{42e-2 : x = 42}", | |
| 6587 "{'hi' : x}", | |
| 6588 "{'hi' : x = 42}", | |
| 6589 "{var: x}", | |
| 6590 "{var: x = 42}", | |
| 6591 "{var: (x) = 42}", | |
| 6592 "{[x] : z}", | |
| 6593 "{[1+1] : z}", | |
| 6594 "{[1+1] : (z)}", | |
| 6595 "{[foo()] : z}", | |
| 6596 "{[foo()] : (z)}", | |
| 6597 "{[foo()] : foo().bar}", | |
| 6598 "{[foo()] : foo()['bar']}", | |
| 6599 "{[foo()] : this.bar}", | |
| 6600 "{[foo()] : this['bar']}", | |
| 6601 "{[foo()] : 'foo'.bar}", | |
| 6602 "{[foo()] : 'foo'['bar']}", | |
| 6603 "[...x]", | |
| 6604 "[x,y,...z]", | |
| 6605 "[x,,...z]", | |
| 6606 "{ x: y } = z", | |
| 6607 "[x, y] = z", | |
| 6608 "{ x: y } = { z }", | |
| 6609 "[x, y] = { z }", | |
| 6610 "{ x: y } = [ z ]", | |
| 6611 "[x, y] = [ z ]", | |
| 6612 NULL}; | |
| 6613 // clang-format on | |
| 6614 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals, | |
| 6615 kAllowHarmonyComputedPropertyNames, | |
| 6616 kAllowHarmonyDestructuring}; | |
| 6617 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, | |
| 6618 arraysize(always_flags)); | |
| 6619 } | |
| 6620 | |
| 6621 | |
| 6622 TEST(DestructuringAssignmentNegativeTests) { | |
| 6623 i::FLAG_harmony_destructuring = true; | |
| 6624 i::FLAG_harmony_computed_property_names = true; | |
| 6625 | |
| 6626 const char* context_data[][2] = { | |
| 6627 {"'use strict'; let x, y, z; (", " = {});"}, | |
| 6628 {"var x, y, z; (", " = {});"}, | |
| 6629 {"'use strict'; let x, y, z; for (x in ", " = {});"}, | |
| 6630 {"'use strict'; let x, y, z; for (x of ", " = {});"}, | |
| 6631 {"var x, y, z; for (x in ", " = {});"}, | |
| 6632 {"var x, y, z; for (x of ", " = {});"}, | |
| 6633 {NULL, NULL}}; | |
| 6634 | |
| 6635 // clang-format off | |
| 6636 const char* data[] = { | |
| 6637 "{ x : ++y }", | |
| 6638 "{ x : y * 2 }", | |
| 6639 "{ ...x }", | |
| 6640 "{ get x() {} }", | |
| 6641 "{ set x() {} }", | |
| 6642 "{ x: y() }", | |
| 6643 "{ this }", | |
| 6644 "{ x: this }", | |
| 6645 "{ x: this = 1 }", | |
| 6646 "{ super }", | |
| 6647 "{ x: super }", | |
| 6648 "{ x: super = 1 }", | |
| 6649 "{ new.target }", | |
| 6650 "{ x: new.target }", | |
| 6651 "{ x: new.target = 1 }", | |
| 6652 "[x--]", | |
| 6653 "[--x = 1]", | |
| 6654 "[x()]", | |
| 6655 "[this]", | |
| 6656 "[this = 1]", | |
| 6657 "[new.target]", | |
| 6658 "[new.target = 1]", | |
| 6659 "[super]", | |
| 6660 "[super = 1]", | |
| 6661 "[function f() {}]", | |
| 6662 "[50]", | |
| 6663 "[(50)]", | |
| 6664 "[(function() {})]", | |
| 6665 "[(foo())]", | |
| 6666 "{ x: 50 }", | |
| 6667 "{ x: (50) }", | |
| 6668 "['str']", | |
| 6669 "{ x: 'str' }", | |
| 6670 "{ x: ('str') }", | |
| 6671 "{ x: (foo()) }", | |
| 6672 "{ x: (function() {}) }", | |
| 6673 "{ x: y } = 'str'", | |
| 6674 "[x, y] = 'str'", | |
| 6675 NULL}; | |
| 6676 // clang-format on | |
| 6677 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals, | |
| 6678 kAllowHarmonyComputedPropertyNames, | |
| 6679 kAllowHarmonyDestructuring}; | |
| 6680 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | |
| 6681 arraysize(always_flags)); | |
| 6682 } | |
| 6683 | |
| 6684 | |
| 6547 TEST(DestructuringDisallowPatternsInForVarIn) { | 6685 TEST(DestructuringDisallowPatternsInForVarIn) { |
| 6548 i::FLAG_harmony_destructuring = true; | 6686 i::FLAG_harmony_destructuring = true; |
| 6549 static const ParserFlag always_flags[] = {kAllowHarmonyDestructuring}; | 6687 static const ParserFlag always_flags[] = {kAllowHarmonyDestructuring}; |
| 6550 const char* context_data[][2] = { | 6688 const char* context_data[][2] = { |
| 6551 {"", ""}, {"function f() {", "}"}, {NULL, NULL}}; | 6689 {"", ""}, {"function f() {", "}"}, {NULL, NULL}}; |
| 6552 // clang-format off | 6690 // clang-format off |
| 6553 const char* error_data[] = { | 6691 const char* error_data[] = { |
| 6554 "for (var {x} = {} in null);", | 6692 "for (var {x} = {} in null);", |
| 6555 "for (var {x} = {} of null);", | 6693 "for (var {x} = {} of null);", |
| 6556 "for (let x = {} in null);", | 6694 "for (let x = {} in null);", |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6608 "[a, ...]", | 6746 "[a, ...]", |
| 6609 "[..., ]", | 6747 "[..., ]", |
| 6610 "[..., ...]", | 6748 "[..., ...]", |
| 6611 "[ (...a)]", | 6749 "[ (...a)]", |
| 6612 NULL}; | 6750 NULL}; |
| 6613 // clang-format on | 6751 // clang-format on |
| 6614 static const ParserFlag always_flags[] = {kAllowHarmonySpreadArrays}; | 6752 static const ParserFlag always_flags[] = {kAllowHarmonySpreadArrays}; |
| 6615 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6753 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
| 6616 arraysize(always_flags)); | 6754 arraysize(always_flags)); |
| 6617 } | 6755 } |
| OLD | NEW |