Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision 436c0deab931c3644feb0da7d5a23034b5e7cfd3)
+++ src/SynTree/Constant.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 30 15:18:38 2015
-// Update Count     : 12
+// Last Modified On : Wed Jun 21 16:44:48 2017
+// Update Count     : 27
 //
 
@@ -21,9 +21,9 @@
 #include "Type.h"
 
-Constant::Constant( Type *type_, std::string value_ ) : type( type_ ), value( value_ ) {}
+Constant::Constant( Type * type, std::string rep, unsigned long long val ) : type( type ), rep( rep ), val( val ) {}
+Constant::Constant( Type * type, std::string rep, double val ) : type( type ), rep( rep ), val( val ) {}
 
-Constant::Constant( const Constant &other ) {
+Constant::Constant( const Constant &other ) : rep( other.rep ), val( other.val ) {
 	type = other.type->clone();
-	value = other.value;
 }
 
@@ -31,19 +31,17 @@
 
 Constant Constant::from_int( int i ) {
-	return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ) );
+	return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ), (unsigned long long int)i );
 }
 
 Constant Constant::from_ulong( unsigned long i ) {
-	return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ) );
+	return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ), (unsigned long long int)i );
 }
 
 Constant Constant::from_double( double d ) {
-	return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ) );
+	return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ), d );
 }
 
-Constant *Constant::clone() const { assert( false ); return 0; }
-
 void Constant::print( std::ostream &os ) const {
-	os << "(" << value;
+	os << "(" << rep << " " << val.ival;
 	if ( type ) {
 		os << ": ";
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision 436c0deab931c3644feb0da7d5a23034b5e7cfd3)
+++ src/SynTree/Constant.h	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 30 13:33:17 2016
-// Update Count     : 6
+// Last Modified On : Wed Jun 21 16:44:48 2017
+// Update Count     : 14
 //
 
@@ -23,12 +23,13 @@
 class Constant {
   public:
-	Constant( Type *type, std::string value );
-	Constant( const Constant &other );
+	Constant( Type * type, std::string rep, unsigned long long val );
+	Constant( Type * type, std::string rep, double val );
+	Constant( const Constant & other );
 	virtual ~Constant();
 
-	Type *get_type() { return type; }
-	void set_type( Type *newValue ) { type = newValue; }
-	std::string &get_value() { return value; }
-	void set_value( std::string newValue ) { value = newValue; }
+	Type * get_type() { return type; }
+	void set_type( Type * newValue ) { type = newValue; }
+	std::string & get_value() { return rep; }
+	void set_value( std::string newValue ) { rep = newValue; }
 
 	/// generates an integer constant of the given int
@@ -39,11 +40,16 @@
 	static Constant from_double( double d );
 
-	virtual Constant *clone() const;
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Constant *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os ) const;
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Constant * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os ) const;
   private:
-	Type *type;
-	std::string value;
+	Type * type;
+	std::string rep;
+	union Val {
+		unsigned long long ival;
+		double dval;
+		Val( unsigned long long ival ) : ival( ival ) {}
+		Val( double dval ) : dval( dval ) {}
+	} val;
 };
 
