Index: src/Tests/SynTree/Array.c
===================================================================
--- src/Tests/SynTree/Array.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Array.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,33 @@
+int a1[];
+int a2[*];
+int a4[3];
+
+int m1[][3];
+int m2[*][*];
+int m4[3][3];
+
+typedef int T;
+
+int fred() {
+    int a1[];
+    int a2[*];
+    int a4[3];
+    int T[3];
+}
+
+int mary( int T[3],
+	  int p1[const 3],
+	  int p2[static 3],
+	  int p3[static const 3]
+    ) {
+}
+
+int (*tom())[3] {
+}
+
+int (*(jane)())( int T[3],
+		 int p1[const 3],
+		 int p2[static 3],
+		 int p3[static const 3]
+    ) {
+}
Index: src/Tests/SynTree/Constant0-1.c
===================================================================
--- src/Tests/SynTree/Constant0-1.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Constant0-1.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,35 @@
+// Cforall extension
+
+// value
+
+int 0;
+const int 0;
+static const int 0;
+int 1;
+const int 1;
+static const int 1;
+int 0, 1;
+const int 0, 1;
+static const int 0, 1;
+struct { int i; } 0;
+const struct { int i; } 1;
+static const struct { int i; } 1;
+
+// pointer
+
+int 1, * 0;
+int (1), ((1)), * (0), (* 0), ((* 0));
+int * const (0), (* const 0), ((* const 0));
+struct { int i; } * 0;
+
+// Cforall style
+
+* int x, 0;
+const * int x, 0;
+static const * int x, 0;
+* struct { int i; } 0;
+const * struct { int i; } 0;
+static const * struct { int i; } 0;
+static * int x, 0;
+static const * int x, 0;
+const * * int x, 0;
Index: src/Tests/SynTree/Context.c
===================================================================
--- src/Tests/SynTree/Context.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Context.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,16 @@
+context has_q( type T )
+{
+  T q( T );
+};
+
+forall( type z | has_q( z ) )
+void f()
+{
+  context has_r( type T, type U )
+  {
+    T r( T, T (T,U) );
+  };
+  
+  extern type x, y | has_r( x, y );
+  
+}
Index: src/Tests/SynTree/DeclarationErrors.c
===================================================================
--- src/Tests/SynTree/DeclarationErrors.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/DeclarationErrors.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,5 @@
+static short int volatile static const x9;		// duplicate static
+struct { int i; } const static volatile static x18;	// duplicate static
+struct { int i; } const static volatile static volatile x19; // duplicate static & volatile
+typedef int Int;
+static Int volatile static const x28;			// duplicate static
Index: src/Tests/SynTree/DeclarationSpecifier.c
===================================================================
--- src/Tests/SynTree/DeclarationSpecifier.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/DeclarationSpecifier.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,86 @@
+typedef short int Int;
+
+
+const short int volatile x1;
+static const short int volatile x2;
+const static short int volatile x3;
+const short static int volatile x4;
+const static volatile short int x4;
+const short int static volatile x5;
+const short int volatile static x6;
+const short volatile int static x7;
+short int volatile static const x8;
+
+const volatile struct { int i; } x10;
+const struct { int i; } volatile x11;
+struct { int i; } const volatile x12;
+static const volatile struct { int i; } x13;
+const static struct { int i; } volatile x14;
+struct { int i; } static const volatile x15;
+struct { int i; } const static volatile x16;
+struct { int i; } const volatile static x17;
+
+const Int volatile x20;
+static const Int volatile x21;
+const static Int volatile x22;
+const static Int volatile x23;
+const Int static volatile x24;
+const Int volatile static x25;
+const volatile Int static x26;
+Int volatile static const x27;
+
+const volatile struct { Int i; } x29;
+const struct { Int i; } volatile x30;
+struct { Int i; } const volatile x31;
+static const volatile struct { Int i; } x32;
+const static struct { Int i; } volatile x33;
+struct { Int i; } static const volatile x34;
+struct { Int i; } const static volatile x35;
+struct { Int i; } const volatile static x36;
+
+
+const static inline const volatile int f01();		// duplicate const
+volatile inline const volatile static int f02();	// duplicate volatile
+const inline const volatile int static f03();		// duplicate const
+volatile inline static const volatile int f04();	// duplicate volatile
+const static const inline volatile int f05();		// duplicate const
+volatile static const volatile inline int f06();	// duplicate volatile
+const static const volatile int inline f07();		// duplicate const
+volatile static const int inline volatile f08();	// duplicate volatile
+
+static inline const volatile int f11();
+inline const volatile static int f12();
+inline const volatile int static f13();
+inline static const volatile int f14();
+static const inline volatile int f15();
+static const volatile inline int f16();
+static const volatile int inline f17();
+static const int inline volatile f18();
+
+short static inline const volatile int f21();
+inline short const volatile static int f22();
+inline const short volatile int static f23();
+inline static const short volatile int f24();
+static const inline volatile short int f25();
+static const volatile inline int short f26();
+static const volatile int inline short f27();
+static const int inline volatile short f28();
+
+static inline const volatile struct { int i; } f31();
+inline const volatile static struct { int i; } f32();
+inline const volatile struct { int i; } static f33();
+inline static const volatile struct { int i; } f34();
+static const inline volatile struct { int i; } f35();
+static const volatile inline struct { int i; } f36();
+static const volatile struct { int i; } inline f37();
+static const struct { int i; } inline volatile f38();
+
+static inline const volatile Int f41();
+inline const volatile static Int f42();
+inline const volatile Int static f43();
+inline static const volatile Int f44();
+static const inline volatile Int f45();
+static const volatile inline Int f46();
+static const volatile Int inline f47();
+static const Int inline volatile f48();
+
Index: src/Tests/SynTree/Enum.c
===================================================================
--- src/Tests/SynTree/Enum.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Enum.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,20 @@
+enum Colors {
+  Red,
+  Yellow,
+  Pink,
+  Blue,
+  Purple,
+  Orange,
+  Green
+};
+
+
+void f( void )
+{
+  enum Fruits {
+    Apple,
+    Banana,
+    Pear,
+    Mango
+  } fruit = Mango;
+}
Index: src/Tests/SynTree/Expected-SymTab/Array.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Array.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Array.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,53 @@
+Adding object a1
+Adding object a2
+Adding object a4
+Adding object m1
+Adding object m2
+Adding object m4
+Adding typedef T
+--- Entering scope
+--- Leaving scope containing
+Adding function fred
+--- Entering scope
+--- Entering scope
+Adding object a1
+Adding object a2
+Adding object a4
+Adding object T
+--- Leaving scope containing
+T (__T__A0i) (2)
+a1 (__a1__A0i) (2)
+a2 (__a2__A0i) (2)
+a4 (__a4__A0i) (2)
+--- Leaving scope containing
+Adding function mary
+--- Entering scope
+Adding object T
+Adding object p1
+Adding object p2
+Adding object p3
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+T (__T__Pi) (1)
+p1 (__p1__CPi) (1)
+p2 (__p2__Pi) (1)
+p3 (__p3__CPi) (1)
+Adding function tom
+--- Entering scope
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+Adding function jane
+--- Entering scope
+Adding object T
+Adding object p1
+Adding object p2
+Adding object p3
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+T (__T__Pi) (1)
+p1 (__p1__CPi) (1)
+p2 (__p2__Pi) (1)
+p3 (__p3__CPi) (1)
Index: src/Tests/SynTree/Expected-SymTab/Context.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Context.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Context.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,52 @@
+Adding context has_q
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding function q
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+q (__q__F_2tT_2tT_) (1)
+T
+Adding function f
+--- Entering scope
+Adding type z
+--- Entering scope
+--- Leaving scope containing
+Adding function q
+--- Entering scope
+--- Leaving scope containing
+--- Entering scope
+Adding context has_r
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding type U
+--- Entering scope
+--- Leaving scope containing
+Adding function r
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+r (__r__F_2tT_2tTPF_2tT_2tT2tU__) (3)
+T
+U
+Adding type x
+--- Entering scope
+--- Leaving scope containing
+Adding type y
+--- Entering scope
+--- Leaving scope containing
+Adding function r
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+r (__r__F_2tx_2txPF_2tx_2tx2ty__) (2)
+x
+y
+has_r
+--- Leaving scope containing
+q (__q__F_2tz_2tz_) (1)
+z
Index: src/Tests/SynTree/Expected-SymTab/Enum.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Enum.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Enum.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,25 @@
+Adding enum Colors
+Adding object Red
+Adding object Yellow
+Adding object Pink
+Adding object Blue
+Adding object Purple
+Adding object Orange
+Adding object Green
+Adding function f
+--- Entering scope
+--- Entering scope
+Adding enum Fruits
+Adding object Apple
+Adding object Banana
+Adding object Pear
+Adding object Mango
+Adding object fruit
+--- Leaving scope containing
+Apple (__Apple__C7eFruits) (2)
+Banana (__Banana__C7eFruits) (2)
+Mango (__Mango__C7eFruits) (2)
+Pear (__Pear__C7eFruits) (2)
+fruit (__fruit__7eFruits) (2)
+Fruits
+--- Leaving scope containing
Index: src/Tests/SynTree/Expected-SymTab/Forall.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Forall.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Forall.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,188 @@
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+Adding typedef f
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+T
+Adding function swap
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding object left
+Adding object right
+--- Entering scope
+Adding object temp
+--- Leaving scope containing
+temp (__temp__2tT) (2)
+--- Leaving scope containing
+left (__left__2tT) (1)
+right (__right__2tT) (1)
+T
+Adding context sumable
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+0 (__0__C2tT) (1)
+?++ (__?++__F_2tT_2tT_) (1)
+?+=? (__?+=?__F_2tT_2tT2tT_) (1)
+?+? (__?+?__F_2tT_2tT2tT_) (1)
+T
+Adding type T1
+--- Entering scope
+--- Leaving scope containing
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+Adding type T2
+--- Entering scope
+Adding type P1
+--- Entering scope
+--- Leaving scope containing
+Adding type P2
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+P1
+P2
+Adding type T3
+--- Entering scope
+--- Leaving scope containing
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+Adding struct __anonymous0
+--- Entering scope
+Adding object i
+Adding object j
+--- Leaving scope containing
+i (__i__3tP1) (1)
+j (__j__3tP2) (1)
+Adding type T2
+--- Entering scope
+Adding type P1
+--- Entering scope
+--- Leaving scope containing
+Adding type P2
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+P1
+P2
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+Adding object w1
+Adding typedef w2
+--- Entering scope
+--- Leaving scope containing
+Adding object g2
+Adding type w3
+--- Entering scope
+--- Leaving scope containing
+Adding object g3
+Adding function sum
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+Adding object n
+Adding object a
+--- Entering scope
+Adding object total
+Adding object i
+--- Leaving scope containing
+i (__i__i) (2)
+total (__total__2tT) (2)
+--- Leaving scope containing
+0 (__0__2tT) (1)
+?++ (__?++__F_2tT_2tT_) (1)
+?+=? (__?+=?__F_2tT_2tT2tT_) (1)
+?+? (__?+?__F_2tT_2tT2tT_) (1)
+a (__a__P2tT) (1)
+n (__n__i) (1)
+T
+Adding function twice
+--- Entering scope
+Adding type T
+--- Entering scope
+--- Leaving scope containing
+Adding object 0
+Adding function ?+?
+--- Entering scope
+--- Leaving scope containing
+Adding function ?++
+--- Entering scope
+--- Leaving scope containing
+Adding function ?+=?
+--- Entering scope
+--- Leaving scope containing
+Adding object t
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+0 (__0__C2tT) (1)
+?++ (__?++__F_2tT_2tT_) (1)
+?+=? (__?+=?__F_2tT_2tT2tT_) (1)
+?+? (__?+?__F_2tT_2tT2tT_) (1)
+t (__t__2tT) (1)
+T
+Adding function main
+--- Entering scope
+--- Entering scope
+Adding object x
+Adding object y
+Adding object a
+Adding object f
+--- Leaving scope containing
+a (__a__A0i) (2)
+f (__f__f) (2)
+x (__x__i) (2)
+y (__y__i) (2)
+--- Leaving scope containing
Index: src/Tests/SynTree/Expected-SymTab/Scope.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Scope.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Scope.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,130 @@
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+Adding object x
+Adding typedef y
+--- Entering scope
+--- Leaving scope containing
+Adding typedef t
+--- Entering scope
+--- Leaving scope containing
+Adding object z
+Adding struct __anonymous0
+--- Entering scope
+Adding object a
+Adding object b
+--- Leaving scope containing
+a (__a__i) (1)
+b (__b__d) (1)
+Adding type u
+--- Entering scope
+--- Leaving scope containing
+Adding function f
+--- Entering scope
+Adding object y
+--- Leaving scope containing
+y (__y__i) (1)
+Adding object q
+Adding function w
+--- Entering scope
+Adding object y
+Adding object v
+--- Entering scope
+Adding type x
+--- Entering scope
+--- Leaving scope containing
+Adding function t
+--- Entering scope
+--- Leaving scope containing
+Adding object u
+Adding object z
+--- Leaving scope containing
+t (__t__F_2tx_2tu_) (2)
+u (__u__2tu) (2)
+z (__z__2tx) (2)
+x
+--- Leaving scope containing
+v (__v__2tu) (1)
+y (__y__2ty) (1)
+Adding object p
+Adding context has_u
+--- Entering scope
+Adding type z
+--- Entering scope
+--- Leaving scope containing
+Adding function u
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+u (__u__F_2tz_2tz_) (1)
+z
+Adding function q
+--- Entering scope
+Adding type t
+--- Entering scope
+--- Leaving scope containing
+Adding function u
+--- Entering scope
+--- Leaving scope containing
+Adding object the_t
+--- Entering scope
+Adding object y
+--- Leaving scope containing
+y (__y__2tt) (2)
+--- Leaving scope containing
+the_t (__the_t__2tt) (1)
+u (__u__F_2tt_2tt_) (1)
+t
+Adding function f
+--- Entering scope
+Adding object p
+--- Entering scope
+Adding object y
+Adding typedef x
+--- Entering scope
+--- Leaving scope containing
+--- Entering scope
+Adding object y
+Adding typedef z
+--- Entering scope
+--- Leaving scope containing
+--- Entering scope
+Adding object x
+Adding typedef y
+--- Entering scope
+--- Leaving scope containing
+Adding object z
+--- Leaving scope containing
+x (__x__2tz) (4)
+z (__z__2ty) (4)
+y
+Adding object x
+--- Leaving scope containing
+x (__x__2tz) (3)
+y (__y__2tx) (3)
+z
+Adding object q
+--- Leaving scope containing
+q (__q__2tx) (2)
+y (__y__i) (2)
+x
+--- Leaving scope containing
+p (__p__2ty) (1)
+Adding function g
+--- Entering scope
+--- Entering scope
+Adding typedef x
+--- Entering scope
+--- Leaving scope containing
+Adding object z
+--- Leaving scope containing
+z (__z__2tx) (2)
+x
+--- Leaving scope containing
+Adding function q
+--- Entering scope
+Adding object i
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+i (__i__i) (1)
Index: src/Tests/SynTree/Expected-SymTab/ScopeErrors.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/ScopeErrors.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/ScopeErrors.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,38 @@
+Adding object thisIsAnError
+Adding object thisIsAnError
+Adding object thisIsNotAnError
+Adding object thisIsNotAnError
+Adding function thisIsAlsoNotAnError
+--- Entering scope
+--- Entering scope
+Adding object thisIsNotAnError
+--- Leaving scope containing
+thisIsNotAnError (__thisIsNotAnError__i) (2)
+--- Leaving scope containing
+Adding function thisIsAlsoNotAnError
+--- Entering scope
+Adding object x
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+x (__x__d) (1)
+Adding function thisIsStillNotAnError
+--- Entering scope
+--- Leaving scope containing
+Adding function thisIsStillNotAnError
+--- Entering scope
+--- Leaving scope containing
+Adding function butThisIsAnError
+--- Entering scope
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+Adding function butThisIsAnError
+Error: duplicate definition for thisIsAnError: a signed int 
+Error: duplicate function definition for butThisIsAnError: a function
+  with parameters
+    double 
+  returning 
+    double 
+  with body 
+
Index: src/Tests/SynTree/Expected-SymTab/Tuple.tst
===================================================================
--- src/Tests/SynTree/Expected-SymTab/Tuple.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected-SymTab/Tuple.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,97 @@
+Adding function f
+--- Entering scope
+--- Leaving scope containing
+Adding function g
+--- Entering scope
+--- Leaving scope containing
+Adding function h
+--- Entering scope
+Adding object a
+Adding object b
+Adding object c
+Adding object d
+--- Leaving scope containing
+a (__a__i) (1)
+b (__b__i) (1)
+c (__c__Pi) (1)
+d (__d__Pc) (1)
+Adding struct inner
+--- Entering scope
+Adding object f2
+Adding object f3
+--- Leaving scope containing
+f2 (__f2__i) (1)
+f3 (__f3__i) (1)
+Adding struct outer
+--- Entering scope
+Adding object f1
+Adding object i
+Adding object f4
+--- Leaving scope containing
+f1 (__f1__i) (1)
+f4 (__f4__d) (1)
+i (__i__6sinner) (1)
+Adding object s
+Adding object sp
+Adding object t1
+Adding object t2
+Adding object t3
+Adding function printf
+--- Entering scope
+Adding object rc
+Adding object fmt
+--- Leaving scope containing
+fmt (__fmt__Pc) (1)
+rc (__rc__i) (1)
+Adding function printf
+--- Entering scope
+Adding object fmt
+--- Leaving scope containing
+fmt (__fmt__Pc) (1)
+Adding function f1
+--- Entering scope
+Adding object x
+Adding object y
+Adding object w
+--- Entering scope
+--- Leaving scope containing
+--- Leaving scope containing
+w (__w__i) (1)
+x (__x__s) (1)
+y (__y__Ui) (1)
+Adding function g1
+--- Entering scope
+Adding object r
+--- Entering scope
+Adding object x
+Adding object p
+Adding object y
+Adding object z
+--- Leaving scope containing
+p (__p__s) (2)
+x (__x__s) (2)
+y (__y__Ui) (2)
+z (__z__Tii_) (2)
+--- Leaving scope containing
+r (__r__Ticli_) (1)
+Adding function main
+--- Entering scope
+Adding object rc
+Adding object argc
+Adding object argv
+--- Entering scope
+Adding object a
+Adding object b
+Adding object c
+Adding object d
+Adding object t
+--- Leaving scope containing
+a (__a__i) (2)
+b (__b__i) (2)
+c (__c__i) (2)
+d (__d__i) (2)
+t (__t__6souter) (2)
+--- Leaving scope containing
+argc (__argc__i) (1)
+argv (__argv__PPc) (1)
+rc (__rc__i) (1)
Index: src/Tests/SynTree/Expected/Array.tst
===================================================================
--- src/Tests/SynTree/Expected/Array.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Array.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,50 @@
+a1: a open array of signed int 
+a2: a variable length array of signed int 
+a4: a array of   Constant Expression: 3signed int 
+m1: a open array of array of   Constant Expression: 3signed int 
+m2: a variable length array of variable length array of signed int 
+m4: a array of   Constant Expression: 3array of   Constant Expression: 3signed int 
+T: a typedef for signed int 
+fred: a function
+    returning 
+      signed int 
+    with body 
+      Declaration of a1: a open array of signed int 
+      Declaration of a2: a variable length array of signed int 
+      Declaration of a4: a array of         Constant Expression: 3signed int 
+      Declaration of T: a array of         Constant Expression: 3signed int 
+
+mary: a function
+    with parameters
+      T: a array of         Constant Expression: 3signed int 
+      p1: a const array of         Constant Expression: 3signed int 
+      p2: a static array of         Constant Expression: 3signed int 
+      p3: a const static array of         Constant Expression: 3signed int 
+    returning 
+      signed int 
+    with body 
+
+      Null Statement
+
+tom: a function
+    returning 
+      pointer to array of         Constant Expression: 3signed int 
+    with body 
+
+      Null Statement
+
+jane: a function
+    returning 
+      pointer to function
+          with parameters
+            T: a array of               Constant Expression: 3signed int 
+            p1: a const array of               Constant Expression: 3signed int 
+            p2: a static array of               Constant Expression: 3signed int 
+            p3: a const static array of               Constant Expression: 3signed int 
+          returning 
+            signed int 
+
+    with body 
+
+      Null Statement
+
Index: src/Tests/SynTree/Expected/Constant0-1.tst
===================================================================
--- src/Tests/SynTree/Expected/Constant0-1.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Constant0-1.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,69 @@
+0: a signed int 
+0: a const signed int 
+0: a static const signed int 
+1: a signed int 
+1: a const signed int 
+1: a static const signed int 
+0: a signed int 
+1: a signed int 
+0: a const signed int 
+1: a const signed int 
+0: a static const signed int 
+1: a static const signed int 
+struct __anonymous0
+    with members
+      i: a signed int 
+
+0: a instance of struct __anonymous0 
+struct __anonymous1
+    with members
+      i: a signed int 
+
+1: a const instance of struct __anonymous1 
+struct __anonymous2
+    with members
+      i: a signed int 
+
+1: a static const instance of struct __anonymous2 
+1: a signed int 
+0: a pointer to signed int 
+1: a signed int 
+1: a signed int 
+0: a pointer to signed int 
+0: a pointer to signed int 
+0: a pointer to signed int 
+0: a const pointer to signed int 
+0: a const pointer to signed int 
+0: a const pointer to signed int 
+struct __anonymous3
+    with members
+      i: a signed int 
+
+0: a pointer to instance of struct __anonymous3 
+x: a pointer to signed int 
+0: a pointer to signed int 
+x: a const pointer to signed int 
+0: a const pointer to signed int 
+x: a static const pointer to signed int 
+0: a static const pointer to signed int 
+struct __anonymous4
+    with members
+      i: a signed int 
+
+0: a pointer to instance of struct __anonymous4 
+struct __anonymous5
+    with members
+      i: a signed int 
+
+0: a const pointer to instance of struct __anonymous5 
+struct __anonymous6
+    with members
+      i: a signed int 
+
+0: a static const pointer to instance of struct __anonymous6 
+x: a static pointer to signed int 
+0: a static pointer to signed int 
+x: a static const pointer to signed int 
+0: a static const pointer to signed int 
+x: a const pointer to pointer to signed int 
+0: a const pointer to pointer to signed int 
Index: src/Tests/SynTree/Expected/Context.tst
===================================================================
--- src/Tests/SynTree/Expected/Context.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Context.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,54 @@
+context has_q
+    with parameters
+      T: a type
+
+    with members
+      q: a function
+          with parameters
+            instance of type T 
+          returning 
+            instance of type T 
+
+
+f: a function
+    with forall
+      z: a type
+        with assertions
+          instance of context has_q 
+            with parameters
+              instance of type z 
+
+
+    returning 
+      void 
+    with body 
+      Declaration of context has_r
+          with parameters
+            T: a type
+            U: a type
+
+          with members
+            r: a function
+                with parameters
+                  instance of type T 
+                  function
+                      with parameters
+                        instance of type T 
+                        instance of type U 
+                      returning 
+                        instance of type T 
+
+                returning 
+                  instance of type T 
+
+
+      Declaration of x: a extern type
+      Declaration of y: a extern type
+        with assertions
+          instance of context has_r 
+            with parameters
+              instance of type x 
+              instance of type y 
+
+
+
Index: src/Tests/SynTree/Expected/DeclarationSpecifier.tst
===================================================================
--- src/Tests/SynTree/Expected/DeclarationSpecifier.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/DeclarationSpecifier.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,290 @@
+Int: a typedef for short signed int 
+x1: a const volatile short signed int 
+x2: a static const volatile short signed int 
+x3: a static const volatile short signed int 
+x4: a static const volatile short signed int 
+x4: a static const volatile short signed int 
+x5: a static const volatile short signed int 
+x6: a static const volatile short signed int 
+x7: a static const volatile short signed int 
+x8: a static const volatile short signed int 
+struct __anonymous0
+    with members
+      i: a signed int 
+
+x10: a const volatile instance of struct __anonymous0 
+struct __anonymous1
+    with members
+      i: a signed int 
+
+x11: a const volatile instance of struct __anonymous1 
+struct __anonymous2
+    with members
+      i: a signed int 
+
+x12: a const volatile instance of struct __anonymous2 
+struct __anonymous3
+    with members
+      i: a signed int 
+
+x13: a static const volatile instance of struct __anonymous3 
+struct __anonymous4
+    with members
+      i: a signed int 
+
+x14: a static const volatile instance of struct __anonymous4 
+struct __anonymous5
+    with members
+      i: a signed int 
+
+x15: a static const volatile instance of struct __anonymous5 
+struct __anonymous6
+    with members
+      i: a signed int 
+
+x16: a static const volatile instance of struct __anonymous6 
+struct __anonymous7
+    with members
+      i: a signed int 
+
+x17: a static const volatile instance of struct __anonymous7 
+x20: a const volatile instance of type Int 
+x21: a static const volatile instance of type Int 
+x22: a static const volatile instance of type Int 
+x23: a static const volatile instance of type Int 
+x24: a static const volatile instance of type Int 
+x25: a static const volatile instance of type Int 
+x26: a static const volatile instance of type Int 
+x27: a static const volatile instance of type Int 
+struct __anonymous8
+    with members
+      i: a instance of type Int 
+
+x29: a const volatile instance of struct __anonymous8 
+struct __anonymous9
+    with members
+      i: a instance of type Int 
+
+x30: a const volatile instance of struct __anonymous9 
+struct __anonymous10
+    with members
+      i: a instance of type Int 
+
+x31: a const volatile instance of struct __anonymous10 
+struct __anonymous11
+    with members
+      i: a instance of type Int 
+
+x32: a static const volatile instance of struct __anonymous11 
+struct __anonymous12
+    with members
+      i: a instance of type Int 
+
+x33: a static const volatile instance of struct __anonymous12 
+struct __anonymous13
+    with members
+      i: a instance of type Int 
+
+x34: a static const volatile instance of struct __anonymous13 
+struct __anonymous14
+    with members
+      i: a instance of type Int 
+
+x35: a static const volatile instance of struct __anonymous14 
+struct __anonymous15
+    with members
+      i: a instance of type Int 
+
+x36: a static const volatile instance of struct __anonymous15 
+f01: a inline static function
+    returning 
+      const volatile signed int 
+
+f02: a inline static function
+    returning 
+      const volatile signed int 
+
+f03: a inline static function
+    returning 
+      const volatile signed int 
+
+f04: a inline static function
+    returning 
+      const volatile signed int 
+
+f05: a inline static function
+    returning 
+      const volatile signed int 
+
+f06: a inline static function
+    returning 
+      const volatile signed int 
+
+f07: a inline static function
+    returning 
+      const volatile signed int 
+
+f08: a inline static function
+    returning 
+      const volatile signed int 
+
+f11: a inline static function
+    returning 
+      const volatile signed int 
+
+f12: a inline static function
+    returning 
+      const volatile signed int 
+
+f13: a inline static function
+    returning 
+      const volatile signed int 
+
+f14: a inline static function
+    returning 
+      const volatile signed int 
+
+f15: a inline static function
+    returning 
+      const volatile signed int 
+
+f16: a inline static function
+    returning 
+      const volatile signed int 
+
+f17: a inline static function
+    returning 
+      const volatile signed int 
+
+f18: a inline static function
+    returning 
+      const volatile signed int 
+
+f21: a inline static function
+    returning 
+      const volatile short signed int 
+
+f22: a inline static function
+    returning 
+      const volatile short signed int 
+
+f23: a inline static function
+    returning 
+      const volatile short signed int 
+
+f24: a inline static function
+    returning 
+      const volatile short signed int 
+
+f25: a inline static function
+    returning 
+      const volatile short signed int 
+
+f26: a inline static function
+    returning 
+      const volatile short signed int 
+
+f27: a inline static function
+    returning 
+      const volatile short signed int 
+
+f28: a inline static function
+    returning 
+      const volatile short signed int 
+
+struct __anonymous16
+    with members
+      i: a signed int 
+
+f31: a inline static function
+    returning 
+      const volatile instance of struct __anonymous16 
+
+struct __anonymous17
+    with members
+      i: a signed int 
+
+f32: a inline static function
+    returning 
+      const volatile instance of struct __anonymous17 
+
+struct __anonymous18
+    with members
+      i: a signed int 
+
+f33: a inline static function
+    returning 
+      const volatile instance of struct __anonymous18 
+
+struct __anonymous19
+    with members
+      i: a signed int 
+
+f34: a inline static function
+    returning 
+      const volatile instance of struct __anonymous19 
+
+struct __anonymous20
+    with members
+      i: a signed int 
+
+f35: a inline static function
+    returning 
+      const volatile instance of struct __anonymous20 
+
+struct __anonymous21
+    with members
+      i: a signed int 
+
+f36: a inline static function
+    returning 
+      const volatile instance of struct __anonymous21 
+
+struct __anonymous22
+    with members
+      i: a signed int 
+
+f37: a inline static function
+    returning 
+      const volatile instance of struct __anonymous22 
+
+struct __anonymous23
+    with members
+      i: a signed int 
+
+f38: a inline static function
+    returning 
+      const volatile instance of struct __anonymous23 
+
+f41: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f42: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f43: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f44: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f45: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f46: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f47: a inline static function
+    returning 
+      const volatile instance of type Int 
+
+f48: a inline static function
+    returning 
+      const volatile instance of type Int 
+
Index: src/Tests/SynTree/Expected/Enum.tst
===================================================================
--- src/Tests/SynTree/Expected/Enum.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Enum.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,25 @@
+enum Colors
+    with members
+      Red: a untyped entity 
+      Yellow: a untyped entity 
+      Pink: a untyped entity 
+      Blue: a untyped entity 
+      Purple: a untyped entity 
+      Orange: a untyped entity 
+      Green: a untyped entity 
+
+f: a function
+    with parameters
+      void 
+    returning 
+      void 
+    with body 
+      Declaration of enum Fruits
+          with members
+            Apple: a untyped entity 
+            Banana: a untyped entity 
+            Pear: a untyped entity 
+            Mango: a untyped entity 
+
+      Declaration of fruit: a instance of enum Fruits 
+
Index: src/Tests/SynTree/Expected/Forall.tst
===================================================================
--- src/Tests/SynTree/Expected/Forall.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Forall.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,229 @@
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+f: a typedef for pointer to function
+    with parameters
+      signed int 
+    with forall
+      T: a type
+    returning 
+      signed int 
+
+swap: a function
+    with parameters
+      left: a instance of type T 
+      right: a instance of type T 
+    with forall
+      T: a type
+    returning 
+      void 
+    with body 
+      Declaration of temp: a instance of type T 
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+ to: 
+              Name: left
+              Name: right
+
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+ to: 
+              Name: right
+              Name: temp
+
+
+context sumable
+    with parameters
+      T: a type
+
+    with members
+      0: a const instance of type T 
+      ?+?: a function
+          with parameters
+            instance of type T 
+            instance of type T 
+          returning 
+            instance of type T 
+
+      ?++: a function
+          with parameters
+            instance of type T 
+          returning 
+            instance of type T 
+
+      ?+=?: a function
+          with parameters
+            instance of type T 
+            instance of type T 
+          returning 
+            instance of type T 
+
+
+T1: a type
+  with assertions
+    0: a const instance of type T1 
+    ?+?: a function
+        with parameters
+          instance of type T1 
+          instance of type T1 
+        returning 
+          instance of type T1 
+
+    ?++: a function
+        with parameters
+          instance of type T1 
+        returning 
+          instance of type T1 
+
+    ?+=?: a function
+        with parameters
+          instance of type T1 
+          instance of type T1 
+        returning 
+          instance of type T1 
+
+
+T2: a type
+  with parameters
+    P1: a type
+    P2: a type
+
+T3: a type
+  with assertions
+    instance of context sumable 
+      with parameters
+        instance of type T3 
+
+
+struct __anonymous0
+    with members
+      i: a instance of type P1 
+      j: a instance of type P2 
+
+T2: a type for instance of struct __anonymous0 
+  with parameters
+    P1: a type
+    P2: a type
+
+  with assertions
+    instance of context sumable 
+      with parameters
+        instance of type T2 
+          with parameters
+            instance of type P1 
+            instance of type P2 
+
+
+
+w1: a instance of type T2 
+  with parameters
+    signed int 
+    signed int 
+
+w2: a typedef for instance of type T2 
+  with parameters
+    signed int 
+    signed int 
+
+g2: a instance of type w2 
+w3: a type for instance of type T2 
+  with parameters
+    signed int 
+    signed int 
+
+g3: a instance of type w3 
+sum: a function
+    with parameters
+      n: a signed int 
+      a: a open array of instance of type T 
+    with forall
+      T: a type
+        with assertions
+          instance of context sumable 
+            with parameters
+              instance of type T 
+
+
+    returning 
+      instance of type T 
+    with body 
+      Declaration of total: a instance of type T 
+      Declaration of i: a signed int 
+
+twice: a function
+    with parameters
+      t: a instance of type T 
+    with forall
+      T: a type
+        with assertions
+          0: a const instance of type T 
+          ?+?: a function
+              with parameters
+                instance of type T 
+                instance of type T 
+              returning 
+                instance of type T 
+
+          ?++: a function
+              with parameters
+                instance of type T 
+              returning 
+                instance of type T 
+
+          ?+=?: a function
+              with parameters
+                instance of type T 
+                instance of type T 
+              returning 
+                instance of type T 
+
+
+    returning 
+      instance of type T 
+    with body 
+
+main: a function
+    returning 
+      signed int 
+    with body 
+      Declaration of x: a signed int 
+      Declaration of y: a signed int 
+      Declaration of a: a array of         Constant Expression: 10signed int 
+      Declaration of f: a float 
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: swap
+ to: 
+              Name: x
+              Name: y
+
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: twice
+ to: 
+              Name: x
+              Name: y
+
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: ?=?
+ to: 
+              Name: f
+              Applying untyped: 
+                  Name: min
+ to: 
+                  Constant Expression: 4.0                  Constant Expression: 3.0
+      
+        Expression Statement:
+          Applying untyped: 
+              Name: sum
+ to: 
+              Constant Expression: 10              Name: a
+
+
Index: src/Tests/SynTree/Expected/Functions.tst
===================================================================
--- src/Tests/SynTree/Expected/Functions.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Functions.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,586 @@
+h: a function
+    with parameters
+      void 
+    returning 
+      void 
+    with body 
+
+f: a function
+    with parameters
+      function
+          with parameters
+            void 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            void 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      g: a function
+          with parameters
+            void 
+          returning 
+            void 
+
+    returning 
+      signed int 
+    with body 
+
+f1: a function
+    returning 
+      signed int 
+    with body 
+
+f2: a function
+    returning 
+      signed int 
+    with body 
+
+f3: a function
+    returning 
+      pointer to function
+          returning 
+            signed int 
+
+    with body 
+
+f4: a function
+    returning 
+      pointer to signed int 
+    with body 
+
+f5: a function
+    returning 
+      pointer to function
+          returning 
+            signed int 
+
+    with body 
+
+f6: a function
+    returning 
+      pointer to signed int 
+    with body 
+
+f7: a function
+    returning 
+      pointer to signed int 
+    with body 
+
+f8: a function
+    returning 
+      pointer to pointer to signed int 
+    with body 
+
+f9: a function
+    returning 
+      pointer to const pointer to signed int 
+    with body 
+
+f10: a function
+    returning 
+      pointer to open array of signed int 
+    with body 
+
+f11: a function
+    returning 
+      pointer to open array of open array of signed int 
+    with body 
+
+f12: a function
+    returning 
+      pointer to open array of open array of signed int 
+    with body 
+
+fII1: a function
+    with parameters
+      i: a signed int 
+    returning 
+      signed int 
+    with body 
+
+fII2: a function
+    with parameters
+      i: a signed int 
+    returning 
+      const signed int 
+    with body 
+
+fII3: a extern function
+    with parameters
+      i: a signed int 
+    returning 
+      signed int 
+    with body 
+
+fII4: a extern function
+    with parameters
+      i: a signed int 
+    returning 
+      const signed int 
+    with body 
+
+fII5: a function
+    returning 
+      pointer to signed int 
+    with body 
+
+fII6: a function
+    returning 
+      const pointer to signed int 
+    with body 
+
+fII7: a function
+    returning 
+      pointer to const long signed int 
+    with body 
+
+fII8: a static function
+    returning 
+      pointer to const long signed int 
+    with body 
+
+fII9: a static function
+    returning 
+      pointer to const long signed int 
+    with body 
+
+fO1: a function
+    returning 
+      signed int 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+
+fO2: a function
+    returning 
+      signed int 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+
+fO3: a function
+    returning 
+      const signed int 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+
+fO4: a extern function
+    returning 
+      signed int 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+
+fO5: a extern function
+    returning 
+      const signed int 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+
+f: a function
+    returning 
+      nothing 
+
+f: a function
+    returning 
+      signed int 
+
+f: a function
+    with parameters
+      signed int 
+    returning 
+      nothing 
+
+f: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f: a function
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    returning 
+      signed int 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+    with body 
+
+f: a function
+    returning 
+      x: a signed int 
+
+f: a function
+    with parameters
+      x: a signed int 
+    returning 
+      nothing 
+
+f: a function
+    with parameters
+      x: a signed int 
+    returning 
+      x: a signed int 
+
+f: a function
+    returning 
+      x: a signed int 
+    with body 
+
+f: a function
+    with parameters
+      x: a signed int 
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    with parameters
+      x: a signed int 
+    returning 
+      x: a signed int 
+    with body 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+    returning 
+      nothing 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+    returning 
+      signed int 
+      x: a signed int 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+    returning 
+      signed int 
+      x: a signed int 
+    with body 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+      signed int 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      signed int 
+    returning 
+      nothing 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      signed int 
+    returning 
+      signed int 
+      x: a signed int 
+      signed int 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+      signed int 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      signed int 
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      signed int 
+    returning 
+      signed int 
+      x: a signed int 
+      signed int 
+    with body 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    returning 
+      nothing 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    returning 
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+
+f: a function
+    returning 
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    returning 
+      nothing 
+    with body 
+
+f: a function
+    with parameters
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    returning 
+      signed int 
+      x: a signed int 
+      y: a pointer to signed int 
+    with body 
+
+f11: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f12: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f: a function
+    with parameters
+      function
+          with parameters
+            signed int 
+            p: a signed int 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+    returning 
+      signed int 
+    with body 
+      Declaration of p: a pointer to open array of open array of pointer to open array of open array of signed int 
+      Declaration of p: a pointer to open array of open array of pointer to open array of open array of signed int 
+      Declaration of p: a pointer to open array of pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+
+f1: a static function
+    returning 
+      pointer to const signed int 
+    with body 
+
+f2: a static function
+    returning 
+      const signed int 
+    with body 
+
+f3: a inline static function
+    returning 
+      const pointer to signed int 
+    with body 
+
+f4: a inline static function
+    returning 
+      const tuple of types
+          pointer to signed int 
+          signed int 
+
+    with body 
+
+f5: a static function
+    returning 
+      const tuple of types
+          pointer to signed int 
+          const signed int 
+
+    with body 
+
+f: a function
+    with parameters
+      function
+          returning 
+            signed int 
+
+      function
+          returning 
+            pointer to signed int 
+
+      function
+          returning 
+            pointer to pointer to signed int 
+
+      function
+          returning 
+            pointer to const pointer to signed int 
+
+      function
+          returning 
+            const pointer to const pointer to signed int 
+
+      open array of signed int 
+      open array of signed int 
+      open array of pointer to signed int 
+      open array of pointer to signed int 
+      open array of pointer to pointer to signed int 
+      open array of pointer to pointer to signed int 
+      open array of pointer to const pointer to signed int 
+      open array of pointer to const pointer to signed int 
+      open array of const pointer to const pointer to signed int 
+      open array of const pointer to const pointer to signed int 
+    returning 
+      signed int 
+
+f: a function
+    with parameters
+      function
+          returning 
+            signed int 
+
+      function
+          returning 
+            pointer to signed int 
+
+      function
+          returning 
+            pointer to pointer to signed int 
+
+      function
+          returning 
+            pointer to const pointer to signed int 
+
+      function
+          returning 
+            const pointer to const pointer to signed int 
+
+      open array of signed int 
+      open array of signed int 
+      open array of pointer to signed int 
+      open array of pointer to signed int 
+      open array of pointer to pointer to signed int 
+      open array of pointer to pointer to signed int 
+      open array of pointer to const pointer to signed int 
+      open array of pointer to const pointer to signed int 
+      open array of const pointer to const pointer to signed int 
+      open array of const pointer to const pointer to signed int 
+    returning 
+      signed int 
+    with body 
+
+T: a typedef for signed int 
+f: a function
+    with parameters
+      function
+          with parameters
+            instance of type T 
+          returning 
+            instance of type T 
+
+      T: a instance of type T 
+    returning 
+      signed int 
+    with body 
+
Index: src/Tests/SynTree/Expected/IdentFuncDeclarator.tst
===================================================================
--- src/Tests/SynTree/Expected/IdentFuncDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/IdentFuncDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,180 @@
+main: a function
+    returning 
+      signed int 
+    with body 
+      Declaration of f1: a signed int 
+      Declaration of f2: a signed int 
+      Declaration of f3: a pointer to signed int 
+      Declaration of f4: a pointer to pointer to signed int 
+      Declaration of f5: a pointer to const pointer to signed int 
+      Declaration of f6: a const pointer to const pointer to signed int 
+      Declaration of f7: a pointer to signed int 
+      Declaration of f8: a pointer to pointer to signed int 
+      Declaration of f9: a pointer to const pointer to signed int 
+      Declaration of f10: a const pointer to const pointer to signed int 
+      Declaration of f11: a pointer to signed int 
+      Declaration of f12: a pointer to pointer to signed int 
+      Declaration of f13: a pointer to const pointer to signed int 
+      Declaration of f14: a const pointer to const pointer to signed int 
+      Declaration of f15: a open array of signed int 
+      Declaration of f16: a open array of signed int 
+      Declaration of f17: a open array of signed int 
+      Declaration of f18: a open array of signed int 
+      Declaration of f19: a open array of pointer to signed int 
+      Declaration of f20: a open array of pointer to signed int 
+      Declaration of f21: a open array of pointer to pointer to signed int 
+      Declaration of f22: a open array of pointer to pointer to signed int 
+      Declaration of f23: a open array of pointer to const pointer to signed int 
+      Declaration of f24: a open array of pointer to const pointer to signed int 
+      Declaration of f25: a open array of const pointer to const pointer to signed int 
+      Declaration of f26: a open array of const pointer to const pointer to signed int 
+      Declaration of f27: a open array of pointer to signed int 
+      Declaration of f28: a open array of pointer to signed int 
+      Declaration of f29: a open array of pointer to pointer to signed int 
+      Declaration of f30: a open array of pointer to pointer to signed int 
+      Declaration of f31: a open array of pointer to const pointer to signed int 
+      Declaration of f32: a open array of pointer to const pointer to signed int 
+      Declaration of f33: a open array of const pointer to const pointer to signed int 
+      Declaration of f34: a open array of const pointer to const pointer to signed int 
+      Declaration of f35: a open array of pointer to signed int 
+      Declaration of f36: a open array of pointer to signed int 
+      Declaration of f37: a open array of pointer to pointer to signed int 
+      Declaration of f38: a open array of pointer to pointer to signed int 
+      Declaration of f39: a open array of pointer to const pointer to signed int 
+      Declaration of f40: a open array of pointer to const pointer to signed int 
+      Declaration of f41: a open array of const pointer to const pointer to signed int 
+      Declaration of f42: a open array of const pointer to const pointer to signed int 
+      Declaration of f43: a open array of open array of signed int 
+      Declaration of f44: a open array of open array of signed int 
+      Declaration of f45: a open array of open array of signed int 
+      Declaration of f46: a open array of open array of signed int 
+      Declaration of f47: a open array of open array of signed int 
+      Declaration of f48: a open array of open array of signed int 
+      Declaration of f49: a open array of open array of pointer to signed int 
+      Declaration of f50: a open array of open array of pointer to signed int 
+      Declaration of f51: a open array of open array of pointer to pointer to signed int 
+      Declaration of f52: a open array of open array of pointer to pointer to signed int 
+      Declaration of f53: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f54: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f55: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f56: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f57: a open array of open array of pointer to signed int 
+      Declaration of f58: a open array of open array of pointer to signed int 
+      Declaration of f59: a open array of open array of pointer to pointer to signed int 
+      Declaration of f60: a open array of open array of pointer to pointer to signed int 
+      Declaration of f61: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f62: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f63: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f64: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f65: a function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f66: a function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f67: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      Declaration of f68: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to pointer to signed int 
+
+      Declaration of f69: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to const pointer to signed int 
+
+      Declaration of f70: a function
+          with parameters
+            signed int 
+          returning 
+            const pointer to const pointer to signed int 
+
+      Declaration of f71: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      Declaration of f72: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to pointer to signed int 
+
+      Declaration of f73: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to const pointer to signed int 
+
+      Declaration of f74: a function
+          with parameters
+            signed int 
+          returning 
+            const pointer to const pointer to signed int 
+
+      Declaration of f75: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f76: a pointer to pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f77: a pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f78: a const pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f79: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      Declaration of f80: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      Declaration of f81: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            const pointer to function
+                returning 
+                  signed int 
+
+
+
Index: src/Tests/SynTree/Expected/Initialization.tst
===================================================================
--- src/Tests/SynTree/Expected/Initialization.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Initialization.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,33 @@
+x21: a pointer to signed int 
+x22: a signed int 
+x21: a pointer to signed int 
+x22: a signed int 
+y1: a open array of signed int 
+y2: a open array of signed int 
+struct __anonymous0
+    with members
+      w: a tuple of types
+          signed int 
+
+
+a: a instance of struct __anonymous0 
+struct __anonymous1
+    with members
+      a: a open array of signed int 
+      b: a signed int 
+
+w: a open array of instance of struct __anonymous1 
+struct __anonymous3
+    with members
+      f1: a signed int 
+      f2: a signed int 
+      f3: a signed int 
+      struct __anonymous2
+          with members
+            g1: a signed int 
+            g2: a signed int 
+            g3: a signed int 
+
+      f4: a open array of instance of struct __anonymous2 
+
+v7: a instance of struct __anonymous3 
Index: src/Tests/SynTree/Expected/Scope.tst
===================================================================
--- src/Tests/SynTree/Expected/Scope.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Scope.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,115 @@
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+in default case, (shouldn't be here)
+x: a signed int 
+y: a typedef for double 
+t: a typedef for float 
+z: a instance of type y 
+struct __anonymous0
+    with members
+      a: a signed int 
+      b: a double 
+
+u: a type for instance of struct __anonymous0 
+f: a function
+    with parameters
+      y: a signed int 
+    returning 
+      signed int 
+
+q: a instance of type y 
+w: a function
+    with parameters
+      y: a instance of type y 
+      v: a instance of type u 
+    returning 
+      instance of type y 
+    with body 
+      Declaration of x: a type
+        with assertions
+          t: a function
+              with parameters
+                instance of type u 
+              returning 
+                instance of type x 
+
+
+      Declaration of u: a instance of type u 
+      Declaration of z: a instance of type x 
+
+p: a instance of type y 
+context has_u
+    with parameters
+      z: a type
+
+    with members
+      u: a function
+          with parameters
+            instance of type z 
+          returning 
+            instance of type z 
+
+
+q: a function
+    with parameters
+      the_t: a instance of type t 
+    with forall
+      t: a type
+        with assertions
+          instance of context has_u 
+            with parameters
+              instance of type t 
+
+
+    returning 
+      instance of type y 
+    with body 
+      Declaration of y: a instance of type t 
+
+f: a function
+    with parameters
+      p: a instance of type y 
+    returning 
+      instance of type t 
+    with body 
+      Declaration of y: a signed int 
+      Declaration of x: a typedef for char 
+              Declaration of y: a instance of type x 
+        Declaration of z: a typedef for instance of type x 
+                  Declaration of x: a instance of type z 
+          Declaration of y: a typedef for instance of type z 
+          Declaration of z: a instance of type y 
+
+        Declaration of x: a instance of type z 
+
+      Declaration of q: a instance of type x 
+
+g: a function
+    with parameters
+      void 
+    returning 
+      instance of type t 
+    with body 
+      Declaration of x: a typedef for char 
+      Declaration of z: a instance of type x 
+
+q: a function
+    returning 
+      instance of type y 
+    with parameter names
+      i
+    with parameter declarations
+      i: a signed int 
+    with body 
+      
+        Switch on condition: 
+            Name: i
+
+            Case: 
+            .... and 1 conditions 
+                Name: 0
+
+            Case: 
+            .... and 0 conditions 
+
+
Index: src/Tests/SynTree/Expected/StructMember.tst
===================================================================
--- src/Tests/SynTree/Expected/StructMember.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/StructMember.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,69 @@
+T: a typedef for signed int 
+struct S
+    with members
+      m1: a signed int 
+      m2: a signed int 
+      signed int 
+      signed int 
+      signed int 
+      m3: a signed int 
+      m4: a signed int 
+      m5: a signed int 
+      m6: a signed int 
+      m7: a pointer to signed int 
+      m8: a pointer to signed int 
+      m9: a pointer to signed int 
+      m10: a pointer to function
+          returning 
+            signed int 
+
+      m11: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      T: a instance of type T 
+      T: a instance of type T 
+      m12: a pointer to signed int 
+      m13: a pointer to signed int 
+      m14: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      signed int 
+      signed int 
+      signed int 
+      signed int 
+      pointer to signed int 
+      signed int 
+      signed int 
+      pointer to signed int 
+      pointer to signed int 
+      pointer to signed int 
+      pointer to signed int 
+      pointer to signed int 
+      pointer to signed int 
+      pointer to function
+          returning 
+            signed int 
+
+      pointer to pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      instance of type T 
+
+s: a instance of struct S 
+union U
+    with members
+      m1: a open array of signed int 
+      m2: a open array of signed int 
+      m3: a pointer to signed int 
+      m4: a pointer to signed int 
+
+u: a instance of union U 
Index: src/Tests/SynTree/Expected/Tuple.tst
===================================================================
--- src/Tests/SynTree/Expected/Tuple.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Tuple.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,104 @@
+f: a function
+    with parameters
+      signed int 
+      signed int 
+    returning 
+      signed int 
+
+g: a function
+    with parameters
+      signed int 
+      signed int 
+      signed int 
+    returning 
+      signed int 
+
+h: a static function
+    with parameters
+      a: a signed int 
+      b: a signed int 
+      c: a pointer to signed int 
+      d: a open array of char 
+    returning 
+      signed int 
+      signed int 
+      signed int 
+      signed int 
+
+struct inner
+    with members
+      f2: a signed int 
+      f3: a signed int 
+
+struct outer
+    with members
+      f1: a signed int 
+      i: a instance of struct inner 
+      f4: a double 
+
+s: a instance of struct outer 
+sp: a pointer to instance of struct outer 
+t1: a const volatile tuple of types
+    signed int 
+    signed int 
+
+t2: a static const tuple of types
+    signed int 
+    const signed int 
+
+t3: a static const tuple of types
+    signed int 
+    const signed int 
+
+printf: a function
+    with parameters
+      fmt: a pointer to char 
+      and a variable number of other arguments
+    returning 
+      rc: a signed int 
+
+printf: a function
+    with parameters
+      fmt: a pointer to char 
+      and a variable number of other arguments
+    returning 
+      signed int 
+
+f1: a function
+    with parameters
+      w: a signed int 
+    returning 
+      x: a short signed int 
+      y: a unsigned int 
+    with body 
+
+g1: a function
+    returning 
+      r: a tuple of types
+          signed int 
+          char 
+          long signed int 
+          signed int 
+
+    with body 
+      Declaration of x: a short signed int 
+      Declaration of p: a short signed int 
+      Declaration of y: a unsigned int 
+      Declaration of z: a tuple of types
+          signed int 
+          signed int 
+
+
+main: a function
+    with parameters
+      argc: a signed int 
+      argv: a pointer to pointer to char 
+    returning 
+      rc: a signed int 
+    with body 
+      Declaration of a: a signed int 
+      Declaration of b: a signed int 
+      Declaration of c: a signed int 
+      Declaration of d: a signed int 
+      Declaration of t: a instance of struct outer 
+
Index: src/Tests/SynTree/Expected/TypeGenerator.tst
===================================================================
--- src/Tests/SynTree/Expected/TypeGenerator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/TypeGenerator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,116 @@
+context addable
+    with parameters
+      T: a type
+
+    with members
+      ?+?: a function
+          with parameters
+            instance of type T 
+            instance of type T 
+          returning 
+            instance of type T 
+
+
+struct __anonymous0
+    with members
+      data: a instance of type T 
+      next: a pointer to instance of type List 
+        with parameters
+          instance of type T 
+
+
+List: a type for pointer to instance of struct __anonymous0 
+  with parameters
+    T: a type
+      with assertions
+        instance of context addable 
+          with parameters
+            instance of type T 
+
+
+
+  with assertions
+    instance of context addable 
+      with parameters
+        instance of type T 
+
+
+ListOfIntegers: a typedef for instance of type List 
+  with parameters
+    signed int 
+
+li: a instance of type ListOfIntegers 
+f: a function
+    with parameters
+      g: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            instance of type List 
+              with parameters
+                signed int 
+
+
+    returning 
+      signed int 
+
+h: a function
+    with parameters
+      p: a pointer to instance of type List 
+        with parameters
+          signed int 
+
+    returning 
+      signed int 
+
+struct node
+    with parameters
+      T: a type
+        with assertions
+          instance of context addable 
+            with parameters
+              instance of type T 
+
+
+
+    with members
+      data: a instance of type T 
+      next: a pointer to instance of struct node 
+        with parameters
+          instance of type T 
+
+
+List: a type for pointer to instance of struct node 
+  with parameters
+    instance of type T 
+
+  with parameters
+    T: a type
+
+my_list: a instance of type List 
+  with parameters
+    signed int 
+
+Complex: a type
+  with assertions
+    instance of context addable 
+      with parameters
+        instance of type Complex 
+
+
+main: a function
+    returning 
+      signed int 
+    with body 
+      
+        Expression Statement:
+          Cast of:
+            Name: my_list
+
+          to:
+            instance of struct node 
+              with parameters
+                signed int 
+
+
+
Index: src/Tests/SynTree/Expected/Typedef.tst
===================================================================
--- src/Tests/SynTree/Expected/Typedef.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/Typedef.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,85 @@
+T: a typedef for signed int 
+f: a function
+    with parameters
+      void 
+    returning 
+      void 
+    with body 
+      Declaration of T: a function
+          with parameters
+            instance of type T 
+          returning 
+            signed int 
+
+
+struct __anonymous0
+    with members
+      T: a instance of type T 
+
+fred: a instance of struct __anonymous0 
+a: a typedef for pointer to function
+    with parameters
+      signed int 
+      char 
+    returning 
+      signed int 
+
+b: a instance of type a 
+g: a function
+    with parameters
+      void 
+    returning 
+      signed int 
+    with body 
+      Declaration of a: a double 
+
+c: a instance of type a 
+main: a function
+    returning 
+      signed int 
+    with body 
+
+arrayOf10Pointers: a typedef for open array of pointer to signed int 
+x: a instance of type arrayOf10Pointers 
+constantPointer: a typedef for const pointer to signed int 
+funcPtr: a typedef for pointer to function
+    with parameters
+      open array of signed int 
+    returning 
+      signed int 
+
+funcProto: a typedef for function
+    with parameters
+      open array of signed int 
+    returning 
+      signed int 
+
+tupleType: a typedef for tuple of types
+    signed int 
+    signed int 
+
+tupleTypePtr: a typedef for pointer to tuple of types
+    signed int 
+    signed int 
+
+a: a typedef for pointer to signed int 
+b: a typedef for pointer to signed int 
+f: a typedef for function
+    with parameters
+      pointer to signed int 
+    returning 
+      signed int 
+
+g: a typedef for function
+    with parameters
+      pointer to signed int 
+    returning 
+      signed int 
+
+t: a typedef for tuple of types
+    pointer to static open array of signed int 
+
+f: a typedef for function
+    returning 
+      x: a pointer to static open array of signed int 
+
Index: src/Tests/SynTree/Expected/TypedefDeclarator.tst
===================================================================
--- src/Tests/SynTree/Expected/TypedefDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/TypedefDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,270 @@
+f0: a typedef for signed int 
+f1: a typedef for signed int 
+f2: a typedef for signed int 
+f3: a typedef for signed int 
+f4: a typedef for signed int 
+f5: a typedef for signed int 
+f6: a typedef for signed int 
+f7: a typedef for signed int 
+f8: a typedef for signed int 
+f9: a typedef for signed int 
+f10: a typedef for signed int 
+f11: a typedef for signed int 
+f12: a typedef for signed int 
+f13: a typedef for signed int 
+f14: a typedef for signed int 
+f15: a typedef for signed int 
+f16: a typedef for signed int 
+f17: a typedef for signed int 
+f18: a typedef for signed int 
+f19: a typedef for signed int 
+f20: a typedef for signed int 
+f21: a typedef for signed int 
+f22: a typedef for signed int 
+f23: a typedef for signed int 
+f24: a typedef for signed int 
+f25: a typedef for signed int 
+f26: a typedef for signed int 
+f27: a typedef for signed int 
+f28: a typedef for signed int 
+f29: a typedef for signed int 
+f30: a typedef for signed int 
+f31: a typedef for signed int 
+f32: a typedef for signed int 
+f33: a typedef for signed int 
+f34: a typedef for signed int 
+f35: a typedef for signed int 
+f36: a typedef for signed int 
+f37: a typedef for signed int 
+f38: a typedef for signed int 
+f39: a typedef for signed int 
+f40: a typedef for signed int 
+f41: a typedef for signed int 
+f42: a typedef for signed int 
+f43: a typedef for signed int 
+f44: a typedef for signed int 
+f45: a typedef for signed int 
+f46: a typedef for signed int 
+f47: a typedef for signed int 
+f48: a typedef for signed int 
+f49: a typedef for signed int 
+f50: a typedef for signed int 
+f51: a typedef for signed int 
+f52: a typedef for signed int 
+f53: a typedef for signed int 
+f54: a typedef for signed int 
+f55: a typedef for signed int 
+f56: a typedef for signed int 
+f57: a typedef for signed int 
+f58: a typedef for signed int 
+f59: a typedef for signed int 
+f60: a typedef for signed int 
+f61: a typedef for signed int 
+f62: a typedef for signed int 
+f63: a typedef for signed int 
+f64: a typedef for signed int 
+f65: a typedef for signed int 
+f66: a typedef for signed int 
+f67: a typedef for signed int 
+f68: a typedef for signed int 
+f69: a typedef for signed int 
+f70: a typedef for signed int 
+f71: a typedef for signed int 
+f72: a typedef for signed int 
+f73: a typedef for signed int 
+f74: a typedef for signed int 
+f75: a typedef for signed int 
+f76: a typedef for signed int 
+f77: a typedef for signed int 
+f78: a typedef for signed int 
+f79: a typedef for signed int 
+f80: a typedef for signed int 
+f81: a typedef for signed int 
+f82: a typedef for signed int 
+f83: a typedef for signed int 
+f84: a typedef for signed int 
+f85: a typedef for signed int 
+f86: a typedef for signed int 
+f87: a typedef for signed int 
+f88: a typedef for signed int 
+f89: a typedef for signed int 
+main: a function
+    returning 
+      signed int 
+    with body 
+      Declaration of f1: a signed int 
+      Declaration of f2: a signed int 
+      Declaration of f3: a pointer to signed int 
+      Declaration of f4: a pointer to pointer to signed int 
+      Declaration of f5: a pointer to const pointer to signed int 
+      Declaration of f6: a const pointer to const pointer to signed int 
+      Declaration of f7: a pointer to signed int 
+      Declaration of f8: a pointer to pointer to signed int 
+      Declaration of f9: a pointer to const pointer to signed int 
+      Declaration of f10: a const pointer to const pointer to signed int 
+      Declaration of f11: a pointer to signed int 
+      Declaration of f12: a pointer to pointer to signed int 
+      Declaration of f13: a pointer to const pointer to signed int 
+      Declaration of f14: a const pointer to const pointer to signed int 
+      Declaration of f15: a open array of signed int 
+      Declaration of f16: a open array of signed int 
+      Declaration of f17: a open array of signed int 
+      Declaration of f18: a open array of signed int 
+      Declaration of f19: a open array of pointer to signed int 
+      Declaration of f20: a open array of pointer to signed int 
+      Declaration of f21: a open array of pointer to pointer to signed int 
+      Declaration of f22: a open array of pointer to pointer to signed int 
+      Declaration of f23: a open array of pointer to const pointer to signed int 
+      Declaration of f24: a open array of pointer to const pointer to signed int 
+      Declaration of f25: a open array of const pointer to const pointer to signed int 
+      Declaration of f26: a open array of const pointer to const pointer to signed int 
+      Declaration of f27: a open array of pointer to signed int 
+      Declaration of f28: a open array of pointer to signed int 
+      Declaration of f29: a open array of pointer to pointer to signed int 
+      Declaration of f30: a open array of pointer to pointer to signed int 
+      Declaration of f31: a open array of pointer to const pointer to signed int 
+      Declaration of f32: a open array of pointer to const pointer to signed int 
+      Declaration of f33: a open array of const pointer to const pointer to signed int 
+      Declaration of f34: a open array of const pointer to const pointer to signed int 
+      Declaration of f35: a open array of pointer to signed int 
+      Declaration of f36: a open array of pointer to signed int 
+      Declaration of f37: a open array of pointer to pointer to signed int 
+      Declaration of f38: a open array of pointer to pointer to signed int 
+      Declaration of f39: a open array of pointer to const pointer to signed int 
+      Declaration of f40: a open array of pointer to const pointer to signed int 
+      Declaration of f41: a open array of const pointer to const pointer to signed int 
+      Declaration of f42: a open array of const pointer to const pointer to signed int 
+      Declaration of f43: a open array of open array of signed int 
+      Declaration of f44: a open array of open array of signed int 
+      Declaration of f45: a open array of open array of signed int 
+      Declaration of f46: a open array of open array of signed int 
+      Declaration of f47: a open array of open array of signed int 
+      Declaration of f48: a open array of open array of signed int 
+      Declaration of f49: a open array of open array of pointer to signed int 
+      Declaration of f50: a open array of open array of pointer to signed int 
+      Declaration of f51: a open array of open array of pointer to pointer to signed int 
+      Declaration of f52: a open array of open array of pointer to pointer to signed int 
+      Declaration of f53: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f54: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f55: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f56: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f57: a open array of open array of pointer to signed int 
+      Declaration of f58: a open array of open array of pointer to signed int 
+      Declaration of f59: a open array of open array of pointer to pointer to signed int 
+      Declaration of f60: a open array of open array of pointer to pointer to signed int 
+      Declaration of f61: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f62: a open array of open array of pointer to const pointer to signed int 
+      Declaration of f63: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f64: a open array of open array of const pointer to const pointer to signed int 
+      Declaration of f65: a function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f66: a function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f67: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      Declaration of f68: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to pointer to signed int 
+
+      Declaration of f69: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to const pointer to signed int 
+
+      Declaration of f70: a function
+          with parameters
+            signed int 
+          returning 
+            const pointer to const pointer to signed int 
+
+      Declaration of f71: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      Declaration of f72: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to pointer to signed int 
+
+      Declaration of f73: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to const pointer to signed int 
+
+      Declaration of f74: a function
+          with parameters
+            signed int 
+          returning 
+            const pointer to const pointer to signed int 
+
+      Declaration of f75: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f76: a pointer to pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f77: a pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f78: a const pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      Declaration of f79: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      Declaration of f80: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      Declaration of f81: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            const pointer to function
+                returning 
+                  signed int 
+
+
+
Index: src/Tests/SynTree/Expected/TypedefParamDeclarator.tst
===================================================================
--- src/Tests/SynTree/Expected/TypedefParamDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/TypedefParamDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,378 @@
+f0: a typedef for signed int 
+f1: a typedef for signed int 
+f2: a typedef for signed int 
+f3: a typedef for signed int 
+f4: a typedef for signed int 
+f5: a typedef for signed int 
+f6: a typedef for signed int 
+f7: a typedef for signed int 
+f8: a typedef for signed int 
+f9: a typedef for signed int 
+f10: a typedef for signed int 
+f11: a typedef for signed int 
+f12: a typedef for signed int 
+f13: a typedef for signed int 
+f14: a typedef for signed int 
+f15: a typedef for signed int 
+f16: a typedef for signed int 
+f17: a typedef for signed int 
+f18: a typedef for signed int 
+f19: a typedef for signed int 
+f20: a typedef for signed int 
+f21: a typedef for signed int 
+f22: a typedef for signed int 
+f23: a typedef for signed int 
+f24: a typedef for signed int 
+f25: a typedef for signed int 
+f26: a typedef for signed int 
+f27: a typedef for signed int 
+f28: a typedef for signed int 
+f29: a typedef for signed int 
+f30: a typedef for signed int 
+f31: a typedef for signed int 
+f32: a typedef for signed int 
+f33: a typedef for signed int 
+f34: a typedef for signed int 
+f35: a typedef for signed int 
+f36: a typedef for signed int 
+f37: a typedef for signed int 
+f38: a typedef for signed int 
+f39: a typedef for signed int 
+f40: a typedef for signed int 
+f41: a typedef for signed int 
+f42: a typedef for signed int 
+f43: a typedef for signed int 
+f44: a typedef for signed int 
+f45: a typedef for signed int 
+f46: a typedef for signed int 
+f47: a typedef for signed int 
+f48: a typedef for signed int 
+f49: a typedef for signed int 
+f50: a typedef for signed int 
+f51: a typedef for signed int 
+f52: a typedef for signed int 
+f53: a typedef for signed int 
+f54: a typedef for signed int 
+f55: a typedef for signed int 
+f56: a typedef for signed int 
+f57: a typedef for signed int 
+f58: a typedef for signed int 
+f59: a typedef for signed int 
+f60: a typedef for signed int 
+f61: a typedef for signed int 
+f62: a typedef for signed int 
+f63: a typedef for signed int 
+f64: a typedef for signed int 
+f65: a typedef for signed int 
+f66: a typedef for signed int 
+f67: a typedef for signed int 
+f68: a typedef for signed int 
+f69: a typedef for signed int 
+f70: a typedef for signed int 
+f71: a typedef for signed int 
+f72: a typedef for signed int 
+f73: a typedef for signed int 
+f74: a typedef for signed int 
+f75: a typedef for signed int 
+f76: a typedef for signed int 
+f77: a typedef for signed int 
+f78: a typedef for signed int 
+f79: a typedef for signed int 
+f80: a typedef for signed int 
+f81: a typedef for signed int 
+f82: a typedef for signed int 
+f83: a typedef for signed int 
+f84: a typedef for signed int 
+f85: a typedef for signed int 
+f86: a typedef for signed int 
+f87: a typedef for signed int 
+f88: a typedef for signed int 
+f89: a typedef for signed int 
+f90: a typedef for signed int 
+f91: a typedef for signed int 
+f92: a typedef for signed int 
+f93: a typedef for signed int 
+f94: a typedef for signed int 
+f95: a typedef for signed int 
+f96: a typedef for signed int 
+f97: a typedef for signed int 
+f98: a typedef for signed int 
+f99: a typedef for signed int 
+f100: a typedef for signed int 
+f101: a typedef for signed int 
+f102: a typedef for signed int 
+f103: a typedef for signed int 
+f104: a typedef for signed int 
+f105: a typedef for signed int 
+f106: a typedef for signed int 
+f107: a typedef for signed int 
+f108: a typedef for signed int 
+f109: a typedef for signed int 
+f110: a typedef for signed int 
+f111: a typedef for signed int 
+f112: a typedef for signed int 
+f113: a typedef for signed int 
+f114: a typedef for signed int 
+f115: a typedef for signed int 
+f116: a typedef for signed int 
+f117: a typedef for signed int 
+f118: a typedef for signed int 
+f119: a typedef for signed int 
+fred: a function
+    with parameters
+      f1: a signed int 
+      f3: a pointer to signed int 
+      f4: a pointer to pointer to signed int 
+      f5: a pointer to const pointer to signed int 
+      f6: a const pointer to const pointer to signed int 
+      f11: a pointer to signed int 
+      f12: a pointer to pointer to signed int 
+      f13: a pointer to const pointer to signed int 
+      f14: a const pointer to const pointer to signed int 
+      f15: a open array of signed int 
+      f16: a open array of signed int 
+      f19: a open array of pointer to signed int 
+      f20: a open array of pointer to signed int 
+      f21: a open array of pointer to pointer to signed int 
+      f22: a open array of pointer to pointer to signed int 
+      f23: a open array of pointer to const pointer to signed int 
+      f24: a open array of pointer to const pointer to signed int 
+      f25: a open array of const pointer to const pointer to signed int 
+      f26: a open array of const pointer to const pointer to signed int 
+      f35: a open array of pointer to signed int 
+      f36: a open array of pointer to signed int 
+      f37: a open array of pointer to pointer to signed int 
+      f38: a open array of pointer to pointer to signed int 
+      f39: a open array of pointer to const pointer to signed int 
+      f40: a open array of pointer to const pointer to signed int 
+      f41: a open array of const pointer to const pointer to signed int 
+      f42: a open array of const pointer to const pointer to signed int 
+      f43: a open array of open array of signed int 
+      f44: a open array of open array of signed int 
+      f49: a open array of open array of pointer to signed int 
+      f50: a open array of open array of pointer to signed int 
+      f51: a open array of open array of pointer to pointer to signed int 
+      f52: a open array of open array of pointer to pointer to signed int 
+      f53: a open array of open array of pointer to const pointer to signed int 
+      f54: a open array of open array of pointer to const pointer to signed int 
+      f55: a open array of open array of const pointer to const pointer to signed int 
+      f56: a open array of open array of const pointer to const pointer to signed int 
+      f57: a open array of open array of pointer to signed int 
+      f58: a open array of open array of pointer to signed int 
+      f59: a open array of open array of pointer to pointer to signed int 
+      f60: a open array of open array of pointer to pointer to signed int 
+      f61: a open array of open array of pointer to const pointer to signed int 
+      f62: a open array of open array of pointer to const pointer to signed int 
+      f63: a open array of open array of const pointer to const pointer to signed int 
+      f64: a open array of open array of const pointer to const pointer to signed int 
+      f65: a function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      f67: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to signed int 
+
+      f68: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to pointer to signed int 
+
+      f69: a function
+          with parameters
+            signed int 
+          returning 
+            pointer to const pointer to signed int 
+
+      f70: a function
+          with parameters
+            signed int 
+          returning 
+            const pointer to const pointer to signed int 
+
+      f75: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      f76: a pointer to pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      f77: a pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      f78: a const pointer to const pointer to function
+          with parameters
+            signed int 
+          returning 
+            signed int 
+
+      f79: a pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      f80: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            pointer to function
+                returning 
+                  signed int 
+
+
+      f81: a const pointer to function
+          with parameters
+            signed int 
+          returning 
+            const pointer to function
+                returning 
+                  signed int 
+
+
+      f82: a const variable length array of signed int 
+      f83: a const open array of signed int 
+      f84: a static open array of signed int 
+      f85: a const static open array of signed int 
+      function
+          with parameters
+            const variable length array of instance of type f86 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            const open array of instance of type f87 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            static open array of instance of type f88 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            const static open array of instance of type f89 
+          returning 
+            signed int 
+
+      f90: a const variable length array of pointer to signed int 
+      f91: a const open array of pointer to signed int 
+      f92: a static open array of pointer to pointer to signed int 
+      f93: a const static open array of pointer to const pointer to signed int 
+      f94: a const static open array of const pointer to const pointer to signed int 
+      function
+          with parameters
+            const variable length array of instance of type f95 
+          returning 
+            pointer to signed int 
+
+      function
+          with parameters
+            const open array of instance of type f96 
+          returning 
+            pointer to signed int 
+
+      function
+          with parameters
+            static open array of instance of type f97 
+          returning 
+            pointer to pointer to signed int 
+
+      function
+          with parameters
+            const static open array of instance of type f98 
+          returning 
+            pointer to const pointer to signed int 
+
+      function
+          with parameters
+            const static open array of instance of type f99 
+          returning 
+            const pointer to const pointer to signed int 
+
+      f100: a const variable length array of open array of signed int 
+      f101: a const open array of open array of signed int 
+      f102: a static open array of open array of signed int 
+      f103: a const static open array of open array of signed int 
+      function
+          with parameters
+            const variable length array of open array of instance of type f104 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            const open array of open array of instance of type f105 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            static open array of open array of instance of type f106 
+          returning 
+            signed int 
+
+      function
+          with parameters
+            const static open array of open array of instance of type f107 
+          returning 
+            signed int 
+
+      f108: a const variable length array of open array of pointer to signed int 
+      f109: a const open array of open array of pointer to signed int 
+      f110: a static open array of open array of pointer to pointer to signed int 
+      f111: a const static open array of open array of pointer to const pointer to signed int 
+      f112: a const static open array of open array of const pointer to const pointer to signed int 
+      function
+          with parameters
+            const variable length array of open array of instance of type f113 
+          returning 
+            pointer to signed int 
+
+      function
+          with parameters
+            const open array of open array of instance of type f114 
+          returning 
+            pointer to signed int 
+
+      function
+          with parameters
+            static open array of open array of instance of type f115 
+          returning 
+            pointer to pointer to signed int 
+
+      function
+          with parameters
+            const static open array of open array of instance of type f116 
+          returning 
+            pointer to const pointer to signed int 
+
+      function
+          with parameters
+            const static open array of open array of instance of type f117 
+          returning 
+            const pointer to const pointer to signed int 
+
+    returning 
+      signed int 
+    with body 
+
Index: src/Tests/SynTree/Expected/VariableDeclarator.tst
===================================================================
--- src/Tests/SynTree/Expected/VariableDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Expected/VariableDeclarator.tst	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,184 @@
+f1: a signed int 
+f2: a signed int 
+f3: a pointer to signed int 
+f4: a pointer to pointer to signed int 
+f5: a pointer to const pointer to signed int 
+f6: a const pointer to const pointer to signed int 
+f7: a pointer to signed int 
+f8: a pointer to pointer to signed int 
+f9: a pointer to const pointer to signed int 
+f10: a const pointer to const pointer to signed int 
+f11: a pointer to signed int 
+f12: a pointer to pointer to signed int 
+f13: a pointer to const pointer to signed int 
+f14: a const pointer to const pointer to signed int 
+f15: a open array of signed int 
+f16: a open array of signed int 
+f17: a open array of signed int 
+f18: a open array of signed int 
+f19: a open array of pointer to signed int 
+f20: a open array of pointer to signed int 
+f21: a open array of pointer to pointer to signed int 
+f22: a open array of pointer to pointer to signed int 
+f23: a open array of pointer to const pointer to signed int 
+f24: a open array of pointer to const pointer to signed int 
+f25: a open array of const pointer to const pointer to signed int 
+f26: a open array of const pointer to const pointer to signed int 
+f27: a open array of pointer to signed int 
+f28: a open array of pointer to signed int 
+f29: a open array of pointer to pointer to signed int 
+f30: a open array of pointer to pointer to signed int 
+f31: a open array of pointer to const pointer to signed int 
+f32: a open array of pointer to const pointer to signed int 
+f33: a open array of const pointer to const pointer to signed int 
+f34: a open array of const pointer to const pointer to signed int 
+f35: a open array of pointer to signed int 
+f36: a open array of pointer to signed int 
+f37: a open array of pointer to pointer to signed int 
+f38: a open array of pointer to pointer to signed int 
+f39: a open array of pointer to const pointer to signed int 
+f40: a open array of pointer to const pointer to signed int 
+f41: a open array of const pointer to const pointer to signed int 
+f42: a open array of const pointer to const pointer to signed int 
+f43: a open array of open array of signed int 
+f44: a open array of open array of signed int 
+f45: a open array of open array of signed int 
+f46: a open array of open array of signed int 
+f47: a open array of open array of signed int 
+f48: a open array of open array of signed int 
+f49: a open array of open array of pointer to signed int 
+f50: a open array of open array of pointer to signed int 
+f51: a open array of open array of pointer to pointer to signed int 
+f52: a open array of open array of pointer to pointer to signed int 
+f53: a open array of open array of pointer to const pointer to signed int 
+f54: a open array of open array of pointer to const pointer to signed int 
+f55: a open array of open array of const pointer to const pointer to signed int 
+f56: a open array of open array of const pointer to const pointer to signed int 
+f57: a open array of open array of pointer to signed int 
+f58: a open array of open array of pointer to signed int 
+f59: a open array of open array of pointer to pointer to signed int 
+f60: a open array of open array of pointer to pointer to signed int 
+f61: a open array of open array of pointer to const pointer to signed int 
+f62: a open array of open array of pointer to const pointer to signed int 
+f63: a open array of open array of const pointer to const pointer to signed int 
+f64: a open array of open array of const pointer to const pointer to signed int 
+f65: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f66: a function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f67: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to signed int 
+
+f68: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to pointer to signed int 
+
+f69: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to const pointer to signed int 
+
+f70: a function
+    with parameters
+      signed int 
+    returning 
+      const pointer to const pointer to signed int 
+
+f71: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to signed int 
+
+f72: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to pointer to signed int 
+
+f73: a function
+    with parameters
+      signed int 
+    returning 
+      pointer to const pointer to signed int 
+
+f74: a function
+    with parameters
+      signed int 
+    returning 
+      const pointer to const pointer to signed int 
+
+f75: a pointer to function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f76: a pointer to pointer to function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f77: a pointer to const pointer to function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f78: a const pointer to const pointer to function
+    with parameters
+      signed int 
+    returning 
+      signed int 
+
+f79: a pointer to function
+    with parameters
+      signed int 
+    returning 
+      pointer to function
+          returning 
+            signed int 
+
+
+f80: a const pointer to function
+    with parameters
+      signed int 
+    returning 
+      pointer to function
+          returning 
+            signed int 
+
+
+f81: a const pointer to function
+    with parameters
+      signed int 
+    returning 
+      const pointer to function
+          returning 
+            signed int 
+
+
+z: a pointer to open array of double 
+w: a open array of pointer to char 
+v3: a pointer to open array of pointer to open array of pointer to function
+    with parameters
+      pointer to open array of pointer to open array of signed int 
+      pointer to open array of pointer to open array of signed int 
+    returning 
+      pointer to open array of pointer to open array of signed int 
+
Index: src/Tests/SynTree/Forall.c
===================================================================
--- src/Tests/SynTree/Forall.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Forall.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,51 @@
+typedef forall ( type T ) int (*f)( int );
+
+forall( type T )
+    void swap( T left, T right ) {
+	T temp = left;
+	left = right;
+	right = temp;
+    }
+
+context sumable( type T ) {
+    const T 0;
+    T ?+?(T, T);
+    T ?++(T);
+    [T] ?+=?(T,T);
+};
+
+type T1 | { const T1 0; T1 ?+?(T1, T1); T1 ?++(T1); [T1] ?+=?(T1,T1); },
+     T2(type P1, type P2 ),
+     T3 | sumable(T3);
+
+type T2(type P1, type P2) | sumable(T2(P1,P2)) = struct { P1 i; P2 j; };
+
+T2(int, int) w1;
+typedef T2(int, int) w2;
+w2 g2;
+type w3 = T2(int, int);
+w3 g3;
+
+forall( type T | sumable( T ) )
+    T sum( int n, T a[] ) {
+	T total = 0;
+	int i;
+	for ( i = 0; i < n; i += 1 )
+	    total = total + a[i];
+	return total;
+    }
+
+forall( type T | { const T 0; T ?+?(T, T); T ?++(T); [T] ?+=?(T,T); } )
+    T twice( T t ) {
+	return t + t;
+    }
+
+int main() {
+    int x = 1, y = 2, a[10];
+    float f;
+
+    swap( x, y );
+    twice( x, y );
+    f = min( 4.0, 3.0 );
+    sum( 10, a );
+}
Index: src/Tests/SynTree/Functions.c
===================================================================
--- src/Tests/SynTree/Functions.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Functions.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,163 @@
+// ANSI function definitions
+
+void h(void) {}
+
+int f (
+    int (void),
+    int (int),
+    int ((void)),
+    int ((int)),
+    void g(void)
+  ) {
+    (*g)();
+    g();
+    g = h;
+}
+
+int f1() {}
+int (f2()) {}
+int (*f3())() {}
+int *((f4())) {}
+int ((*f5()))() {}
+int *f6() {}
+int *(f7)() {}
+int **f8() {}
+int * const *(f9)() {}
+int (*f10())[] {}
+int (*f11())[][3] {}
+int ((*f12())[])[3] {}
+
+// "implicit int" type specifier (not ANSI)
+
+fII1( int i ) {}
+const fII2( int i ) {}
+extern fII3( int i ) {}
+extern const fII4( int i ) {}
+
+*fII5() {}
+const *fII6() {}
+const long *fII7() {}
+static const long *fII8() {}
+const static long *fII9() {}
+
+// K&R function definitions
+
+fO1( i ) int i; {}
+int fO2( i ) int i; {}
+const fO3( i ) int i; {}
+extern fO4( i ) int i; {}
+extern const fO5( i ) int i; {}
+
+// Cforall extensions
+
+[] f( );
+[int] f( );
+[] f(int);
+[int] f(int);
+[] f( ) {}
+[int] f( ) {}
+[] f(int) {}
+[int] f(int) {}
+
+[int x] f( );
+[] f(int x);
+[int x] f(int x);
+[int x] f( ) {}
+[] f(int x) {}
+[int x] f(int x) {}
+
+[int, int x] f( );
+[] f(int, int x);
+[int, int x] f(int, int x);
+[int, int x] f( ) {}
+[] f(int, int x) {}
+[int, int x] f(int, int x) {}
+
+[int, int x, int] f( );
+[] f(int, int x, int);
+[int, int x, int] f(int, int x, int);
+[int, int x, int] f( ) {}
+[] f(int, int x, int) {}
+[int, int x, int] f(int, int x, int) {}
+
+[int, int x, * int y] f( );
+[] f(int, int x, * int y);
+[int, int x, * int y] f(int, int x, * int y);
+[int, int x, * int y] f( ) {}
+[] f(int, int x, * int y) {}
+[int, int x, * int y] f(int, int x, * int y) {}
+
+[ int ] f11( int ), f12;  // => int f11( int ), f12( int );
+
+[int] f(
+	int ( int, int p ),
+	[int](int)
+    ) {
+    int (*(*p)[][10])[][3];
+    * [][10] * [][3] int p;
+    * [] * [int](int) p;
+}
+
+static const int *f1() {}
+static [ const int ] f2() {}
+static inline [ const * int ] f3() {}
+static inline [ const [ * int, int ] ] f4() {}
+static [ const [ * int, const int ] ] f5() {}
+
+// unnamed parameter
+
+int f(
+    int (),
+
+    int *(),
+    int **(),
+    int * const *(),
+    int * const * const (),
+
+    int ([]),
+    int ([10]),
+
+    int *([]),
+    int *([10]),
+    int **([]),
+    int **([10]),
+    int * const *([]),
+    int * const *([10]),
+    int * const * const ([]),
+    int * const * const ([10])
+    );
+
+int f(
+    int (),
+
+    int *(),
+    int **(),
+    int * const *(),
+    int * const * const (),
+
+    int ([]),
+    int ([10]),
+
+    int *([]),
+    int *([10]),
+    int **([]),
+    int **([10]),
+    int * const *([]),
+    int * const *([10]),
+    int * const * const ([]),
+    int * const * const ([10])
+    ) {
+}
+
+typedef int T;
+
+int f( T (T), T T ) {
+    T (T);
+}
+
+// errors
+
+//int f()[] {}
+//int (f[])() {}
+//int f[]() {}
+//int ((*f15())())[] {}
Index: src/Tests/SynTree/IdentFuncDeclarator.c
===================================================================
--- src/Tests/SynTree/IdentFuncDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/IdentFuncDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,105 @@
+int main() {
+    //int f0[]();
+    //int (f0[])();
+    //int f0()[];
+    //int f0()();
+    //int (*f0)()();
+    //int ((*f0())())[];
+    
+    int f1;
+    int (f2);
+
+    int *f3;
+    int **f4;
+    int * const *f5;
+    int * const * const f6;
+
+    int *(f7);
+    int **(f8);
+    int * const *(f9);
+    int * const * const (f10);
+
+    int (*f11);
+    int (**f12);
+    int (* const *f13);
+    int (* const * const f14);
+
+    int f15[];
+    int f16[10];
+    int (f17[]);
+    int (f18[10]);
+
+    int *f19[];
+    int *f20[10];
+    int **f21[];
+    int **f22[10];
+    int * const *f23[];
+    int * const *f24[10];
+    int * const * const f25[];
+    int * const * const f26[10];
+
+    int *(f27[]);
+    int *(f28[10]);
+    int **(f29[]);
+    int **(f30[10]);
+    int * const *(f31[]);
+    int * const *(f32[10]);
+    int * const * const (f33[]);
+    int * const * const (f34[10]);
+
+    int (*f35[]);
+    int (*f36[10]);
+    int (**f37[]);
+    int (**f38[10]);
+    int (* const *f39[]);
+    int (* const *f40[10]);
+    int (* const * const f41[]);
+    int (* const * const f42[10]);
+
+    int f43[][3];
+    int f44[3][3];
+    int (f45[])[3];
+    int (f46[3])[3];
+    int ((f47[]))[3];
+    int ((f48[3]))[3];
+
+    int *f49[][3];
+    int *f50[3][3];
+    int **f51[][3];
+    int **f52[3][3];
+    int * const *f53[][3];
+    int * const *f54[3][3];
+    int * const * const f55[][3];
+    int * const * const f56[3][3];
+
+    int (*f57[][3]);
+    int (*f58[3][3]);
+    int (**f59[][3]);
+    int (**f60[3][3]);
+    int (* const *f61[][3]);
+    int (* const *f62[3][3]);
+    int (* const * const f63[][3]);
+    int (* const * const f64[3][3]);
+
+    int f65(int);
+    int (f66)(int);
+
+    int *f67(int);
+    int **f68(int);
+    int * const *f69(int);
+    int * const * const f70(int);
+
+    int *(f71)(int);
+    int **(f72)(int);
+    int * const *(f73)(int);
+    int * const * const (f74)(int);
+
+    int (*f75)(int);
+    int (**f76)(int);
+    int (* const *f77)(int);
+    int (* const * const f78)(int);
+
+    int (*(*f79)(int))();
+    int (*(* const f80)(int))();
+    int (* const(* const f81)(int))();
+}
Index: src/Tests/SynTree/IdentFuncParamDeclarator.c
===================================================================
--- src/Tests/SynTree/IdentFuncParamDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/IdentFuncParamDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,150 @@
+int fred(
+    //int f0[](),
+    //int (f0[])(),
+    //int f0()[],
+    //int f0()(),
+    //int (*f0)()(),
+    //int ((*f0())())[],
+    
+    int f1,
+    int (f2),
+
+    int *f3,
+    int **f4,
+    int * const *f5,
+    int * const * const f6,
+
+    int *(f7),
+    int **(f8),
+    int * const *(f9),
+    int * const * const (f10),
+
+    int (*f11),
+    int (**f12),
+    int (* const *f13),
+    int (* const * const f14),
+
+    int f15[],
+    int f16[10],
+    int (f17[]),
+    int (f18[10]),
+
+    int *f19[],
+    int *f20[10],
+    int **f21[],
+    int **f22[10],
+    int * const *f23[],
+    int * const *f24[10],
+    int * const * const f25[],
+    int * const * const f26[10],
+
+    int *(f27[]),
+    int *(f28[10]),
+    int **(f29[]),
+    int **(f30[10]),
+    int * const *(f31[]),
+    int * const *(f32[10]),
+    int * const * const (f33[]),
+    int * const * const (f34[10]),
+
+    int (*f35[]),
+    int (*f36[10]),
+    int (**f37[]),
+    int (**f38[10]),
+    int (* const *f39[]),
+    int (* const *f40[10]),
+    int (* const * const f41[]),
+    int (* const * const f42[10]),
+
+    int f43[][3],
+    int f44[3][3],
+    int (f45[])[3],
+    int (f46[3])[3],
+    int ((f47[]))[3],
+    int ((f48[3]))[3],
+
+    int *f49[][3],
+    int *f50[3][3],
+    int **f51[][3],
+    int **f52[3][3],
+    int * const *f53[][3],
+    int * const *f54[3][3],
+    int * const * const f55[][3],
+    int * const * const f56[3][3],
+
+    int (*f57[][3]),
+    int (*f58[3][3]),
+    int (**f59[][3]),
+    int (**f60[3][3]),
+    int (* const *f61[][3]),
+    int (* const *f62[3][3]),
+    int (* const * const f63[][3]),
+    int (* const * const f64[3][3]),
+
+    int f65(int),
+    int (f66)(int),
+
+    int *f67(int),
+    int **f68(int),
+    int * const *f69(int),
+    int * const * const f70(int),
+
+    int *(f71)(int),
+    int **(f72)(int),
+    int * const *(f73)(int),
+    int * const * const (f74)(int),
+
+    int (*f75)(int),
+    int (**f76)(int),
+    int (* const *f77)(int),
+    int (* const * const f78)(int),
+
+    int (*(*f79)(int))(),
+    int (*(* const f80)(int))(),
+    int (* const(* const f81)(int))(),
+
+    int f82[const *],
+    int f83[const 3],
+    int f84[static 3],
+    int f85[static const 3],
+
+    int (f86[const *]),
+    int (f87[const 3]),
+    int (f88[static 3]),
+    int (f89[static const 3]),
+
+    int *f90[const *],
+    int *f91[const 3],
+    int **f92[static 3],
+    int * const *f93[static const 3],
+    int * const * const f94[static const 3],
+
+    int *(f95[const *]),
+    int *(f96[const 3]),
+    int **(f97[static 3]),
+    int * const *(f98[static const 3]),
+    int * const * const (f99[static const 3]),
+
+    int f100[const *][3],
+    int f101[const 3][3],
+    int f102[static 3][3],
+    int f103[static const 3][3],
+
+    int (f104[const *][3]),
+    int (f105[const 3][3]),
+    int (f106[static 3][3]),
+    int (f107[static const 3][3]),
+
+    int *f108[const *][3],
+    int *f109[const 3][3],
+    int **f110[static 3][3],
+    int * const *f111[static const 3][3],
+    int * const * const f112[static const 3][3],
+
+    int *(f113[const *][3]),
+    int *(f114[const 3][3]),
+    int **(f115[static 3][3]),
+    int * const *(f116[static const 3][3]),
+    int * const * const (f117[static const 3][3])
+    ) {
+}
Index: src/Tests/SynTree/Initialization.c
===================================================================
--- src/Tests/SynTree/Initialization.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Initialization.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,27 @@
+// Cforall extensions
+
+int * x21 = 0, x22 = 0;
+int * x21 = 0, x22 = 0;
+
+[20] int y1, y2 = { 1, 2, 3 };
+
+// designators
+
+struct {
+    [int] w;
+} a = { .w : [2] };
+
+struct { int a[3], b; } w [] = { [0].a : {1}, [0].b : 1, [1].a[0] : 2 };
+
+struct {
+    int f1, f2, f3;
+    struct { int g1, g2, g3; } f4[4];
+} v7 = {
+    .f1 : 4,
+    f2 : 3,
+    .f4[2] : {
+	.g1 : 3,
+	g3 : 0,
+    },
+    .f4[3].g3 : 7,
+};
Index: src/Tests/SynTree/Makefile
===================================================================
--- src/Tests/SynTree/Makefile	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Makefile	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,2 @@
+all:
+	sh run-tests.sh
Index: src/Tests/SynTree/Scope.c
===================================================================
--- src/Tests/SynTree/Scope.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Scope.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,69 @@
+int x;
+typedef double y;
+typedef float t;
+y z;
+type u = struct { int a; double b; };
+int f( int y );
+y q;
+
+y w(y y, u v) {
+  type x | { x t(u); };
+  u u = y;
+  x z = t(u);
+}
+
+y p;
+
+context has_u( type z )
+{
+  z u(z);
+};
+
+forall( type t | has_u( t ) )
+y q( t the_t )
+{
+  t y = u( the_t );
+}
+
+t f( y p ) {
+  int y;
+  typedef char x;
+
+  {
+    x y;
+    typedef x z;
+
+    {
+      z x;
+      typedef z y;
+      y z = x;
+    }
+
+    z x = y;
+  }
+
+  x q = y;
+}
+
+t g( void ) {
+  typedef char x;
+  try {
+    some_func();
+  } catch ( x x ) {
+    t y = x;
+  }
+  x z;
+}
+
+y q(i)
+    int i;
+{
+  switch (i) {
+    y q = i;
+  case 0:
+    return q;
+  default:
+    return i;
+  }
+}
+
Index: src/Tests/SynTree/ScopeErrors.c
===================================================================
--- src/Tests/SynTree/ScopeErrors.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/ScopeErrors.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,26 @@
+int thisIsAnError;
+int thisIsAnError;
+
+int thisIsNotAnError;
+float thisIsNotAnError;
+
+int thisIsAlsoNotAnError()
+{
+  int thisIsNotAnError;
+}
+
+int thisIsAlsoNotAnError( double x )
+{
+}
+
+double thisIsStillNotAnError( double );
+double thisIsStillNotAnError( double );
+
+double butThisIsAnError( double )
+{
+}
+
+double butThisIsAnError( double )
+{
+}
+
Index: src/Tests/SynTree/StructMember.c
===================================================================
--- src/Tests/SynTree/StructMember.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/StructMember.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,40 @@
+typedef int T;
+
+struct S {
+    int m1:3, m2:4;
+    int :2;
+    int :3, :4;
+    int m3;
+    int m4, m5, m6;
+    int *m7, *m8, *m9;
+    int (*m10)();
+    int *(*m11)(int);
+    T T;
+    T (T);
+
+// Cforall extensions
+
+    * int m12, m13;
+    * [ * int ] (int) m14;
+    int ;
+    int , , ;
+    int * , , ;
+    int *, *, *;
+    * int , , ;
+    int (*)();
+    int (**)( int );
+    T ;
+
+// errors
+
+//    void f(void);
+};
+
+struct S s;
+
+union U {
+    [5] int m1;
+    int m2[5];
+    * int m3;
+    int *m4;
+} u;
Index: src/Tests/SynTree/Tuple.c
===================================================================
--- src/Tests/SynTree/Tuple.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Tuple.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,62 @@
+int f( int, int );
+int g( int, int, int );
+static [ int, int, int, int ] h( int a, int b, * int c, [] char d );
+
+struct inner {
+    int f2, f3;
+};
+
+struct outer {
+    int f1;
+    struct inner i;
+    double f4;
+} s, *sp;
+
+const volatile [ int, int ] t1;
+static const [ int, const int ] t2;
+const static [ int, const int ] t3;
+
+[ int rc ] printf( * char fmt, ... );
+int printf( char *fmt, ... );
+
+[ short x, unsigned y ] f1( int w ) {
+    [ y, x ] = [ x, y ] = [ w, 23 ];
+}
+
+[ [ int, char, long, int ] r ] g1() {
+    short x, p;
+    unsigned int y;
+    [ int, int ] z;
+
+    [ x, y, z ] = [ p, f( 17 ), 3 ];
+    r = [ x, y, z ];
+}
+
+[ int rc ] main( int argc, ** char argv ) {
+    int a, b, c, d;
+    struct outer t = { .[ f1,f4 ] : [ 1,7.0 ] };
+    f( [ 3,5 ] );
+    g( [ 3,5 ], 3 );
+    f( t1 );
+    g( t1, 3 );
+    [ 3,5 ];
+    [ a,b ] = 3;
+    [ a,b ] = [ 4.6 ];
+    [ a,b ] = [ c,d ] = [ 3,5 ];
+    [ a,b,[ c ] ] = [ 2,[ a,b ] ];
+    [ a,b ] = 3 > 4 ? [ b,6 ] : [ 7,8 ];
+
+    t1 = [ a,b ];
+    t1 = t2 = [ a,b ];
+    [ a,b ] = [ c,d ] = d += c += 1;
+    [ a,b ] = [ c,d ] = t1;
+    [ a,b ] = t1 = [ c,d ];
+    [ a,b ] = t1 = t2 = [ c,d ];
+    t1 = [ 3,4 ] = [ 3,4 ] = t1 = [ 3,4 ];
+
+    s.[ f1, i.[ f2, f3 ], f4 ] = [ 11, 12, 13, 3.14159 ];
+    s.[ f1, i.[ f2, f3 ], f4 ] = h( 3, 3, 0, "abc" );
+    sp->[ f4,f1 ] = sp->[ f1,f4 ];
+    printf( "expecting 3, 17, 23, 4; got %d, %d, %d, %d\n", s.[ f4, i.[ f3,f2 ], f1 ] );
+    rc = 0;
+}
Index: src/Tests/SynTree/TypeGenerator.c
===================================================================
--- src/Tests/SynTree/TypeGenerator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/TypeGenerator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,19 @@
+context addable(type T) {
+   T ?+?(T,T);
+};
+
+type List(type T | addable(T) ) | addable(T) = struct { T data; List(T) *next; } *;
+typedef List(int) ListOfIntegers;
+ListOfIntegers li;
+int f( List(int) ((*g))(int) );
+[int] h( * List(int) p ); // new declaration syntax
+
+struct(type T | addable(T) ) node { T data; struct(T) node *next; };
+type List(type T) = struct(T) node *;
+List(int) my_list;
+
+type Complex | addable(Complex);
+
+int main() {
+    (struct(int) node)my_list;
+}
Index: src/Tests/SynTree/Typedef.c
===================================================================
--- src/Tests/SynTree/Typedef.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/Typedef.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,41 @@
+typedef int T;
+
+void f( void ) {
+    int T( T );
+    T( 3 );
+}
+
+struct {
+    T (T);
+} fred = { 3 };
+
+typedef int (*a)(int, char);
+a b;
+
+int g(void) {
+    double a;
+}
+a c;
+
+// typedef x = 3, y = 3;  /* GCC */
+
+// x p;
+// y q;
+
+int main() {
+//    typedef z = p = 3;
+}
+
+/* new-style function definitions */
+
+typedef [10] * int arrayOf10Pointers;
+arrayOf10Pointers x;
+typedef const * int constantPointer;
+typedef * [ int ]( [] int ) funcPtr;
+typedef [ int ] funcProto( []  int );
+typedef [ int, int ] tupleType;
+typedef * [ int, int ] tupleTypePtr;
+typedef * int a, b;
+typedef [ int ] f( * int ), g;
+typedef [ * [static 10] int ] t;
+typedef [ * [static 10] int x ] f();
Index: src/Tests/SynTree/TypedefDeclarator.c
===================================================================
--- src/Tests/SynTree/TypedefDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/TypedefDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,116 @@
+typedef int
+     f0,  f1,  f2,  f3,  f4,  f5,  f6,  f7,  f8,  f9,
+    f10, f11, f12, f13, f14, f15, f16, f17, f18, f19,
+    f20, f21, f22, f23, f24, f25, f26, f27, f28, f29,
+    f30, f31, f32, f33, f34, f35, f36, f37, f38, f39,
+    f40, f41, f42, f43, f44, f45, f46, f47, f48, f49,
+    f50, f51, f52, f53, f54, f55, f56, f57, f58, f59,
+    f60, f61, f62, f63, f64, f65, f66, f67, f68, f69,
+    f70, f71, f72, f73, f74, f75, f76, f77, f78, f79,
+    f80, f81, f82, f83, f84, f85, f86, f87, f88, f89;
+
+int main() {
+    //int f0[]();
+    //int (f0[])();
+    //int f0()[];
+    //int f0()();
+    //int (*f0)()();
+    //int ((*f0())())[];
+    
+    int f1;
+    int (f2);
+
+    int *f3;
+    int **f4;
+    int * const *f5;
+    int * const * const f6;
+
+    int *(f7);
+    int **(f8);
+    int * const *(f9);
+    int * const * const (f10);
+
+    int (*f11);
+    int (**f12);
+    int (* const *f13);
+    int (* const * const f14);
+
+    int f15[];
+    int f16[10];
+    int (f17[]);
+    int (f18[10]);
+
+    int *f19[];
+    int *f20[10];
+    int **f21[];
+    int **f22[10];
+    int * const *f23[];
+    int * const *f24[10];
+    int * const * const f25[];
+    int * const * const f26[10];
+
+    int *(f27[]);
+    int *(f28[10]);
+    int **(f29[]);
+    int **(f30[10]);
+    int * const *(f31[]);
+    int * const *(f32[10]);
+    int * const * const (f33[]);
+    int * const * const (f34[10]);
+
+    int (*f35[]);
+    int (*f36[10]);
+    int (**f37[]);
+    int (**f38[10]);
+    int (* const *f39[]);
+    int (* const *f40[10]);
+    int (* const * const f41[]);
+    int (* const * const f42[10]);
+
+    int f43[][3];
+    int f44[3][3];
+    int (f45[])[3];
+    int (f46[3])[3];
+    int ((f47[]))[3];
+    int ((f48[3]))[3];
+
+    int *f49[][3];
+    int *f50[3][3];
+    int **f51[][3];
+    int **f52[3][3];
+    int * const *f53[][3];
+    int * const *f54[3][3];
+    int * const * const f55[][3];
+    int * const * const f56[3][3];
+
+    int (*f57[][3]);
+    int (*f58[3][3]);
+    int (**f59[][3]);
+    int (**f60[3][3]);
+    int (* const *f61[][3]);
+    int (* const *f62[3][3]);
+    int (* const * const f63[][3]);
+    int (* const * const f64[3][3]);
+
+    int f65(int);
+    int (f66)(int);
+
+    int *f67(int);
+    int **f68(int);
+    int * const *f69(int);
+    int * const * const f70(int);
+
+    int *(f71)(int);
+    int **(f72)(int);
+    int * const *(f73)(int);
+    int * const * const (f74)(int);
+
+    int (*f75)(int);
+    int (**f76)(int);
+    int (* const *f77)(int);
+    int (* const * const f78)(int);
+
+    int (*(*f79)(int))();
+    int (*(* const f80)(int))();
+    int (* const(* const f81)(int))();
+}
Index: src/Tests/SynTree/TypedefParamDeclarator.c
===================================================================
--- src/Tests/SynTree/TypedefParamDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/TypedefParamDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,150 @@
+typedef int
+     f0,   f1,   f2,   f3,   f4,   f5,   f6,   f7,   f8,   f9,
+    f10,  f11,  f12,  f13,  f14,  f15,  f16,  f17,  f18,  f19,
+    f20,  f21,  f22,  f23,  f24,  f25,  f26,  f27,  f28,  f29,
+    f30,  f31,  f32,  f33,  f34,  f35,  f36,  f37,  f38,  f39,
+    f40,  f41,  f42,  f43,  f44,  f45,  f46,  f47,  f48,  f49,
+    f50,  f51,  f52,  f53,  f54,  f55,  f56,  f57,  f58,  f59,
+    f60,  f61,  f62,  f63,  f64,  f65,  f66,  f67,  f68,  f69,
+    f70,  f71,  f72,  f73,  f74,  f75,  f76,  f77,  f78,  f79,
+    f80,  f81,  f82,  f83,  f84,  f85,  f86,  f87,  f88,  f89,
+    f90,  f91,  f92,  f93,  f94,  f95,  f96,  f97,  f98,  f99,
+    f100, f101, f102, f103, f104, f105, f106, f107, f108, f109,
+    f110, f111, f112, f113, f114, f115, f116, f117, f118, f119;
+
+int fred(
+/*
+    //int f0[](),
+    //int (f0[])(),
+    //int f0()[],
+    //int f0()(),
+    //int (*f0)()(),
+    //int ((*f0())())[],
+*/
+    int f1,
+
+    int *f3,
+    int **f4,
+    int * const *f5,
+    int * const * const f6,
+
+    int (*f11),
+    int (**f12),
+    int (* const *f13),
+    int (* const * const f14),
+
+    int f15[],
+    int f16[10],
+
+    int *f19[],
+    int *f20[10],
+    int **f21[],
+    int **f22[10],
+    int * const *f23[],
+    int * const *f24[10],
+    int * const * const f25[],
+    int * const * const f26[10],
+
+    int (*f35[]),
+    int (*f36[10]),
+    int (**f37[]),
+    int (**f38[10]),
+    int (* const *f39[]),
+    int (* const *f40[10]),
+    int (* const * const f41[]),
+    int (* const * const f42[10]),
+
+    int f43[][3],
+    int f44[3][3],
+/*
+    int (f45[])[3],
+    int (f46[3])[3],
+    int ((f47[]))[3],
+    int ((f48[3]))[3],
+*/
+    int *f49[][3],
+    int *f50[3][3],
+    int **f51[][3],
+    int **f52[3][3],
+    int * const *f53[][3],
+    int * const *f54[3][3],
+    int * const * const f55[][3],
+    int * const * const f56[3][3],
+
+    int (*f57[][3]),
+    int (*f58[3][3]),
+    int (**f59[][3]),
+    int (**f60[3][3]),
+    int (* const *f61[][3]),
+    int (* const *f62[3][3]),
+    int (* const * const f63[][3]),
+    int (* const * const f64[3][3]),
+
+    int f65(int),
+/*
+    int (f66)(int),
+*/
+    int *f67(int),
+    int **f68(int),
+    int * const *f69(int),
+    int * const * const f70(int),
+/*
+    int *(f71)(int),
+    int **(f72)(int),
+    int * const *(f73)(int),
+    int * const * const (f74)(int),
+*/
+    int (*f75)(int),
+    int (**f76)(int),
+    int (* const *f77)(int),
+    int (* const * const f78)(int),
+
+    int (*(*f79)(int))(),
+    int (*(* const f80)(int))(),
+    int (* const(* const f81)(int))(),
+
+    int f82[const *],
+    int f83[const 3],
+    int f84[static 3],
+    int f85[static const 3],
+
+    int (f86[const *]),
+    int (f87[const 3]),
+    int (f88[static 3]),
+    int (f89[static const 3]),
+
+    int *f90[const *],
+    int *f91[const 3],
+    int **f92[static 3],
+    int * const *f93[static const 3],
+    int * const * const f94[static const 3],
+
+    int *(f95[const *]),
+    int *(f96[const 3]),
+    int **(f97[static 3]),
+    int * const *(f98[static const 3]),
+    int * const * const (f99[static const 3]),
+
+    int f100[const *][3],
+    int f101[const 3][3],
+    int f102[static 3][3],
+    int f103[static const 3][3],
+
+    int (f104[const *][3]),
+    int (f105[const 3][3]),
+    int (f106[static 3][3]),
+    int (f107[static const 3][3]),
+
+    int *f108[const *][3],
+    int *f109[const 3][3],
+    int **f110[static 3][3],
+    int * const *f111[static const 3][3],
+    int * const * const f112[static const 3][3],
+
+    int *(f113[const *][3]),
+    int *(f114[const 3][3]),
+    int **(f115[static 3][3]),
+    int * const *(f116[static const 3][3]),
+    int * const * const (f117[static const 3][3])
+    ) {
+}
Index: src/Tests/SynTree/VariableDeclarator.c
===================================================================
--- src/Tests/SynTree/VariableDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/VariableDeclarator.c	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,115 @@
+int f1;
+int (f2);
+
+int *f3;
+int **f4;
+int * const *f5;
+int * const * const f6;
+
+int *(f7);
+int **(f8);
+int * const *(f9);
+int * const * const (f10);
+
+int (*f11);
+int (**f12);
+int (* const *f13);
+int (* const * const f14);
+
+int f15[];
+int f16[10];
+int (f17[]);
+int (f18[10]);
+
+int *f19[];
+int *f20[10];
+int **f21[];
+int **f22[10];
+int * const *f23[];
+int * const *f24[10];
+int * const * const f25[];
+int * const * const f26[10];
+
+int *(f27[]);
+int *(f28[10]);
+int **(f29[]);
+int **(f30[10]);
+int * const *(f31[]);
+int * const *(f32[10]);
+int * const * const (f33[]);
+int * const * const (f34[10]);
+
+int (*f35[]);
+int (*f36[10]);
+int (**f37[]);
+int (**f38[10]);
+int (* const *f39[]);
+int (* const *f40[10]);
+int (* const * const f41[]);
+int (* const * const f42[10]);
+
+int f43[][3];
+int f44[3][3];
+int (f45[])[3];
+int (f46[3])[3];
+int ((f47[]))[3];
+int ((f48[3]))[3];
+
+int *f49[][3];
+int *f50[3][3];
+int **f51[][3];
+int **f52[3][3];
+int * const *f53[][3];
+int * const *f54[3][3];
+int * const * const f55[][3];
+int * const * const f56[3][3];
+
+int (*f57[][3]);
+int (*f58[3][3]);
+int (**f59[][3]);
+int (**f60[3][3]);
+int (* const *f61[][3]);
+int (* const *f62[3][3]);
+int (* const * const f63[][3]);
+int (* const * const f64[3][3]);
+
+int f65(int);
+int (f66)(int);
+
+int *f67(int);
+int **f68(int);
+int * const *f69(int);
+int * const * const f70(int);
+
+int *(f71)(int);
+int **(f72)(int);
+int * const *(f73)(int);
+
+int * const * const (f74)(int);
+
+int (*f75)(int);
+int (**f76)(int);
+int (* const *f77)(int);
+int (* const * const f78)(int);
+
+int (*(*f79)(int))();
+int (*(* const f80)(int))();
+int (* const(* const f81)(int))();
+
+// errors
+
+//int fe0[]();				// array of functions
+//int (fe1[])();				// array of functions
+//int fe2()[];				// returning an array
+//int fe3()();				// returning a function
+//int (*fe4)()();				// returning a function
+//int ((*fe5())())[];			// returning an array
+
+// Cforall extensions
+
+* [20] double z;
+[20] * char w;
+
+// function pointer
+
+*[]*[]* [ *[]*[] int ]( *[]*[] int, *[]*[] int ) v3;
Index: src/Tests/SynTree/make-rules
===================================================================
--- src/Tests/SynTree/make-rules	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/make-rules	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,21 @@
+CFA = ../../cfa-cpp
+
+DIFF = diff#/software/gnu/bin/diff
+
+# Basic SynTree printing
+EXPECTED := ${wildcard $(EXPECTDIR)/*.tst}
+TESTS := $(EXPECTED:$(EXPECTDIR)/%=$(OUTPUTDIR)/%)
+TEST_IN := $(TESTS:.tst=.c)
+
+$(OUTPUTDIR)/%.tst:%.c $(CFA)
+	$(CFA) $(CFAOPT) < $< > $@ 2>&1
+
+$(OUTPUTDIR)/report: $(TESTS) $(EXPECTED)
+	rm -f $@
+	@for i in $(TESTS); do \
+	  echo "---"`basename $$i`"---" | tee -a $@; \
+	  $(DIFF) -B -w $(EXPECTDIR)/`basename $$i` $$i | tee -a $@; \
+	done
+
+clean:
+	rm -rf $(OUTPUTDIR)
Index: src/Tests/SynTree/run-tests.sh
===================================================================
--- src/Tests/SynTree/run-tests.sh	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
+++ src/Tests/SynTree/run-tests.sh	(revision 843054c23fcb725d2486e5e42e91b3741bc523b8)
@@ -0,0 +1,10 @@
+#!/bin/sh -v
+
+dotest() {
+  mkdir -p Output$1
+  OUTPUTDIR=Output$1 EXPECTDIR=Expected$1 CFAOPT=$2 make -f make-rules $3
+}
+
+dotest "" -ns "$*"
+dotest -SymTab -nm "$*"
+#dotest -Validate -v "$*"
