Index: src/SynTree/ApplicationExpr.cc
===================================================================
--- src/SynTree/ApplicationExpr.cc	(revision 2d80111cda56c1eaa64c85ead71201dfe6b1b5b8)
+++ src/SynTree/ApplicationExpr.cc	(revision dcfedca2ab0d1ebb192a77d365a82ec5bcb91edf)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Tue Apr 26 12:41:06 2016
-// Update Count     : 4
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Aug 12 14:28:00 2019
+// Update Count     : 5
 //
 
@@ -76,4 +76,8 @@
 }
 
+bool ApplicationExpr::get_lvalue() const {
+	return result->get_lvalue();
+}
+
 void ApplicationExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Application of" << std::endl << indent+1;
Index: src/SynTree/CommaExpr.cc
===================================================================
--- src/SynTree/CommaExpr.cc	(revision 2d80111cda56c1eaa64c85ead71201dfe6b1b5b8)
+++ src/SynTree/CommaExpr.cc	(revision dcfedca2ab0d1ebb192a77d365a82ec5bcb91edf)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon May 02 15:19:44 2016
-// Update Count     : 1
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Arg 12 16:11:00 2016
+// Update Count     : 2
 //
 
@@ -39,4 +39,9 @@
 }
 
+bool CommaExpr::get_lvalue() const {
+	// xxx - as above, shouldn't be an lvalue but that information is used anyways.
+	return result->get_lvalue();
+}
+
 void CommaExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Comma Expression:" << std::endl;
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 2d80111cda56c1eaa64c85ead71201dfe6b1b5b8)
+++ src/SynTree/Expression.cc	(revision dcfedca2ab0d1ebb192a77d365a82ec5bcb91edf)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Aug  7 17:03:00 2019
-// Update Count     : 62
+// Last Modified On : Tue Aug 13 11:31:00 2019
+// Update Count     : 63
 //
 
@@ -64,5 +64,6 @@
 
 bool Expression::get_lvalue() const {
-	return result->get_lvalue();
+	assert( !result->get_lvalue() );
+	return false;
 }
 
@@ -138,4 +139,8 @@
 }
 
+bool VariableExpr::get_lvalue() const {
+	return result->get_lvalue();
+}
+
 VariableExpr * VariableExpr::functionPointer( FunctionDecl * func ) {
 	VariableExpr * funcExpr = new VariableExpr( func );
@@ -269,4 +274,8 @@
 CastExpr::~CastExpr() {
 	delete arg;
+}
+
+bool CastExpr::get_lvalue() const {
+	return result->get_lvalue();
 }
 
@@ -380,4 +389,9 @@
 	// don't delete the member declaration, since it points somewhere else in the tree
 	delete aggregate;
+}
+
+bool MemberExpr::get_lvalue() const {
+	assert( result->get_lvalue() );
+	return true;
 }
 
@@ -432,4 +446,7 @@
 }
 
+bool UntypedExpr::get_lvalue() const {
+	return result->get_lvalue();
+}
 
 void UntypedExpr::print( std::ostream & os, Indenter indent ) const {
@@ -490,4 +507,8 @@
 	delete arg2;
 	delete arg3;
+}
+
+bool ConditionalExpr::get_lvalue() const {
+	return result->get_lvalue();
 }
 
@@ -548,4 +569,8 @@
 }
 
+bool ConstructorExpr::get_lvalue() const {
+	return result->get_lvalue();
+}
+
 void ConstructorExpr::print( std::ostream & os, Indenter indent ) const {
 	os <<  "Constructor Expression: " << std::endl << indent+1;
@@ -565,4 +590,9 @@
 CompoundLiteralExpr::~CompoundLiteralExpr() {
 	delete initializer;
+}
+
+bool CompoundLiteralExpr::get_lvalue() const {
+	assert( result->get_lvalue() );
+	return true;
 }
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 2d80111cda56c1eaa64c85ead71201dfe6b1b5b8)
+++ src/SynTree/Expression.h	(revision dcfedca2ab0d1ebb192a77d365a82ec5bcb91edf)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Aug  7 16:56:00 2019
-// Update Count     : 51
+// Last Modified On : Tue Aug 13 11:30:00 2019
+// Update Count     : 52
 //
 
@@ -71,5 +71,5 @@
 	const Type * get_result() const { return result; }
 	void set_result( Type * newValue ) { result = newValue; }
-	bool get_lvalue() const;
+	virtual bool get_lvalue() const;
 
 	TypeSubstitution * get_env() const { return env; }
@@ -99,4 +99,6 @@
 	virtual ~ApplicationExpr();
 
+	bool get_lvalue() const final;
+
 	Expression * get_function() const { return function; }
 	void set_function( Expression * newValue ) { function = newValue; }
@@ -121,4 +123,6 @@
 	UntypedExpr( const UntypedExpr & other );
 	virtual ~UntypedExpr();
+
+	bool get_lvalue() const final;
 
 	Expression * get_function() const { return function; }
@@ -209,4 +213,6 @@
 	virtual ~CastExpr();
 
+	bool get_lvalue() const final;
+
 	Expression * get_arg() const { return arg; }
 	void set_arg( Expression * newValue ) { arg = newValue; }
@@ -292,4 +298,6 @@
 	virtual ~MemberExpr();
 
+	bool get_lvalue() const final;
+
 	DeclarationWithType * get_member() const { return member; }
 	void set_member( DeclarationWithType * newValue ) { member = newValue; }
@@ -314,4 +322,6 @@
 	VariableExpr( const VariableExpr & other );
 	virtual ~VariableExpr();
+
+	bool get_lvalue() const final;
 
 	DeclarationWithType * get_var() const { return var; }
@@ -501,4 +511,6 @@
 	virtual ~ConditionalExpr();
 
+	bool get_lvalue() const final;
+
 	Expression * get_arg1() const { return arg1; }
 	void set_arg1( Expression * newValue ) { arg1 = newValue; }
@@ -525,4 +537,6 @@
 	virtual ~CommaExpr();
 
+	bool get_lvalue() const final;
+
 	Expression * get_arg1() const { return arg1; }
 	void set_arg1( Expression * newValue ) { arg1 = newValue; }
@@ -611,4 +625,6 @@
 	~ConstructorExpr();
 
+	bool get_lvalue() const final;
+
 	Expression * get_callExpr() const { return callExpr; }
 	void set_callExpr( Expression * newValue ) { callExpr = newValue; }
@@ -629,4 +645,6 @@
 	CompoundLiteralExpr( const CompoundLiteralExpr & other );
 	virtual ~CompoundLiteralExpr();
+
+	bool get_lvalue() const final;
 
 	Initializer * get_initializer() const { return initializer; }
@@ -705,4 +723,6 @@
 	TupleIndexExpr( const TupleIndexExpr & other );
 	virtual ~TupleIndexExpr();
+
+	bool get_lvalue() const final;
 
 	Expression * get_tuple() const { return tuple; }
Index: src/SynTree/TupleExpr.cc
===================================================================
--- src/SynTree/TupleExpr.cc	(revision 2d80111cda56c1eaa64c85ead71201dfe6b1b5b8)
+++ src/SynTree/TupleExpr.cc	(revision dcfedca2ab0d1ebb192a77d365a82ec5bcb91edf)
@@ -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 : Fri Mar 17 09:42:29 2017
-// Update Count     : 3
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Aug 12 14:22:00 2019
+// Update Count     : 4
 //
 
@@ -78,4 +78,9 @@
 }
 
+bool TupleIndexExpr::get_lvalue() const {
+	assert( result->get_lvalue() );
+	return true;
+}
+
 void TupleIndexExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Tuple Index Expression, with tuple:" << std::endl;
