Skip to content

Commit be145a1

Browse files
committed
fix: procedure division return variable support
1 parent 3c6685e commit be145a1

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

server/engine/src/main/java/org/eclipse/lsp/cobol/core/visitor/CobolVisitor.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,13 @@ public List<Node> visitProcedureDivisionGivingClause(ProcedureDivisionGivingClau
12411241
DataNameContext dt = ctx.dataName();
12421242
Optional<Locality> locality = retrieveLocality(ctx, extendedDocument, copybooks);
12431243
if (dt == null || !locality.isPresent()) return ImmutableList.of();
1244-
return ImmutableList.of(new ProcedureDivisionReturningNode(locality.get(), extractNameAndLocality(dt)));
1244+
VariableNameAndLocality nameAndLocality = extractNameAndLocality(dt);
1245+
ProcedureDivisionReturningNode returningNode = new ProcedureDivisionReturningNode(locality.get(), nameAndLocality);
1246+
VariableUsageNode variableUsageNode = new VariableUsageNode(nameAndLocality.getName(), nameAndLocality.getLocality());
1247+
QualifiedReferenceNode qualifiedReferenceNode = new QualifiedReferenceNode(nameAndLocality.getLocality());
1248+
qualifiedReferenceNode.addChild(variableUsageNode);
1249+
returningNode.addChild(qualifiedReferenceNode);
1250+
return ImmutableList.of(returningNode);
12451251
}
12461252

12471253
@Override

server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestFunction.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class TestFunction {
3434
+ " LINKAGE SECTION. \n"
3535
+ " 01 {$*RETVAL}. \n"
3636
+ " 05 {$*NUM} PIC X(1234). \n"
37-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
37+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
3838
+ " MOVE 1234 to {$NUM}. \n"
3939
+ " END FUNCTION FUNC. \n";
4040

@@ -52,7 +52,7 @@ void parse_basic_function_definition() {
5252
+ " LINKAGE SECTION. \n"
5353
+ " 01 {$*RETVAL}. \n"
5454
+ " 05 {$*NUM} PIC X(1234). \n"
55-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
55+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
5656
+ " MOVE 1234 to {$NUM}. \n"
5757
+ " END FUNCTION FUNC. \n"
5858
+ " \n"
@@ -63,7 +63,7 @@ void parse_basic_function_definition() {
6363
+ " LINKAGE SECTION. \n"
6464
+ " 01 {$*RETVAL}. \n"
6565
+ " 05 {$*NUM} PIC X(1234). \n"
66-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
66+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
6767
+ " MOVE 1234 to {$NUM}. \n"
6868
+ " END FUNCTION FUNC2. \n"
6969
+ " \n"
@@ -74,7 +74,7 @@ void parse_basic_function_definition() {
7474
+ " LINKAGE SECTION. \n"
7575
+ " 01 {$*RETVAL}. \n"
7676
+ " 05 {$*NUM} PIC X(1234). \n"
77-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
77+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
7878
+ " MOVE 1234 to {$NUM}. \n"
7979
+ " END FUNCTION FUNC3. \n";
8080

@@ -91,7 +91,7 @@ void parse_various_alternative_functions() {
9191
+ " LINKAGE SECTION. \n"
9292
+ " 01 {$*RETVAL}. \n"
9393
+ " 05 {$*NUM} PIC X(1234). \n"
94-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
94+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
9595
+ " MOVE 1234 to {$NUM}. \n"
9696
+ " \n"
9797
+ " {IDENTIFICATION|1} DIVISION. \n"
@@ -100,7 +100,7 @@ void parse_various_alternative_functions() {
100100
+ " LINKAGE SECTION. \n"
101101
+ " 01 {$*RETVAL}. \n"
102102
+ " 05 {$*NUM} PIC X(1234). \n"
103-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
103+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
104104
+ " MOVE 1234 to {$NUM}. \n"
105105
+ " END FUNCTION FUNC2. \n"
106106
+ " \n"
@@ -134,7 +134,7 @@ void parse_disallow_function_nesting() {
134134
+ " LINKAGE SECTION. \n"
135135
+ " 01 {$*RETVAL}. \n"
136136
+ " 05 {$*NUM} PIC X(1234). \n"
137-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
137+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
138138
+ " MOVE 1234 to {$NUM}. \n"
139139
+ " \n"
140140
+ " IDENTIFICATION DIVISION. \n"
@@ -143,7 +143,7 @@ void parse_disallow_function_nesting() {
143143
+ " LINKAGE SECTION. \n"
144144
+ " 01 {$*RETVAL}. \n"
145145
+ " 05 {$*NUM} PIC X(1234). \n"
146-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
146+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
147147
+ " MOVE 1234 to {$NUM}. \n"
148148
+ " END FUNCTION FUNC. \n"
149149
+ " \n"
@@ -175,7 +175,7 @@ void parse_disallow_function_nesting_in_programs() {
175175
+ " WORKING-STORAGE SECTION. \n"
176176
+ " 01 {$*RETVAL}. \n"
177177
+ " 05 {$*NUM} PIC X(1234). \n"
178-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
178+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
179179
+ " MOVE FUNCTION {FUNC1|2} TO {$NUM}. \n"
180180
+ " END PROGRAM PGM. \n";
181181

@@ -207,7 +207,7 @@ void diagnose_missing_function() {
207207
+ " LINKAGE SECTION. \n"
208208
+ " 01 {$*UNRELATED-STUFF}. \n"
209209
+ " 05 {$*NUM} PIC X(1234). \n"
210-
+ " PROCEDURE DIVISION RETURNING UNRELATED-STUFF. \n"
210+
+ " PROCEDURE DIVISION RETURNING {$UNRELATED-STUFF}. \n"
211211
+ " END FUNCTION FUNC1. \n"
212212
+ " \n"
213213
+ " IDENTIFICATION DIVISION. \n"
@@ -237,7 +237,7 @@ void function_found() {
237237
+ " LINKAGE SECTION. \n"
238238
+ " 01 {$*RETVAL}. \n"
239239
+ " 05 {$*NUM} PIC X(1234). \n"
240-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
240+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
241241
+ " MOVE 1234 to {$NUM}. \n"
242242
+ " END FUNCTION FUNC1. \n"
243243
+ " \n"
@@ -247,7 +247,7 @@ void function_found() {
247247
+ " LINKAGE SECTION. \n"
248248
+ " 01 {$*RETVAL}. \n"
249249
+ " 05 {$*NUM} PIC X(1234). \n"
250-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
250+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
251251
+ " MOVE 1234 to {$NUM}. \n"
252252
+ " END FUNCTION FUNC1. \n";
253253

@@ -273,7 +273,7 @@ void function_redefined() {
273273
+ " WORKING-STORAGE SECTION. \n"
274274
+ " 01 {$*RETVAL}. \n"
275275
+ " 05 {$*NUM} PIC X(1234). \n"
276-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
276+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
277277
+ " MOVE FUNCTION {FUNC1|1} TO {$RETVAL}. \n"
278278
+ " END PROGRAM PGM. \n"
279279
+ " \n"
@@ -283,7 +283,7 @@ void function_redefined() {
283283
+ " LINKAGE SECTION. \n"
284284
+ " 01 {$*RETVAL}. \n"
285285
+ " 05 {$*NUM} PIC X(1234). \n"
286-
+ " PROCEDURE DIVISION RETURNING RETVAL. \n"
286+
+ " PROCEDURE DIVISION RETURNING {$RETVAL}. \n"
287287
+ " MOVE 1234 to {$NUM}. \n"
288288
+ " END FUNCTION FUNC1. \n";
289289

0 commit comments

Comments
 (0)