diff --git a/cesyms/cesyms.d b/cesyms/cesyms.d
index 7730093e..8af9a501 100644
--- a/cesyms/cesyms.d
+++ b/cesyms/cesyms.d
@@ -44,7 +44,11 @@ void main(string[] args)
     ubyte[] source;
     if (args.length == 1)
     {
-        foreach(buff; stdin.byChunk(1024))
+        version(runnable_module)
+        {
+            source = cast(ubyte[]) read(__FILE__, size_t.max);
+        }
+        else foreach(buff; stdin.byChunk(1024))
             source ~= buff;
     }
     else if (args.length == 2)
@@ -287,21 +291,7 @@ class SymbolListBuilder : ASTVisitor
     /// returns a new symbol if the declarator is based on a Token named "name".
     final Symbol * addDeclaration(DT)(DT adt)
     {
-        static if
-        (
-            is(DT == const(EponymousTemplateDeclaration)) ||
-            is(DT == const(AnonymousEnumMember))    ||
-            is(DT == const(AliasInitializer))       ||
-            is(DT == const(ClassDeclaration))       ||
-            is(DT == const(Declarator))             ||
-            is(DT == const(EnumDeclaration))        ||
-            is(DT == const(FunctionDeclaration))    ||
-            is(DT == const(InterfaceDeclaration))   ||
-            is(DT == const(StructDeclaration))      ||
-            is(DT == const(TemplateDeclaration))    ||
-            is(DT == const(UnionDeclaration))
-            
-        )
+        static if (__traits(hasMember, DT, "name"))
         {
             count++;
             auto result = construct!Symbol;
@@ -311,8 +301,7 @@ class SymbolListBuilder : ASTVisitor
             parent.subs ~= result;
             return result;
         }
-        
-        version(none) assert(0, "addDeclaration no implemented for " ~ DT.stringof);
+        else static assert(0, "addDeclaration no implemented for " ~ DT.stringof);
     }
     
     /// visitor implementation if the declarator is based on a Token named "name".
@@ -347,12 +336,23 @@ class SymbolListBuilder : ASTVisitor
         // why is initializers an array ?
         if (decl.initializers.length > 0)
             namedVisitorImpl!(AliasInitializer, SymbolType._alias)(decl.initializers[0]);  
-    }   
-    
-    final override void visit(const AnonymousEnumDeclaration decl) 
+    }
+
+    final override void visit(const AnonymousEnumMember decl)
     {
-        if (decl.members.length) foreach(mem; decl.members)
-            namedVisitorImpl!(AnonymousEnumMember, SymbolType._enum)(mem);
+        namedVisitorImpl!(AnonymousEnumMember, SymbolType._enum)(decl);
+    }
+
+    final override void visit(const AnonymousEnumDeclaration decl)
+    {
+        decl.accept(this);
+    }
+
+    final override void visit(const AutoDeclaration decl)
+    {
+        otherVisitorImpl(SymbolType._enum, decl.identifiers[0].text,
+            decl.identifiers[0].line, decl.identifiers[0].column);
+        decl.accept(this);
     }
      
     final override void visit(const ClassDeclaration decl) 
@@ -434,7 +434,9 @@ class SymbolListBuilder : ASTVisitor
     final override void visit(const VariableDeclaration decl) 
     {
         foreach(elem; decl.declarators)
-            namedVisitorImpl!(Declarator, SymbolType._variable, false)(elem);  
+            namedVisitorImpl!(Declarator, SymbolType._variable, false)(elem);
+        if (decl.autoDeclaration)
+            visit(decl.autoDeclaration);
     }
     
     final override void visit(const StaticConstructor decl)