Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/Expression.cc	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -710,4 +710,21 @@
 }
 
+DeletedExpr::DeletedExpr( Expression * expr, BaseSyntaxNode * deleteStmt ) : expr( expr ), deleteStmt( deleteStmt ) {
+	assert( expr->result );
+	result = expr->result->clone();
+}
+DeletedExpr::DeletedExpr( const DeletedExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), deleteStmt( other.deleteStmt ) {}
+DeletedExpr::~DeletedExpr() {
+	delete expr;
+}
+
+void DeletedExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "Deleted Expression" << std::endl << indent+1;
+	expr->print( os, indent+1 );
+	os << std::endl << indent+1 << "... deleted by: ";
+	deleteStmt->print( os, indent+1 );
+}
+
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/Expression.h	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -822,4 +822,20 @@
 };
 
+/// expression that contains a deleted identifier - should never make it past the resolver.
+class DeletedExpr : public Expression {
+public:
+	Expression * expr;
+	BaseSyntaxNode * deleteStmt;
+
+	DeletedExpr( Expression * expr, BaseSyntaxNode * deleteStmt );
+	DeletedExpr( const DeletedExpr & other );
+	~DeletedExpr();
+
+	virtual DeletedExpr * clone() const { return new DeletedExpr( * this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/Mutator.h	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -55,38 +55,39 @@
 	virtual Statement * mutate( ImplicitCtorDtorStmt * impCtorDtorStmt );
 
-	virtual Expression* mutate( ApplicationExpr * applicationExpr );
-	virtual Expression* mutate( UntypedExpr * untypedExpr );
-	virtual Expression* mutate( NameExpr * nameExpr );
-	virtual Expression* mutate( AddressExpr * castExpr );
-	virtual Expression* mutate( LabelAddressExpr * labAddressExpr );
-	virtual Expression* mutate( CastExpr * castExpr );
-	virtual Expression* mutate( VirtualCastExpr * castExpr );
-	virtual Expression* mutate( UntypedMemberExpr * memberExpr );
-	virtual Expression* mutate( MemberExpr * memberExpr );
-	virtual Expression* mutate( VariableExpr * variableExpr );
-	virtual Expression* mutate( ConstantExpr * constantExpr );
-	virtual Expression* mutate( SizeofExpr * sizeofExpr );
-	virtual Expression* mutate( AlignofExpr * alignofExpr );
-	virtual Expression* mutate( UntypedOffsetofExpr * offsetofExpr );
-	virtual Expression* mutate( OffsetofExpr * offsetofExpr );
-	virtual Expression* mutate( OffsetPackExpr * offsetPackExpr );
-	virtual Expression* mutate( AttrExpr * attrExpr );
-	virtual Expression* mutate( LogicalExpr * logicalExpr );
-	virtual Expression* mutate( ConditionalExpr * conditionalExpr );
-	virtual Expression* mutate( CommaExpr * commaExpr );
-	virtual Expression* mutate( TypeExpr * typeExpr );
-	virtual Expression* mutate( AsmExpr * asmExpr );
-	virtual Expression* mutate( ImplicitCopyCtorExpr * impCpCtorExpr );
-	virtual Expression* mutate( ConstructorExpr * ctorExpr );
-	virtual Expression* mutate( CompoundLiteralExpr * compLitExpr );
-	virtual Expression* mutate( RangeExpr * rangeExpr );
-	virtual Expression* mutate( UntypedTupleExpr * tupleExpr );
-	virtual Expression* mutate( TupleExpr * tupleExpr );
-	virtual Expression* mutate( TupleIndexExpr * tupleExpr );
-	virtual Expression* mutate( TupleAssignExpr * assignExpr );
-	virtual Expression* mutate( StmtExpr  * stmtExpr );
-	virtual Expression* mutate( UniqueExpr  * uniqueExpr );
-	virtual Expression* mutate( UntypedInitExpr  * initExpr );
-	virtual Expression* mutate( InitExpr  * initExpr );
+	virtual Expression * mutate( ApplicationExpr * applicationExpr );
+	virtual Expression * mutate( UntypedExpr * untypedExpr );
+	virtual Expression * mutate( NameExpr * nameExpr );
+	virtual Expression * mutate( AddressExpr * castExpr );
+	virtual Expression * mutate( LabelAddressExpr * labAddressExpr );
+	virtual Expression * mutate( CastExpr * castExpr );
+	virtual Expression * mutate( VirtualCastExpr * castExpr );
+	virtual Expression * mutate( UntypedMemberExpr * memberExpr );
+	virtual Expression * mutate( MemberExpr * memberExpr );
+	virtual Expression * mutate( VariableExpr * variableExpr );
+	virtual Expression * mutate( ConstantExpr * constantExpr );
+	virtual Expression * mutate( SizeofExpr * sizeofExpr );
+	virtual Expression * mutate( AlignofExpr * alignofExpr );
+	virtual Expression * mutate( UntypedOffsetofExpr * offsetofExpr );
+	virtual Expression * mutate( OffsetofExpr * offsetofExpr );
+	virtual Expression * mutate( OffsetPackExpr * offsetPackExpr );
+	virtual Expression * mutate( AttrExpr * attrExpr );
+	virtual Expression * mutate( LogicalExpr * logicalExpr );
+	virtual Expression * mutate( ConditionalExpr * conditionalExpr );
+	virtual Expression * mutate( CommaExpr * commaExpr );
+	virtual Expression * mutate( TypeExpr * typeExpr );
+	virtual Expression * mutate( AsmExpr * asmExpr );
+	virtual Expression * mutate( ImplicitCopyCtorExpr * impCpCtorExpr );
+	virtual Expression * mutate( ConstructorExpr * ctorExpr );
+	virtual Expression * mutate( CompoundLiteralExpr * compLitExpr );
+	virtual Expression * mutate( RangeExpr * rangeExpr );
+	virtual Expression * mutate( UntypedTupleExpr * tupleExpr );
+	virtual Expression * mutate( TupleExpr * tupleExpr );
+	virtual Expression * mutate( TupleIndexExpr * tupleExpr );
+	virtual Expression * mutate( TupleAssignExpr * assignExpr );
+	virtual Expression * mutate( StmtExpr  * stmtExpr );
+	virtual Expression * mutate( UniqueExpr  * uniqueExpr );
+	virtual Expression * mutate( UntypedInitExpr  * initExpr );
+	virtual Expression * mutate( InitExpr  * initExpr );
+	virtual Expression * mutate( DeletedExpr * delExpr ) = 0;
 
 	virtual Type * mutate( VoidType * basicType );
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/Statement.cc	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -468,4 +468,6 @@
 void WithStmt::print( std::ostream & os, Indenter indent ) const {
 	os << "With statement" << endl;
+	os << indent << "... with expressions: " << endl;
+	printAll( exprs, os, indent+1 );
 	os << indent << "... with statement:" << endl << indent+1;
 	stmt->print( os, indent+1 );
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/SynTree.h	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -97,4 +97,5 @@
 class UntypedInitExpr;
 class InitExpr;
+class DeletedExpr;
 
 class Type;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 54c9000e4efa1fe5278b3e7542f24426b99cc070)
+++ src/SynTree/Visitor.h	(revision f5883bd645373ae435095db065ad1bb87a8e8c9b)
@@ -91,4 +91,5 @@
 	virtual void visit( UntypedInitExpr *  initExpr );
 	virtual void visit( InitExpr *  initExpr );
+	virtual void visit( DeletedExpr * delExpr ) = 0;
 
 	virtual void visit( VoidType * basicType );
