mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
Dump more information about construct expressions (resolved and unresolved) when dumping the AST to JSON.
llvm-svn: 363926
This commit is contained in:
@@ -253,6 +253,8 @@ public:
|
||||
void VisitConstantExpr(const ConstantExpr *CE);
|
||||
void VisitInitListExpr(const InitListExpr *ILE);
|
||||
void VisitGenericSelectionExpr(const GenericSelectionExpr *GSE);
|
||||
void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *UCE);
|
||||
void VisitCXXConstructExpr(const CXXConstructExpr *CE);
|
||||
|
||||
void VisitIntegerLiteral(const IntegerLiteral *IL);
|
||||
void VisitCharacterLiteral(const CharacterLiteral *CL);
|
||||
|
||||
@@ -994,6 +994,38 @@ void JSONNodeDumper::VisitGenericSelectionExpr(
|
||||
attributeOnlyIfTrue("resultDependent", GSE->isResultDependent());
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitCXXUnresolvedConstructExpr(
|
||||
const CXXUnresolvedConstructExpr *UCE) {
|
||||
if (UCE->getType() != UCE->getTypeAsWritten())
|
||||
JOS.attribute("typeAsWritten", createQualType(UCE->getTypeAsWritten()));
|
||||
attributeOnlyIfTrue("list", UCE->isListInitialization());
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitCXXConstructExpr(const CXXConstructExpr *CE) {
|
||||
CXXConstructorDecl *Ctor = CE->getConstructor();
|
||||
JOS.attribute("ctorType", createQualType(Ctor->getType()));
|
||||
attributeOnlyIfTrue("elidable", CE->isElidable());
|
||||
attributeOnlyIfTrue("list", CE->isListInitialization());
|
||||
attributeOnlyIfTrue("initializer_list", CE->isStdInitListInitialization());
|
||||
attributeOnlyIfTrue("zeroing", CE->requiresZeroInitialization());
|
||||
attributeOnlyIfTrue("hadMultipleCandidates", CE->hadMultipleCandidates());
|
||||
|
||||
switch (CE->getConstructionKind()) {
|
||||
case CXXConstructExpr::CK_Complete:
|
||||
JOS.attribute("constructionKind", "complete");
|
||||
break;
|
||||
case CXXConstructExpr::CK_Delegating:
|
||||
JOS.attribute("constructionKind", "delegating");
|
||||
break;
|
||||
case CXXConstructExpr::CK_NonVirtualBase:
|
||||
JOS.attribute("constructionKind", "non-virtual base");
|
||||
break;
|
||||
case CXXConstructExpr::CK_VirtualBase:
|
||||
JOS.attribute("constructionKind", "virtual base");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitIntegerLiteral(const IntegerLiteral *IL) {
|
||||
JOS.attribute("value",
|
||||
IL->getValue().toString(
|
||||
|
||||
@@ -7738,7 +7738,12 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "desugaredQualType": "NS::X",
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue"
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void () noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
@@ -7835,6 +7840,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
@@ -7986,6 +7996,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
@@ -8153,7 +8168,12 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "desugaredQualType": "NS::X",
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue"
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void () noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
@@ -8249,6 +8269,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
@@ -8416,7 +8441,12 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "desugaredQualType": "NS::X",
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue"
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void () noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
@@ -8557,6 +8587,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
@@ -8708,6 +8743,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
@@ -8873,7 +8913,12 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue"
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void () noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
@@ -8969,6 +9014,11 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "qualType": "NS::X"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "rvalue",
|
||||
// CHECK-NEXT: "ctorType": {
|
||||
// CHECK-NEXT: "qualType": "void (const NS::X &) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hadMultipleCandidates": true,
|
||||
// CHECK-NEXT: "constructionKind": "complete",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user