Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/DeclarationNode.cc	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -78,5 +78,5 @@
 	delete variable.initializer;
 
-	delete type;
+// 	delete type;
 	delete bitfieldWidth;
 
@@ -253,5 +253,5 @@
 } // DeclarationNode::newAggregate
 
-DeclarationNode * DeclarationNode::newEnum( const string * name, DeclarationNode * constants, bool body, bool ) {
+DeclarationNode * DeclarationNode::newEnum( const string * name, DeclarationNode * constants, bool body, bool typed) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Enum );
@@ -272,5 +272,5 @@
 } // DeclarationNode::newName
 
-DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) {
+DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) { // Marker
 	DeclarationNode * newnode = newName( name );
 	newnode->enumeratorValue.reset( constant );
@@ -667,4 +667,12 @@
 }
 
+DeclarationNode * DeclarationNode::addEnumBase( DeclarationNode * o ) {
+	if ( o && o -> type)  {
+		type->base= o->type;
+	}
+	delete o;
+	return this;
+}
+
 DeclarationNode * DeclarationNode::addTypedef() {
 	TypeData * newtype = new TypeData( TypeData::Symbolic );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/ParseNode.h	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -265,4 +265,5 @@
 	DeclarationNode * addType( DeclarationNode * );
 	DeclarationNode * addTypedef();
+	DeclarationNode * addEnumBase( DeclarationNode * );
 	DeclarationNode * addAssertions( DeclarationNode * );
 	DeclarationNode * addName( std::string * );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/StatementNode.cc	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -366,4 +366,5 @@
 } // maybe_build_compound
 
+// Question
 Statement * build_asm( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) {
 	list< Expression * > out, in;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/TypeData.cc	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -918,8 +918,9 @@
 EnumDecl * buildEnum( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
 	assert( td->kind == TypeData::Enum );
-	EnumDecl * ret = new EnumDecl( *td->enumeration.name, attributes, linkage );
-	buildList( td->enumeration.constants, ret->get_members() );
+	Type* baseType = td->base ? typebuild(td->base) : nullptr;
+	EnumDecl * ret = new EnumDecl( *td->enumeration.name, attributes, linkage, baseType );
+	buildList( td->enumeration.constants, ret->get_members() ); // enumConstant is both a node and a list
 	list< Declaration * >::iterator members = ret->get_members().begin();
-	for ( const DeclarationNode * cur = td->enumeration. constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
+	for ( const DeclarationNode * cur = td->enumeration.constants; cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
 		if ( cur->has_enumeratorValue() ) {
 			ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members);
@@ -927,5 +928,5 @@
 		} // if
 	} // for
-	ret->set_body( td->enumeration.body );
+	ret->set_body( td->enumeration.body ); // Boolean; if it has body
 	return ret;
 } // buildEnum
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/TypeData.h	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -132,4 +132,5 @@
 						 Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
 FunctionType * buildFunction( const TypeData * );
+Declaration * addEnumBase( Declaration *, const TypeData * );
 void buildKRFunction( const TypeData::Function_t & function );
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision a77713b2f8a9c39b67ee472e60bfe08f14cb1ca3)
+++ src/Parser/parser.yy	(revision 786c438b7ede9e0327c4a0d66bff7a3af842d2d8)
@@ -2292,5 +2292,7 @@
 			{ SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
 			// SemanticError( yylloc, "Typed enumeration is currently unimplemented." ); $$ = nullptr;
-			$$ = DeclarationNode::newEnum( nullptr, $7, true, true ) ->addQualifiers( $5 );
+
+			$$ = DeclarationNode::newEnum( nullptr, $7, true, true ) ->addQualifiers( $5 )  -> addEnumBase( $3 );
+			// $$ = DeclarationNode::newEnum( nullptr, $7, true, true ) ->addQualifiers( $5 );
 		}
 	| ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt // Question: why attributes/qualifier after identifier
@@ -2301,5 +2303,6 @@
 	  '{' enumerator_list comma_opt '}'
 		{
-			$$ = DeclarationNode::newEnum( $6, $10, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
+			$$ = DeclarationNode::newEnum( $6, $10, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 ) -> addEnumBase( $3 );
+			// $$ = DeclarationNode::newEnum( $6, $10, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
 		}
 	| ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt typedef_name attribute_list_opt '{' enumerator_list comma_opt '}'
@@ -2307,5 +2310,6 @@
 			if ( $3->storageClasses.val != 0 || $3->type->qualifiers.val != 0 ) { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
 			typedefTable.makeTypedef( *$6->name );
-			$$ = DeclarationNode::newEnum( $6->name, $9, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
+			$$ = DeclarationNode::newEnum( $6->name, $9, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 ) -> addEnumBase( $3 );
+			// $$ = DeclarationNode::newEnum( $6->name, $9, true, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
 		}
 	| enum_type_nobody
