Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/Parser/ExpressionNode.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:17:07 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 11 15:13:48 2015
-// Update Count     : 200
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 13:51:11 2015
+// Update Count     : 254
 // 
 
@@ -32,5 +32,5 @@
 ExpressionNode::ExpressionNode() : ParseNode(), argName( 0 ) {}
 
-ExpressionNode::ExpressionNode( const string *name_ ) : ParseNode( name_ ), argName( 0 ) {}
+ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ), argName( 0 ) {}
 
 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ) {
@@ -290,4 +290,21 @@
 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
 	set_argName( expr );
+	assert( get_argName() );
+
+	if ( ! isArrayIndex ) {
+		if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
+
+			stringstream ss( var->get_name() );
+			double value;
+			if ( ss >> value ) {
+				// this is a floating point constant. It MUST be
+				// ".0" or ".1", otherwise the program is invalid
+				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
+					throw SemanticError( "invalid designator name: " + var->get_name() );
+				} // if
+				var->set_name( var->get_name().substr(1) );
+			} // if
+		} // if
+	} // if
 }
 
@@ -295,10 +312,27 @@
 }
 
+class DesignatorFixer : public Mutator {
+public:
+	virtual Expression* mutate( NameExpr *nameExpr ) {
+		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
+			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
+			delete nameExpr;
+			return new ConstantExpr( val );
+		}
+		return nameExpr;
+	}
+};
+
 Expression *DesignatorNode::build() const {
+	Expression * ret = get_argName()->build();
+
 	if ( isArrayIndex ) {
-		return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-	} else {
-		return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-	} // if
+		// need to traverse entire structure and change any instances of 0 or 1 to 
+		// ConstantExpr
+		DesignatorFixer fixer;
+		ret = ret->acceptMutator( fixer );
+	} // if
+
+	return ret;
 }
 
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/Parser/ParseNode.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:26:29 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 30 14:55:54 2015
-// Update Count     : 26
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 13:26:00 2015
+// Update Count     : 36
 // 
 
@@ -20,9 +20,10 @@
 int ParseNode::indent_by = 4;
 
-ParseNode::ParseNode() : name( 0 ), next( 0 ) {};
-ParseNode::ParseNode( const string *name_ ) : name( name_ ), next( 0 ) {}
+ParseNode::ParseNode() : next( 0 ) {};
+ParseNode::ParseNode( const string *name ) : name( *name ), next( 0 ) { delete name; }
+ParseNode::ParseNode( const string &name ) : name( name ), next( 0 ) { }
 
 ParseNode::~ParseNode() {
-	delete next; delete name;
+	delete next;
 };
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/Parser/ParseNode.h	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:28:16 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 11 15:11:29 2015
-// Update Count     : 145
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 13:27:11 2015
+// Update Count     : 172
 //
 
@@ -40,4 +40,5 @@
 	ParseNode();
 	ParseNode( const std::string * );
+	ParseNode( const std::string & );  // for copy constructing subclasses
 	virtual ~ParseNode();
 
@@ -49,5 +50,7 @@
 	virtual ParseNode *clone() const { return 0; };
 
-	const std::string &get_name() const { return *name; }
+	const std::string &get_name() const { return name; }
+	void set_name( const std::string &newValue ) { name = newValue; }
+
 	virtual void print( std::ostream &, int indent = 0 ) const;
 	virtual void printList( std::ostream &, int indent = 0 ) const;
@@ -55,5 +58,5 @@
 	ParseNode &operator,( ParseNode &);
   protected:
-	const std::string *name;
+	std::string name;
 	ParseNode *next;
 	static int indent_by;
Index: src/SynTree/ArrayType.cc
===================================================================
--- src/SynTree/ArrayType.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/SynTree/ArrayType.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  6 14:11:48 2015
-// Update Count     : 9
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:19:07 2015
+// Update Count     : 11
 //
 
@@ -50,6 +50,6 @@
 	} // if
 	if ( dimension ) {
-		os << "with dimension of ";
-		dimension->print( os, indent );
+		os << " with dimension of ";
+		dimension->print( os, 0 );
 	} // if
 }
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/SynTree/BasicType.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  7 08:44:36 2015
-// Update Count     : 5
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:15:45 2015
+// Update Count     : 6
 //
 
@@ -28,5 +28,5 @@
 
 	Type::print( os, indent );
-	os << kindNames[ kind ] << ' ';
+	os << kindNames[ kind ];
 }
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/SynTree/Expression.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 28 16:27:17 2015
-// Update Count     : 22
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:02:45 2015
+// Update Count     : 30
 //
 
@@ -72,7 +72,8 @@
 
 void ConstantExpr::print( std::ostream &os, int indent ) const {
-	os << "constant expression " ;
+	os << std::string( indent, ' ' ) << "constant expression " ;
 	constant.print( os );
 	Expression::print( os, indent );
+	os << std::endl;
 }
 
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 543159bb04fcae3b54eb3c92cbaf4e9dea119a60)
+++ src/SynTree/Initializer.cc	(revision 43ee2a81833fdee4ef5c0ed7f72eaf1f17982404)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 09:02:45 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 12 14:05:25 2015
+// Update Count     : 14
 //
 
@@ -43,11 +43,12 @@
 
 void SingleInit::print( std::ostream &os, int indent ) {
-	os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: ";
-	value->print( os, indent+2 );
+	os << std::endl << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl;
+	value->print( os, indent+4 );
 
 	if ( ! designators.empty() ) {
-		os << std::endl << std::string(indent + 2, ' ' ) << "designated by: "  ;
-		for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ )
+		os << std::endl << std::string(indent + 2, ' ' ) << "designated by: "   << std::endl;
+		for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ ) {
 			( *i )->print(os, indent + 4 );
+		}
 	} // if
 }
