Skip to content

Commit 9901b01

Browse files
committed
Start roughing in statement and compound_statement
Usability: Don't make multi-argument constructors explicit
1 parent 36ccbf9 commit 9901b01

20 files changed

+767
-555
lines changed

include/cpp2regex.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ template<typename CharT, typename Iter, int max_groups> class match_context
149149

150150
private: std::array<match_group<Iter>,max_groups> groups {};
151151

152-
public: explicit match_context(Iter const& begin_, Iter const& end_);
152+
public: match_context(Iter const& begin_, Iter const& end_);
153153

154154
#line 68 "cpp2regex.h2"
155155
public: match_context(match_context const& that);
@@ -212,7 +212,7 @@ template<typename Func> class on_return
212212
{
213213
private: Func func;
214214

215-
public: explicit on_return(Func const& f);
215+
public: on_return(Func const& f);
216216
#line 136 "cpp2regex.h2"
217217
public: auto operator=(Func const& f) -> on_return& ;
218218

@@ -577,7 +577,7 @@ template<typename CharT, typename matcher_wrapper> class regular_expression
577577
public: context<Iter> ctx;
578578
public: int pos;
579579

580-
public: explicit search_return(cpp2::impl::in<bool> matched_, context<Iter> const& ctx_, Iter const& pos_);
580+
public: search_return(cpp2::impl::in<bool> matched_, context<Iter> const& ctx_, Iter const& pos_);
581581

582582
#line 690 "cpp2regex.h2"
583583
public: [[nodiscard]] auto group_number() const& -> decltype(auto);

regression-tests/test-results/gcc-10-c++20/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:36: error: expected ‘;’ at end of member declaration
1+
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:27: error: expected ‘;’ at end of member declaration
22
In file included from pure2-bugfix-for-requires-clause-in-forward-declaration.cpp:7:
33
../../../include/cpp2util.h:10106:47: error: static assertion failed: GCC 11 or higher is required to support variables and type-scope functions that have a 'requires' clause. This includes a type-scope 'forward' parameter of non-wildcard type, such as 'func: (this, forward s: std::string)', which relies on being able to add a 'requires' clause - in that case, use 'forward s: _' instead if you need the result to compile with GCC 10.
44
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:4:1: note: in expansion of macro ‘CPP2_REQUIRES_’
@@ -8,7 +8,7 @@ In file included from pure2-bugfix-for-requires-clause-in-forward-declaration.cp
88
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:4:1: note: in expansion of macro ‘CPP2_REQUIRES_’
99
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:3: error: no declaration matches ‘element::element(auto:112&&) requires is_convertible_v<typename std::remove_cv<typename std::remove_reference<decltype(element::__ct ::n)>::type>::type, const std::__cxx11::add_const_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&>’
1010
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:5:11: note: candidates are: ‘element::element(const element&)’
11-
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:20: note: ‘template<class auto:110> element::element(auto:110&&)’
11+
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:11: note: ‘template<class auto:110> element::element(auto:110&&)’
1212
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:1:7: note: ‘class element’ defined here
1313
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:5:78: error: expected unqualified-id before ‘{’ token
1414
pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2:3:8: error: no declaration matches ‘element& element::operator=(auto:113&&) requires is_convertible_v<typename std::remove_cv<typename std::remove_reference<decltype(element::operator=::n)>::type>::type, const std::__cxx11::add_const_t<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&>’

regression-tests/test-results/pure2-bugfix-for-discard-precedence.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class quantity;
1717
class quantity {
1818
#line 2 "pure2-bugfix-for-discard-precedence.cpp2"
1919
private: cpp2::i32 number;
20-
public: explicit quantity(cpp2::impl::in<cpp2::i32> x);
20+
public: quantity(cpp2::impl::in<cpp2::i32> x);
2121
#line 3 "pure2-bugfix-for-discard-precedence.cpp2"
2222
public: auto operator=(cpp2::impl::in<cpp2::i32> x) -> quantity& ;
2323
public: [[nodiscard]] auto operator+(quantity const& that) & -> quantity;

regression-tests/test-results/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class element;
1717
class element {
1818
#line 2 "pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2"
1919
private: std::string name;
20-
public: explicit element(auto&& n)
20+
public: element(auto&& n)
2121
CPP2_REQUIRES_ (std::is_convertible_v<CPP2_TYPEOF(n), std::add_const_t<std::string>&>) ;
2222
#line 3 "pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2"
2323
public: auto operator=(auto&& n) -> element&

regression-tests/test-results/pure2-defaulted-comparisons-and-final-types.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class widget final
2121
{
2222
private: int v;
2323

24-
public: explicit widget(cpp2::impl::in<int> value);
24+
public: widget(cpp2::impl::in<int> value);
2525
#line 6 "pure2-defaulted-comparisons-and-final-types.cpp2"
2626
public: auto operator=(cpp2::impl::in<int> value) -> widget& ;
2727

regression-tests/test-results/pure2-last-use.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ class issue_857_9: public issue_857_8 {
397397
};
398398

399399
class issue_869_0 {
400-
public: explicit issue_869_0([[maybe_unused]] std::unique_ptr<int>&& unnamed_param_2);
400+
public: issue_869_0([[maybe_unused]] std::unique_ptr<int>&& unnamed_param_2);
401401
#line 366 "pure2-last-use.cpp2"
402402
public: auto operator=([[maybe_unused]] std::unique_ptr<int>&& unnamed_param_2) -> issue_869_0& ;
403403
public: [[nodiscard]] auto operator<=>([[maybe_unused]] issue_869_0 const& that) const& -> std::strong_ordering = default;

regression-tests/test-results/pure2-types-basics.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class myclass {
3131
public: auto operator=(cpp2::impl::in<int> x) -> myclass& ;
3232

3333
#line 13 "pure2-types-basics.cpp2"
34-
public: explicit myclass(cpp2::impl::in<std::string> s);
34+
public: myclass(cpp2::impl::in<std::string> s);
3535
#line 13 "pure2-types-basics.cpp2"
3636
public: auto operator=(cpp2::impl::in<std::string> s) -> myclass& ;
3737

3838
#line 20 "pure2-types-basics.cpp2"
39-
public: explicit myclass(cpp2::impl::in<int> x, cpp2::impl::in<std::string> s);
39+
public: myclass(cpp2::impl::in<int> x, cpp2::impl::in<std::string> s);
4040

4141
#line 27 "pure2-types-basics.cpp2"
4242
public: explicit myclass();

regression-tests/test-results/pure2-types-inheritance.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Human {
4141

4242
namespace N {
4343
template<int I> class Machine {
44-
public: explicit Machine([[maybe_unused]] cpp2::impl::in<std::string> unnamed_param_2);
44+
public: Machine([[maybe_unused]] cpp2::impl::in<std::string> unnamed_param_2);
4545
public: virtual auto work() const -> void = 0;
4646
public: virtual ~Machine() noexcept;
4747

@@ -58,7 +58,7 @@ struct Cyborg_address_as_base { std::string address; };
5858
class Cyborg: public Cyborg_name_as_base, public Human, public Cyborg_address_as_base, public N::Machine<99> {
5959

6060
#line 19 "pure2-types-inheritance.cpp2"
61-
public: explicit Cyborg(cpp2::impl::in<std::string> n);
61+
public: Cyborg(cpp2::impl::in<std::string> n);
6262

6363
#line 25 "pure2-types-inheritance.cpp2"
6464
public: auto speak() const -> void override;

regression-tests/test-results/pure2-types-order-independence-and-nesting.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class X {
4545
private: Y* py;
4646

4747
// Note: A constructor with an 'out' parameter
48-
public: explicit X(cpp2::impl::out<Y> y);
48+
public: X(cpp2::impl::out<Y> y);
4949
#line 10 "pure2-types-order-independence-and-nesting.cpp2"
5050
public: auto operator=(cpp2::impl::out<Y> y) -> X& ;
5151

@@ -64,7 +64,7 @@ class X {
6464
class Y {
6565
private: X* px;
6666

67-
public: explicit Y(X* x);
67+
public: Y(X* x);
6868
#line 49 "pure2-types-order-independence-and-nesting.cpp2"
6969
public: auto operator=(X* x) -> Y& ;
7070

regression-tests/test-results/pure2-types-ordering-via-meta-functions.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class mystruct;
3131
#line 2 "pure2-types-ordering-via-meta-functions.cpp2"
3232
class my_integer {
3333
private: int v;
34-
public: explicit my_integer(cpp2::impl::in<int> val);
34+
public: my_integer(cpp2::impl::in<int> val);
3535
#line 4 "pure2-types-ordering-via-meta-functions.cpp2"
3636
public: auto operator=(cpp2::impl::in<int> val) -> my_integer& ;
3737
public: [[nodiscard]] auto operator<=>(my_integer const& that) const& -> std::strong_ordering = default;
@@ -44,7 +44,7 @@ class my_integer {
4444

4545
class case_insensitive_string {
4646
private: std::string v; // case insensitive
47-
public: explicit case_insensitive_string(cpp2::impl::in<std::string> val);
47+
public: case_insensitive_string(cpp2::impl::in<std::string> val);
4848
#line 9 "pure2-types-ordering-via-meta-functions.cpp2"
4949
public: auto operator=(cpp2::impl::in<std::string> val) -> case_insensitive_string& ;
5050
public: [[nodiscard]] auto operator<=>(case_insensitive_string const& that) const& -> std::weak_ordering = default;
@@ -57,7 +57,7 @@ class case_insensitive_string {
5757

5858
class person_in_family_tree {
5959
private: int dummy_data;
60-
public: explicit person_in_family_tree(cpp2::impl::in<int> parents);
60+
public: person_in_family_tree(cpp2::impl::in<int> parents);
6161
#line 14 "pure2-types-ordering-via-meta-functions.cpp2"
6262
public: auto operator=(cpp2::impl::in<int> parents) -> person_in_family_tree& ;
6363
public: [[nodiscard]] auto operator<=>(person_in_family_tree const& that) const& -> std::partial_ordering = default;

regression-tests/test-results/pure2-types-smf-and-that-1-provide-everything.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class myclass {
3131
public: auto operator=(myclass&& that) noexcept -> myclass& ;
3232

3333
#line 22 "pure2-types-smf-and-that-1-provide-everything.cpp2"
34-
public: explicit myclass(cpp2::impl::in<std::string> x);
34+
public: myclass(cpp2::impl::in<std::string> x);
3535
#line 22 "pure2-types-smf-and-that-1-provide-everything.cpp2"
3636
public: auto operator=(cpp2::impl::in<std::string> x) -> myclass& ;
3737

regression-tests/test-results/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class myclass {
3434
// std::cout << "assign - move ";
3535
// }
3636

37-
public: explicit myclass(cpp2::impl::in<std::string> x);
37+
public: myclass(cpp2::impl::in<std::string> x);
3838
#line 22 "pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp2"
3939
public: auto operator=(cpp2::impl::in<std::string> x) -> myclass& ;
4040

regression-tests/test-results/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class myclass {
3535
public: auto operator=(myclass&& that) noexcept -> myclass& ;
3636

3737
#line 22 "pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp2"
38-
public: explicit myclass(cpp2::impl::in<std::string> x);
38+
public: myclass(cpp2::impl::in<std::string> x);
3939
#line 22 "pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp2"
4040
public: auto operator=(cpp2::impl::in<std::string> x) -> myclass& ;
4141

regression-tests/test-results/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class myclass {
3535
public: auto operator=(myclass&& that) noexcept -> myclass& ;
3636

3737
#line 22 "pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp2"
38-
public: explicit myclass(cpp2::impl::in<std::string> x);
38+
public: myclass(cpp2::impl::in<std::string> x);
3939
#line 22 "pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp2"
4040
public: auto operator=(cpp2::impl::in<std::string> x) -> myclass& ;
4141

regression-tests/test-results/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class myclass {
4242
// std::cout << "assign - move ";
4343
// }
4444

45-
public: explicit myclass(cpp2::impl::in<std::string> x);
45+
public: myclass(cpp2::impl::in<std::string> x);
4646
#line 22 "pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp2"
4747
public: auto operator=(cpp2::impl::in<std::string> x) -> myclass& ;
4848

regression-tests/test-results/pure2-types-value-types-via-meta-functions.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class p_widget;
2727
#line 2 "pure2-types-value-types-via-meta-functions.cpp2"
2828
class widget {
2929
private: int val {0};
30-
public: explicit widget(cpp2::impl::in<int> i);
30+
public: widget(cpp2::impl::in<int> i);
3131
#line 4 "pure2-types-value-types-via-meta-functions.cpp2"
3232
public: auto operator=(cpp2::impl::in<int> i) -> widget& ;
3333
public: [[nodiscard]] auto operator<=>(widget const& that) const& -> std::strong_ordering = default;
@@ -43,7 +43,7 @@ public: explicit widget();
4343

4444
class w_widget {
4545
private: int val {0};
46-
public: explicit w_widget(cpp2::impl::in<int> i);
46+
public: w_widget(cpp2::impl::in<int> i);
4747
#line 9 "pure2-types-value-types-via-meta-functions.cpp2"
4848
public: auto operator=(cpp2::impl::in<int> i) -> w_widget& ;
4949
public: [[nodiscard]] auto operator<=>(w_widget const& that) const& -> std::weak_ordering = default;
@@ -59,7 +59,7 @@ public: explicit w_widget();
5959

6060
class p_widget {
6161
private: int val {0};
62-
public: explicit p_widget(cpp2::impl::in<int> i);
62+
public: p_widget(cpp2::impl::in<int> i);
6363
#line 14 "pure2-types-value-types-via-meta-functions.cpp2"
6464
public: auto operator=(cpp2::impl::in<int> i) -> p_widget& ;
6565
public: [[nodiscard]] auto operator<=>(p_widget const& that) const& -> std::partial_ordering = default;

source/parse.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,6 +1897,16 @@ struct compound_statement_node
18971897

18981898
compound_statement_node(source_position o = source_position{});
18991899

1900+
auto get_statements()
1901+
-> std::vector<statement_node*>
1902+
{
1903+
auto ret = std::vector<statement_node*>{};
1904+
for (auto const& stmt : statements) {
1905+
ret.push_back( stmt.get() );
1906+
}
1907+
return ret;
1908+
}
1909+
19001910
auto position() const
19011911
-> source_position
19021912
{

0 commit comments

Comments
 (0)