@@ -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