1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | #ifndef LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H |
15 | #define LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H |
16 | |
17 | namespace clang { |
18 | |
19 | |
20 | enum ExceptionSpecificationType { |
21 | EST_None, |
22 | EST_DynamicNone, |
23 | EST_Dynamic, |
24 | EST_MSAny, |
25 | EST_BasicNoexcept, |
26 | EST_DependentNoexcept, |
27 | EST_NoexceptFalse, |
28 | EST_NoexceptTrue, |
29 | EST_Unevaluated, |
30 | EST_Uninstantiated, |
31 | EST_Unparsed |
32 | }; |
33 | |
34 | inline bool isDynamicExceptionSpec(ExceptionSpecificationType ESpecType) { |
35 | return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny; |
36 | } |
37 | |
38 | inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) { |
39 | return ESpecType >= EST_DependentNoexcept && |
40 | ESpecType <= EST_NoexceptTrue; |
41 | } |
42 | |
43 | inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) { |
44 | return ESpecType == EST_BasicNoexcept || isComputedNoexcept(ESpecType); |
45 | } |
46 | |
47 | inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) { |
48 | return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated; |
49 | } |
50 | |
51 | |
52 | enum CanThrowResult { |
53 | CT_Cannot, |
54 | CT_Dependent, |
55 | CT_Can |
56 | }; |
57 | |
58 | inline CanThrowResult mergeCanThrow(CanThrowResult CT1, CanThrowResult CT2) { |
59 | |
60 | |
61 | return CT1 > CT2 ? CT1 : CT2; |
62 | } |
63 | |
64 | } |
65 | |
66 | #endif |
67 | |