Skip to content

Commit 78d1bee

Browse files
authored
Merge pull request #2315 from guwirth/fix-2314
fix placement new issue
2 parents acb419b + aa75ff8 commit 78d1bee

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

cxx-squid/src/main/java/org/sonar/cxx/parser/CxxGrammarImpl.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -766,16 +766,13 @@ private static void expressions(LexerfulGrammarBuilder b) {
766766
"gcnew" // C++/CLI
767767
),
768768
b.firstOf(
769-
b.sequence("(", typeId, ")"), // syntax sugar (todo)
770-
b.sequence(
771-
b.optional(newPlacement),
772-
b.firstOf(
773-
newTypeId, // C++
774-
b.sequence("(", typeId, ")") // C++
775-
),
776-
b.optional(newInitializer) // C++
777-
)
778-
)
769+
// PEG: different order
770+
b.sequence(newPlacement, "(", typeId, ")"), // C++
771+
b.sequence(newPlacement, newTypeId), // C++
772+
b.sequence("(", typeId, ")"), // C++
773+
newTypeId // C++
774+
),
775+
b.optional(newInitializer) // C++
779776
)
780777
);
781778

cxx-squid/src/test/java/org/sonar/cxx/parser/ExpressionTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,16 @@ public void newExpression_reallife() {
404404
assertThatParser()
405405
.matches("new Table()")
406406
.matches("new Table")
407-
.matches("new(Table)");
407+
.matches("new(Table)")
408+
.matches("new double[n][5]")
409+
.matches("new (int (*[10])())")
410+
.matches("new (std::nothrow) char[8]")
411+
.matches("new A{1, 2}")
412+
.matches("new auto('a')")
413+
.matches("new double[]{1,2,3}")
414+
.matches("new std::integral auto(1)")
415+
.matches("new(buf) T")
416+
.matches("::new(p)A(1,2,3)");
408417
}
409418

410419
@Test

0 commit comments

Comments
 (0)