Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/CodeGen/CodeGenerator.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -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 : Fri May 06 16:01:00 2016
-// Update Count     : 255
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jun  9 13:21:00 2016
+// Update Count     : 256
 //
 
@@ -250,4 +250,5 @@
 	//*** Expressions
 	void CodeGenerator::visit( ApplicationExpr *applicationExpr ) {
+		extension( applicationExpr );
 		if ( VariableExpr *varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {
 			OperatorInfo opInfo;
@@ -361,4 +362,5 @@
 
 	void CodeGenerator::visit( UntypedExpr *untypedExpr ) {
+		extension( untypedExpr );
 		if ( NameExpr *nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
 			OperatorInfo opInfo;
@@ -445,4 +447,5 @@
 
 	void CodeGenerator::visit( NameExpr *nameExpr ) {
+		extension( nameExpr );
 		OperatorInfo opInfo;
 		if ( operatorLookup( nameExpr->get_name(), opInfo ) ) {
@@ -455,4 +458,5 @@
 
 	void CodeGenerator::visit( AddressExpr *addressExpr ) {
+		extension( addressExpr );
 		output << "(&";
 		// this hack makes sure that we don't convert "constant_zero" to "0" if we're taking its address
@@ -466,4 +470,5 @@
 
 	void CodeGenerator::visit( CastExpr *castExpr ) {
+		extension( castExpr );
 		output << "(";
 		if ( castExpr->get_results().empty() ) {
@@ -488,4 +493,5 @@
 
 	void CodeGenerator::visit( MemberExpr *memberExpr ) {
+		extension( memberExpr );
 		memberExpr->get_aggregate()->accept( *this );
 		output << "." << mangleName( memberExpr->get_member() );
@@ -493,4 +499,5 @@
 
 	void CodeGenerator::visit( VariableExpr *variableExpr ) {
+		extension( variableExpr );
 		OperatorInfo opInfo;
 		if ( variableExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic && operatorLookup( variableExpr->get_var()->get_name(), opInfo ) && opInfo.type == OT_CONSTANT ) {
@@ -503,8 +510,10 @@
 	void CodeGenerator::visit( ConstantExpr *constantExpr ) {
 		assert( constantExpr->get_constant() );
+		extension( constantExpr );
 		constantExpr->get_constant()->accept( *this );
 	}
 
 	void CodeGenerator::visit( SizeofExpr *sizeofExpr ) {
+		extension( sizeofExpr );
 		output << "sizeof(";
 		if ( sizeofExpr->get_isType() ) {
@@ -517,4 +526,5 @@
 
 	void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
+		extension( alignofExpr );
 		// use GCC extension to avoid bumping std to C11
 		output << "__alignof__(";
@@ -532,4 +542,5 @@
 
 	void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
+		extension( offsetofExpr );
 		// use GCC builtin
 		output << "__builtin_offsetof(";
@@ -544,4 +555,5 @@
 
 	void CodeGenerator::visit( LogicalExpr *logicalExpr ) {
+		extension( logicalExpr );
 		output << "(";
 		logicalExpr->get_arg1()->accept( *this );
@@ -556,4 +568,5 @@
 
 	void CodeGenerator::visit( ConditionalExpr *conditionalExpr ) {
+		extension( conditionalExpr );
 		output << "(";
 		conditionalExpr->get_arg1()->accept( *this );
@@ -566,4 +579,5 @@
 
 	void CodeGenerator::visit( CommaExpr *commaExpr ) {
+		extension( commaExpr );
 		output << "(";
 		commaExpr->get_arg1()->accept( *this );
@@ -578,4 +592,5 @@
 
 	void CodeGenerator::visit( AsmExpr *asmExpr ) {
+		extension( asmExpr );
 		if ( asmExpr->get_inout() ) {
 			output << "[ ";
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/CodeGen/CodeGenerator.h	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 17:32:24 2016
-// Update Count     : 28
+// Last Modified On : Thu Jun  9 13:15:58 2016
+// Update Count     : 29
 //
 
@@ -94,4 +94,10 @@
 			std::ostream& operator()(std::ostream & os);
 		};
+
+		void extension( Expression *expr ) {
+			if ( expr->get_extension() ) {
+				output << "__extension__ ";
+			} // if
+		} // extension
 	  private:
 
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Common/utility.h	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -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 : Thu Apr 28 13:18:24 2016
-// Update Count     : 16
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Jun  8 17:33:59 2016
+// Update Count     : 22
 //
 
@@ -33,11 +33,18 @@
 }
 
+template<typename T, typename U>
+struct maybeBuild_t {
+	static T * doit( const U *orig ) {
+		if ( orig ) {
+			return orig->build();
+		} else {
+			return 0;
+		} // if
+	}
+};
+
 template< typename T, typename U >
 static inline T * maybeBuild( const U *orig ) {
-	if ( orig ) {
-		return orig->build();
-	} else {
-		return 0;
-	} // if
+	return maybeBuild_t<T,U>::doit(orig);
 }
 
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Parser/ExpressionNode.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Apr  8 15:43:05 2016
-// Update Count     : 296
+// Last Modified On : Mon Jun 13 14:46:17 2016
+// Update Count     : 307
 // 
 
@@ -32,9 +32,9 @@
 using namespace std;
 
-ExpressionNode::ExpressionNode() : ParseNode(), argName( 0 ) {}
-
-ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ), argName( 0 ) {}
-
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ) {
+ExpressionNode::ExpressionNode() : ParseNode() {}
+
+ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
+
+ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
 	if ( other.argName ) {
 		argName = other.argName->clone();
@@ -344,5 +344,5 @@
 
 Expression *DesignatorNode::build() const {
-	Expression * ret = get_argName()->build();
+	Expression * ret = maybeBuild<Expression>(get_argName());
 
 	if ( isArrayIndex ) {
@@ -389,5 +389,5 @@
 	"Cond", "NCond",
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "Attr", "CompLit", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
@@ -466,5 +466,5 @@
 
 	if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
-		return new UntypedExpr( function->build(), args, maybeBuild< Expression >( get_argName() ));
+		return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
 	} // if
 
@@ -550,7 +550,7 @@
 			if ( dynamic_cast< VoidType* >( targetType ) ) {
 				delete targetType;
-				return new CastExpr( expr_node->build(), maybeBuild< Expression >( get_argName() ) );
+				return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) );
 			} else {
-				return new CastExpr( expr_node->build(),targetType, maybeBuild< Expression >( get_argName() ) );
+				return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) );
 			} // if
 		}
@@ -621,14 +621,11 @@
 			assert( var );
 			if ( ! get_args()->get_link() ) {
-				return new AttrExpr( var->build(), ( Expression*)0);
+				return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
 			} else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) {
-				return new AttrExpr( var->build(), arg->get_decl()->buildType());
+				return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType());
 			} else {
-				return new AttrExpr( var->build(), args.back());
-			} // if
-		}
-	  case OperatorNode::CompLit:
-		throw UnimplementedError( "C99 compound literals" );
-		// the short-circuited operators
+				return new AttrExpr( maybeBuild<Expression>(var), args.back());
+			} // if
+		}
 	  case OperatorNode::Or:
 	  case OperatorNode::And:
@@ -719,5 +716,5 @@
 
 Expression *AsmExprNode::build() const {
-	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)constraint->build(), operand->build() );
+	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
 }
 
@@ -796,5 +793,5 @@
 
 Expression *ValofExprNode::build() const {
-	return new UntypedValofExpr ( get_body()->build(), maybeBuild< Expression >( get_argName() ) );
+	return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
 }
 
@@ -908,14 +905,14 @@
 
 Expression *CompoundLiteralNode::build() const {
-	Declaration * newDecl = type->build();				// compound literal type
+	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
-		return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );
+		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
 	// these types do not have associated type information
 	} else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() );
+		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
 	} else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() );
+		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
 	} else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
-		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() );
+		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
 	} else {
 		assert( false );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Parser/ParseNode.h	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:28:16 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Apr 14 15:37:52 2016
-// Update Count     : 205
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jun 13 16:04:47 2016
+// Update Count     : 240
 //
 
@@ -20,8 +20,10 @@
 #include <list>
 #include <iterator>
+#include <memory>
 
 #include "Common/utility.h"
 #include "Parser/LinkageSpec.h"
 #include "SynTree/Type.h"
+#include "SynTree/Expression.h"
 //#include "SynTree/Declaration.h"
 #include "Common/UniqueName.h"
@@ -79,4 +81,6 @@
 	ExpressionNode *set_argName( const std::string *aName );
 	ExpressionNode *set_argName( ExpressionNode *aDesignator );
+	bool get_extension() const { return extension; }
+	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
 	virtual void print( std::ostream &, int indent = 0) const = 0;
@@ -87,5 +91,19 @@
 	void printDesignation ( std::ostream &, int indent = 0) const;
   private:
-	ExpressionNode *argName;
+	ExpressionNode *argName = 0;
+	bool extension = false;
+};
+
+template< typename T >
+struct maybeBuild_t<Expression, T> {
+	static inline Expression * doit( const T *orig ) {
+		if ( orig ) {
+			Expression *p = orig->build();
+			p->set_extension( orig->get_extension() );
+			return p;
+		} else {
+			return 0;
+		} // if
+	}
 };
 
@@ -179,5 +197,5 @@
 				Cond, NCond,
 				// diadic
-				SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And,
+				SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
 				BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
 				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
@@ -574,5 +592,6 @@
 	while ( cur ) {
 		try {
-			SynTreeType *result = dynamic_cast< SynTreeType *>( cur->build() );
+//			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) );
+			SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) );
 			if ( result ) {
 				*out++ = result;
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Parser/StatementNode.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 30 14:39:39 2015
-// Update Count     : 130
+// Last Modified On : Thu Jun  9 14:18:46 2016
+// Update Count     : 132
 //
 
@@ -222,12 +222,12 @@
 				branches.pop_front();
 			} // if
-			return new IfStmt( labs, notZeroExpr( get_control()->build() ), thenb, elseb );
+			return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
 		}
 	  case While:
 		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( get_control()->build() ), branches.front() );
+		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
 	  case Do:
 		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( get_control()->build() ), branches.front(), true );
+		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
 	  case For:
 		{
@@ -244,20 +244,20 @@
 			Expression *cond = 0;
 			if ( ctl->get_condition() != 0 )
-				cond = notZeroExpr( ctl->get_condition()->build() );
+				cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
 
 			Expression *incr = 0;
 			if ( ctl->get_change() != 0 )
-				incr = ctl->get_change()->build();
+				incr = maybeBuild<Expression>(ctl->get_change());
 
 			return new ForStmt( labs, init, cond, incr, branches.front() );
 		}
 	  case Switch:
-		return new SwitchStmt( labs, get_control()->build(), branches );
+		return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
 	  case Choose:
-		return new ChooseStmt( labs, get_control()->build(), branches );
+		return new ChooseStmt( labs, maybeBuild<Expression>(get_control()), branches );
 	  case Fallthru:
 		return new FallthruStmt( labs );
 	  case Case: 
-		return new CaseStmt( labs, get_control()->build(), branches );
+		return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
 	  case Default:
 		return new CaseStmt( labs, 0, branches, true );
@@ -266,5 +266,5 @@
 			if ( get_target() == "" ) {					// computed goto
 				assert( get_control() != 0 );
-				return new BranchStmt( labs, get_control()->build(), BranchStmt::Goto );
+				return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
 			} // if
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Parser/parser.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -5299,5 +5299,5 @@
 /* Line 1806 of yacc.c  */
 #line 432 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
 
@@ -5809,5 +5809,5 @@
 /* Line 1806 of yacc.c  */
 #line 685 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
+    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) )/*->set_extension( true )*/; }
     break;
 
@@ -7122,5 +7122,5 @@
 /* Line 1806 of yacc.c  */
 #line 1475 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)/*->set_extension( true )*/; }
     break;
 
@@ -7129,5 +7129,5 @@
 /* Line 1806 of yacc.c  */
 #line 1478 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)/*->set_extension( true )*/; }
     break;
 
@@ -7913,5 +7913,5 @@
 /* Line 1806 of yacc.c  */
 #line 1994 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)/*->set_extension( true )*/; }
     break;
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/Parser/parser.yy	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun  7 08:08:31 2016
-// Update Count     : 1560
+// Last Modified On : Mon Jun 13 15:00:23 2016
+// Update Count     : 1578
 //
 
@@ -430,5 +430,5 @@
 		{ $$ = $1; }
 	| EXTENSION cast_expression							// GCC
-		{ $$ = $2; }
+		{ $$ = $2->set_extension( true ); }
 	| ptrref_operator cast_expression					// CFA
 		{ $$ = new CompositeExprNode( $1, $2 ); }
@@ -683,5 +683,5 @@
 		{ $$ = new StatementNode( $1 ); }
 	| EXTENSION declaration								// GCC
-		{ $$ = new StatementNode( $2 ); }
+		{ $$ = new StatementNode( $2 )/*->set_extension( true )*/; }
 	| function_definition
 		{ $$ = new StatementNode( $1 ); }
@@ -1473,8 +1473,8 @@
 	new_field_declaring_list ';'						// CFA, new style field declaration
 	| EXTENSION new_field_declaring_list ';'			// GCC
-		{ $$ = $2; }
+		{ $$ = $2/*->set_extension( true )*/; }
 	| field_declaring_list ';'
 	| EXTENSION field_declaring_list ';'				// GCC
-		{ $$ = $2; }
+		{ $$ = $2/*->set_extension( true )*/; }
 	;
 
@@ -1992,5 +1992,5 @@
 		}
 	| EXTENSION external_definition
-		{ $$ = $2; }
+		{ $$ = $2/*->set_extension( true )*/; }
 	;
 
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sat May 16 23:52:08 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Apr 20 14:24:03 2016
-// Update Count     : 24
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jun 13 16:13:54 2016
+// Update Count     : 25
 //
 
@@ -757,4 +757,5 @@
 		for ( std::list< DeclarationWithType* >::iterator i = declList.begin(); i != declList.end(); ++i ) {
 			VariableExpr newExpr( *i, nameExpr->get_argName() );
+			newExpr.set_extension( nameExpr->get_extension() );
 			alternatives.push_back( Alternative( newExpr.clone(), env, Cost() ) );
 			PRINT(
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/SynTree/Expression.cc	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -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 : Fri May 13 13:23:11 2016
-// Update Count     : 40
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jun 13 16:03:39 2016
+// Update Count     : 42
 //
 
@@ -32,5 +32,5 @@
 Expression::Expression( Expression *_aname ) : env( 0 ), argName( _aname ) {}
 
-Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ) {
+Expression::Expression( const Expression &other ) : env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ), extension( other.extension ) {
 	cloneAll( other.results, results );
 }
@@ -59,4 +59,8 @@
 		os << std::string( indent, ' ' ) << "with designator:";
 		argName->print( os, indent+2 );
+	} // if
+
+	if ( extension ) {
+		os << std::string( indent, ' ' ) << "with extension:";
 	} // if
 }
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 55ba73393e6f949adf1915b0709a5aa0b02fd192)
+++ src/SynTree/Expression.h	(revision e04ef3a33b7695190c509b61da6fe0cfcf46b265)
@@ -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 : Wed Apr 27 17:06:49 2016
-// Update Count     : 21
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Jun  8 17:05:30 2016
+// Update Count     : 22
 //
 
@@ -38,4 +38,6 @@
 	Expression *get_argName() const { return argName; }
 	void set_argName( Expression *name ) { argName = name; }
+	bool get_extension() const { return extension; }
+	void set_extension( bool exten ) { extension = exten; }
 
 	virtual Expression *clone() const = 0;
@@ -47,4 +49,5 @@
 	TypeSubstitution *env;
 	Expression* argName; // if expression is used as an argument, it can be "designated" by this name
+	bool extension = false;
 };
 
