Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 5e1adb5cd4646216dbea029a925fcba958df0bc6)
+++ src/SymTab/Indexer.cc	(revision 1485c1ae9cda2979dd9af8711f539c610c4c5b4b)
@@ -572,4 +572,20 @@
 	}
 
+	void Indexer::addMembers( AggregateDecl * aggr, Expression * expr ) {
+		for ( Declaration * decl : aggr->members ) {
+			if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
+				addId( dwt, expr );
+				if ( dwt->name == "" ) {
+					Type * t = dwt->get_type()->stripReferences();
+					if ( dynamic_cast< StructInstType * >( t ) || dynamic_cast< UnionInstType * >( t ) ) {
+						Expression * base = expr->clone();
+						ResolvExpr::referenceToRvalueConversion( base );
+						addMembers( t->getAggr(), new MemberExpr( dwt, base ) );
+					}
+				}
+			}
+		}
+	}
+
 	void Indexer::addWith( WithStmt * stmt ) {
 		for ( Expression * expr : stmt->exprs ) {
@@ -578,9 +594,5 @@
 				assertf( aggr, "WithStmt expr has non-aggregate type: %s", toString( expr->result ).c_str() );
 
-				for ( Declaration * decl : aggr->members ) {
-					if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
-						addId( dwt, expr );
-					}
-				}
+				addMembers( aggr, expr );
 			}
 		}
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 5e1adb5cd4646216dbea029a925fcba958df0bc6)
+++ src/SymTab/Indexer.h	(revision 1485c1ae9cda2979dd9af8711f539c610c4c5b4b)
@@ -86,4 +86,7 @@
 		void addWith( WithStmt * );
 
+		/// adds all of the members of the Aggregate (addWith helper)
+		void addMembers( AggregateDecl * aggr, Expression * expr );
+
 		/// convenience function for adding a list of Ids to the indexer
 		void addIds( const std::list< DeclarationWithType * > & decls );
