typename fix
[prop.git] / tests / persist3.pcc
blob31d22d3fd3427f77f929ad4dec6169e6c8cd2337
1 #include <AD/persist/pstream.h>
2 #include <fstream.h>
5 datatype Exp :: collectable persistent =
6     NOexp                  => "<none>" 
7   | IDexp  (Id)            => _
8   | LITexp (Literal)       => _
9   | ADDexp (Exp, Exp)      => "(" _ "+" _ ")"
10   | SUBexp (Exp, Exp)      => "(" _ "-" _ ")"
11   | MULexp (Exp, Exp)      => "(" _ "*" _ ")"
12   | DIVexp (Exp, Exp)      => "(" _ "/" _ ")"
13   | IFexp  (Exp, Exp, Exp) => "if" _ "then" { _ } "else " { _ } "endif"
15 and Literal :: collectable persistent
16   = NOlit                    => "<???>"
17   | INTlit (int)             => _
18   | REALlit (double)         => _
19   | STRINGlit (const char *) => "\"" _ "\""
21 where type Id = const char *
22   ;
24 refine persistent Exp      => "Expressions"
25                 | Literal  => "Literals"
26   ;
28 instantiate datatype Exp, Literal;
30 int main()
31 {  Exp e2, e3;
32    {  ifstream F("persist2.dat");
33       Pistream P(F,GC::get_default_gc());
34       cout << "[Reading object from file 'persist2.dat']\n";
35       e2 = (Exp)read_object(P);
36       e3 = (Exp)read_object(P);
37       F.close();
38    } 
39    cout << "e2 = " << e2 << " aka " << (void*)e2 << '\n';
40    cout << "e3 = " << e3 << " aka " << (void*)e3 << '\n';
41    cout << "Okay\n";
42    return 0;