Browse Source

* override tblocknode.destroy so all statements are freed sequentially
instead of recusively.

Jonas Maebe 21 years ago
parent
commit
8da316cf21
1 changed files with 23 additions and 1 deletions
  1. 23 1
      compiler/nbas.pas

+ 23 - 1
compiler/nbas.pas

@@ -79,6 +79,7 @@ interface
 
 
        tblocknode = class(tunarynode)
        tblocknode = class(tunarynode)
           constructor create(l : tnode);virtual;
           constructor create(l : tnode);virtual;
+          destructor destroy; override;
           function pass_1 : tnode;override;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
           function det_resulttype:tnode;override;
 {$ifdef state_tracking}
 {$ifdef state_tracking}
@@ -350,6 +351,23 @@ implementation
          inherited create(blockn,l);
          inherited create(blockn,l);
       end;
       end;
 
 
+    destructor tblocknode.destroy;
+
+      var
+        hp, next: tstatementnode;
+      begin
+        hp := tstatementnode(left);
+        left := nil;
+        while assigned(hp) do
+          begin
+            next := tstatementnode(hp.right);
+            hp.right := nil;
+            hp.free;
+            hp := next;
+          end;
+        inherited destroy;
+      end;
+
     function tblocknode.det_resulttype:tnode;
     function tblocknode.det_resulttype:tnode;
       var
       var
          hp : tstatementnode;
          hp : tstatementnode;
@@ -965,7 +983,11 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.73  2003-11-10 22:02:52  peter
+  Revision 1.74  2003-12-10 20:31:40  jonas
+    * override tblocknode.destroy so all statements are freed sequentially
+      instead of recusively.
+
+  Revision 1.73  2003/11/10 22:02:52  peter
     * cross unit inlining fixed
     * cross unit inlining fixed
 
 
   Revision 1.72  2003/11/04 15:35:13  peter
   Revision 1.72  2003/11/04 15:35:13  peter