void Token::stringify(std::ostream& os, bool varid, bool attributes, bool macro) const { if (attributes) { if (isUnsigned()) os << "unsigned "; else if (isSigned()) os << "signed "; if (isLong()) { if (_type == eString || _type == eChar) os << "L"; else os << "long "; } } if (macro && isExpandedMacro()) os << "$"; if (_str[0] != '\"' || _str.find("\0") == std::string::npos) os << _str; else { for (std::size_t i = 0U; i < _str.size(); ++i) { if (_str[i] == '\0') os << "\\0"; else os << _str[i]; } } if (varid && _varId != 0) os << '@' << _varId; }
std::string Token::astStringVerbose(const unsigned int indent1, const unsigned int indent2) const { std::string ret; if (isExpandedMacro()) ret += '$'; ret += _str; if (valuetype) ret += " \'" + valuetype->str() + '\''; ret += '\n'; if (_astOperand1) { unsigned int i1 = indent1, i2 = indent2 + 2; if (indent1==indent2 && !_astOperand2) i1 += 2; ret += indent(indent1,indent2) + (_astOperand2 ? "|-" : "`-") + _astOperand1->astStringVerbose(i1,i2); } if (_astOperand2) { unsigned int i1 = indent1, i2 = indent2 + 2; if (indent1==indent2) i1 += 2; ret += indent(indent1,indent2) + "`-" + _astOperand2->astStringVerbose(i1,i2); } return ret; }
std::string Token::astStringVerbose(const unsigned int indent1, const unsigned int indent2) const { std::string ret; if (isExpandedMacro()) ret += "$"; ret += _str + "\n"; if (_astOperand1) { unsigned int i1 = indent1, i2 = indent2 + 2; if (indent1==indent2 && !_astOperand2) i1 += 2; ret += indent(indent1,indent2) + (_astOperand2 ? "|-" : "`-") + _astOperand1->astStringVerbose(i1,i2); } if (_astOperand2) { unsigned int i1 = indent1, i2 = indent2 + 2; if (indent1==indent2) i1 += 2; ret += indent(indent1,indent2) + "`-" + _astOperand2->astStringVerbose(i1,i2); } return ret; }