Index: src/Common/PassVisitor.h
===================================================================
--- src/Common/PassVisitor.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/Common/PassVisitor.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -95,5 +95,4 @@
 	virtual void visit( ConstructorExpr * ctorExpr ) override final;
 	virtual void visit( CompoundLiteralExpr *compLitExpr ) override final;
-	virtual void visit( UntypedValofExpr *valofExpr ) override final;
 	virtual void visit( RangeExpr *rangeExpr ) override final;
 	virtual void visit( UntypedTupleExpr *tupleExpr ) override final;
@@ -181,5 +180,4 @@
 	virtual Expression* mutate( ConstructorExpr *ctorExpr ) override final;
 	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ) override final;
-	virtual Expression* mutate( UntypedValofExpr *valofExpr ) override final;
 	virtual Expression* mutate( RangeExpr *rangeExpr ) override final;
 	virtual Expression* mutate( UntypedTupleExpr *tupleExpr ) override final;
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/Common/PassVisitor.impl.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -607,10 +607,5 @@
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( CompoundLiteralExpr * node ) {
-	VISIT_BODY( node ); 
-}
-
-template< typename pass_type >
-void PassVisitor< pass_type >::visit( UntypedValofExpr * node ) {
-	VISIT_BODY( node ); 
+	VISIT_BODY( node );
 }
 
@@ -988,9 +983,4 @@
 
 template< typename pass_type >
-Expression * PassVisitor< pass_type >::mutate( UntypedValofExpr * node ) {
-	MUTATE_BODY( Expression, node );
-}
-
-template< typename pass_type >
 Expression * PassVisitor< pass_type >::mutate( RangeExpr * node ) {
 	MUTATE_BODY( Expression, node );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/Parser/ExpressionNode.cc	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -346,5 +346,5 @@
 
 Expression *build_valexpr( StatementNode *s ) {
-	return new UntypedValofExpr( maybeMoveBuild< Statement >(s), nullptr );
+	return new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(s) ) );
 }
 Expression *build_typevalue( DeclarationNode *decl ) {
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SymTab/Indexer.cc	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -493,9 +493,4 @@
 		acceptNewScope( compLitExpr->get_result(), *this );
 		maybeAccept( compLitExpr->get_initializer(), *this );
-	}
-
-	void Indexer::visit( UntypedValofExpr *valofExpr ) {
-		acceptNewScope( valofExpr->get_result(), *this );
-		maybeAccept( valofExpr->get_body(), *this );
 	}
 
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SymTab/Indexer.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -69,5 +69,4 @@
 		virtual void visit( ConstructorExpr * ctorExpr );
 		virtual void visit( CompoundLiteralExpr *compLitExpr );
-		virtual void visit( UntypedValofExpr *valofExpr );
 		virtual void visit( RangeExpr *rangeExpr );
 		virtual void visit( UntypedTupleExpr *tupleExpr );
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Expression.cc	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -588,14 +588,4 @@
 }
 
-UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {}
-
-UntypedValofExpr::~UntypedValofExpr() { delete body; }
-
-void UntypedValofExpr::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl;
-	if ( get_body() != 0 )
-		get_body()->print( os, indent + 2 );
-}
-
 RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
 RangeExpr::RangeExpr( const RangeExpr &other ) : Expression( other ), low( other.low->clone() ), high( other.high->clone() ) {}
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Expression.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -600,22 +600,4 @@
 };
 
-/// ValofExpr represents a GCC 'lambda expression'
-class UntypedValofExpr : public Expression {
-  public:
-	UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
-	UntypedValofExpr( const UntypedValofExpr & other );
-	virtual ~UntypedValofExpr();
-
-	Expression * get_value();
-	Statement * get_body() const { return body; }
-
-	virtual UntypedValofExpr * clone() const { return new UntypedValofExpr( * this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Statement * body;
-};
-
 /// RangeExpr represents a range e.g. '3 ... 5' or '1~10'
 class RangeExpr : public Expression {
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Mutator.cc	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -380,10 +380,4 @@
 }
 
-Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) {
-	valofExpr->set_env( maybeMutate( valofExpr->get_env(), *this ) );
-	valofExpr->set_result( maybeMutate( valofExpr->get_result(), *this ) );
-	return valofExpr;
-}
-
 Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
 	rangeExpr->set_env( maybeMutate( rangeExpr->get_env(), *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Mutator.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -78,5 +78,4 @@
 	virtual Expression* mutate( ConstructorExpr *ctorExpr );
 	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
-	virtual Expression* mutate( UntypedValofExpr *valofExpr );
 	virtual Expression* mutate( RangeExpr *rangeExpr );
 	virtual Expression* mutate( UntypedTupleExpr *tupleExpr );
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Visitor.cc	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -301,9 +301,4 @@
 }
 
-void Visitor::visit( UntypedValofExpr *valofExpr ) {
-	maybeAccept( valofExpr->get_result(), *this );
-	maybeAccept( valofExpr->get_body(), *this );
-}
-
 void Visitor::visit( RangeExpr *rangeExpr ) {
 	maybeAccept( rangeExpr->get_low(), *this );
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 4551a6eded512f58326babd0f290704150f1f8e8)
+++ src/SynTree/Visitor.h	(revision af5c204ab6dfd6d34a6eb3258329f84bae858722)
@@ -81,5 +81,4 @@
 	virtual void visit( ConstructorExpr * ctorExpr );
 	virtual void visit( CompoundLiteralExpr *compLitExpr );
-	virtual void visit( UntypedValofExpr *valofExpr );
 	virtual void visit( RangeExpr *rangeExpr );
 	virtual void visit( UntypedTupleExpr *tupleExpr );
@@ -163,5 +162,5 @@
 			} // if
 		} catch( SemanticError &e ) {
-			e.set_location( (*i)->location );			
+			e.set_location( (*i)->location );
 			errors.append( e );
 		} // try
