Natools

Diff
Login

Differences From Artifact [9263dcc4c7]:

To Artifact [233b7de8f5]:


73
74
75
76
77
78
79

80

81
82
83
84
85
86
87
73
74
75
76
77
78
79
80

81
82
83
84
85
86
87
88







+
-
+







      return Tree'(Ada.Finalization.Limited_Controlled
        with Root | Last => null, Opening => False);
   end Create_Tree;


   function Duplicate (Source : Tree) return Tree is
      function Dup_List (First, Parent : Node_Access) return Node_Access;
      function Dup_Node (N : not null Node_Access; Parent : Node_Access)
      function Dup_Node (N, Parent : Node_Access) return Node_Access;
        return Node_Access;

      New_Last : Node_Access := null;

      function Dup_List (First, Parent : Node_Access) return Node_Access is
         Source : Node_Access := First;
         Result, Target : Node_Access;
      begin
95
96
97
98
99
100
101

102


103
104
105
106
107
108
109
110
111
112
113
114
115
96
97
98
99
100
101
102
103

104
105
106
107




108
109
110
111
112
113
114







+
-
+
+


-
-
-
-







            exit when Source = null;
            Target.Next := Dup_Node (Source, Parent);
            Target := Target.Next;
         end loop;
         return Result;
      end Dup_List;

      function Dup_Node (N : not null Node_Access; Parent : Node_Access)
      function Dup_Node (N, Parent : Node_Access) return Node_Access is
        return Node_Access
      is
         Result : Node_Access;
      begin
         if N = null then
            return null;
         end if;

         case N.Kind is
            when Atom_Node =>
               Result := new Node'(Kind => Atom_Node,
                 Parent => Parent,
                 Next => null,
                 Data => new Atom'(N.Data.all));
            when List_Node =>