Просмотр исходного кода

+ implemented a tcasenode.printnodetree printing all cases

git-svn-id: trunk@23414 -
florian 12 лет назад
Родитель
Сommit
247d6dd394
1 измененных файлов с 34 добавлено и 2 удалено
  1. 34 2
      compiler/nset.pas

+ 34 - 2
compiler/nset.pas

@@ -98,6 +98,7 @@ interface
           procedure buildderefimpl;override;
           procedure derefimpl;override;
           function dogetcopy : tnode;override;
+          procedure printnodetree(var t:text);override;
           procedure insertintolist(l : tnodelist);override;
           function pass_typecheck:tnode;override;
           function pass_1 : tnode;override;
@@ -829,7 +830,6 @@ implementation
 
 
     function tcasenode.dogetcopy : tnode;
-
       var
          n : tcasenode;
          i : longint;
@@ -858,11 +858,43 @@ implementation
          dogetcopy:=n;
       end;
 
-    procedure tcasenode.insertintolist(l : tnodelist);
 
+    procedure tcasenode.printnodetree(var t: text);
+      var
+        hp : tbinarynode;
+        i : longint;
+      begin
+        write(t,printnodeindention,'(');
+        printnodeindent;
+        printnodeinfo(t);
+        writeln(t);
+        printnode(t,left);
+        for i:=0 to blocks.count-1 do
+          begin
+            writeln(t,printnodeindention,'(caseblock blockid: ',i);
+            printnodeindent;
+            printnode(t,pcaseblock(blocks[i])^.statement);
+            printnodeunindent;
+            writeln(t,printnodeindention,')');
+          end;
+        if assigned(elseblock) then
+          begin
+            writeln(t,printnodeindention,'(else: ',i);
+            printnodeindent;
+            printnode(t,elseblock);
+            printnodeunindent;
+            writeln(t,printnodeindention,')');
+          end;
+        printnodeunindent;
+        writeln(t,printnodeindention,')');
+      end;
+
+
+    procedure tcasenode.insertintolist(l : tnodelist);
       begin
       end;
 
+
     function caselabelsequal(n1,n2: pcaselabel): boolean;
       begin
         result :=