Use std::string for ConstantExpression::*value() methods.

Bug: 31633795 memory leaks are partly fixed

Test: `mma`

Change-Id: Ia9275b86ca6d7445f4832994b5a70a2e93993eb1
diff --git a/ConstantExpression.cpp b/ConstantExpression.cpp
index 46c2985..bfb27c1 100644
--- a/ConstantExpression.cpp
+++ b/ConstantExpression.cpp
@@ -294,11 +294,11 @@
     SWITCH_KIND(mValueKind, CASE_TERNARY, mType = kConstExprUnknown; return;)
 }
 
-const char *ConstantExpression::expr() const {
-    return mFormatted.c_str();
+std::string ConstantExpression::expr() const {
+        return mFormatted;
 }
 
-const char *ConstantExpression::description() const {
+std::string ConstantExpression::description() const {
     static const char *const kName[] = {
         "bool",
         "void *",
@@ -317,14 +317,14 @@
         return expr();
     std::ostringstream os;
     os << "(" << kName[mValueKind] << ")" << expr();
-    return strdup(os.str().c_str());
+    return os.str();
 }
 
-const char *ConstantExpression::value() const {
+std::string ConstantExpression::value() const {
     return value0(mValueKind);
 }
 
-const char *ConstantExpression::cppValue(ScalarType::Kind castKind) const {
+std::string ConstantExpression::cppValue(ScalarType::Kind castKind) const {
     std::string literal(value0(castKind));
     // this is a hack to translate
     //       enum x : int64_t {  y = 1l << 63 };
@@ -347,10 +347,10 @@
     // add suffix if necessary.
     if(castKind == SK(UINT32) || castKind == SK(UINT64)) literal += "u";
     if(castKind == SK(UINT64) || castKind == SK(INT64)) literal += "ll";
-    return strdup(literal.c_str());
+    return literal;
 }
 
-const char *ConstantExpression::javaValue(ScalarType::Kind castKind) const {
+std::string ConstantExpression::javaValue(ScalarType::Kind castKind) const {
     switch(castKind) {
         case SK(UINT64): return value0(SK(INT64));
         case SK(UINT32): return value0(SK(INT32));
@@ -359,17 +359,17 @@
         case SK(BOOL)  :
             if(mType == kConstExprUnknown)
                 return expr();
-            return this->cast<bool>() ? strdup("true") : strdup("false");
+            return this->cast<bool>() ? "true" : "false";
         default: break;
     }
     return value0(castKind);
 }
 
-const char *ConstantExpression::value0(ScalarType::Kind castKind) const {
+std::string ConstantExpression::value0(ScalarType::Kind castKind) const {
     if(mType == kConstExprUnknown)
         return expr();
 
-#define CASE_STR(__type__) return strdup(std::to_string(this->cast<__type__>()).c_str());
+#define CASE_STR(__type__) return std::to_string(this->cast<__type__>());
 
     SWITCH_KIND(castKind, CASE_STR, return expr(); );
 }