diff --git a/CHANGELOG.md b/CHANGELOG.md index b68a307cc..dd6dcfcff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Parsing errors on qualified name references within `exports` sections. + ## [1.18.1] - 2025-08-07 ### Added diff --git a/delphi-frontend/src/main/antlr3/au/com/integradev/delphi/antlr/Delphi.g b/delphi-frontend/src/main/antlr3/au/com/integradev/delphi/antlr/Delphi.g index 1b0a6a3ee..62c8afe39 100644 --- a/delphi-frontend/src/main/antlr3/au/com/integradev/delphi/antlr/Delphi.g +++ b/delphi-frontend/src/main/antlr3/au/com/integradev/delphi/antlr/Delphi.g @@ -558,7 +558,7 @@ arrayVarValueSpec : ABSOLUTE expression varValueSpec : ABSOLUTE expression | '=' constExpression ; -exportsSection : EXPORTS ident exportItem (',' ident exportItem)* ';' +exportsSection : EXPORTS nameReference exportItem (',' nameReference exportItem)* ';' ; exportItem : ('(' formalParameterList ')')? (INDEX expression)? (NAME expression)? (RESIDENT)? ; diff --git a/delphi-frontend/src/test/java/au/com/integradev/delphi/antlr/GrammarTest.java b/delphi-frontend/src/test/java/au/com/integradev/delphi/antlr/GrammarTest.java index 756c2aa1e..5d7977810 100644 --- a/delphi-frontend/src/test/java/au/com/integradev/delphi/antlr/GrammarTest.java +++ b/delphi-frontend/src/test/java/au/com/integradev/delphi/antlr/GrammarTest.java @@ -360,4 +360,9 @@ void testSemicolonSeparatedGenericArguments() { void testGreaterThanEqualAmbiguity() { assertParsed("GreaterThanEqualAmbiguity.pas"); } + + @Test + void testQualifiedExports() { + assertParsed("QualifiedExports.dpk"); + } } diff --git a/delphi-frontend/src/test/resources/au/com/integradev/delphi/grammar/QualifiedExports.dpk b/delphi-frontend/src/test/resources/au/com/integradev/delphi/grammar/QualifiedExports.dpk new file mode 100644 index 000000000..5c623002d --- /dev/null +++ b/delphi-frontend/src/test/resources/au/com/integradev/delphi/grammar/QualifiedExports.dpk @@ -0,0 +1,13 @@ +library QualifiedExports; + +procedure Foo; stdcall; +begin + // ... +end; + +exports + QualifiedExports.Foo; + +begin + // ... +end. \ No newline at end of file