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(); );
}