Skip to content

Commit 10ed7ff

Browse files
committed
Diagnose missing parameter after a this-specifier or parameter-direction, closes #397 and #505
1 parent aef555d commit 10ed7ff

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

regression-tests/test-results/version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
cppfront compiler v0.2.1 Build 8730:1258
2+
cppfront compiler v0.2.1 Build 8809:1505
33
Copyright(c) Herb Sutter All rights reserved
44

55
SPDX-License-Identifier: CC-BY-NC-ND-4.0

source/build.info

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"8809:1416"
1+
"8809:1505"

source/parse.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5777,25 +5777,32 @@ class parser
57775777
)
57785778
-> std::unique_ptr<parameter_declaration_node>
57795779
{
5780+
auto modifier = std::string();
5781+
auto modifier_plural = "";
5782+
57805783
auto n = std::make_unique<parameter_declaration_node>();
57815784
n->pass = is_returns ? passing_style::out : passing_style::in;
57825785
n->pos = curr().position();
57835786

57845787
// Handle optional this-specifier
57855788
//
57865789
if (curr() == "implicit") {
5790+
modifier = curr().as_string_view();
57875791
n->mod = parameter_declaration_node::modifier::implicit;
57885792
next();
57895793
}
57905794
else if (curr() == "virtual") {
5795+
modifier = curr().as_string_view();
57915796
n->mod = parameter_declaration_node::modifier::virtual_;
57925797
next();
57935798
}
57945799
else if (curr() == "override") {
5800+
modifier = curr().as_string_view();
57955801
n->mod = parameter_declaration_node::modifier::override_;
57965802
next();
57975803
}
57985804
else if (curr() == "final") {
5805+
modifier = curr().as_string_view();
57995806
n->mod = parameter_declaration_node::modifier::final_;
58005807
next();
58015808
}
@@ -5806,6 +5813,12 @@ class parser
58065813
dir != passing_style::invalid
58075814
)
58085815
{
5816+
if (!modifier.empty()) {
5817+
modifier += " ";
5818+
modifier_plural = "s";
5819+
}
5820+
modifier += curr().as_string_view();
5821+
58095822
if (is_returns)
58105823
{
58115824
if (dir == passing_style::in) {
@@ -5840,6 +5853,9 @@ class parser
58405853
// Now the main declaration
58415854
//
58425855
if (!(n->declaration = declaration(false, true, is_template))) {
5856+
if (!modifier.empty()) {
5857+
error( "'" + modifier + "' modifier" + modifier_plural + " must be followed by a valid parameter declaration", false);
5858+
}
58435859
return {};
58445860
}
58455861

0 commit comments

Comments
 (0)