Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision ca7843715cba84b4e9ce1f8e7b56b833997ab71d)
+++ src/Parser/ExpressionNode.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 17 21:31:01 2017
-// Update Count     : 527
+// Last Modified On : Wed Jun 21 16:44:46 2017
+// Update Count     : 541
 //
 
@@ -62,5 +62,5 @@
 	bool dec = true, Unsigned = false;					// decimal, unsigned constant
 	int size;											// 0 => int, 1 => long, 2 => long long
-	unsigned long long v;								// converted integral value
+	unsigned long long int v;								// converted integral value
 	size_t last = str.length() - 1;						// last character of constant
 
@@ -118,5 +118,5 @@
 	} // if
 
-	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str, v ) );
 	delete &str;										// created by lex
 	return ret;
@@ -133,4 +133,7 @@
 	// floating-point constant has minimum of 2 characters: 1. or .1
 	size_t last = str.length() - 1;
+	double v;
+
+	sscanf( str.c_str(), "%lg", &v );
 
 	if ( checkI( str[last] ) ) {						// imaginary ?
@@ -150,5 +153,5 @@
 	} // if
 
-	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str, v ) );
 	delete &str;										// created by lex
 	return ret;
@@ -156,5 +159,5 @@
 
 Expression *build_constantChar( const std::string & str ) {
-	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
+	Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str, (unsigned long long int)(unsigned char)str[1] ) );
 	delete &str;										// created by lex
 	return ret;
@@ -164,8 +167,8 @@
 	// string should probably be a primitive type
 	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ),
-				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
-											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
+								   new ConstantExpr( Constant::from_ulong( str.size() + 1 - 2 ) ),  // +1 for '\0' and -2 for '"'
 								   false, false );
-	ConstantExpr * ret = new ConstantExpr( Constant( at, str ) );
+	// constant 0 is ignored for pure string value
+	ConstantExpr * ret = new ConstantExpr( Constant( at, str, (unsigned long long int)0 ) );
 	delete &str;										// created by lex
 	return ret;
@@ -173,5 +176,6 @@
 
 Expression *build_constantZeroOne( const std::string & str ) {
-	Expression * ret = new ConstantExpr( Constant( str == "0" ? (Type *)new ZeroType( emptyQualifiers ) : (Type*)new OneType( emptyQualifiers ), str ) );
+	Expression * ret = new ConstantExpr( Constant( str == "0" ? (Type *)new ZeroType( emptyQualifiers ) : (Type*)new OneType( emptyQualifiers ), str,
+												   str == "0" ? (unsigned long long int)0 : (unsigned long long int)1 ) );
 	delete &str;										// created by lex
 	return ret;
@@ -184,7 +188,5 @@
 	std::stringstream ss( str );
 	ss >> a >> dot >> b;
-	UntypedMemberExpr * ret = new UntypedMemberExpr(
-		new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( b ) ) ),
-		new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::SignedInt ), toString( a ) ) ) );
+	UntypedMemberExpr * ret = new UntypedMemberExpr( new ConstantExpr( Constant::from_int( b ) ), new ConstantExpr( Constant::from_int( a ) ) );
 	delete &str;
 	return ret;
Index: src/Parser/parseutility.cc
===================================================================
--- src/Parser/parseutility.cc	(revision ca7843715cba84b4e9ce1f8e7b56b833997ab71d)
+++ src/Parser/parseutility.cc	(revision d56e5bcda08aa6816d20a750cfe4087387b7681f)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:30:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug 14 23:45:03 2016
-// Update Count     : 3
+// Last Modified On : Wed Jun 21 15:33:41 2017
+// Update Count     : 5
 //
 
@@ -26,5 +26,5 @@
 	UntypedExpr *comparison = new UntypedExpr( new NameExpr( "?!=?" ) );
 	comparison->get_args().push_back( orig );
-	comparison->get_args().push_back( new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0" ) ) );
+	comparison->get_args().push_back( new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0", (unsigned long long int)0 ) ) );
 	return new CastExpr( comparison, new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
 }
