Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision f238fcc2eafd0e0a792e3db3f23ab47e63d45c2b)
+++ src/ResolvExpr/Resolver.cc	(revision 4559b34425030aa5ff5e6be7a0d6e46d70ae6fec)
@@ -1470,7 +1470,29 @@
 			// enumerator initializers should not use the enum type to initialize, since the
 			// enum type is still incomplete at this point. Use `int` instead.
-			objectDecl = fixObjectType(objectDecl, symtab);
-			currentObject = ast::CurrentObject{
-				objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+
+			if (dynamic_cast< const ast::EnumInstType * >( objectDecl->get_type() )->base->base) { // const ast::PointerType &
+				const ast::Type * enumBase =  (dynamic_cast< const ast::EnumInstType * >( objectDecl->get_type() )->base->base.get());
+				const ast::PointerType * enumBaseAsPtr = dynamic_cast<const ast::PointerType *>(enumBase);
+
+				if ( enumBaseAsPtr ) {
+					const ast::Type * pointerBase = enumBaseAsPtr->base.get();
+					if ( dynamic_cast<const ast::BasicType *>(pointerBase) ) {
+						objectDecl = fixObjectType(objectDecl, symtab);
+						if (dynamic_cast<const ast::BasicType *>(pointerBase)->kind == ast::BasicType::Char)
+						currentObject = ast::CurrentObject{
+					 		objectDecl->location,  new ast::PointerType{ 
+							 	new ast::BasicType{ ast::BasicType::Char }
+							} };
+					} else {
+						objectDecl = fixObjectType(objectDecl, symtab);
+						currentObject = ast::CurrentObject{objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+					}
+				}
+			} else {
+				objectDecl = fixObjectType(objectDecl, symtab);
+				currentObject = ast::CurrentObject{
+					objectDecl->location, new ast::BasicType{ ast::BasicType::SignedInt } };
+			}
+
 		}
 		else {
