Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 61802744b2d902f9f63f386e3ef6840292ea6bbc)
+++ src/SynTree/Declaration.h	(revision f135b50a1177372bc7dd5a2dcf75591c4b6ee098)
@@ -119,5 +119,5 @@
   public:
 	Type * type;
-	Initializer * init;
+	Initializer * init; // For Enum, the init is a pointer that contain the enum value; see Parser::TypeData::buildEnum
 	Expression * bitfieldWidth;
 
@@ -335,5 +335,8 @@
 	typedef AggregateDecl Parent;
   public:
-	EnumDecl( const std::string & name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ) {}
+	EnumDecl( const std::string & name,
+	 const std::list< Attribute * > & attributes = std::list< class Attribute * >(),
+	  LinkageSpec::Spec linkage = LinkageSpec::Cforall,
+	  Type * baseType = nullptr ) : Parent( name, attributes, linkage ) , base( baseType ){}
 	EnumDecl( const EnumDecl & other ) : Parent( other ) {}
 
@@ -344,6 +347,8 @@
 	virtual void accept( Visitor & v ) const override { v.visit( this ); }
 	virtual Declaration * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
-  private:
+	Type * base;
 	std::unordered_map< std::string, long long int > enumValues;
+  private:
+	// std::unordered_map< std::string, long long int > enumValues;
 	virtual const char * typeString() const override;
 };
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 61802744b2d902f9f63f386e3ef6840292ea6bbc)
+++ src/SynTree/Visitor.h	(revision f135b50a1177372bc7dd5a2dcf75591c4b6ee098)
@@ -35,5 +35,5 @@
 	virtual void visit( UnionDecl * node ) { visit( const_cast<const UnionDecl *>(node) ); }
 	virtual void visit( const UnionDecl * aggregateDecl ) = 0;
-	virtual void visit( EnumDecl * node ) { visit( const_cast<const EnumDecl *>(node) ); }
+	virtual void visit( EnumDecl * node ) { visit( const_cast<const EnumDecl *>(node) ); } // Marker 1
 	virtual void visit( const EnumDecl * aggregateDecl ) = 0;
 	virtual void visit( TraitDecl * node ) { visit( const_cast<const TraitDecl *>(node) ); }
@@ -190,5 +190,5 @@
 	virtual void visit( UnionInstType * node ) { visit( const_cast<const UnionInstType *>(node) ); }
 	virtual void visit( const UnionInstType * aggregateUseType ) = 0;
-	virtual void visit( EnumInstType * node ) { visit( const_cast<const EnumInstType *>(node) ); }
+	virtual void visit( EnumInstType * node ) { visit( const_cast<const EnumInstType *>(node) ); } // Marker 2
 	virtual void visit( const EnumInstType * aggregateUseType ) = 0;
 	virtual void visit( TraitInstType * node ) { visit( const_cast<const TraitInstType *>(node) ); }
