@@ -108,7 +108,7 @@ namespace clang {
108
108
109
109
// / The number of record fields required for the Expr class
110
110
// / itself.
111
- static const unsigned NumExprFields = NumStmtFields + 4 ;
111
+ static const unsigned NumExprFields = NumStmtFields + 2 ;
112
112
113
113
// / Read and initialize a ExplicitTemplateArgumentList structure.
114
114
void ReadTemplateKWAndArgsInfo (ASTTemplateKWAndArgsInfo &Args,
@@ -524,9 +524,13 @@ void ASTStmtReader::VisitCapturedStmt(CapturedStmt *S) {
524
524
void ASTStmtReader::VisitExpr (Expr *E) {
525
525
VisitStmt (E);
526
526
E->setType (Record.readType ());
527
- E->setDependence (static_cast <ExprDependence>(Record.readInt ()));
528
- E->setValueKind (static_cast <ExprValueKind>(Record.readInt ()));
529
- E->setObjectKind (static_cast <ExprObjectKind>(Record.readInt ()));
527
+ BitsUnpacker ExprBits (Record.readInt ());
528
+ E->setDependence (
529
+ static_cast <ExprDependence>(ExprBits.getNextBits (/* Width=*/ 5 )));
530
+ E->setValueKind (
531
+ static_cast <ExprValueKind>(ExprBits.getNextBits (/* Width=*/ 2 )));
532
+ E->setObjectKind (
533
+ static_cast <ExprObjectKind>(ExprBits.getNextBits (/* Width=*/ 3 )));
530
534
assert (Record.getIdx () == NumExprFields &&
531
535
" Incorrect expression field count" );
532
536
}
@@ -995,14 +999,19 @@ void ASTStmtReader::VisitOMPIteratorExpr(OMPIteratorExpr *E) {
995
999
996
1000
void ASTStmtReader::VisitCallExpr (CallExpr *E) {
997
1001
VisitExpr (E);
998
- unsigned NumArgs = Record.readInt ();
999
- bool HasFPFeatures = Record.readInt ();
1002
+
1003
+ BitsUnpacker CallExprBits = Record.readInt ();
1004
+
1005
+ unsigned NumArgs = CallExprBits.getNextBits (/* Width=*/ 16 );
1006
+ bool HasFPFeatures = CallExprBits.getNextBit ();
1007
+ E->setADLCallKind (
1008
+ static_cast <CallExpr::ADLCallKind>(CallExprBits.getNextBit ()));
1000
1009
assert ((NumArgs == E->getNumArgs ()) && " Wrong NumArgs!" );
1001
1010
E->setRParenLoc (readSourceLocation ());
1002
1011
E->setCallee (Record.readSubExpr ());
1003
1012
for (unsigned I = 0 ; I != NumArgs; ++I)
1004
1013
E->setArg (I, Record.readSubExpr ());
1005
- E-> setADLCallKind ( static_cast <CallExpr::ADLCallKind>(Record. readInt ()));
1014
+
1006
1015
if (HasFPFeatures)
1007
1016
E->setStoredFPFeatures (
1008
1017
FPOptionsOverride::getFromOpaqueInt (Record.readInt ()));
@@ -2013,14 +2022,15 @@ ASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) {
2013
2022
void ASTStmtReader::VisitOverloadExpr (OverloadExpr *E) {
2014
2023
VisitExpr (E);
2015
2024
2016
- unsigned NumResults = Record.readInt ();
2017
- bool HasTemplateKWAndArgsInfo = Record.readInt ();
2025
+ BitsUnpacker OverloadExprBits = Record.readInt ();
2026
+ unsigned NumResults = OverloadExprBits.getNextBits (/* Width=*/ 14 );
2027
+ bool HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit ();
2018
2028
assert ((E->getNumDecls () == NumResults) && " Wrong NumResults!" );
2019
2029
assert ((E->hasTemplateKWAndArgsInfo () == HasTemplateKWAndArgsInfo) &&
2020
2030
" Wrong HasTemplateKWAndArgsInfo!" );
2021
2031
2022
2032
if (HasTemplateKWAndArgsInfo) {
2023
- unsigned NumTemplateArgs = Record. readInt ( );
2033
+ unsigned NumTemplateArgs = OverloadExprBits. getNextBits ( /* Width= */ 14 );
2024
2034
ReadTemplateKWAndArgsInfo (*E->getTrailingASTTemplateKWAndArgsInfo (),
2025
2035
E->getTrailingTemplateArgumentLoc (),
2026
2036
NumTemplateArgs);
@@ -3024,8 +3034,9 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3024
3034
3025
3035
case EXPR_CALL:
3026
3036
S = CallExpr::CreateEmpty (
3027
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3028
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3037
+ Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields] & 0xffff ,
3038
+ /* HasFPFeatures=*/
3039
+ ((Record[ASTStmtReader::NumExprFields] >> 16 ) & 0x1 ), Empty);
3029
3040
break ;
3030
3041
3031
3042
case EXPR_RECOVERY:
@@ -3766,14 +3777,16 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3766
3777
3767
3778
case EXPR_CXX_OPERATOR_CALL:
3768
3779
S = CXXOperatorCallExpr::CreateEmpty (
3769
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3770
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3780
+ Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields] & 0xffff ,
3781
+ /* HasFPFeatures=*/
3782
+ ((Record[ASTStmtReader::NumExprFields] >> 16 ) & 0x1 ), Empty);
3771
3783
break ;
3772
3784
3773
3785
case EXPR_CXX_MEMBER_CALL:
3774
3786
S = CXXMemberCallExpr::CreateEmpty (
3775
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3776
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3787
+ Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields] & 0xffff ,
3788
+ /* HasFPFeatures=*/
3789
+ ((Record[ASTStmtReader::NumExprFields] >> 16 ) & 0x1 ), Empty);
3777
3790
break ;
3778
3791
3779
3792
case EXPR_CXX_REWRITTEN_BINARY_OPERATOR:
@@ -3948,23 +3961,21 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3948
3961
case EXPR_CXX_UNRESOLVED_MEMBER:
3949
3962
S = UnresolvedMemberExpr::CreateEmpty (
3950
3963
Context,
3951
- /* NumResults=*/ Record[ASTStmtReader::NumExprFields],
3952
- /* HasTemplateKWAndArgsInfo=*/ Record[ASTStmtReader::NumExprFields + 1 ],
3953
- /* NumTemplateArgs=*/
3954
- Record[ASTStmtReader::NumExprFields + 1 ]
3955
- ? Record[ASTStmtReader::NumExprFields + 2 ]
3956
- : 0 );
3964
+ /* NumResults=*/ Record[ASTStmtReader::NumExprFields] & ((1 << 14 ) - 1 ),
3965
+ /* HasTemplateKWAndArgsInfo=*/
3966
+ (Record[ASTStmtReader::NumExprFields] >> 14 ) & (0x1 ),
3967
+ /* NumTemplateArgs=*/ Record[ASTStmtReader::NumExprFields] >> 14 &
3968
+ ((1 << 14 ) - 1 ));
3957
3969
break ;
3958
3970
3959
3971
case EXPR_CXX_UNRESOLVED_LOOKUP:
3960
3972
S = UnresolvedLookupExpr::CreateEmpty (
3961
3973
Context,
3962
- /* NumResults=*/ Record[ASTStmtReader::NumExprFields],
3963
- /* HasTemplateKWAndArgsInfo=*/ Record[ASTStmtReader::NumExprFields + 1 ],
3964
- /* NumTemplateArgs=*/
3965
- Record[ASTStmtReader::NumExprFields + 1 ]
3966
- ? Record[ASTStmtReader::NumExprFields + 2 ]
3967
- : 0 );
3974
+ /* NumResults=*/ Record[ASTStmtReader::NumExprFields] & ((1 << 14 ) - 1 ),
3975
+ /* HasTemplateKWAndArgsInfo=*/
3976
+ (Record[ASTStmtReader::NumExprFields] >> 14 ) & (0x1 ),
3977
+ /* NumTemplateArgs=*/ Record[ASTStmtReader::NumExprFields] >> 14 &
3978
+ ((1 << 14 ) - 1 ));
3968
3979
break ;
3969
3980
3970
3981
case EXPR_TYPE_TRAIT:
@@ -4026,8 +4037,9 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
4026
4037
4027
4038
case EXPR_CUDA_KERNEL_CALL:
4028
4039
S = CUDAKernelCallExpr::CreateEmpty (
4029
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
4030
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
4040
+ Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields] & 0xffff ,
4041
+ /* HasFPFeatures=*/
4042
+ ((Record[ASTStmtReader::NumExprFields] >> 16 ) & 0x1 ), Empty);
4031
4043
break ;
4032
4044
4033
4045
case EXPR_ASTYPE:
0 commit comments