From 390986f35fc2a1b12878adedc03f91b3b3a2ac1a Mon Sep 17 00:00:00 2001 From: Jonah Jeleniewski Date: Tue, 30 Sep 2025 13:49:53 +1000 Subject: [PATCH] Handle name references properly within `exports` sections --- CHANGELOG.md | 4 ++++ .../antlr3/au/com/integradev/delphi/antlr/Delphi.g | 2 +- .../au/com/integradev/delphi/antlr/GrammarTest.java | 5 +++++ .../integradev/delphi/grammar/QualifiedExports.dpk | 13 +++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 delphi-frontend/src/test/resources/au/com/integradev/delphi/grammar/QualifiedExports.dpk 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