Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/SynTree/Constant.cc	(revision 6a1dfdab0b3a899390e731091068f02d8d631676)
@@ -51,12 +51,12 @@
 }
 
-Constant Constant::from_string( std::string const & str ) {
-	return Constant(
-		new ArrayType(
-			noQualifiers,
-			new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ),
-			new ConstantExpr( Constant::from_int( str.size() + 1 /* \0 */ )),
-			false, false ),
-		std::string("\"") + str + "\"", (unsigned long long int)0 );
+Constant Constant::from_string( std::string const & cEscapedVal, Type *charType ) {
+	assert(cEscapedVal.length() >= 2);
+	assert(cEscapedVal.front() == '"');
+	assert(cEscapedVal.back() == '"');
+	ArrayType * at = new ArrayType( noQualifiers, charType,
+									new ConstantExpr( Constant::from_ulong( cEscapedVal.size() + 1 - 2 ) ), // +1 for '\0' and -2 for '"'
+									false, false );
+	return Constant( at, cEscapedVal, (unsigned long long int)0 );
 }
 
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision aaeacf4b17e26df880b846210c264be0d6cc771b)
+++ src/SynTree/Constant.h	(revision 6a1dfdab0b3a899390e731091068f02d8d631676)
@@ -52,5 +52,5 @@
 	static Constant from_double( double d );
 	/// generates an array of chars constant of the given string
-	static Constant from_string( std::string const & s );
+	static Constant from_string( std::string const & cEscapedVal, Type *charType  );
 
 	/// generates a null pointer value for the given type. void * if omitted.
