Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision f678663e486e9823250460605ad29ea629aebf04)
+++ src/SymTab/Indexer.cc	(revision ae4c85a0274ee43a9f1e10b436adffdb989d7643)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:37:33 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  5 08:05:17 2015
-// Update Count     : 5
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 05 13:52:42 2015
+// Update Count     : 10
 //
 
@@ -26,4 +26,11 @@
 
 namespace SymTab {
+	template< typename Container, typename VisitorType >
+	inline void acceptAllNewScope( Container &container, VisitorType &visitor ) {
+		visitor.enterScope();
+		acceptAll( container, visitor );
+		visitor.leaveScope();
+	}
+
 	Indexer::Indexer( bool useDebug ) : doDebug( useDebug ) {}
 
@@ -31,5 +38,7 @@
 
 	void Indexer::visit( ObjectDecl *objectDecl ) {
+		enterScope();
 		maybeAccept( objectDecl->get_type(), *this );
+		leaveScope();
 		maybeAccept( objectDecl->get_init(), *this );
 		maybeAccept( objectDecl->get_bitfieldWidth(), *this );
@@ -149,4 +158,118 @@
 		leaveScope();
 	}
+
+
+	void Indexer::visit( ApplicationExpr *applicationExpr ) {
+		acceptAllNewScope( applicationExpr->get_results(), *this );
+		maybeAccept( applicationExpr->get_function(), *this );
+		acceptAll( applicationExpr->get_args(), *this );
+	}
+
+	void Indexer::visit( UntypedExpr *untypedExpr ) {
+		acceptAllNewScope( untypedExpr->get_results(), *this );
+		acceptAll( untypedExpr->get_args(), *this );
+	}
+
+	void Indexer::visit( NameExpr *nameExpr ) {
+		acceptAllNewScope( nameExpr->get_results(), *this );
+	}
+
+	void Indexer::visit( AddressExpr *addressExpr ) {
+		acceptAllNewScope( addressExpr->get_results(), *this );
+		maybeAccept( addressExpr->get_arg(), *this );
+	}
+
+	void Indexer::visit( LabelAddressExpr *labAddressExpr ) {
+		acceptAllNewScope( labAddressExpr->get_results(), *this );
+		maybeAccept( labAddressExpr->get_arg(), *this );
+	}
+
+	void Indexer::visit( CastExpr *castExpr ) {
+		acceptAllNewScope( castExpr->get_results(), *this );
+		maybeAccept( castExpr->get_arg(), *this );
+	}
+
+	void Indexer::visit( UntypedMemberExpr *memberExpr ) {
+		acceptAllNewScope( memberExpr->get_results(), *this );
+		maybeAccept( memberExpr->get_aggregate(), *this );
+	}
+
+	void Indexer::visit( MemberExpr *memberExpr ) {
+		acceptAllNewScope( memberExpr->get_results(), *this );
+		maybeAccept( memberExpr->get_aggregate(), *this );
+	}
+
+	void Indexer::visit( VariableExpr *variableExpr ) {
+		acceptAllNewScope( variableExpr->get_results(), *this );
+	}
+
+	void Indexer::visit( ConstantExpr *constantExpr ) {
+		acceptAllNewScope( constantExpr->get_results(), *this );
+		maybeAccept( constantExpr->get_constant(), *this );
+	}
+
+	void Indexer::visit( SizeofExpr *sizeofExpr ) {
+		acceptAllNewScope( sizeofExpr->get_results(), *this );
+		if ( sizeofExpr->get_isType() ) {
+			maybeAccept( sizeofExpr->get_type(), *this );
+		} else {
+			maybeAccept( sizeofExpr->get_expr(), *this );
+		}
+	}
+
+	void Indexer::visit( AttrExpr *attrExpr ) {
+		acceptAllNewScope( attrExpr->get_results(), *this );
+		if ( attrExpr->get_isType() ) {
+			maybeAccept( attrExpr->get_type(), *this );
+		} else {
+			maybeAccept( attrExpr->get_expr(), *this );
+		}
+	}
+
+	void Indexer::visit( LogicalExpr *logicalExpr ) {
+		acceptAllNewScope( logicalExpr->get_results(), *this );
+		maybeAccept( logicalExpr->get_arg1(), *this );
+		maybeAccept( logicalExpr->get_arg2(), *this );
+	}
+
+	void Indexer::visit( ConditionalExpr *conditionalExpr ) {
+		acceptAllNewScope( conditionalExpr->get_results(), *this );
+		maybeAccept( conditionalExpr->get_arg1(), *this );
+		maybeAccept( conditionalExpr->get_arg2(), *this );
+		maybeAccept( conditionalExpr->get_arg3(), *this );
+	}
+
+	void Indexer::visit( CommaExpr *commaExpr ) {
+		acceptAllNewScope( commaExpr->get_results(), *this );
+		maybeAccept( commaExpr->get_arg1(), *this );
+		maybeAccept( commaExpr->get_arg2(), *this );
+	}
+
+	void Indexer::visit( TupleExpr *tupleExpr ) {
+		acceptAllNewScope( tupleExpr->get_results(), *this );
+		acceptAll( tupleExpr->get_exprs(), *this );
+	}
+
+	void Indexer::visit( SolvedTupleExpr *tupleExpr ) {
+		acceptAllNewScope( tupleExpr->get_results(), *this );
+		acceptAll( tupleExpr->get_exprs(), *this );
+	}
+
+	void Indexer::visit( TypeExpr *typeExpr ) {
+		acceptAllNewScope( typeExpr->get_results(), *this );
+		maybeAccept( typeExpr->get_type(), *this );
+	}
+
+	void Indexer::visit( AsmExpr *asmExpr ) {
+		maybeAccept( asmExpr->get_inout(), *this );
+		maybeAccept( asmExpr->get_constraint(), *this );
+		maybeAccept( asmExpr->get_operand(), *this );
+	}
+
+	void Indexer::visit( UntypedValofExpr *valofExpr ) {
+		acceptAllNewScope( valofExpr->get_results(), *this );
+		maybeAccept( valofExpr->get_body(), *this );
+	}
+
 
 	void Indexer::visit( ContextInstType *contextInst ) {
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision f678663e486e9823250460605ad29ea629aebf04)
+++ src/SymTab/Indexer.h	(revision ae4c85a0274ee43a9f1e10b436adffdb989d7643)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:38:55 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 16:51:21 2015
-// Update Count     : 3
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 05 13:51:39 2015
+// Update Count     : 4
 //
 
@@ -43,4 +43,25 @@
 
 		virtual void visit( CompoundStmt *compoundStmt );
+
+		virtual void visit( ApplicationExpr *applicationExpr );
+		virtual void visit( UntypedExpr *untypedExpr );
+		virtual void visit( NameExpr *nameExpr );
+		virtual void visit( CastExpr *castExpr );
+		virtual void visit( AddressExpr *addressExpr );
+		virtual void visit( LabelAddressExpr *labAddressExpr );
+		virtual void visit( UntypedMemberExpr *memberExpr );
+		virtual void visit( MemberExpr *memberExpr );
+		virtual void visit( VariableExpr *variableExpr );
+		virtual void visit( ConstantExpr *constantExpr ); 
+		virtual void visit( SizeofExpr *sizeofExpr );
+		virtual void visit( AttrExpr *attrExpr );
+		virtual void visit( LogicalExpr *logicalExpr );
+		virtual void visit( ConditionalExpr *conditionalExpr );
+		virtual void visit( CommaExpr *commaExpr );
+		virtual void visit( TupleExpr *tupleExpr );
+		virtual void visit( SolvedTupleExpr *tupleExpr );
+		virtual void visit( TypeExpr *typeExpr );
+		virtual void visit( AsmExpr *asmExpr );
+		virtual void visit( UntypedValofExpr *valofExpr );
 
 		virtual void visit( ContextInstType *contextInst );
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision f678663e486e9823250460605ad29ea629aebf04)
+++ src/SymTab/Validate.cc	(revision ae4c85a0274ee43a9f1e10b436adffdb989d7643)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jul 22 13:16:00 2015
-// Update Count     : 194
+// Last Modified On : Wed Aug 05 14:00:24 2015
+// Update Count     : 195
 //
 
@@ -893,4 +893,5 @@
 		TypedefMap oldNames = typedefNames;
 		DeclarationWithType *ret = Mutator::mutate( objDecl );
+		typedefNames = oldNames;
 		if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
 			return new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn() );
@@ -898,5 +899,4 @@
 			throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", objDecl );
 		} // if
-		typedefNames = oldNames;
 		return ret;
 	}
