mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 22:56:05 +00:00
StmtPrinter: Directly print types to the stream instead of taking a detour through getAsString.
llvm-svn: 175891
This commit is contained in:
parent
f2afe63fa5
commit
c5720e91a2
@ -812,7 +812,8 @@ void StmtPrinter::VisitUnaryOperator(UnaryOperator *Node) {
|
||||
|
||||
void StmtPrinter::VisitOffsetOfExpr(OffsetOfExpr *Node) {
|
||||
OS << "__builtin_offsetof(";
|
||||
OS << Node->getTypeSourceInfo()->getType().getAsString(Policy) << ", ";
|
||||
Node->getTypeSourceInfo()->getType().print(OS, Policy);
|
||||
OS << ", ";
|
||||
bool PrintedSomething = false;
|
||||
for (unsigned i = 0, n = Node->getNumComponents(); i < n; ++i) {
|
||||
OffsetOfExpr::OffsetOfNode ON = Node->getComponent(i);
|
||||
@ -860,9 +861,11 @@ void StmtPrinter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *Node){
|
||||
OS << "vec_step";
|
||||
break;
|
||||
}
|
||||
if (Node->isArgumentType())
|
||||
OS << "(" << Node->getArgumentType().getAsString(Policy) << ")";
|
||||
else {
|
||||
if (Node->isArgumentType()) {
|
||||
OS << '(';
|
||||
Node->getArgumentType().print(OS, Policy);
|
||||
OS << ')';
|
||||
} else {
|
||||
OS << " ";
|
||||
PrintExpr(Node->getArgumentExpr());
|
||||
}
|
||||
@ -877,7 +880,7 @@ void StmtPrinter::VisitGenericSelectionExpr(GenericSelectionExpr *Node) {
|
||||
if (T.isNull())
|
||||
OS << "default";
|
||||
else
|
||||
OS << T.getAsString(Policy);
|
||||
T.print(OS, Policy);
|
||||
OS << ": ";
|
||||
PrintExpr(Node->getAssocExpr(i));
|
||||
}
|
||||
@ -946,11 +949,15 @@ void StmtPrinter::VisitExtVectorElementExpr(ExtVectorElementExpr *Node) {
|
||||
OS << Node->getAccessor().getName();
|
||||
}
|
||||
void StmtPrinter::VisitCStyleCastExpr(CStyleCastExpr *Node) {
|
||||
OS << "(" << Node->getTypeAsWritten().getAsString(Policy) << ")";
|
||||
OS << '(';
|
||||
Node->getTypeAsWritten().print(OS, Policy);
|
||||
OS << ')';
|
||||
PrintExpr(Node->getSubExpr());
|
||||
}
|
||||
void StmtPrinter::VisitCompoundLiteralExpr(CompoundLiteralExpr *Node) {
|
||||
OS << "(" << Node->getType().getAsString(Policy) << ")";
|
||||
OS << '(';
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << ')';
|
||||
PrintExpr(Node->getInitializer());
|
||||
}
|
||||
void StmtPrinter::VisitImplicitCastExpr(ImplicitCastExpr *Node) {
|
||||
@ -1069,10 +1076,14 @@ void StmtPrinter::VisitDesignatedInitExpr(DesignatedInitExpr *Node) {
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *Node) {
|
||||
if (Policy.LangOpts.CPlusPlus)
|
||||
OS << "/*implicit*/" << Node->getType().getAsString(Policy) << "()";
|
||||
else {
|
||||
OS << "/*implicit*/(" << Node->getType().getAsString(Policy) << ")";
|
||||
if (Policy.LangOpts.CPlusPlus) {
|
||||
OS << "/*implicit*/";
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << "()";
|
||||
} else {
|
||||
OS << "/*implicit*/(";
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << ')';
|
||||
if (Node->getType()->isRecordType())
|
||||
OS << "{}";
|
||||
else
|
||||
@ -1084,7 +1095,7 @@ void StmtPrinter::VisitVAArgExpr(VAArgExpr *Node) {
|
||||
OS << "__builtin_va_arg(";
|
||||
PrintExpr(Node->getSubExpr());
|
||||
OS << ", ";
|
||||
OS << Node->getType().getAsString(Policy);
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << ")";
|
||||
}
|
||||
|
||||
@ -1193,7 +1204,8 @@ void StmtPrinter::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *Node) {
|
||||
|
||||
void StmtPrinter::VisitCXXNamedCastExpr(CXXNamedCastExpr *Node) {
|
||||
OS << Node->getCastName() << '<';
|
||||
OS << Node->getTypeAsWritten().getAsString(Policy) << ">(";
|
||||
Node->getTypeAsWritten().print(OS, Policy);
|
||||
OS << ">(";
|
||||
PrintExpr(Node->getSubExpr());
|
||||
OS << ")";
|
||||
}
|
||||
@ -1217,7 +1229,7 @@ void StmtPrinter::VisitCXXConstCastExpr(CXXConstCastExpr *Node) {
|
||||
void StmtPrinter::VisitCXXTypeidExpr(CXXTypeidExpr *Node) {
|
||||
OS << "typeid(";
|
||||
if (Node->isTypeOperand()) {
|
||||
OS << Node->getTypeOperand().getAsString(Policy);
|
||||
Node->getTypeOperand().print(OS, Policy);
|
||||
} else {
|
||||
PrintExpr(Node->getExprOperand());
|
||||
}
|
||||
@ -1227,7 +1239,7 @@ void StmtPrinter::VisitCXXTypeidExpr(CXXTypeidExpr *Node) {
|
||||
void StmtPrinter::VisitCXXUuidofExpr(CXXUuidofExpr *Node) {
|
||||
OS << "__uuidof(";
|
||||
if (Node->isTypeOperand()) {
|
||||
OS << Node->getTypeOperand().getAsString(Policy);
|
||||
Node->getTypeOperand().print(OS, Policy);
|
||||
} else {
|
||||
PrintExpr(Node->getExprOperand());
|
||||
}
|
||||
@ -1298,7 +1310,7 @@ void StmtPrinter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *Node) {
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *Node) {
|
||||
OS << Node->getType().getAsString(Policy);
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << "(";
|
||||
PrintExpr(Node->getSubExpr());
|
||||
OS << ")";
|
||||
@ -1309,7 +1321,7 @@ void StmtPrinter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *Node) {
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *Node) {
|
||||
OS << Node->getType().getAsString(Policy);
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << "(";
|
||||
for (CXXTemporaryObjectExpr::arg_iterator Arg = Node->arg_begin(),
|
||||
ArgEnd = Node->arg_end();
|
||||
@ -1379,8 +1391,7 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) {
|
||||
NeedComma = true;
|
||||
}
|
||||
std::string ParamStr = (*P)->getNameAsString();
|
||||
(*P)->getOriginalType().getAsStringInternal(ParamStr, Policy);
|
||||
OS << ParamStr;
|
||||
(*P)->getOriginalType().print(OS, Policy, ParamStr);
|
||||
}
|
||||
if (Method->isVariadic()) {
|
||||
if (NeedComma)
|
||||
@ -1403,8 +1414,10 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) {
|
||||
// FIXME: Attributes
|
||||
|
||||
// Print the trailing return type if it was specified in the source.
|
||||
if (Node->hasExplicitResultType())
|
||||
OS << " -> " << Proto->getResultType().getAsString(Policy);
|
||||
if (Node->hasExplicitResultType()) {
|
||||
OS << " -> ";
|
||||
Proto->getResultType().print(OS, Policy);
|
||||
}
|
||||
}
|
||||
|
||||
// Print the body.
|
||||
@ -1415,9 +1428,10 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) {
|
||||
|
||||
void StmtPrinter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *Node) {
|
||||
if (TypeSourceInfo *TSInfo = Node->getTypeSourceInfo())
|
||||
OS << TSInfo->getType().getAsString(Policy) << "()";
|
||||
TSInfo->getType().print(OS, Policy);
|
||||
else
|
||||
OS << Node->getType().getAsString(Policy) << "()";
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << "()";
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitCXXNewExpr(CXXNewExpr *E) {
|
||||
@ -1441,12 +1455,11 @@ void StmtPrinter::VisitCXXNewExpr(CXXNewExpr *E) {
|
||||
std::string TypeS;
|
||||
if (Expr *Size = E->getArraySize()) {
|
||||
llvm::raw_string_ostream s(TypeS);
|
||||
s << '[';
|
||||
Size->printPretty(s, Helper, Policy);
|
||||
s.flush();
|
||||
TypeS = "[" + TypeS + "]";
|
||||
s << ']';
|
||||
}
|
||||
E->getAllocatedType().getAsStringInternal(TypeS, Policy);
|
||||
OS << TypeS;
|
||||
E->getAllocatedType().print(OS, Policy, TypeS);
|
||||
if (E->isParenTypeId())
|
||||
OS << ")";
|
||||
|
||||
@ -1479,12 +1492,10 @@ void StmtPrinter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
|
||||
E->getQualifier()->print(OS, Policy);
|
||||
OS << "~";
|
||||
|
||||
std::string TypeS;
|
||||
if (IdentifierInfo *II = E->getDestroyedTypeIdentifier())
|
||||
OS << II->getName();
|
||||
else
|
||||
E->getDestroyedType().getAsStringInternal(TypeS, Policy);
|
||||
OS << TypeS;
|
||||
E->getDestroyedType().print(OS, Policy);
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitCXXConstructExpr(CXXConstructExpr *E) {
|
||||
@ -1513,7 +1524,7 @@ void StmtPrinter::VisitExprWithCleanups(ExprWithCleanups *E) {
|
||||
void
|
||||
StmtPrinter::VisitCXXUnresolvedConstructExpr(
|
||||
CXXUnresolvedConstructExpr *Node) {
|
||||
OS << Node->getTypeAsWritten().getAsString(Policy);
|
||||
Node->getTypeAsWritten().print(OS, Policy);
|
||||
OS << "(";
|
||||
for (CXXUnresolvedConstructExpr::arg_iterator Arg = Node->arg_begin(),
|
||||
ArgEnd = Node->arg_end();
|
||||
@ -1647,14 +1658,17 @@ static const char *getExpressionTraitName(ExpressionTrait ET) {
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) {
|
||||
OS << getTypeTraitName(E->getTrait()) << "("
|
||||
<< E->getQueriedType().getAsString(Policy) << ")";
|
||||
OS << getTypeTraitName(E->getTrait()) << '(';
|
||||
E->getQueriedType().print(OS, Policy);
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) {
|
||||
OS << getTypeTraitName(E->getTrait()) << "("
|
||||
<< E->getLhsType().getAsString(Policy) << ","
|
||||
<< E->getRhsType().getAsString(Policy) << ")";
|
||||
OS << getTypeTraitName(E->getTrait()) << '(';
|
||||
E->getLhsType().print(OS, Policy);
|
||||
OS << ',';
|
||||
E->getRhsType().print(OS, Policy);
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitTypeTraitExpr(TypeTraitExpr *E) {
|
||||
@ -1662,20 +1676,21 @@ void StmtPrinter::VisitTypeTraitExpr(TypeTraitExpr *E) {
|
||||
for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) {
|
||||
if (I > 0)
|
||||
OS << ", ";
|
||||
OS << E->getArg(I)->getType().getAsString(Policy);
|
||||
E->getArg(I)->getType().print(OS, Policy);
|
||||
}
|
||||
OS << ")";
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) {
|
||||
OS << getTypeTraitName(E->getTrait()) << "("
|
||||
<< E->getQueriedType().getAsString(Policy) << ")";
|
||||
OS << getTypeTraitName(E->getTrait()) << '(';
|
||||
E->getQueriedType().print(OS, Policy);
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitExpressionTraitExpr(ExpressionTraitExpr *E) {
|
||||
OS << getExpressionTraitName(E->getTrait()) << "(";
|
||||
PrintExpr(E->getQueriedExpression());
|
||||
OS << ")";
|
||||
OS << getExpressionTraitName(E->getTrait()) << '(';
|
||||
PrintExpr(E->getQueriedExpression());
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) {
|
||||
@ -1754,7 +1769,9 @@ void StmtPrinter::VisitObjCDictionaryLiteral(ObjCDictionaryLiteral *E) {
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) {
|
||||
OS << "@encode(" << Node->getEncodedType().getAsString(Policy) << ')';
|
||||
OS << "@encode(";
|
||||
Node->getEncodedType().print(OS, Policy);
|
||||
OS << ')';
|
||||
}
|
||||
|
||||
void StmtPrinter::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) {
|
||||
@ -1773,7 +1790,7 @@ void StmtPrinter::VisitObjCMessageExpr(ObjCMessageExpr *Mess) {
|
||||
break;
|
||||
|
||||
case ObjCMessageExpr::Class:
|
||||
OS << Mess->getClassReceiver().getAsString(Policy);
|
||||
Mess->getClassReceiver().print(OS, Policy);
|
||||
break;
|
||||
|
||||
case ObjCMessageExpr::SuperInstance:
|
||||
@ -1814,8 +1831,9 @@ StmtPrinter::VisitObjCIndirectCopyRestoreExpr(ObjCIndirectCopyRestoreExpr *E) {
|
||||
|
||||
void
|
||||
StmtPrinter::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) {
|
||||
OS << "(" << E->getBridgeKindName() << E->getType().getAsString(Policy)
|
||||
<< ")";
|
||||
OS << '(' << E->getBridgeKindName();
|
||||
E->getType().print(OS, Policy);
|
||||
OS << ')';
|
||||
PrintExpr(E->getSubExpr());
|
||||
}
|
||||
|
||||
@ -1829,13 +1847,11 @@ void StmtPrinter::VisitBlockExpr(BlockExpr *Node) {
|
||||
OS << "()";
|
||||
} else if (!BD->param_empty() || cast<FunctionProtoType>(AFT)->isVariadic()) {
|
||||
OS << '(';
|
||||
std::string ParamStr;
|
||||
for (BlockDecl::param_iterator AI = BD->param_begin(),
|
||||
E = BD->param_end(); AI != E; ++AI) {
|
||||
if (AI != BD->param_begin()) OS << ", ";
|
||||
ParamStr = (*AI)->getNameAsString();
|
||||
(*AI)->getType().getAsStringInternal(ParamStr, Policy);
|
||||
OS << ParamStr;
|
||||
std::string ParamStr = (*AI)->getNameAsString();
|
||||
(*AI)->getType().print(OS, Policy, ParamStr);
|
||||
}
|
||||
|
||||
const FunctionProtoType *FT = cast<FunctionProtoType>(AFT);
|
||||
@ -1855,7 +1871,8 @@ void StmtPrinter::VisitOpaqueValueExpr(OpaqueValueExpr *Node) {
|
||||
void StmtPrinter::VisitAsTypeExpr(AsTypeExpr *Node) {
|
||||
OS << "__builtin_astype(";
|
||||
PrintExpr(Node->getSrcExpr());
|
||||
OS << ", " << Node->getType().getAsString();
|
||||
OS << ", ";
|
||||
Node->getType().print(OS, Policy);
|
||||
OS << ")";
|
||||
}
|
||||
|
||||
|
@ -1603,11 +1603,7 @@ void QualType::print(const Type *ty, Qualifiers qs,
|
||||
raw_ostream &OS, const PrintingPolicy &policy,
|
||||
const Twine &PlaceHolder) {
|
||||
SmallString<128> PHBuf;
|
||||
StringRef PH;
|
||||
if (PlaceHolder.isSingleStringRef())
|
||||
PH = PlaceHolder.getSingleStringRef();
|
||||
else
|
||||
PH = PlaceHolder.toStringRef(PHBuf);
|
||||
StringRef PH = PlaceHolder.toStringRef(PHBuf);
|
||||
|
||||
TypePrinter(policy).print(ty, qs, OS, PH);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user