FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Add chained comparisons, implements P0515R0 3.3 and P0893 · iopenstack/cppfront@6454d26 · GitHub

Commit 6454d26

Browse files
committed
Add chained comparisons, implements P0515R0 3.3 and P0893
Now `min < index <= max` work and do the right thing (in today's C++ they silently compile but are a bug, even if the programmer intended the meaningful chained comparison) And nonsense chains like `a >= b < c` are disallowed (in today's C++ they silently compile but are a bug, and conceptually meaningless)
1 parent 290a3f6 commit 6454d26

16 files changed

Lines changed: 309 additions & 33 deletions
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
main: () -> int = {
2+
std::cout << std::boolalpha;
3+
i:=0; while i<3 next i++ {
4+
j:=0; while j<3 next j++ {
5+
k:=0; while k<3 next k++ {
6+
std::cout
7+
<< i << " "
8+
<< j << " "
9+
<< k << ": "
10+
<< (i == j == k) << " "
11+
<< (i < j <= k) << " "
12+
<< (i >= j > k) << "\n";
13+
}
14+
}
15+
}
16+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
0 0 0: true false false
2+
0 0 1: false false false
3+
0 0 2: false false false
4+
0 1 0: false false false
5+
0 1 1: false true false
6+
0 1 2: false true false
7+
0 2 0: false false false
8+
0 2 1: false false false
9+
0 2 2: false true false
10+
1 0 0: false false false
11+
1 0 1: false false false
12+
1 0 2: false false false
13+
1 1 0: false false true
14+
1 1 1: true false false
15+
1 1 2: false false false
16+
1 2 0: false false false
17+
1 2 1: false false false
18+
1 2 2: false true false
19+
2 0 0: false false false
20+
2 0 1: false false false
21+
2 0 2: false false false
22+
2 1 0: false false true
23+
2 1 1: false false false
24+
2 1 2: false false false
25+
2 2 0: false false true
26+
2 2 1: false false true
27+
2 2 2: true false false

‎regression-tests/test-results/clang-12/pure2-chained-comparisons.cpp.output‎

Whitespace-only changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
0 0 0: true false false
2+
0 0 1: false false false
3+
0 0 2: false false false
4+
0 1 0: false false false
5+
0 1 1: false true false
6+
0 1 2: false true false
7+
0 2 0: false false false
8+
0 2 1: false false false
9+
0 2 2: false true false
10+
1 0 0: false false false
11+
1 0 1: false false false
12+
1 0 2: false false false
13+
1 1 0: false false true
14+
1 1 1: true false false
15+
1 1 2: false false false
16+
1 2 0: false false false
17+
1 2 1: false false false
18+
1 2 2: false true false
19+
2 0 0: false false false
20+
2 0 1: false false false
21+
2 0 2: false false false
22+
2 1 0: false false true
23+
2 1 1: false false false
24+
2 1 2: false false false
25+
2 2 0: false false true
26+
2 2 1: false false true
27+
2 2 2: true false false

‎regression-tests/test-results/gcc-10/pure2-chained-comparisons.cpp.output‎

Whitespace-only changes.

‎regression-tests/test-results/mixed-captures-in-expressions-and-postconditions.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ std::vector<int> vec {};
3232
auto insert_at(cpp2::in<int> where, cpp2::in<int> val) -> void
3333
{
3434
cpp2::Default.expects(cpp2::cmp_less_eq(0,where) && cpp2::cmp_less_eq(where,CPP2_UFCS_0(ssize, vec)), "");
35-
auto post_21_5 = cpp2::finally_success([_0 = CPP2_UFCS_0(ssize, vec)]{cpp2::Default.expects(CPP2_UFCS_0(ssize, vec) == _0 + 1, "");} );
35+
auto post_21_5 = cpp2::finally_success([_0 = CPP2_UFCS_0(ssize, vec)]{cpp2::Default.expects(CPP2_UFCS_0(ssize, vec)==_0 + 1, "");} );
3636
#line 21 "mixed-captures-in-expressions-and-postconditions.cpp2"
3737

3838

‎regression-tests/test-results/mixed-initialization-safety-3.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@ auto print_decorated(auto const& x) -> void { std::cout << ">> [" << x << "]\n";
4949

5050
// for test determinism, force "xyzzy" branch
5151
// the standard mandates that std::mt19937()() == 3499211612
52-
[[nodiscard]] auto flip_a_coin() -> bool { return std::mt19937()() % 2 == 0; }
52+
[[nodiscard]] auto flip_a_coin() -> bool { return std::mt19937()() % 2==0; }
5353

‎regression-tests/test-results/mixed-parameter-passing-with-forward.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ requires std::is_same_v<CPP2_TYPEOF(e), std::string>
5555

5656
copy_from(z);
5757

58-
if (std::time(nullptr) % 2 == 0) {
58+
if (std::time(nullptr) % 2==0) {
5959
copy_from(std::move(z));
6060
}
6161

‎regression-tests/test-results/mixed-parameter-passing.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ auto parameter_styles(
5050

5151
copy_from(z);
5252

53-
if (std::time(nullptr) % 2 == 0) {
53+
if (std::time(nullptr) % 2==0) {
5454
copy_from(std::move(z));
5555
}
5656

‎regression-tests/test-results/mixed-postexpression-with-capture.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ std::vector<int> vec {};
2727
auto insert_at(cpp2::in<int> where, cpp2::in<int> val) -> void
2828
{
2929
cpp2::Default.expects(cpp2::cmp_less_eq(0,where) && cpp2::cmp_less_eq(where,CPP2_UFCS_0(ssize, vec)), "");
30-
auto post_16_5 = cpp2::finally_success([_0 = CPP2_UFCS_0(size, vec)]{cpp2::Default.expects(CPP2_UFCS_0(size, vec) == _0 + 1, "");} );
30+
auto post_16_5 = cpp2::finally_success([_0 = CPP2_UFCS_0(size, vec)]{cpp2::Default.expects(CPP2_UFCS_0(size, vec)==_0 + 1, "");} );
3131
#line 16 "mixed-postexpression-with-capture.cpp2"
3232

3333

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL