Created
January 14, 2025 18:40
-
-
Save amiremohamadi/00bac164fb177195432ba18daad4ed15 to your computer and use it in GitHub Desktop.
simple implementation of ++ operator for python 3.10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/Doc/library/token-list.inc b/Doc/library/token-list.inc | |
index 1a99f05..8396101 100644 | |
--- a/Doc/library/token-list.inc | |
+++ b/Doc/library/token-list.inc | |
@@ -129,6 +129,10 @@ | |
Token value for ``"**"``. | |
+.. data:: PLUSPLUS | |
+ | |
+ Token value for ``"++"``. | |
+ | |
.. data:: PLUSEQUAL | |
Token value for ``"+="``. | |
diff --git a/Grammar/Tokens b/Grammar/Tokens | |
index 1f3e3b0..684e99f 100644 | |
--- a/Grammar/Tokens | |
+++ b/Grammar/Tokens | |
@@ -35,6 +35,7 @@ CIRCUMFLEX '^' | |
LEFTSHIFT '<<' | |
RIGHTSHIFT '>>' | |
DOUBLESTAR '**' | |
+PLUSPLUS '++' | |
PLUSEQUAL '+=' | |
MINEQUAL '-=' | |
STAREQUAL '*=' | |
diff --git a/Grammar/python.gram b/Grammar/python.gram | |
index de582d2..139c044 100644 | |
--- a/Grammar/python.gram | |
+++ b/Grammar/python.gram | |
@@ -102,10 +102,15 @@ assignment[stmt_ty]: | |
CHECK_VERSION(stmt_ty, 6, "Variable annotations syntax is", _PyAST_AnnAssign(a, b, c, 0, EXTRA)) } | |
| a[asdl_expr_seq*]=(z=star_targets '=' { z })+ b=(yield_expr | star_expressions) !'=' tc=[TYPE_COMMENT] { | |
_PyAST_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) } | |
+ | a=single_target b=unaryassign { | |
+ _PyAST_AugAssign(a, b->kind, 0, EXTRA) } | |
| a=single_target b=augassign ~ c=(yield_expr | star_expressions) { | |
_PyAST_AugAssign(a, b->kind, c, EXTRA) } | |
| invalid_assignment | |
+unaryassign[AugOperator*]: | |
+ | '++' { _PyPegen_augoperator(p, PlusPlus) } | |
+ | |
augassign[AugOperator*]: | |
| '+=' { _PyPegen_augoperator(p, Add) } | |
| '-=' { _PyPegen_augoperator(p, Sub) } | |
diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h | |
index ebb6a90..4506650 100644 | |
--- a/Include/internal/pycore_ast.h | |
+++ b/Include/internal/pycore_ast.h | |
@@ -24,7 +24,7 @@ typedef enum _boolop { And=1, Or=2 } boolop_ty; | |
typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7, | |
LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12, | |
- FloorDiv=13 } operator_ty; | |
+ FloorDiv=13, PlusPlus=14 } operator_ty; | |
typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty; | |
diff --git a/Include/opcode.h b/Include/opcode.h | |
index 5203975..3da9915 100644 | |
--- a/Include/opcode.h | |
+++ b/Include/opcode.h | |
@@ -135,6 +135,8 @@ extern "C" { | |
#define SET_UPDATE 163 | |
#define DICT_MERGE 164 | |
#define DICT_UPDATE 165 | |
+#define INPLACE_PLUS_PLUS 166 | |
+#define UNARY_PLUS_PLUS 167 | |
#ifdef NEED_OPCODE_JUMP_TABLES | |
static uint32_t _PyOpcode_RelativeJump[8] = { | |
0U, | |
diff --git a/Include/token.h b/Include/token.h | |
index eb1b9ea..4b0135a 100644 | |
--- a/Include/token.h | |
+++ b/Include/token.h | |
@@ -46,32 +46,33 @@ extern "C" { | |
#define LEFTSHIFT 33 | |
#define RIGHTSHIFT 34 | |
#define DOUBLESTAR 35 | |
-#define PLUSEQUAL 36 | |
-#define MINEQUAL 37 | |
-#define STAREQUAL 38 | |
-#define SLASHEQUAL 39 | |
-#define PERCENTEQUAL 40 | |
-#define AMPEREQUAL 41 | |
-#define VBAREQUAL 42 | |
-#define CIRCUMFLEXEQUAL 43 | |
-#define LEFTSHIFTEQUAL 44 | |
-#define RIGHTSHIFTEQUAL 45 | |
-#define DOUBLESTAREQUAL 46 | |
-#define DOUBLESLASH 47 | |
-#define DOUBLESLASHEQUAL 48 | |
-#define AT 49 | |
-#define ATEQUAL 50 | |
-#define RARROW 51 | |
-#define ELLIPSIS 52 | |
-#define COLONEQUAL 53 | |
-#define OP 54 | |
-#define AWAIT 55 | |
-#define ASYNC 56 | |
-#define TYPE_IGNORE 57 | |
-#define TYPE_COMMENT 58 | |
-#define SOFT_KEYWORD 59 | |
-#define ERRORTOKEN 60 | |
-#define N_TOKENS 64 | |
+#define PLUSPLUS 36 | |
+#define PLUSEQUAL 37 | |
+#define MINEQUAL 38 | |
+#define STAREQUAL 39 | |
+#define SLASHEQUAL 40 | |
+#define PERCENTEQUAL 41 | |
+#define AMPEREQUAL 42 | |
+#define VBAREQUAL 43 | |
+#define CIRCUMFLEXEQUAL 44 | |
+#define LEFTSHIFTEQUAL 45 | |
+#define RIGHTSHIFTEQUAL 46 | |
+#define DOUBLESTAREQUAL 47 | |
+#define DOUBLESLASH 48 | |
+#define DOUBLESLASHEQUAL 49 | |
+#define AT 50 | |
+#define ATEQUAL 51 | |
+#define RARROW 52 | |
+#define ELLIPSIS 53 | |
+#define COLONEQUAL 54 | |
+#define OP 55 | |
+#define AWAIT 56 | |
+#define ASYNC 57 | |
+#define TYPE_IGNORE 58 | |
+#define TYPE_COMMENT 59 | |
+#define SOFT_KEYWORD 60 | |
+#define ERRORTOKEN 61 | |
+#define N_TOKENS 65 | |
#define NT_OFFSET 256 | |
/* Special definitions for cooperation with parser */ | |
diff --git a/Lib/token.py b/Lib/token.py | |
index 9d0c0bf..a714c51 100644 | |
--- a/Lib/token.py | |
+++ b/Lib/token.py | |
@@ -39,36 +39,37 @@ | |
LEFTSHIFT = 33 | |
RIGHTSHIFT = 34 | |
DOUBLESTAR = 35 | |
-PLUSEQUAL = 36 | |
-MINEQUAL = 37 | |
-STAREQUAL = 38 | |
-SLASHEQUAL = 39 | |
-PERCENTEQUAL = 40 | |
-AMPEREQUAL = 41 | |
-VBAREQUAL = 42 | |
-CIRCUMFLEXEQUAL = 43 | |
-LEFTSHIFTEQUAL = 44 | |
-RIGHTSHIFTEQUAL = 45 | |
-DOUBLESTAREQUAL = 46 | |
-DOUBLESLASH = 47 | |
-DOUBLESLASHEQUAL = 48 | |
-AT = 49 | |
-ATEQUAL = 50 | |
-RARROW = 51 | |
-ELLIPSIS = 52 | |
-COLONEQUAL = 53 | |
-OP = 54 | |
-AWAIT = 55 | |
-ASYNC = 56 | |
-TYPE_IGNORE = 57 | |
-TYPE_COMMENT = 58 | |
-SOFT_KEYWORD = 59 | |
+PLUSPLUS = 36 | |
+PLUSEQUAL = 37 | |
+MINEQUAL = 38 | |
+STAREQUAL = 39 | |
+SLASHEQUAL = 40 | |
+PERCENTEQUAL = 41 | |
+AMPEREQUAL = 42 | |
+VBAREQUAL = 43 | |
+CIRCUMFLEXEQUAL = 44 | |
+LEFTSHIFTEQUAL = 45 | |
+RIGHTSHIFTEQUAL = 46 | |
+DOUBLESTAREQUAL = 47 | |
+DOUBLESLASH = 48 | |
+DOUBLESLASHEQUAL = 49 | |
+AT = 50 | |
+ATEQUAL = 51 | |
+RARROW = 52 | |
+ELLIPSIS = 53 | |
+COLONEQUAL = 54 | |
+OP = 55 | |
+AWAIT = 56 | |
+ASYNC = 57 | |
+TYPE_IGNORE = 58 | |
+TYPE_COMMENT = 59 | |
+SOFT_KEYWORD = 60 | |
# These aren't used by the C tokenizer but are needed for tokenize.py | |
-ERRORTOKEN = 60 | |
-COMMENT = 61 | |
-NL = 62 | |
-ENCODING = 63 | |
-N_TOKENS = 64 | |
+ERRORTOKEN = 61 | |
+COMMENT = 62 | |
+NL = 63 | |
+ENCODING = 64 | |
+N_TOKENS = 65 | |
# Special definitions for cooperation with parser | |
NT_OFFSET = 256 | |
@@ -90,6 +91,7 @@ | |
'**=': DOUBLESTAREQUAL, | |
'*=': STAREQUAL, | |
'+': PLUS, | |
+ '++': PLUSPLUS, | |
'+=': PLUSEQUAL, | |
',': COMMA, | |
'-': MINUS, | |
diff --git a/Parser/parser.c b/Parser/parser.c | |
index b1d8427..5c51c9b 100644 | |
--- a/Parser/parser.c | |
+++ b/Parser/parser.c | |
@@ -86,422 +86,423 @@ static char *soft_keywords[] = { | |
#define simple_stmt_type 1010 | |
#define compound_stmt_type 1011 | |
#define assignment_type 1012 | |
-#define augassign_type 1013 | |
-#define global_stmt_type 1014 | |
-#define nonlocal_stmt_type 1015 | |
-#define yield_stmt_type 1016 | |
-#define assert_stmt_type 1017 | |
-#define del_stmt_type 1018 | |
-#define import_stmt_type 1019 | |
-#define import_name_type 1020 | |
-#define import_from_type 1021 | |
-#define import_from_targets_type 1022 | |
-#define import_from_as_names_type 1023 | |
-#define import_from_as_name_type 1024 | |
-#define dotted_as_names_type 1025 | |
-#define dotted_as_name_type 1026 | |
-#define dotted_name_type 1027 // Left-recursive | |
-#define if_stmt_type 1028 | |
-#define elif_stmt_type 1029 | |
-#define else_block_type 1030 | |
-#define while_stmt_type 1031 | |
-#define for_stmt_type 1032 | |
-#define with_stmt_type 1033 | |
-#define with_item_type 1034 | |
-#define try_stmt_type 1035 | |
-#define except_block_type 1036 | |
-#define finally_block_type 1037 | |
-#define match_stmt_type 1038 | |
-#define subject_expr_type 1039 | |
-#define case_block_type 1040 | |
-#define guard_type 1041 | |
-#define patterns_type 1042 | |
-#define pattern_type 1043 | |
-#define as_pattern_type 1044 | |
-#define or_pattern_type 1045 | |
-#define closed_pattern_type 1046 | |
-#define literal_pattern_type 1047 | |
-#define literal_expr_type 1048 | |
-#define complex_number_type 1049 | |
-#define signed_number_type 1050 | |
-#define signed_real_number_type 1051 | |
-#define real_number_type 1052 | |
-#define imaginary_number_type 1053 | |
-#define capture_pattern_type 1054 | |
-#define pattern_capture_target_type 1055 | |
-#define wildcard_pattern_type 1056 | |
-#define value_pattern_type 1057 | |
-#define attr_type 1058 // Left-recursive | |
-#define name_or_attr_type 1059 // Left-recursive | |
-#define group_pattern_type 1060 | |
-#define sequence_pattern_type 1061 | |
-#define open_sequence_pattern_type 1062 | |
-#define maybe_sequence_pattern_type 1063 | |
-#define maybe_star_pattern_type 1064 | |
-#define star_pattern_type 1065 | |
-#define mapping_pattern_type 1066 | |
-#define items_pattern_type 1067 | |
-#define key_value_pattern_type 1068 | |
-#define double_star_pattern_type 1069 | |
-#define class_pattern_type 1070 | |
-#define positional_patterns_type 1071 | |
-#define keyword_patterns_type 1072 | |
-#define keyword_pattern_type 1073 | |
-#define return_stmt_type 1074 | |
-#define raise_stmt_type 1075 | |
-#define function_def_type 1076 | |
-#define function_def_raw_type 1077 | |
-#define func_type_comment_type 1078 | |
-#define params_type 1079 | |
-#define parameters_type 1080 | |
-#define slash_no_default_type 1081 | |
-#define slash_with_default_type 1082 | |
-#define star_etc_type 1083 | |
-#define kwds_type 1084 | |
-#define param_no_default_type 1085 | |
-#define param_with_default_type 1086 | |
-#define param_maybe_default_type 1087 | |
-#define param_type 1088 | |
-#define annotation_type 1089 | |
-#define default_type 1090 | |
-#define decorators_type 1091 | |
-#define class_def_type 1092 | |
-#define class_def_raw_type 1093 | |
-#define block_type 1094 | |
-#define star_expressions_type 1095 | |
-#define star_expression_type 1096 | |
-#define star_named_expressions_type 1097 | |
-#define star_named_expression_type 1098 | |
-#define assignment_expression_type 1099 | |
-#define named_expression_type 1100 | |
-#define annotated_rhs_type 1101 | |
-#define expressions_type 1102 | |
-#define expression_type 1103 | |
-#define lambdef_type 1104 | |
-#define lambda_params_type 1105 | |
-#define lambda_parameters_type 1106 | |
-#define lambda_slash_no_default_type 1107 | |
-#define lambda_slash_with_default_type 1108 | |
-#define lambda_star_etc_type 1109 | |
-#define lambda_kwds_type 1110 | |
-#define lambda_param_no_default_type 1111 | |
-#define lambda_param_with_default_type 1112 | |
-#define lambda_param_maybe_default_type 1113 | |
-#define lambda_param_type 1114 | |
-#define disjunction_type 1115 | |
-#define conjunction_type 1116 | |
-#define inversion_type 1117 | |
-#define comparison_type 1118 | |
-#define compare_op_bitwise_or_pair_type 1119 | |
-#define eq_bitwise_or_type 1120 | |
-#define noteq_bitwise_or_type 1121 | |
-#define lte_bitwise_or_type 1122 | |
-#define lt_bitwise_or_type 1123 | |
-#define gte_bitwise_or_type 1124 | |
-#define gt_bitwise_or_type 1125 | |
-#define notin_bitwise_or_type 1126 | |
-#define in_bitwise_or_type 1127 | |
-#define isnot_bitwise_or_type 1128 | |
-#define is_bitwise_or_type 1129 | |
-#define bitwise_or_type 1130 // Left-recursive | |
-#define bitwise_xor_type 1131 // Left-recursive | |
-#define bitwise_and_type 1132 // Left-recursive | |
-#define shift_expr_type 1133 // Left-recursive | |
-#define sum_type 1134 // Left-recursive | |
-#define term_type 1135 // Left-recursive | |
-#define factor_type 1136 | |
-#define power_type 1137 | |
-#define await_primary_type 1138 | |
-#define primary_type 1139 // Left-recursive | |
-#define slices_type 1140 | |
-#define slice_type 1141 | |
-#define atom_type 1142 | |
-#define strings_type 1143 | |
-#define list_type 1144 | |
-#define listcomp_type 1145 | |
-#define tuple_type 1146 | |
-#define group_type 1147 | |
-#define genexp_type 1148 | |
-#define set_type 1149 | |
-#define setcomp_type 1150 | |
-#define dict_type 1151 | |
-#define dictcomp_type 1152 | |
-#define double_starred_kvpairs_type 1153 | |
-#define double_starred_kvpair_type 1154 | |
-#define kvpair_type 1155 | |
-#define for_if_clauses_type 1156 | |
-#define for_if_clause_type 1157 | |
-#define yield_expr_type 1158 | |
-#define arguments_type 1159 | |
-#define args_type 1160 | |
-#define kwargs_type 1161 | |
-#define starred_expression_type 1162 | |
-#define kwarg_or_starred_type 1163 | |
-#define kwarg_or_double_starred_type 1164 | |
-#define star_targets_type 1165 | |
-#define star_targets_list_seq_type 1166 | |
-#define star_targets_tuple_seq_type 1167 | |
-#define star_target_type 1168 | |
-#define target_with_star_atom_type 1169 | |
-#define star_atom_type 1170 | |
-#define single_target_type 1171 | |
-#define single_subscript_attribute_target_type 1172 | |
-#define del_targets_type 1173 | |
-#define del_target_type 1174 | |
-#define del_t_atom_type 1175 | |
-#define t_primary_type 1176 // Left-recursive | |
-#define t_lookahead_type 1177 | |
-#define invalid_arguments_type 1178 | |
-#define invalid_kwarg_type 1179 | |
-#define expression_without_invalid_type 1180 | |
-#define invalid_legacy_expression_type 1181 | |
-#define invalid_expression_type 1182 | |
-#define invalid_named_expression_type 1183 | |
-#define invalid_assignment_type 1184 | |
-#define invalid_ann_assign_target_type 1185 | |
-#define invalid_del_stmt_type 1186 | |
-#define invalid_block_type 1187 | |
-#define invalid_comprehension_type 1188 | |
-#define invalid_dict_comprehension_type 1189 | |
-#define invalid_parameters_type 1190 | |
-#define invalid_parameters_helper_type 1191 | |
-#define invalid_lambda_parameters_type 1192 | |
-#define invalid_lambda_parameters_helper_type 1193 | |
-#define invalid_star_etc_type 1194 | |
-#define invalid_lambda_star_etc_type 1195 | |
-#define invalid_double_type_comments_type 1196 | |
-#define invalid_with_item_type 1197 | |
-#define invalid_for_target_type 1198 | |
-#define invalid_group_type 1199 | |
-#define invalid_import_from_targets_type 1200 | |
-#define invalid_with_stmt_type 1201 | |
-#define invalid_with_stmt_indent_type 1202 | |
-#define invalid_try_stmt_type 1203 | |
-#define invalid_except_stmt_type 1204 | |
-#define invalid_finally_stmt_type 1205 | |
-#define invalid_except_stmt_indent_type 1206 | |
-#define invalid_match_stmt_type 1207 | |
-#define invalid_case_block_type 1208 | |
-#define invalid_as_pattern_type 1209 | |
-#define invalid_class_pattern_type 1210 | |
-#define invalid_class_argument_pattern_type 1211 | |
-#define invalid_if_stmt_type 1212 | |
-#define invalid_elif_stmt_type 1213 | |
-#define invalid_else_stmt_type 1214 | |
-#define invalid_while_stmt_type 1215 | |
-#define invalid_for_stmt_type 1216 | |
-#define invalid_def_raw_type 1217 | |
-#define invalid_class_def_raw_type 1218 | |
-#define invalid_double_starred_kvpairs_type 1219 | |
-#define invalid_kvpair_type 1220 | |
-#define _loop0_1_type 1221 | |
-#define _loop0_2_type 1222 | |
-#define _loop0_4_type 1223 | |
-#define _gather_3_type 1224 | |
-#define _loop0_6_type 1225 | |
-#define _gather_5_type 1226 | |
-#define _loop0_8_type 1227 | |
-#define _gather_7_type 1228 | |
-#define _loop0_10_type 1229 | |
-#define _gather_9_type 1230 | |
-#define _loop1_11_type 1231 | |
-#define _loop0_13_type 1232 | |
-#define _gather_12_type 1233 | |
-#define _tmp_14_type 1234 | |
-#define _tmp_15_type 1235 | |
-#define _tmp_16_type 1236 | |
-#define _tmp_17_type 1237 | |
-#define _tmp_18_type 1238 | |
-#define _tmp_19_type 1239 | |
-#define _tmp_20_type 1240 | |
-#define _tmp_21_type 1241 | |
-#define _loop1_22_type 1242 | |
-#define _tmp_23_type 1243 | |
-#define _tmp_24_type 1244 | |
-#define _loop0_26_type 1245 | |
-#define _gather_25_type 1246 | |
-#define _loop0_28_type 1247 | |
-#define _gather_27_type 1248 | |
-#define _tmp_29_type 1249 | |
-#define _tmp_30_type 1250 | |
-#define _loop0_31_type 1251 | |
-#define _loop1_32_type 1252 | |
-#define _loop0_34_type 1253 | |
-#define _gather_33_type 1254 | |
-#define _tmp_35_type 1255 | |
-#define _loop0_37_type 1256 | |
-#define _gather_36_type 1257 | |
-#define _tmp_38_type 1258 | |
-#define _loop0_40_type 1259 | |
-#define _gather_39_type 1260 | |
-#define _loop0_42_type 1261 | |
-#define _gather_41_type 1262 | |
-#define _loop0_44_type 1263 | |
-#define _gather_43_type 1264 | |
-#define _loop0_46_type 1265 | |
-#define _gather_45_type 1266 | |
-#define _tmp_47_type 1267 | |
-#define _loop1_48_type 1268 | |
-#define _tmp_49_type 1269 | |
-#define _loop1_50_type 1270 | |
-#define _loop0_52_type 1271 | |
-#define _gather_51_type 1272 | |
-#define _tmp_53_type 1273 | |
-#define _tmp_54_type 1274 | |
-#define _tmp_55_type 1275 | |
-#define _tmp_56_type 1276 | |
-#define _loop0_58_type 1277 | |
-#define _gather_57_type 1278 | |
-#define _loop0_60_type 1279 | |
-#define _gather_59_type 1280 | |
-#define _tmp_61_type 1281 | |
-#define _loop0_63_type 1282 | |
-#define _gather_62_type 1283 | |
-#define _loop0_65_type 1284 | |
-#define _gather_64_type 1285 | |
-#define _tmp_66_type 1286 | |
-#define _tmp_67_type 1287 | |
-#define _tmp_68_type 1288 | |
-#define _tmp_69_type 1289 | |
-#define _loop0_70_type 1290 | |
-#define _loop0_71_type 1291 | |
-#define _loop0_72_type 1292 | |
-#define _loop1_73_type 1293 | |
-#define _loop0_74_type 1294 | |
-#define _loop1_75_type 1295 | |
-#define _loop1_76_type 1296 | |
-#define _loop1_77_type 1297 | |
-#define _loop0_78_type 1298 | |
-#define _loop1_79_type 1299 | |
-#define _loop0_80_type 1300 | |
-#define _loop1_81_type 1301 | |
-#define _loop0_82_type 1302 | |
-#define _loop1_83_type 1303 | |
-#define _loop1_84_type 1304 | |
-#define _tmp_85_type 1305 | |
-#define _loop1_86_type 1306 | |
-#define _loop0_88_type 1307 | |
-#define _gather_87_type 1308 | |
-#define _loop1_89_type 1309 | |
-#define _loop0_90_type 1310 | |
-#define _loop0_91_type 1311 | |
-#define _loop0_92_type 1312 | |
-#define _loop1_93_type 1313 | |
-#define _loop0_94_type 1314 | |
-#define _loop1_95_type 1315 | |
-#define _loop1_96_type 1316 | |
-#define _loop1_97_type 1317 | |
-#define _loop0_98_type 1318 | |
-#define _loop1_99_type 1319 | |
-#define _loop0_100_type 1320 | |
-#define _loop1_101_type 1321 | |
-#define _loop0_102_type 1322 | |
-#define _loop1_103_type 1323 | |
-#define _loop1_104_type 1324 | |
-#define _loop1_105_type 1325 | |
-#define _loop1_106_type 1326 | |
-#define _tmp_107_type 1327 | |
-#define _loop0_109_type 1328 | |
-#define _gather_108_type 1329 | |
-#define _tmp_110_type 1330 | |
-#define _tmp_111_type 1331 | |
-#define _tmp_112_type 1332 | |
-#define _tmp_113_type 1333 | |
-#define _loop1_114_type 1334 | |
-#define _tmp_115_type 1335 | |
-#define _tmp_116_type 1336 | |
-#define _tmp_117_type 1337 | |
-#define _loop0_119_type 1338 | |
-#define _gather_118_type 1339 | |
-#define _loop1_120_type 1340 | |
-#define _loop0_121_type 1341 | |
-#define _loop0_122_type 1342 | |
-#define _loop0_124_type 1343 | |
-#define _gather_123_type 1344 | |
-#define _tmp_125_type 1345 | |
-#define _loop0_127_type 1346 | |
-#define _gather_126_type 1347 | |
-#define _loop0_129_type 1348 | |
-#define _gather_128_type 1349 | |
-#define _loop0_131_type 1350 | |
-#define _gather_130_type 1351 | |
-#define _loop0_133_type 1352 | |
-#define _gather_132_type 1353 | |
-#define _loop0_134_type 1354 | |
-#define _loop0_136_type 1355 | |
-#define _gather_135_type 1356 | |
-#define _loop1_137_type 1357 | |
-#define _tmp_138_type 1358 | |
-#define _loop0_140_type 1359 | |
-#define _gather_139_type 1360 | |
-#define _tmp_141_type 1361 | |
-#define _tmp_142_type 1362 | |
-#define _tmp_143_type 1363 | |
-#define _tmp_144_type 1364 | |
-#define _tmp_145_type 1365 | |
-#define _tmp_146_type 1366 | |
-#define _tmp_147_type 1367 | |
-#define _tmp_148_type 1368 | |
-#define _loop0_149_type 1369 | |
-#define _loop0_150_type 1370 | |
-#define _loop0_151_type 1371 | |
-#define _tmp_152_type 1372 | |
-#define _tmp_153_type 1373 | |
-#define _tmp_154_type 1374 | |
-#define _tmp_155_type 1375 | |
-#define _loop0_156_type 1376 | |
-#define _loop1_157_type 1377 | |
-#define _loop0_158_type 1378 | |
-#define _loop1_159_type 1379 | |
-#define _tmp_160_type 1380 | |
-#define _tmp_161_type 1381 | |
-#define _tmp_162_type 1382 | |
-#define _loop0_164_type 1383 | |
-#define _gather_163_type 1384 | |
-#define _loop0_166_type 1385 | |
-#define _gather_165_type 1386 | |
-#define _loop0_168_type 1387 | |
-#define _gather_167_type 1388 | |
-#define _loop0_170_type 1389 | |
-#define _gather_169_type 1390 | |
-#define _tmp_171_type 1391 | |
-#define _tmp_172_type 1392 | |
-#define _tmp_173_type 1393 | |
-#define _tmp_174_type 1394 | |
-#define _tmp_175_type 1395 | |
-#define _tmp_176_type 1396 | |
-#define _tmp_177_type 1397 | |
-#define _tmp_178_type 1398 | |
-#define _loop0_180_type 1399 | |
-#define _gather_179_type 1400 | |
-#define _tmp_181_type 1401 | |
-#define _tmp_182_type 1402 | |
-#define _tmp_183_type 1403 | |
-#define _tmp_184_type 1404 | |
-#define _tmp_185_type 1405 | |
-#define _tmp_186_type 1406 | |
-#define _tmp_187_type 1407 | |
-#define _tmp_188_type 1408 | |
-#define _tmp_189_type 1409 | |
-#define _tmp_190_type 1410 | |
-#define _tmp_191_type 1411 | |
-#define _tmp_192_type 1412 | |
-#define _tmp_193_type 1413 | |
-#define _tmp_194_type 1414 | |
-#define _tmp_195_type 1415 | |
-#define _tmp_196_type 1416 | |
-#define _tmp_197_type 1417 | |
-#define _tmp_198_type 1418 | |
-#define _tmp_199_type 1419 | |
-#define _tmp_200_type 1420 | |
-#define _tmp_201_type 1421 | |
-#define _tmp_202_type 1422 | |
-#define _tmp_203_type 1423 | |
-#define _tmp_204_type 1424 | |
-#define _tmp_205_type 1425 | |
-#define _tmp_206_type 1426 | |
-#define _tmp_207_type 1427 | |
-#define _tmp_208_type 1428 | |
+#define unaryassign_type 1013 | |
+#define augassign_type 1014 | |
+#define global_stmt_type 1015 | |
+#define nonlocal_stmt_type 1016 | |
+#define yield_stmt_type 1017 | |
+#define assert_stmt_type 1018 | |
+#define del_stmt_type 1019 | |
+#define import_stmt_type 1020 | |
+#define import_name_type 1021 | |
+#define import_from_type 1022 | |
+#define import_from_targets_type 1023 | |
+#define import_from_as_names_type 1024 | |
+#define import_from_as_name_type 1025 | |
+#define dotted_as_names_type 1026 | |
+#define dotted_as_name_type 1027 | |
+#define dotted_name_type 1028 // Left-recursive | |
+#define if_stmt_type 1029 | |
+#define elif_stmt_type 1030 | |
+#define else_block_type 1031 | |
+#define while_stmt_type 1032 | |
+#define for_stmt_type 1033 | |
+#define with_stmt_type 1034 | |
+#define with_item_type 1035 | |
+#define try_stmt_type 1036 | |
+#define except_block_type 1037 | |
+#define finally_block_type 1038 | |
+#define match_stmt_type 1039 | |
+#define subject_expr_type 1040 | |
+#define case_block_type 1041 | |
+#define guard_type 1042 | |
+#define patterns_type 1043 | |
+#define pattern_type 1044 | |
+#define as_pattern_type 1045 | |
+#define or_pattern_type 1046 | |
+#define closed_pattern_type 1047 | |
+#define literal_pattern_type 1048 | |
+#define literal_expr_type 1049 | |
+#define complex_number_type 1050 | |
+#define signed_number_type 1051 | |
+#define signed_real_number_type 1052 | |
+#define real_number_type 1053 | |
+#define imaginary_number_type 1054 | |
+#define capture_pattern_type 1055 | |
+#define pattern_capture_target_type 1056 | |
+#define wildcard_pattern_type 1057 | |
+#define value_pattern_type 1058 | |
+#define attr_type 1059 // Left-recursive | |
+#define name_or_attr_type 1060 // Left-recursive | |
+#define group_pattern_type 1061 | |
+#define sequence_pattern_type 1062 | |
+#define open_sequence_pattern_type 1063 | |
+#define maybe_sequence_pattern_type 1064 | |
+#define maybe_star_pattern_type 1065 | |
+#define star_pattern_type 1066 | |
+#define mapping_pattern_type 1067 | |
+#define items_pattern_type 1068 | |
+#define key_value_pattern_type 1069 | |
+#define double_star_pattern_type 1070 | |
+#define class_pattern_type 1071 | |
+#define positional_patterns_type 1072 | |
+#define keyword_patterns_type 1073 | |
+#define keyword_pattern_type 1074 | |
+#define return_stmt_type 1075 | |
+#define raise_stmt_type 1076 | |
+#define function_def_type 1077 | |
+#define function_def_raw_type 1078 | |
+#define func_type_comment_type 1079 | |
+#define params_type 1080 | |
+#define parameters_type 1081 | |
+#define slash_no_default_type 1082 | |
+#define slash_with_default_type 1083 | |
+#define star_etc_type 1084 | |
+#define kwds_type 1085 | |
+#define param_no_default_type 1086 | |
+#define param_with_default_type 1087 | |
+#define param_maybe_default_type 1088 | |
+#define param_type 1089 | |
+#define annotation_type 1090 | |
+#define default_type 1091 | |
+#define decorators_type 1092 | |
+#define class_def_type 1093 | |
+#define class_def_raw_type 1094 | |
+#define block_type 1095 | |
+#define star_expressions_type 1096 | |
+#define star_expression_type 1097 | |
+#define star_named_expressions_type 1098 | |
+#define star_named_expression_type 1099 | |
+#define assignment_expression_type 1100 | |
+#define named_expression_type 1101 | |
+#define annotated_rhs_type 1102 | |
+#define expressions_type 1103 | |
+#define expression_type 1104 | |
+#define lambdef_type 1105 | |
+#define lambda_params_type 1106 | |
+#define lambda_parameters_type 1107 | |
+#define lambda_slash_no_default_type 1108 | |
+#define lambda_slash_with_default_type 1109 | |
+#define lambda_star_etc_type 1110 | |
+#define lambda_kwds_type 1111 | |
+#define lambda_param_no_default_type 1112 | |
+#define lambda_param_with_default_type 1113 | |
+#define lambda_param_maybe_default_type 1114 | |
+#define lambda_param_type 1115 | |
+#define disjunction_type 1116 | |
+#define conjunction_type 1117 | |
+#define inversion_type 1118 | |
+#define comparison_type 1119 | |
+#define compare_op_bitwise_or_pair_type 1120 | |
+#define eq_bitwise_or_type 1121 | |
+#define noteq_bitwise_or_type 1122 | |
+#define lte_bitwise_or_type 1123 | |
+#define lt_bitwise_or_type 1124 | |
+#define gte_bitwise_or_type 1125 | |
+#define gt_bitwise_or_type 1126 | |
+#define notin_bitwise_or_type 1127 | |
+#define in_bitwise_or_type 1128 | |
+#define isnot_bitwise_or_type 1129 | |
+#define is_bitwise_or_type 1130 | |
+#define bitwise_or_type 1131 // Left-recursive | |
+#define bitwise_xor_type 1132 // Left-recursive | |
+#define bitwise_and_type 1133 // Left-recursive | |
+#define shift_expr_type 1134 // Left-recursive | |
+#define sum_type 1135 // Left-recursive | |
+#define term_type 1136 // Left-recursive | |
+#define factor_type 1137 | |
+#define power_type 1138 | |
+#define await_primary_type 1139 | |
+#define primary_type 1140 // Left-recursive | |
+#define slices_type 1141 | |
+#define slice_type 1142 | |
+#define atom_type 1143 | |
+#define strings_type 1144 | |
+#define list_type 1145 | |
+#define listcomp_type 1146 | |
+#define tuple_type 1147 | |
+#define group_type 1148 | |
+#define genexp_type 1149 | |
+#define set_type 1150 | |
+#define setcomp_type 1151 | |
+#define dict_type 1152 | |
+#define dictcomp_type 1153 | |
+#define double_starred_kvpairs_type 1154 | |
+#define double_starred_kvpair_type 1155 | |
+#define kvpair_type 1156 | |
+#define for_if_clauses_type 1157 | |
+#define for_if_clause_type 1158 | |
+#define yield_expr_type 1159 | |
+#define arguments_type 1160 | |
+#define args_type 1161 | |
+#define kwargs_type 1162 | |
+#define starred_expression_type 1163 | |
+#define kwarg_or_starred_type 1164 | |
+#define kwarg_or_double_starred_type 1165 | |
+#define star_targets_type 1166 | |
+#define star_targets_list_seq_type 1167 | |
+#define star_targets_tuple_seq_type 1168 | |
+#define star_target_type 1169 | |
+#define target_with_star_atom_type 1170 | |
+#define star_atom_type 1171 | |
+#define single_target_type 1172 | |
+#define single_subscript_attribute_target_type 1173 | |
+#define del_targets_type 1174 | |
+#define del_target_type 1175 | |
+#define del_t_atom_type 1176 | |
+#define t_primary_type 1177 // Left-recursive | |
+#define t_lookahead_type 1178 | |
+#define invalid_arguments_type 1179 | |
+#define invalid_kwarg_type 1180 | |
+#define expression_without_invalid_type 1181 | |
+#define invalid_legacy_expression_type 1182 | |
+#define invalid_expression_type 1183 | |
+#define invalid_named_expression_type 1184 | |
+#define invalid_assignment_type 1185 | |
+#define invalid_ann_assign_target_type 1186 | |
+#define invalid_del_stmt_type 1187 | |
+#define invalid_block_type 1188 | |
+#define invalid_comprehension_type 1189 | |
+#define invalid_dict_comprehension_type 1190 | |
+#define invalid_parameters_type 1191 | |
+#define invalid_parameters_helper_type 1192 | |
+#define invalid_lambda_parameters_type 1193 | |
+#define invalid_lambda_parameters_helper_type 1194 | |
+#define invalid_star_etc_type 1195 | |
+#define invalid_lambda_star_etc_type 1196 | |
+#define invalid_double_type_comments_type 1197 | |
+#define invalid_with_item_type 1198 | |
+#define invalid_for_target_type 1199 | |
+#define invalid_group_type 1200 | |
+#define invalid_import_from_targets_type 1201 | |
+#define invalid_with_stmt_type 1202 | |
+#define invalid_with_stmt_indent_type 1203 | |
+#define invalid_try_stmt_type 1204 | |
+#define invalid_except_stmt_type 1205 | |
+#define invalid_finally_stmt_type 1206 | |
+#define invalid_except_stmt_indent_type 1207 | |
+#define invalid_match_stmt_type 1208 | |
+#define invalid_case_block_type 1209 | |
+#define invalid_as_pattern_type 1210 | |
+#define invalid_class_pattern_type 1211 | |
+#define invalid_class_argument_pattern_type 1212 | |
+#define invalid_if_stmt_type 1213 | |
+#define invalid_elif_stmt_type 1214 | |
+#define invalid_else_stmt_type 1215 | |
+#define invalid_while_stmt_type 1216 | |
+#define invalid_for_stmt_type 1217 | |
+#define invalid_def_raw_type 1218 | |
+#define invalid_class_def_raw_type 1219 | |
+#define invalid_double_starred_kvpairs_type 1220 | |
+#define invalid_kvpair_type 1221 | |
+#define _loop0_1_type 1222 | |
+#define _loop0_2_type 1223 | |
+#define _loop0_4_type 1224 | |
+#define _gather_3_type 1225 | |
+#define _loop0_6_type 1226 | |
+#define _gather_5_type 1227 | |
+#define _loop0_8_type 1228 | |
+#define _gather_7_type 1229 | |
+#define _loop0_10_type 1230 | |
+#define _gather_9_type 1231 | |
+#define _loop1_11_type 1232 | |
+#define _loop0_13_type 1233 | |
+#define _gather_12_type 1234 | |
+#define _tmp_14_type 1235 | |
+#define _tmp_15_type 1236 | |
+#define _tmp_16_type 1237 | |
+#define _tmp_17_type 1238 | |
+#define _tmp_18_type 1239 | |
+#define _tmp_19_type 1240 | |
+#define _tmp_20_type 1241 | |
+#define _tmp_21_type 1242 | |
+#define _loop1_22_type 1243 | |
+#define _tmp_23_type 1244 | |
+#define _tmp_24_type 1245 | |
+#define _loop0_26_type 1246 | |
+#define _gather_25_type 1247 | |
+#define _loop0_28_type 1248 | |
+#define _gather_27_type 1249 | |
+#define _tmp_29_type 1250 | |
+#define _tmp_30_type 1251 | |
+#define _loop0_31_type 1252 | |
+#define _loop1_32_type 1253 | |
+#define _loop0_34_type 1254 | |
+#define _gather_33_type 1255 | |
+#define _tmp_35_type 1256 | |
+#define _loop0_37_type 1257 | |
+#define _gather_36_type 1258 | |
+#define _tmp_38_type 1259 | |
+#define _loop0_40_type 1260 | |
+#define _gather_39_type 1261 | |
+#define _loop0_42_type 1262 | |
+#define _gather_41_type 1263 | |
+#define _loop0_44_type 1264 | |
+#define _gather_43_type 1265 | |
+#define _loop0_46_type 1266 | |
+#define _gather_45_type 1267 | |
+#define _tmp_47_type 1268 | |
+#define _loop1_48_type 1269 | |
+#define _tmp_49_type 1270 | |
+#define _loop1_50_type 1271 | |
+#define _loop0_52_type 1272 | |
+#define _gather_51_type 1273 | |
+#define _tmp_53_type 1274 | |
+#define _tmp_54_type 1275 | |
+#define _tmp_55_type 1276 | |
+#define _tmp_56_type 1277 | |
+#define _loop0_58_type 1278 | |
+#define _gather_57_type 1279 | |
+#define _loop0_60_type 1280 | |
+#define _gather_59_type 1281 | |
+#define _tmp_61_type 1282 | |
+#define _loop0_63_type 1283 | |
+#define _gather_62_type 1284 | |
+#define _loop0_65_type 1285 | |
+#define _gather_64_type 1286 | |
+#define _tmp_66_type 1287 | |
+#define _tmp_67_type 1288 | |
+#define _tmp_68_type 1289 | |
+#define _tmp_69_type 1290 | |
+#define _loop0_70_type 1291 | |
+#define _loop0_71_type 1292 | |
+#define _loop0_72_type 1293 | |
+#define _loop1_73_type 1294 | |
+#define _loop0_74_type 1295 | |
+#define _loop1_75_type 1296 | |
+#define _loop1_76_type 1297 | |
+#define _loop1_77_type 1298 | |
+#define _loop0_78_type 1299 | |
+#define _loop1_79_type 1300 | |
+#define _loop0_80_type 1301 | |
+#define _loop1_81_type 1302 | |
+#define _loop0_82_type 1303 | |
+#define _loop1_83_type 1304 | |
+#define _loop1_84_type 1305 | |
+#define _tmp_85_type 1306 | |
+#define _loop1_86_type 1307 | |
+#define _loop0_88_type 1308 | |
+#define _gather_87_type 1309 | |
+#define _loop1_89_type 1310 | |
+#define _loop0_90_type 1311 | |
+#define _loop0_91_type 1312 | |
+#define _loop0_92_type 1313 | |
+#define _loop1_93_type 1314 | |
+#define _loop0_94_type 1315 | |
+#define _loop1_95_type 1316 | |
+#define _loop1_96_type 1317 | |
+#define _loop1_97_type 1318 | |
+#define _loop0_98_type 1319 | |
+#define _loop1_99_type 1320 | |
+#define _loop0_100_type 1321 | |
+#define _loop1_101_type 1322 | |
+#define _loop0_102_type 1323 | |
+#define _loop1_103_type 1324 | |
+#define _loop1_104_type 1325 | |
+#define _loop1_105_type 1326 | |
+#define _loop1_106_type 1327 | |
+#define _tmp_107_type 1328 | |
+#define _loop0_109_type 1329 | |
+#define _gather_108_type 1330 | |
+#define _tmp_110_type 1331 | |
+#define _tmp_111_type 1332 | |
+#define _tmp_112_type 1333 | |
+#define _tmp_113_type 1334 | |
+#define _loop1_114_type 1335 | |
+#define _tmp_115_type 1336 | |
+#define _tmp_116_type 1337 | |
+#define _tmp_117_type 1338 | |
+#define _loop0_119_type 1339 | |
+#define _gather_118_type 1340 | |
+#define _loop1_120_type 1341 | |
+#define _loop0_121_type 1342 | |
+#define _loop0_122_type 1343 | |
+#define _loop0_124_type 1344 | |
+#define _gather_123_type 1345 | |
+#define _tmp_125_type 1346 | |
+#define _loop0_127_type 1347 | |
+#define _gather_126_type 1348 | |
+#define _loop0_129_type 1349 | |
+#define _gather_128_type 1350 | |
+#define _loop0_131_type 1351 | |
+#define _gather_130_type 1352 | |
+#define _loop0_133_type 1353 | |
+#define _gather_132_type 1354 | |
+#define _loop0_134_type 1355 | |
+#define _loop0_136_type 1356 | |
+#define _gather_135_type 1357 | |
+#define _loop1_137_type 1358 | |
+#define _tmp_138_type 1359 | |
+#define _loop0_140_type 1360 | |
+#define _gather_139_type 1361 | |
+#define _tmp_141_type 1362 | |
+#define _tmp_142_type 1363 | |
+#define _tmp_143_type 1364 | |
+#define _tmp_144_type 1365 | |
+#define _tmp_145_type 1366 | |
+#define _tmp_146_type 1367 | |
+#define _tmp_147_type 1368 | |
+#define _tmp_148_type 1369 | |
+#define _loop0_149_type 1370 | |
+#define _loop0_150_type 1371 | |
+#define _loop0_151_type 1372 | |
+#define _tmp_152_type 1373 | |
+#define _tmp_153_type 1374 | |
+#define _tmp_154_type 1375 | |
+#define _tmp_155_type 1376 | |
+#define _loop0_156_type 1377 | |
+#define _loop1_157_type 1378 | |
+#define _loop0_158_type 1379 | |
+#define _loop1_159_type 1380 | |
+#define _tmp_160_type 1381 | |
+#define _tmp_161_type 1382 | |
+#define _tmp_162_type 1383 | |
+#define _loop0_164_type 1384 | |
+#define _gather_163_type 1385 | |
+#define _loop0_166_type 1386 | |
+#define _gather_165_type 1387 | |
+#define _loop0_168_type 1388 | |
+#define _gather_167_type 1389 | |
+#define _loop0_170_type 1390 | |
+#define _gather_169_type 1391 | |
+#define _tmp_171_type 1392 | |
+#define _tmp_172_type 1393 | |
+#define _tmp_173_type 1394 | |
+#define _tmp_174_type 1395 | |
+#define _tmp_175_type 1396 | |
+#define _tmp_176_type 1397 | |
+#define _tmp_177_type 1398 | |
+#define _tmp_178_type 1399 | |
+#define _loop0_180_type 1400 | |
+#define _gather_179_type 1401 | |
+#define _tmp_181_type 1402 | |
+#define _tmp_182_type 1403 | |
+#define _tmp_183_type 1404 | |
+#define _tmp_184_type 1405 | |
+#define _tmp_185_type 1406 | |
+#define _tmp_186_type 1407 | |
+#define _tmp_187_type 1408 | |
+#define _tmp_188_type 1409 | |
+#define _tmp_189_type 1410 | |
+#define _tmp_190_type 1411 | |
+#define _tmp_191_type 1412 | |
+#define _tmp_192_type 1413 | |
+#define _tmp_193_type 1414 | |
+#define _tmp_194_type 1415 | |
+#define _tmp_195_type 1416 | |
+#define _tmp_196_type 1417 | |
+#define _tmp_197_type 1418 | |
+#define _tmp_198_type 1419 | |
+#define _tmp_199_type 1420 | |
+#define _tmp_200_type 1421 | |
+#define _tmp_201_type 1422 | |
+#define _tmp_202_type 1423 | |
+#define _tmp_203_type 1424 | |
+#define _tmp_204_type 1425 | |
+#define _tmp_205_type 1426 | |
+#define _tmp_206_type 1427 | |
+#define _tmp_207_type 1428 | |
+#define _tmp_208_type 1429 | |
static mod_ty file_rule(Parser *p); | |
static mod_ty interactive_rule(Parser *p); | |
@@ -516,6 +517,7 @@ static asdl_stmt_seq* simple_stmts_rule(Parser *p); | |
static stmt_ty simple_stmt_rule(Parser *p); | |
static stmt_ty compound_stmt_rule(Parser *p); | |
static stmt_ty assignment_rule(Parser *p); | |
+static AugOperator* unaryassign_rule(Parser *p); | |
static AugOperator* augassign_rule(Parser *p); | |
static stmt_ty global_stmt_rule(Parser *p); | |
static stmt_ty nonlocal_stmt_rule(Parser *p); | |
@@ -1109,7 +1111,7 @@ func_type_rule(Parser *p) | |
&& | |
(_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' | |
&& | |
- (_literal_2 = _PyPegen_expect_token(p, 51)) // token='->' | |
+ (_literal_2 = _PyPegen_expect_token(p, 52)) // token='->' | |
&& | |
(b = expression_rule(p)) // expression | |
&& | |
@@ -2313,6 +2315,7 @@ compound_stmt_rule(Parser *p) | |
// | NAME ':' expression ['=' annotated_rhs] | |
// | ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs] | |
// | ((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT? | |
+// | single_target unaryassign | |
// | single_target augassign ~ (yield_expr | star_expressions) | |
// | invalid_assignment | |
static stmt_ty | |
@@ -2462,6 +2465,42 @@ assignment_rule(Parser *p) | |
D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ', | |
p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?")); | |
} | |
+ { // single_target unaryassign | |
+ if (p->error_indicator) { | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_target unaryassign")); | |
+ expr_ty a; | |
+ AugOperator* b; | |
+ if ( | |
+ (a = single_target_rule(p)) // single_target | |
+ && | |
+ (b = unaryassign_rule(p)) // unaryassign | |
+ ) | |
+ { | |
+ D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target unaryassign")); | |
+ Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); | |
+ if (_token == NULL) { | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ int _end_lineno = _token->end_lineno; | |
+ UNUSED(_end_lineno); // Only used by EXTRA macro | |
+ int _end_col_offset = _token->end_col_offset; | |
+ UNUSED(_end_col_offset); // Only used by EXTRA macro | |
+ _res = _PyAST_AugAssign ( a , b -> kind , 0 , EXTRA ); | |
+ if (_res == NULL && PyErr_Occurred()) { | |
+ p->error_indicator = 1; | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ goto done; | |
+ } | |
+ p->mark = _mark; | |
+ D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ', | |
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_target unaryassign")); | |
+ } | |
{ // single_target augassign ~ (yield_expr | star_expressions) | |
if (p->error_indicator) { | |
p->level--; | |
@@ -2533,6 +2572,50 @@ assignment_rule(Parser *p) | |
return _res; | |
} | |
+// unaryassign: '++' | |
+static AugOperator* | |
+unaryassign_rule(Parser *p) | |
+{ | |
+ if (p->level++ == MAXSTACK) { | |
+ p->error_indicator = 1; | |
+ PyErr_NoMemory(); | |
+ } | |
+ if (p->error_indicator) { | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ AugOperator* _res = NULL; | |
+ int _mark = p->mark; | |
+ { // '++' | |
+ if (p->error_indicator) { | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ D(fprintf(stderr, "%*c> unaryassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'++'")); | |
+ Token * _literal; | |
+ if ( | |
+ (_literal = _PyPegen_expect_token(p, 36)) // token='++' | |
+ ) | |
+ { | |
+ D(fprintf(stderr, "%*c+ unaryassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'++'")); | |
+ _res = _PyPegen_augoperator ( p , PlusPlus ); | |
+ if (_res == NULL && PyErr_Occurred()) { | |
+ p->error_indicator = 1; | |
+ p->level--; | |
+ return NULL; | |
+ } | |
+ goto done; | |
+ } | |
+ p->mark = _mark; | |
+ D(fprintf(stderr, "%*c%s unaryassign[%d-%d]: %s failed!\n", p->level, ' ', | |
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'++'")); | |
+ } | |
+ _res = NULL; | |
+ done: | |
+ p->level--; | |
+ return _res; | |
+} | |
+ | |
// augassign: | |
// | '+=' | |
// | '-=' | |
@@ -2568,7 +2651,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 36)) // token='+=' | |
+ (_literal = _PyPegen_expect_token(p, 37)) // token='+=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+='")); | |
@@ -2592,7 +2675,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 37)) // token='-=' | |
+ (_literal = _PyPegen_expect_token(p, 38)) // token='-=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-='")); | |
@@ -2616,7 +2699,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 38)) // token='*=' | |
+ (_literal = _PyPegen_expect_token(p, 39)) // token='*=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*='")); | |
@@ -2640,7 +2723,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 50)) // token='@=' | |
+ (_literal = _PyPegen_expect_token(p, 51)) // token='@=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@='")); | |
@@ -2664,7 +2747,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 39)) // token='/=' | |
+ (_literal = _PyPegen_expect_token(p, 40)) // token='/=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/='")); | |
@@ -2688,7 +2771,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 40)) // token='%=' | |
+ (_literal = _PyPegen_expect_token(p, 41)) // token='%=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%='")); | |
@@ -2712,7 +2795,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'&='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 41)) // token='&=' | |
+ (_literal = _PyPegen_expect_token(p, 42)) // token='&=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'&='")); | |
@@ -2736,7 +2819,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 42)) // token='|=' | |
+ (_literal = _PyPegen_expect_token(p, 43)) // token='|=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|='")); | |
@@ -2760,7 +2843,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'^='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 43)) // token='^=' | |
+ (_literal = _PyPegen_expect_token(p, 44)) // token='^=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'^='")); | |
@@ -2784,7 +2867,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<<='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 44)) // token='<<=' | |
+ (_literal = _PyPegen_expect_token(p, 45)) // token='<<=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<<='")); | |
@@ -2808,7 +2891,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>>='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 45)) // token='>>=' | |
+ (_literal = _PyPegen_expect_token(p, 46)) // token='>>=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>>='")); | |
@@ -2832,7 +2915,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 46)) // token='**=' | |
+ (_literal = _PyPegen_expect_token(p, 47)) // token='**=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**='")); | |
@@ -2856,7 +2939,7 @@ augassign_rule(Parser *p) | |
D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 48)) // token='//=' | |
+ (_literal = _PyPegen_expect_token(p, 49)) // token='//=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//='")); | |
@@ -10565,7 +10648,7 @@ assignment_expression_rule(Parser *p) | |
if ( | |
(a = _PyPegen_name_token(p)) // NAME | |
&& | |
- (_literal = _PyPegen_expect_token(p, 53)) // token=':=' | |
+ (_literal = _PyPegen_expect_token(p, 54)) // token=':=' | |
&& | |
(_cut_var = 1) | |
&& | |
@@ -10666,7 +10749,7 @@ named_expression_rule(Parser *p) | |
if ( | |
(expression_var = expression_rule(p)) // expression | |
&& | |
- _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' | |
+ _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 54) // token=':=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); | |
@@ -13865,7 +13948,7 @@ term_raw(Parser *p) | |
if ( | |
(a = term_rule(p)) // term | |
&& | |
- (_literal = _PyPegen_expect_token(p, 47)) // token='//' | |
+ (_literal = _PyPegen_expect_token(p, 48)) // token='//' | |
&& | |
(b = factor_rule(p)) // factor | |
) | |
@@ -13943,7 +14026,7 @@ term_raw(Parser *p) | |
if ( | |
(a = term_rule(p)) // term | |
&& | |
- (_literal = _PyPegen_expect_token(p, 49)) // token='@' | |
+ (_literal = _PyPegen_expect_token(p, 50)) // token='@' | |
&& | |
(b = factor_rule(p)) // factor | |
) | |
@@ -15030,7 +15113,7 @@ atom_rule(Parser *p) | |
D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 52)) // token='...' | |
+ (_literal = _PyPegen_expect_token(p, 53)) // token='...' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); | |
@@ -18976,7 +19059,7 @@ invalid_named_expression_rule(Parser *p) | |
if ( | |
(a = expression_rule(p)) // expression | |
&& | |
- (_literal = _PyPegen_expect_token(p, 53)) // token=':=' | |
+ (_literal = _PyPegen_expect_token(p, 54)) // token=':=' | |
&& | |
(expression_var = expression_rule(p)) // expression | |
) | |
@@ -22928,7 +23011,7 @@ _tmp_15_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 49)) // token='@' | |
+ (_literal = _PyPegen_expect_token(p, 50)) // token='@' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); | |
@@ -23005,7 +23088,7 @@ _tmp_16_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 49)) // token='@' | |
+ (_literal = _PyPegen_expect_token(p, 50)) // token='@' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); | |
@@ -26045,7 +26128,7 @@ _tmp_67_rule(Parser *p) | |
Token * _literal; | |
expr_ty z; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 51)) // token='->' | |
+ (_literal = _PyPegen_expect_token(p, 52)) // token='->' | |
&& | |
(z = expression_rule(p)) // expression | |
) | |
@@ -26092,7 +26175,7 @@ _tmp_68_rule(Parser *p) | |
Token * _literal; | |
expr_ty z; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 51)) // token='->' | |
+ (_literal = _PyPegen_expect_token(p, 52)) // token='->' | |
&& | |
(z = expression_rule(p)) // expression | |
) | |
@@ -29404,7 +29487,7 @@ _tmp_117_rule(Parser *p) | |
if ( | |
(expression_var = expression_rule(p)) // expression | |
&& | |
- _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' | |
+ _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 54) // token=':=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); | |
@@ -31152,7 +31235,7 @@ _tmp_146_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 53)) // token=':=' | |
+ (_literal = _PyPegen_expect_token(p, 54)) // token=':=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); | |
@@ -31344,7 +31427,7 @@ _tmp_148_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 53)) // token=':=' | |
+ (_literal = _PyPegen_expect_token(p, 54)) // token=':=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); | |
@@ -33022,7 +33105,7 @@ _tmp_176_rule(Parser *p) | |
Token * _literal; | |
expr_ty expression_var; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 51)) // token='->' | |
+ (_literal = _PyPegen_expect_token(p, 52)) // token='->' | |
&& | |
(expression_var = expression_rule(p)) // expression | |
) | |
@@ -33456,7 +33539,7 @@ _tmp_184_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 52)) // token='...' | |
+ (_literal = _PyPegen_expect_token(p, 53)) // token='...' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); | |
@@ -33514,7 +33597,7 @@ _tmp_185_rule(Parser *p) | |
D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); | |
Token * _literal; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 52)) // token='...' | |
+ (_literal = _PyPegen_expect_token(p, 53)) // token='...' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); | |
@@ -33555,7 +33638,7 @@ _tmp_186_rule(Parser *p) | |
expr_ty f; | |
Token * newline_var; | |
if ( | |
- (_literal = _PyPegen_expect_token(p, 49)) // token='@' | |
+ (_literal = _PyPegen_expect_token(p, 50)) // token='@' | |
&& | |
(f = named_expression_rule(p)) // named_expression | |
&& | |
@@ -34432,7 +34515,7 @@ _tmp_204_rule(Parser *p) | |
if ( | |
(expression_var = expression_rule(p)) // expression | |
&& | |
- _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' | |
+ _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 54) // token=':=' | |
) | |
{ | |
D(fprintf(stderr, "%*c+ _tmp_204[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); | |
diff --git a/Parser/token.c b/Parser/token.c | |
index 74bca0e..f3dbc42 100644 | |
--- a/Parser/token.c | |
+++ b/Parser/token.c | |
@@ -42,6 +42,7 @@ const char * const _PyParser_TokenNames[] = { | |
"LEFTSHIFT", | |
"RIGHTSHIFT", | |
"DOUBLESTAR", | |
+ "PLUSPLUS", | |
"PLUSEQUAL", | |
"MINEQUAL", | |
"STAREQUAL", | |
@@ -133,6 +134,7 @@ PyToken_TwoChars(int c1, int c2) | |
break; | |
case '+': | |
switch (c2) { | |
+ case '+': return PLUSPLUS; | |
case '=': return PLUSEQUAL; | |
} | |
break; | |
diff --git a/Python/Python-ast.c b/Python/Python-ast.c | |
index 2f84cad..fa2fc6a 100644 | |
--- a/Python/Python-ast.c | |
+++ b/Python/Python-ast.c | |
@@ -2110,7 +2110,7 @@ _PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int | |
"field 'op' is required for AugAssign"); | |
return NULL; | |
} | |
- if (!value) { | |
+ if (!value && op != PlusPlus) { | |
PyErr_SetString(PyExc_ValueError, | |
"field 'value' is required for AugAssign"); | |
return NULL; | |
@@ -2118,6 +2118,23 @@ _PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int | |
p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p)); | |
if (!p) | |
return NULL; | |
+ | |
+ | |
+ if (op == PlusPlus) { | |
+ value = (expr_ty)_PyArena_Malloc(arena, sizeof(*p)); | |
+ if (!value) | |
+ return NULL; | |
+ value->kind = Constant_kind; | |
+ value->v.Constant.value = PyLong_FromLong(1); | |
+ value->v.Constant.kind = 0; | |
+ value->lineno = lineno; | |
+ value->col_offset = col_offset; | |
+ value->end_lineno = end_lineno; | |
+ value->end_col_offset = end_col_offset; | |
+ | |
+ op = Add; | |
+ } | |
+ | |
p->kind = AugAssign_kind; | |
p->v.AugAssign.target = target; | |
p->v.AugAssign.op = op; | |
diff --git a/Python/ceval.c b/Python/ceval.c | |
index 9f4ef6b..0ce153d 100644 | |
--- a/Python/ceval.c | |
+++ b/Python/ceval.c | |
@@ -1947,6 +1947,16 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) | |
DISPATCH(); | |
} | |
+ case TARGET(UNARY_PLUS_PLUS): { | |
+ PyObject *value = TOP(); | |
+ PyObject *res = PyNumber_Negative(value); | |
+ Py_DECREF(value); | |
+ SET_TOP(res); | |
+ if (res == NULL) | |
+ goto error; | |
+ DISPATCH(); | |
+ } | |
+ | |
case TARGET(UNARY_NEGATIVE): { | |
PyObject *value = TOP(); | |
PyObject *res = PyNumber_Negative(value); | |
diff --git a/Python/compile.c b/Python/compile.c | |
index 80caa8f..5f729e0 100644 | |
--- a/Python/compile.c | |
+++ b/Python/compile.c | |
@@ -973,6 +973,7 @@ stack_effect(int opcode, int oparg, int jump) | |
return 2; | |
/* Unary operators */ | |
+ case UNARY_PLUS_PLUS: | |
case UNARY_POSITIVE: | |
case UNARY_NEGATIVE: | |
case UNARY_NOT: | |
@@ -3639,6 +3640,8 @@ binop(operator_ty op) | |
return BINARY_AND; | |
case FloorDiv: | |
return BINARY_FLOOR_DIVIDE; | |
+ case PlusPlus: | |
+ return UNARY_PLUS_PLUS; | |
default: | |
PyErr_Format(PyExc_SystemError, | |
"binary op %d should not be possible", op); | |
@@ -3676,6 +3679,8 @@ inplace_binop(operator_ty op) | |
return INPLACE_AND; | |
case FloorDiv: | |
return INPLACE_FLOOR_DIVIDE; | |
+ case PlusPlus: | |
+ return INPLACE_PLUS_PLUS; | |
default: | |
PyErr_Format(PyExc_SystemError, | |
"inplace binary op %d should not be possible", op); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment