@@ -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);
@@ -3022,11 +3032,13 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3022
3032
Record[ASTStmtReader::NumExprFields]);
3023
3033
break ;
3024
3034
3025
- case EXPR_CALL:
3026
- S = CallExpr::CreateEmpty (
3027
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3028
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3035
+ case EXPR_CALL: {
3036
+ BitsUnpacker CallExprBits (Record[ASTStmtReader::NumExprFields]);
3037
+ auto NumArgs = CallExprBits.getNextBits (/* Width=*/ 16 );
3038
+ auto HasFPFeatures = CallExprBits.getNextBit ();
3039
+ S = CallExpr::CreateEmpty (Context, NumArgs, HasFPFeatures, Empty);
3029
3040
break ;
3041
+ }
3030
3042
3031
3043
case EXPR_RECOVERY:
3032
3044
S = RecoveryExpr::CreateEmpty (
@@ -3764,17 +3776,23 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3764
3776
break ;
3765
3777
}
3766
3778
3767
- case EXPR_CXX_OPERATOR_CALL:
3768
- S = CXXOperatorCallExpr::CreateEmpty (
3769
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3770
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3779
+ case EXPR_CXX_OPERATOR_CALL: {
3780
+ BitsUnpacker CallExprBits (Record[ASTStmtReader::NumExprFields]);
3781
+ auto NumArgs = CallExprBits.getNextBits (/* Width=*/ 16 );
3782
+ auto HasFPFeatures = CallExprBits.getNextBit ();
3783
+ S = CXXOperatorCallExpr::CreateEmpty (Context, NumArgs, HasFPFeatures,
3784
+ Empty);
3771
3785
break ;
3786
+ }
3772
3787
3773
- case EXPR_CXX_MEMBER_CALL:
3774
- S = CXXMemberCallExpr::CreateEmpty (
3775
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
3776
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
3788
+ case EXPR_CXX_MEMBER_CALL: {
3789
+ BitsUnpacker CallExprBits (Record[ASTStmtReader::NumExprFields]);
3790
+ auto NumArgs = CallExprBits.getNextBits (/* Width=*/ 16 );
3791
+ auto HasFPFeatures = CallExprBits.getNextBit ();
3792
+ S = CXXMemberCallExpr::CreateEmpty (Context, NumArgs, HasFPFeatures,
3793
+ Empty);
3777
3794
break ;
3795
+ }
3778
3796
3779
3797
case EXPR_CXX_REWRITTEN_BINARY_OPERATOR:
3780
3798
S = new (Context) CXXRewrittenBinaryOperator (Empty);
@@ -3948,23 +3966,21 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
3948
3966
case EXPR_CXX_UNRESOLVED_MEMBER:
3949
3967
S = UnresolvedMemberExpr::CreateEmpty (
3950
3968
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 );
3969
+ /* NumResults=*/ Record[ASTStmtReader::NumExprFields] & ((1 << 14 ) - 1 ),
3970
+ /* HasTemplateKWAndArgsInfo=*/
3971
+ (Record[ASTStmtReader::NumExprFields] >> 14 ) & (0x1 ),
3972
+ /* NumTemplateArgs=*/ Record[ASTStmtReader::NumExprFields] >> 14 &
3973
+ ((1 << 14 ) - 1 ));
3957
3974
break ;
3958
3975
3959
3976
case EXPR_CXX_UNRESOLVED_LOOKUP:
3960
3977
S = UnresolvedLookupExpr::CreateEmpty (
3961
3978
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 );
3979
+ /* NumResults=*/ Record[ASTStmtReader::NumExprFields] & ((1 << 14 ) - 1 ),
3980
+ /* HasTemplateKWAndArgsInfo=*/
3981
+ (Record[ASTStmtReader::NumExprFields] >> 14 ) & (0x1 ),
3982
+ /* NumTemplateArgs=*/ Record[ASTStmtReader::NumExprFields] >> 14 &
3983
+ ((1 << 14 ) - 1 ));
3968
3984
break ;
3969
3985
3970
3986
case EXPR_TYPE_TRAIT:
@@ -4024,11 +4040,14 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
4024
4040
S = new (Context) OpaqueValueExpr (Empty);
4025
4041
break ;
4026
4042
4027
- case EXPR_CUDA_KERNEL_CALL:
4028
- S = CUDAKernelCallExpr::CreateEmpty (
4029
- Context, /* NumArgs=*/ Record[ASTStmtReader::NumExprFields],
4030
- /* HasFPFeatures=*/ Record[ASTStmtReader::NumExprFields + 1 ], Empty);
4043
+ case EXPR_CUDA_KERNEL_CALL: {
4044
+ BitsUnpacker CallExprBits (Record[ASTStmtReader::NumExprFields]);
4045
+ auto NumArgs = CallExprBits.getNextBits (/* Width=*/ 16 );
4046
+ auto HasFPFeatures = CallExprBits.getNextBit ();
4047
+ S = CUDAKernelCallExpr::CreateEmpty (Context, NumArgs, HasFPFeatures,
4048
+ Empty);
4031
4049
break ;
4050
+ }
4032
4051
4033
4052
case EXPR_ASTYPE:
4034
4053
S = new (Context) AsTypeExpr (Empty);
0 commit comments