@@ -620,3 +620,69 @@ TEST(TypeReflectionTest, OperatorSpelling) {
620
620
EXPECT_EQ (Cpp::GetOperatorFromSpelling (" ()" ), Cpp::OP_Call);
621
621
EXPECT_EQ (Cpp::GetOperatorFromSpelling (" invalid" ), Cpp::OP_None);
622
622
}
623
+
624
+ TEST (TypeReflectionTest, TypeQualifiers) {
625
+ Cpp::CreateInterpreter ();
626
+ Cpp::Declare (R"(
627
+ int *a;
628
+ int *__restrict__ b;
629
+ int *const c = 0;
630
+ int *volatile d;
631
+ int *const volatile e = nullptr;
632
+ int *__restrict__ const f = nullptr;
633
+ int *__restrict__ volatile g;
634
+ int *__restrict__ const volatile h = nullptr;
635
+ )" );
636
+
637
+ Cpp::TCppType_t a = Cpp::GetVariableType (Cpp::GetNamed (" a" ));
638
+ Cpp::TCppType_t b = Cpp::GetVariableType (Cpp::GetNamed (" b" ));
639
+ Cpp::TCppType_t c = Cpp::GetVariableType (Cpp::GetNamed (" c" ));
640
+ Cpp::TCppType_t d = Cpp::GetVariableType (Cpp::GetNamed (" d" ));
641
+ Cpp::TCppType_t e = Cpp::GetVariableType (Cpp::GetNamed (" e" ));
642
+ Cpp::TCppType_t f = Cpp::GetVariableType (Cpp::GetNamed (" f" ));
643
+ Cpp::TCppType_t g = Cpp::GetVariableType (Cpp::GetNamed (" g" ));
644
+ Cpp::TCppType_t h = Cpp::GetVariableType (Cpp::GetNamed (" h" ));
645
+
646
+ EXPECT_FALSE (Cpp::HasTypeQualifier (nullptr , Cpp::QualKind::Const));
647
+ EXPECT_FALSE (Cpp::RemoveTypeQualifier (nullptr , Cpp::QualKind::Const));
648
+ EXPECT_FALSE (Cpp::AddTypeQualifier (nullptr , Cpp::QualKind::Const));
649
+
650
+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Const));
651
+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Volatile));
652
+ EXPECT_FALSE (Cpp::HasTypeQualifier (a, Cpp::QualKind::Restrict));
653
+ EXPECT_TRUE (Cpp::HasTypeQualifier (b, Cpp::QualKind::Restrict));
654
+ EXPECT_TRUE (Cpp::HasTypeQualifier (c, Cpp::QualKind::Const));
655
+ EXPECT_TRUE (Cpp::HasTypeQualifier (d, Cpp::QualKind::Volatile));
656
+ EXPECT_TRUE (
657
+ Cpp::HasTypeQualifier (e, Cpp::QualKind::Const | Cpp::QualKind::Volatile));
658
+ EXPECT_TRUE (
659
+ Cpp::HasTypeQualifier (f, Cpp::QualKind::Const | Cpp::QualKind::Restrict));
660
+ EXPECT_TRUE (Cpp::HasTypeQualifier (g, Cpp::QualKind::Volatile |
661
+ Cpp::QualKind::Restrict));
662
+ EXPECT_TRUE (Cpp::HasTypeQualifier (h, Cpp::QualKind::Const |
663
+ Cpp::QualKind::Volatile |
664
+ Cpp::QualKind::Restrict));
665
+
666
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (b, Cpp::QualKind::Restrict));
667
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (c, Cpp::QualKind::Const));
668
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (d, Cpp::QualKind::Volatile));
669
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (e, Cpp::QualKind::Const |
670
+ Cpp::QualKind::Volatile));
671
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (f, Cpp::QualKind::Const |
672
+ Cpp::QualKind::Restrict));
673
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (g, Cpp::QualKind::Volatile |
674
+ Cpp::QualKind::Restrict));
675
+ EXPECT_EQ (a, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Const |
676
+ Cpp::QualKind::Volatile |
677
+ Cpp::QualKind::Restrict));
678
+ EXPECT_EQ (e, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Restrict));
679
+ EXPECT_EQ (b, Cpp::RemoveTypeQualifier (h, Cpp::QualKind::Const |
680
+ Cpp::QualKind::Volatile));
681
+
682
+ EXPECT_EQ (c, Cpp::AddTypeQualifier (a, Cpp::QualKind::Const));
683
+ EXPECT_EQ (d, Cpp::AddTypeQualifier (a, Cpp::QualKind::Volatile));
684
+ EXPECT_EQ (b, Cpp::AddTypeQualifier (a, Cpp::QualKind::Restrict));
685
+ EXPECT_EQ (h, Cpp::AddTypeQualifier (a, Cpp::QualKind::Const |
686
+ Cpp::QualKind::Volatile |
687
+ Cpp::QualKind::Restrict));
688
+ }
0 commit comments