Skip to content

Commit 9d80790

Browse files
authored
Merge branch 'develop' into 1816_NewExecutionStep_QualityCheck
2 parents 08758b9 + bc6e49a commit 9d80790

File tree

3 files changed

+64
-32
lines changed

3 files changed

+64
-32
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--- Nodes ---
2+
?
3+
PGM1
4+
data-division
5+
working-storage
6+
TEST-GROUP1
7+
TEST-SGROUP1
8+
TEST-ELT1
9+
TEST-ELT2
10+
TEST-SGROUP2
11+
TEST-ELT3
12+
TEST-ELT4
13+
TEST-SGROUP5
14+
TEST-ELT5
15+
TEST-RENAMES
16+
TEST-GROUP2
17+
TEST-SGROUP6
18+
ELT1
19+
ELT2
20+
TEST-SGROUP7
21+
ELT3
22+
ELT4
23+
TEST-RENAMES-GROUP
24+
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
IDENTIFICATION DIVISION.
2+
PROGRAM-ID. PGM1.
3+
DATA DIVISION.
4+
WORKING-STORAGE SECTION.
5+
01 TEST-GROUP1.
6+
05 TEST-SGROUP1.
7+
10 TEST-ELT1 PIC X(04).
8+
10 TEST-ELT2 PIC X(350).
9+
05 TEST-SGROUP2.
10+
10 TEST-ELT3 PIC X(200).
11+
10 TEST-ELT4 PIC X(1000).
12+
05 TEST-SGROUP5.
13+
10 TEST-ELT5 PIC X(100).
14+
66 TEST-RENAMES RENAMES TEST-ELT2
15+
THRU TEST-ELT4.
16+
01 TEST-GROUP2.
17+
05 TEST-SGROUP6.
18+
10 ELT1 PIC X.
19+
10 ELT2 PIC X.
20+
05 TEST-SGROUP7.
21+
10 ELT3 PIC X.
22+
10 ELT4 PIC X.
23+
66 TEST-RENAMES-GROUP RENAMES TEST-SGROUP6.
24+
END PROGRAM PGM1.

TypeCobol/Compiler/CupParser/NodeBuilder/ProgramClassBuilder.cs

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -148,60 +148,44 @@ private void AttachEndIfExists(CodeElementEnd end)
148148
}
149149
}
150150

151-
private Node GetTopLevelItem(long level)
152-
{
153-
var parent = CurrentNode;
154-
while (parent != null)
155-
{
156-
var data = parent.CodeElement as DataDefinitionEntry;
157-
if (data == null) return null;
158-
if (data.LevelNumber == null || data.LevelNumber.Value < level) return parent;
159-
parent = parent.Parent;
160-
}
161-
return null;
162-
}
163-
164151
/// <summary>Exit() every Node that is not the top-level item for a data of a given level.</summary>
165152
/// <param name="levelnumber">
166153
/// Level number of the next data definition that will be Enter()ed.
167154
/// If null, a value of 1 is assumed.
168155
/// </param>
169156
private void SetCurrentNodeToTopLevelItem(IntegerValue levelnumber)
170157
{
171-
long level = levelnumber != null ? levelnumber.Value : 1;
172-
Node parent;
173-
158+
long level = levelnumber?.Value ?? 1;
174159
if (level == 1 || level == 77)
175160
{
176-
parent = null;
177-
}
178-
else
179-
{
180-
parent = GetTopLevelItem(level);
181-
}
182-
if (parent != null)
183-
{
184-
// Exit() previous sibling and all of its last children
185-
while (parent != CurrentNode) Exit();
161+
//level-1 and level-77 should be attached directly into the section.
162+
ExitLastLevel1Definition();
186163
}
187164
else
188165
{
189-
ExitLastLevel1Definition();
166+
long parentLevel = level == 66 ? 1 : level - 1; //level-66 should be attached to their corresponding level-1.
167+
while (CurrentNode.CodeElement is DataDefinitionEntry entry)
168+
{
169+
//Exit() till we reach or get over expected parent level.
170+
if (entry.LevelNumber == null) break;
171+
if (entry.LevelNumber.Value <= parentLevel) break;
172+
Exit();
173+
}
190174
}
191175
}
192176

193177
/// <summary>Exit last level-01 data definition entry, as long as all its subordinates.</summary>
194178
private void ExitLastLevel1Definition()
195179
{
196180
_CurrentTypeDefinition = null;
197-
Node LastLevel1Def = null;
198-
while (CurrentNode.CodeElement != null && CurrentNode.CodeElement is DataDefinitionEntry)
181+
Node lastLevel1Definition = null;
182+
while (CurrentNode.CodeElement is DataDefinitionEntry)
199183
{
200-
LastLevel1Def = CurrentNode;
184+
lastLevel1Definition = CurrentNode;
201185
Exit();
202186
}
203-
if (LastLevel1Def != null)
204-
Dispatcher.OnLevel1Definition((DataDefinition)LastLevel1Def);
187+
if (lastLevel1Definition != null)
188+
Dispatcher.OnLevel1Definition((DataDefinition) lastLevel1Definition);//Call is made also for level-77.
205189
}
206190

207191
public virtual void StartCobolCompilationUnit()

0 commit comments

Comments
 (0)