Translating Modula2 into D: variant records, pointer

BLS Killing_Zoe at web.de
Tue Jan 9 05:15:20 PST 2007


Translating Modula2 into D: Subject: variant records,pointer

Hi I have some Modula2 code which I would like to translate in D.
I often have to use something like that :

MODULE snippet

   FROM SYSTEM IMPORT TSIZE;
   FROM Heap IMPORT ALLOCATE;

   TYPE  NodePtr = POINTER TO Node;
         HeadPtr = POINTER TO Header;

         (* variant record *)
         Node = RECORD suc, alt: NodePtr;
          CASE terminal: BOOLEAN OF
            TRUE:  tsym: CHAR |
            FALSE: nSym: HeadPtr
          END
        END;

        Header = RECORD sym: CHAR;
                   entry: NodePtr;
                   suc: HeadPtr
                 END;


   VAR list, sentinel: HeadPtr

   (* JUST A PROCEDURE FRAGMENT *)
   PROCEDURE Find(s: CHAR; VAR h: HeadPtr);
     VAR h1: HeadPtr;
   BEGIN
     h1 := list;
     sentinel^.sym := s;

     ALLOCATE(sentinel, TSIZE(Header));

     h := h1;
     (* etc. *°

   END
So: How do I have to implement this snippet in D ?
Many thanks !!!! in advance; Bjoern


More information about the Digitalmars-d-learn mailing list