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