@@ -800,7 +800,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
800
800
const tags = tree .nodes .items (.tag );
801
801
const datas = tree .nodes .items (.data );
802
802
const main_tokens = tree .nodes .items (.main_token );
803
- const token_starts = tree .tokens .items (.start );
804
803
const token_tags = tree .tokens .items (.tag );
805
804
var n = node ;
806
805
var end_offset : TokenIndex = 0 ;
@@ -816,6 +815,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
816
815
.@"try" ,
817
816
.@"await" ,
818
817
.optional_type ,
818
+ .@"suspend" ,
819
819
.@"resume" ,
820
820
.@"nosuspend" ,
821
821
.@"comptime" ,
@@ -880,6 +880,9 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
880
880
.for_simple ,
881
881
.fn_proto_simple ,
882
882
.fn_proto_multi ,
883
+ .fn_proto_one ,
884
+ .fn_proto ,
885
+ .fn_decl ,
883
886
.ptr_type_aligned ,
884
887
.ptr_type_sentinel ,
885
888
.ptr_type ,
@@ -928,9 +931,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
928
931
.call , .async_call = > {
929
932
end_offset += 1 ; // for the rparen
930
933
const params = tree .extraData (datas [n ].rhs , Node .SubRange );
931
- if (params .end - params .start == 0 ) {
932
- return main_tokens [n ] + end_offset ;
933
- }
934
+ assert (params .end - params .start > 0 );
934
935
n = tree .extra_data [params .end - 1 ]; // last parameter
935
936
},
936
937
.tagged_union_enum_tag = > {
@@ -1122,48 +1123,28 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
1122
1123
n = datas [n ].rhs ;
1123
1124
} else {
1124
1125
const extra = tree .extraData (datas [n ].lhs , Node .LocalVarDecl );
1125
- if (extra .align_node != 0 ) {
1126
- end_offset += 1 ; // for the rparen
1127
- n = extra .align_node ;
1128
- } else if (extra .type_node != 0 ) {
1129
- n = extra .type_node ;
1130
- } else {
1131
- end_offset += 1 ; // from mut token to name
1132
- return main_tokens [n ] + end_offset ;
1133
- }
1126
+ assert (extra .align_node != 0 );
1127
+ end_offset += 1 ; // for the rparen
1128
+ n = extra .align_node ;
1134
1129
}
1135
1130
},
1136
1131
.container_field_init = > {
1137
1132
if (datas [n ].rhs != 0 ) {
1138
1133
n = datas [n ].rhs ;
1139
- } else if (datas [n ].lhs != 0 ) {
1140
- n = datas [n ].lhs ;
1141
1134
} else {
1142
- return main_tokens [n ] + end_offset ;
1135
+ assert (datas [n ].lhs != 0 );
1136
+ n = datas [n ].lhs ;
1143
1137
}
1144
1138
},
1145
1139
.container_field_align = > {
1146
- if (datas [n ].rhs != 0 ) {
1147
- end_offset += 1 ; // for the rparen
1148
- n = datas [n ].rhs ;
1149
- } else if (datas [n ].lhs != 0 ) {
1150
- n = datas [n ].lhs ;
1151
- } else {
1152
- return main_tokens [n ] + end_offset ;
1153
- }
1140
+ assert (datas [n ].rhs != 0 );
1141
+ end_offset += 1 ; // for the rparen
1142
+ n = datas [n ].rhs ;
1154
1143
},
1155
1144
.container_field = > {
1156
1145
const extra = tree .extraData (datas [n ].rhs , Node .ContainerField );
1157
- if (extra .value_expr != 0 ) {
1158
- n = extra .value_expr ;
1159
- } else if (extra .align_expr != 0 ) {
1160
- end_offset += 1 ; // for the rparen
1161
- n = extra .align_expr ;
1162
- } else if (datas [n ].lhs != 0 ) {
1163
- n = datas [n ].lhs ;
1164
- } else {
1165
- return main_tokens [n ] + end_offset ;
1166
- }
1146
+ assert (extra .value_expr != 0 );
1147
+ n = extra .value_expr ;
1167
1148
},
1168
1149
1169
1150
.array_init_one ,
@@ -1208,97 +1189,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
1208
1189
return main_tokens [n ] + end_offset ;
1209
1190
}
1210
1191
},
1211
- .fn_decl = > {
1212
- if (datas [n ].rhs != 0 ) {
1213
- n = datas [n ].rhs ;
1214
- } else {
1215
- n = datas [n ].lhs ;
1216
- }
1217
- },
1218
- .fn_proto_one = > {
1219
- const extra = tree .extraData (datas [n ].lhs , Node .FnProtoOne );
1220
- // addrspace, linksection, callconv, align can appear in any order, so we
1221
- // find the last one here.
1222
- var max_node : Node.Index = datas [n ].rhs ;
1223
- var max_start = token_starts [main_tokens [max_node ]];
1224
- var max_offset : TokenIndex = 0 ;
1225
- if (extra .align_expr != 0 ) {
1226
- const start = token_starts [main_tokens [extra .align_expr ]];
1227
- if (start > max_start ) {
1228
- max_node = extra .align_expr ;
1229
- max_start = start ;
1230
- max_offset = 1 ; // for the rparen
1231
- }
1232
- }
1233
- if (extra .addrspace_expr != 0 ) {
1234
- const start = token_starts [main_tokens [extra .addrspace_expr ]];
1235
- if (start > max_start ) {
1236
- max_node = extra .addrspace_expr ;
1237
- max_start = start ;
1238
- max_offset = 1 ; // for the rparen
1239
- }
1240
- }
1241
- if (extra .section_expr != 0 ) {
1242
- const start = token_starts [main_tokens [extra .section_expr ]];
1243
- if (start > max_start ) {
1244
- max_node = extra .section_expr ;
1245
- max_start = start ;
1246
- max_offset = 1 ; // for the rparen
1247
- }
1248
- }
1249
- if (extra .callconv_expr != 0 ) {
1250
- const start = token_starts [main_tokens [extra .callconv_expr ]];
1251
- if (start > max_start ) {
1252
- max_node = extra .callconv_expr ;
1253
- max_start = start ;
1254
- max_offset = 1 ; // for the rparen
1255
- }
1256
- }
1257
- n = max_node ;
1258
- end_offset += max_offset ;
1259
- },
1260
- .fn_proto = > {
1261
- const extra = tree .extraData (datas [n ].lhs , Node .FnProto );
1262
- // addrspace, linksection, callconv, align can appear in any order, so we
1263
- // find the last one here.
1264
- var max_node : Node.Index = datas [n ].rhs ;
1265
- var max_start = token_starts [main_tokens [max_node ]];
1266
- var max_offset : TokenIndex = 0 ;
1267
- if (extra .align_expr != 0 ) {
1268
- const start = token_starts [main_tokens [extra .align_expr ]];
1269
- if (start > max_start ) {
1270
- max_node = extra .align_expr ;
1271
- max_start = start ;
1272
- max_offset = 1 ; // for the rparen
1273
- }
1274
- }
1275
- if (extra .addrspace_expr != 0 ) {
1276
- const start = token_starts [main_tokens [extra .addrspace_expr ]];
1277
- if (start > max_start ) {
1278
- max_node = extra .addrspace_expr ;
1279
- max_start = start ;
1280
- max_offset = 1 ; // for the rparen
1281
- }
1282
- }
1283
- if (extra .section_expr != 0 ) {
1284
- const start = token_starts [main_tokens [extra .section_expr ]];
1285
- if (start > max_start ) {
1286
- max_node = extra .section_expr ;
1287
- max_start = start ;
1288
- max_offset = 1 ; // for the rparen
1289
- }
1290
- }
1291
- if (extra .callconv_expr != 0 ) {
1292
- const start = token_starts [main_tokens [extra .callconv_expr ]];
1293
- if (start > max_start ) {
1294
- max_node = extra .callconv_expr ;
1295
- max_start = start ;
1296
- max_offset = 1 ; // for the rparen
1297
- }
1298
- }
1299
- n = max_node ;
1300
- end_offset += max_offset ;
1301
- },
1302
1192
.while_cont = > {
1303
1193
const extra = tree .extraData (datas [n ].rhs , Node .WhileCont );
1304
1194
assert (extra .then_expr != 0 );
@@ -1318,13 +1208,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
1318
1208
const extra = @as (Node .For , @bitCast (datas [n ].rhs ));
1319
1209
n = tree .extra_data [datas [n ].lhs + extra .inputs + @intFromBool (extra .has_else )];
1320
1210
},
1321
- .@"suspend" = > {
1322
- if (datas [n ].lhs != 0 ) {
1323
- n = datas [n ].lhs ;
1324
- } else {
1325
- return main_tokens [n ] + end_offset ;
1326
- }
1327
- },
1328
1211
.array_type_sentinel = > {
1329
1212
const extra = tree .extraData (datas [n ].rhs , Node .ArrayTypeSentinel );
1330
1213
n = extra .elem_type ;
0 commit comments