summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2020-06-09 16:13:56 -0700
committerGuido van Rossum <guido@python.org>2020-06-09 16:13:56 -0700
commit5ed19fcc1ae5ea296eb1e398137a9fa51d6a9f54 (patch)
tree08e43b7d60e5a4a9e08d2527d9aa0724642892e9
parent220dcedf7832c37d8cfe79dae35c6d10d6c6356d (diff)
downloadcpython-git-5ed19fcc1ae5ea296eb1e398137a9fa51d6a9f54.tar.gz
Allow calling function given by dotted name, e.g. foo.bar 1, 2
-rw-r--r--Grammar/python.gram5
-rw-r--r--Parser/pegen/parse.c758
2 files changed, 441 insertions, 322 deletions
diff --git a/Grammar/python.gram b/Grammar/python.gram
index 968d58b221..87725b556a 100644
--- a/Grammar/python.gram
+++ b/Grammar/python.gram
@@ -84,11 +84,14 @@ compound_stmt[stmt_ty]:
# Another easter egg -- try 'print 2+2'
call_stmt[stmt_ty]:
- | a=NAME &(NAME | NUMBER | STRING) b=args {
+ | a=simple_primary &(NAME | NUMBER | STRING) b=args {
_Py_Expr(_Py_Call(a,
(b) ? ((expr_ty) b)->v.Call.args : NULL,
(b) ? ((expr_ty) b)->v.Call.keywords : NULL,
EXTRA), EXTRA) }
+simple_primary[expr_ty]:
+ | a=simple_primary '.' b=NAME { _Py_Attribute(a, b->v.Name.id, Load, EXTRA) }
+ | NAME
# NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield'
assignment[stmt_ty]:
diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c
index 401ddf23d6..b97eab9d43 100644
--- a/Parser/pegen/parse.c
+++ b/Parser/pegen/parse.c
@@ -88,303 +88,304 @@ static KeywordToken *reserved_keywords[] = {
#define small_stmt_type 1010
#define compound_stmt_type 1011
#define call_stmt_type 1012
-#define assignment_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 return_stmt_type 1039
-#define raise_stmt_type 1040
-#define function_def_type 1041
-#define function_def_raw_type 1042
-#define func_type_comment_type 1043
-#define params_type 1044
-#define parameters_type 1045
-#define slash_no_default_type 1046
-#define slash_with_default_type 1047
-#define star_etc_type 1048
-#define kwds_type 1049
-#define param_no_default_type 1050
-#define param_with_default_type 1051
-#define param_maybe_default_type 1052
-#define param_type 1053
-#define annotation_type 1054
-#define default_type 1055
-#define decorators_type 1056
-#define class_def_type 1057
-#define class_def_raw_type 1058
-#define block_type 1059
-#define expressions_list_type 1060
-#define star_expressions_type 1061
-#define star_expression_type 1062
-#define star_named_expressions_type 1063
-#define star_named_expression_type 1064
-#define named_expression_type 1065
-#define annotated_rhs_type 1066
-#define expressions_type 1067
-#define expression_type 1068
-#define lambdef_type 1069
-#define lambda_parameters_type 1070
-#define lambda_slash_no_default_type 1071
-#define lambda_slash_with_default_type 1072
-#define lambda_star_etc_type 1073
-#define lambda_kwds_type 1074
-#define lambda_param_no_default_type 1075
-#define lambda_param_with_default_type 1076
-#define lambda_param_maybe_default_type 1077
-#define lambda_param_type 1078
-#define disjunction_type 1079
-#define conjunction_type 1080
-#define inversion_type 1081
-#define comparison_type 1082
-#define compare_op_bitwise_or_pair_type 1083
-#define eq_bitwise_or_type 1084
-#define noteq_bitwise_or_type 1085
-#define lte_bitwise_or_type 1086
-#define lt_bitwise_or_type 1087
-#define gte_bitwise_or_type 1088
-#define gt_bitwise_or_type 1089
-#define notin_bitwise_or_type 1090
-#define in_bitwise_or_type 1091
-#define isnot_bitwise_or_type 1092
-#define is_bitwise_or_type 1093
-#define bitwise_or_type 1094 // Left-recursive
-#define bitwise_xor_type 1095 // Left-recursive
-#define bitwise_and_type 1096 // Left-recursive
-#define shift_expr_type 1097 // Left-recursive
-#define sum_type 1098 // Left-recursive
-#define term_type 1099 // Left-recursive
-#define factor_type 1100
-#define power_type 1101
-#define await_primary_type 1102
-#define primary_type 1103 // Left-recursive
-#define slices_type 1104
-#define slice_type 1105
-#define atom_type 1106
-#define strings_type 1107
-#define list_type 1108
-#define listcomp_type 1109
-#define tuple_type 1110
-#define group_type 1111
-#define genexp_type 1112
-#define set_type 1113
-#define setcomp_type 1114
-#define dict_type 1115
-#define dictcomp_type 1116
-#define double_starred_kvpairs_type 1117
-#define double_starred_kvpair_type 1118
-#define kvpair_type 1119
-#define for_if_clauses_type 1120
-#define for_if_clause_type 1121
-#define yield_expr_type 1122
-#define arguments_type 1123
-#define args_type 1124
-#define kwargs_type 1125
-#define starred_expression_type 1126
-#define kwarg_or_starred_type 1127
-#define kwarg_or_double_starred_type 1128
-#define star_targets_type 1129
-#define star_targets_seq_type 1130
-#define star_target_type 1131
-#define star_atom_type 1132
-#define single_target_type 1133
-#define single_subscript_attribute_target_type 1134
-#define del_targets_type 1135
-#define del_target_type 1136
-#define del_t_atom_type 1137
-#define del_target_end_type 1138
-#define targets_type 1139
-#define target_type 1140
-#define t_primary_type 1141 // Left-recursive
-#define t_lookahead_type 1142
-#define t_atom_type 1143
-#define incorrect_arguments_type 1144
-#define invalid_kwarg_type 1145
-#define invalid_named_expression_type 1146
-#define invalid_assignment_type 1147
-#define invalid_block_type 1148
-#define invalid_comprehension_type 1149
-#define invalid_dict_comprehension_type 1150
-#define invalid_parameters_type 1151
-#define invalid_star_etc_type 1152
-#define invalid_lambda_star_etc_type 1153
-#define invalid_double_type_comments_type 1154
-#define invalid_del_target_type 1155
-#define invalid_import_from_targets_type 1156
-#define _loop0_1_type 1157
-#define _loop0_2_type 1158
-#define _loop0_4_type 1159
-#define _gather_3_type 1160
-#define _loop0_6_type 1161
-#define _gather_5_type 1162
-#define _loop0_8_type 1163
-#define _gather_7_type 1164
-#define _loop0_10_type 1165
-#define _gather_9_type 1166
-#define _loop1_11_type 1167
-#define _loop0_13_type 1168
-#define _gather_12_type 1169
-#define _tmp_14_type 1170
-#define _tmp_15_type 1171
-#define _tmp_16_type 1172
-#define _tmp_17_type 1173
-#define _tmp_18_type 1174
-#define _tmp_19_type 1175
-#define _tmp_20_type 1176
-#define _tmp_21_type 1177
-#define _tmp_22_type 1178
-#define _tmp_23_type 1179
-#define _loop1_24_type 1180
-#define _tmp_25_type 1181
-#define _tmp_26_type 1182
-#define _loop0_28_type 1183
-#define _gather_27_type 1184
-#define _loop0_30_type 1185
-#define _gather_29_type 1186
-#define _tmp_31_type 1187
-#define _loop0_32_type 1188
-#define _loop1_33_type 1189
-#define _loop0_35_type 1190
-#define _gather_34_type 1191
-#define _tmp_36_type 1192
-#define _loop0_38_type 1193
-#define _gather_37_type 1194
-#define _tmp_39_type 1195
-#define _loop0_41_type 1196
-#define _gather_40_type 1197
-#define _loop0_43_type 1198
-#define _gather_42_type 1199
-#define _loop0_45_type 1200
-#define _gather_44_type 1201
-#define _loop0_47_type 1202
-#define _gather_46_type 1203
-#define _tmp_48_type 1204
-#define _loop1_49_type 1205
-#define _tmp_50_type 1206
-#define _tmp_51_type 1207
-#define _tmp_52_type 1208
-#define _tmp_53_type 1209
-#define _tmp_54_type 1210
-#define _loop0_55_type 1211
-#define _loop0_56_type 1212
-#define _loop0_57_type 1213
-#define _loop1_58_type 1214
-#define _loop0_59_type 1215
-#define _loop1_60_type 1216
-#define _loop1_61_type 1217
-#define _loop1_62_type 1218
-#define _loop0_63_type 1219
-#define _loop1_64_type 1220
-#define _loop0_65_type 1221
-#define _loop1_66_type 1222
-#define _loop0_67_type 1223
-#define _loop1_68_type 1224
-#define _loop1_69_type 1225
-#define _tmp_70_type 1226
-#define _loop0_72_type 1227
-#define _gather_71_type 1228
-#define _loop1_73_type 1229
-#define _loop0_75_type 1230
-#define _gather_74_type 1231
-#define _loop1_76_type 1232
-#define _loop0_77_type 1233
-#define _loop0_78_type 1234
-#define _loop0_79_type 1235
-#define _loop1_80_type 1236
-#define _loop0_81_type 1237
-#define _loop1_82_type 1238
-#define _loop1_83_type 1239
-#define _loop1_84_type 1240
-#define _loop0_85_type 1241
-#define _loop1_86_type 1242
-#define _loop0_87_type 1243
-#define _loop1_88_type 1244
-#define _loop0_89_type 1245
-#define _loop1_90_type 1246
-#define _loop1_91_type 1247
-#define _loop1_92_type 1248
-#define _loop1_93_type 1249
-#define _tmp_94_type 1250
-#define _loop0_96_type 1251
-#define _gather_95_type 1252
-#define _tmp_97_type 1253
-#define _tmp_98_type 1254
-#define _tmp_99_type 1255
-#define _tmp_100_type 1256
-#define _loop1_101_type 1257
-#define _tmp_102_type 1258
-#define _tmp_103_type 1259
-#define _loop0_105_type 1260
-#define _gather_104_type 1261
-#define _loop1_106_type 1262
-#define _loop0_107_type 1263
-#define _loop0_108_type 1264
-#define _tmp_109_type 1265
-#define _tmp_110_type 1266
-#define _loop0_112_type 1267
-#define _gather_111_type 1268
-#define _loop0_114_type 1269
-#define _gather_113_type 1270
-#define _loop0_116_type 1271
-#define _gather_115_type 1272
-#define _loop0_118_type 1273
-#define _gather_117_type 1274
-#define _loop0_119_type 1275
-#define _loop0_121_type 1276
-#define _gather_120_type 1277
-#define _tmp_122_type 1278
-#define _loop0_124_type 1279
-#define _gather_123_type 1280
-#define _loop0_126_type 1281
-#define _gather_125_type 1282
-#define _tmp_127_type 1283
-#define _loop0_128_type 1284
-#define _tmp_129_type 1285
-#define _loop0_130_type 1286
-#define _loop0_131_type 1287
-#define _tmp_132_type 1288
-#define _tmp_133_type 1289
-#define _loop0_134_type 1290
-#define _tmp_135_type 1291
-#define _tmp_136_type 1292
-#define _tmp_137_type 1293
-#define _tmp_138_type 1294
-#define _tmp_139_type 1295
-#define _tmp_140_type 1296
-#define _tmp_141_type 1297
-#define _tmp_142_type 1298
-#define _tmp_143_type 1299
-#define _tmp_144_type 1300
-#define _tmp_145_type 1301
-#define _tmp_146_type 1302
-#define _tmp_147_type 1303
-#define _tmp_148_type 1304
-#define _tmp_149_type 1305
-#define _tmp_150_type 1306
-#define _loop1_151_type 1307
-#define _tmp_152_type 1308
-#define _tmp_153_type 1309
+#define simple_primary_type 1013 // Left-recursive
+#define assignment_type 1014
+#define augassign_type 1015
+#define global_stmt_type 1016
+#define nonlocal_stmt_type 1017
+#define yield_stmt_type 1018
+#define assert_stmt_type 1019
+#define del_stmt_type 1020
+#define import_stmt_type 1021
+#define import_name_type 1022
+#define import_from_type 1023
+#define import_from_targets_type 1024
+#define import_from_as_names_type 1025
+#define import_from_as_name_type 1026
+#define dotted_as_names_type 1027
+#define dotted_as_name_type 1028
+#define dotted_name_type 1029 // Left-recursive
+#define if_stmt_type 1030
+#define elif_stmt_type 1031
+#define else_block_type 1032
+#define while_stmt_type 1033
+#define for_stmt_type 1034
+#define with_stmt_type 1035
+#define with_item_type 1036
+#define try_stmt_type 1037
+#define except_block_type 1038
+#define finally_block_type 1039
+#define return_stmt_type 1040
+#define raise_stmt_type 1041
+#define function_def_type 1042
+#define function_def_raw_type 1043
+#define func_type_comment_type 1044
+#define params_type 1045
+#define parameters_type 1046
+#define slash_no_default_type 1047
+#define slash_with_default_type 1048
+#define star_etc_type 1049
+#define kwds_type 1050
+#define param_no_default_type 1051
+#define param_with_default_type 1052
+#define param_maybe_default_type 1053
+#define param_type 1054
+#define annotation_type 1055
+#define default_type 1056
+#define decorators_type 1057
+#define class_def_type 1058
+#define class_def_raw_type 1059
+#define block_type 1060
+#define expressions_list_type 1061
+#define star_expressions_type 1062
+#define star_expression_type 1063
+#define star_named_expressions_type 1064
+#define star_named_expression_type 1065
+#define named_expression_type 1066
+#define annotated_rhs_type 1067
+#define expressions_type 1068
+#define expression_type 1069
+#define lambdef_type 1070
+#define lambda_parameters_type 1071
+#define lambda_slash_no_default_type 1072
+#define lambda_slash_with_default_type 1073
+#define lambda_star_etc_type 1074
+#define lambda_kwds_type 1075
+#define lambda_param_no_default_type 1076
+#define lambda_param_with_default_type 1077
+#define lambda_param_maybe_default_type 1078
+#define lambda_param_type 1079
+#define disjunction_type 1080
+#define conjunction_type 1081
+#define inversion_type 1082
+#define comparison_type 1083
+#define compare_op_bitwise_or_pair_type 1084
+#define eq_bitwise_or_type 1085
+#define noteq_bitwise_or_type 1086
+#define lte_bitwise_or_type 1087
+#define lt_bitwise_or_type 1088
+#define gte_bitwise_or_type 1089
+#define gt_bitwise_or_type 1090
+#define notin_bitwise_or_type 1091
+#define in_bitwise_or_type 1092
+#define isnot_bitwise_or_type 1093
+#define is_bitwise_or_type 1094
+#define bitwise_or_type 1095 // Left-recursive
+#define bitwise_xor_type 1096 // Left-recursive
+#define bitwise_and_type 1097 // Left-recursive
+#define shift_expr_type 1098 // Left-recursive
+#define sum_type 1099 // Left-recursive
+#define term_type 1100 // Left-recursive
+#define factor_type 1101
+#define power_type 1102
+#define await_primary_type 1103
+#define primary_type 1104 // Left-recursive
+#define slices_type 1105
+#define slice_type 1106
+#define atom_type 1107
+#define strings_type 1108
+#define list_type 1109
+#define listcomp_type 1110
+#define tuple_type 1111
+#define group_type 1112
+#define genexp_type 1113
+#define set_type 1114
+#define setcomp_type 1115
+#define dict_type 1116
+#define dictcomp_type 1117
+#define double_starred_kvpairs_type 1118
+#define double_starred_kvpair_type 1119
+#define kvpair_type 1120
+#define for_if_clauses_type 1121
+#define for_if_clause_type 1122
+#define yield_expr_type 1123
+#define arguments_type 1124
+#define args_type 1125
+#define kwargs_type 1126
+#define starred_expression_type 1127
+#define kwarg_or_starred_type 1128
+#define kwarg_or_double_starred_type 1129
+#define star_targets_type 1130
+#define star_targets_seq_type 1131
+#define star_target_type 1132
+#define star_atom_type 1133
+#define single_target_type 1134
+#define single_subscript_attribute_target_type 1135
+#define del_targets_type 1136
+#define del_target_type 1137
+#define del_t_atom_type 1138
+#define del_target_end_type 1139
+#define targets_type 1140
+#define target_type 1141
+#define t_primary_type 1142 // Left-recursive
+#define t_lookahead_type 1143
+#define t_atom_type 1144
+#define incorrect_arguments_type 1145
+#define invalid_kwarg_type 1146
+#define invalid_named_expression_type 1147
+#define invalid_assignment_type 1148
+#define invalid_block_type 1149
+#define invalid_comprehension_type 1150
+#define invalid_dict_comprehension_type 1151
+#define invalid_parameters_type 1152
+#define invalid_star_etc_type 1153
+#define invalid_lambda_star_etc_type 1154
+#define invalid_double_type_comments_type 1155
+#define invalid_del_target_type 1156
+#define invalid_import_from_targets_type 1157
+#define _loop0_1_type 1158
+#define _loop0_2_type 1159
+#define _loop0_4_type 1160
+#define _gather_3_type 1161
+#define _loop0_6_type 1162
+#define _gather_5_type 1163
+#define _loop0_8_type 1164
+#define _gather_7_type 1165
+#define _loop0_10_type 1166
+#define _gather_9_type 1167
+#define _loop1_11_type 1168
+#define _loop0_13_type 1169
+#define _gather_12_type 1170
+#define _tmp_14_type 1171
+#define _tmp_15_type 1172
+#define _tmp_16_type 1173
+#define _tmp_17_type 1174
+#define _tmp_18_type 1175
+#define _tmp_19_type 1176
+#define _tmp_20_type 1177
+#define _tmp_21_type 1178
+#define _tmp_22_type 1179
+#define _tmp_23_type 1180
+#define _loop1_24_type 1181
+#define _tmp_25_type 1182
+#define _tmp_26_type 1183
+#define _loop0_28_type 1184
+#define _gather_27_type 1185
+#define _loop0_30_type 1186
+#define _gather_29_type 1187
+#define _tmp_31_type 1188
+#define _loop0_32_type 1189
+#define _loop1_33_type 1190
+#define _loop0_35_type 1191
+#define _gather_34_type 1192
+#define _tmp_36_type 1193
+#define _loop0_38_type 1194
+#define _gather_37_type 1195
+#define _tmp_39_type 1196
+#define _loop0_41_type 1197
+#define _gather_40_type 1198
+#define _loop0_43_type 1199
+#define _gather_42_type 1200
+#define _loop0_45_type 1201
+#define _gather_44_type 1202
+#define _loop0_47_type 1203
+#define _gather_46_type 1204
+#define _tmp_48_type 1205
+#define _loop1_49_type 1206
+#define _tmp_50_type 1207
+#define _tmp_51_type 1208
+#define _tmp_52_type 1209
+#define _tmp_53_type 1210
+#define _tmp_54_type 1211
+#define _loop0_55_type 1212
+#define _loop0_56_type 1213
+#define _loop0_57_type 1214
+#define _loop1_58_type 1215
+#define _loop0_59_type 1216
+#define _loop1_60_type 1217
+#define _loop1_61_type 1218
+#define _loop1_62_type 1219
+#define _loop0_63_type 1220
+#define _loop1_64_type 1221
+#define _loop0_65_type 1222
+#define _loop1_66_type 1223
+#define _loop0_67_type 1224
+#define _loop1_68_type 1225
+#define _loop1_69_type 1226
+#define _tmp_70_type 1227
+#define _loop0_72_type 1228
+#define _gather_71_type 1229
+#define _loop1_73_type 1230
+#define _loop0_75_type 1231
+#define _gather_74_type 1232
+#define _loop1_76_type 1233
+#define _loop0_77_type 1234
+#define _loop0_78_type 1235
+#define _loop0_79_type 1236
+#define _loop1_80_type 1237
+#define _loop0_81_type 1238
+#define _loop1_82_type 1239
+#define _loop1_83_type 1240
+#define _loop1_84_type 1241
+#define _loop0_85_type 1242
+#define _loop1_86_type 1243
+#define _loop0_87_type 1244
+#define _loop1_88_type 1245
+#define _loop0_89_type 1246
+#define _loop1_90_type 1247
+#define _loop1_91_type 1248
+#define _loop1_92_type 1249
+#define _loop1_93_type 1250
+#define _tmp_94_type 1251
+#define _loop0_96_type 1252
+#define _gather_95_type 1253
+#define _tmp_97_type 1254
+#define _tmp_98_type 1255
+#define _tmp_99_type 1256
+#define _tmp_100_type 1257
+#define _loop1_101_type 1258
+#define _tmp_102_type 1259
+#define _tmp_103_type 1260
+#define _loop0_105_type 1261
+#define _gather_104_type 1262
+#define _loop1_106_type 1263
+#define _loop0_107_type 1264
+#define _loop0_108_type 1265
+#define _tmp_109_type 1266
+#define _tmp_110_type 1267
+#define _loop0_112_type 1268
+#define _gather_111_type 1269
+#define _loop0_114_type 1270
+#define _gather_113_type 1271
+#define _loop0_116_type 1272
+#define _gather_115_type 1273
+#define _loop0_118_type 1274
+#define _gather_117_type 1275
+#define _loop0_119_type 1276
+#define _loop0_121_type 1277
+#define _gather_120_type 1278
+#define _tmp_122_type 1279
+#define _loop0_124_type 1280
+#define _gather_123_type 1281
+#define _loop0_126_type 1282
+#define _gather_125_type 1283
+#define _tmp_127_type 1284
+#define _loop0_128_type 1285
+#define _tmp_129_type 1286
+#define _loop0_130_type 1287
+#define _loop0_131_type 1288
+#define _tmp_132_type 1289
+#define _tmp_133_type 1290
+#define _loop0_134_type 1291
+#define _tmp_135_type 1292
+#define _tmp_136_type 1293
+#define _tmp_137_type 1294
+#define _tmp_138_type 1295
+#define _tmp_139_type 1296
+#define _tmp_140_type 1297
+#define _tmp_141_type 1298
+#define _tmp_142_type 1299
+#define _tmp_143_type 1300
+#define _tmp_144_type 1301
+#define _tmp_145_type 1302
+#define _tmp_146_type 1303
+#define _tmp_147_type 1304
+#define _tmp_148_type 1305
+#define _tmp_149_type 1306
+#define _tmp_150_type 1307
+#define _loop1_151_type 1308
+#define _tmp_152_type 1309
+#define _tmp_153_type 1310
static mod_ty file_rule(Parser *p);
static mod_ty interactive_rule(Parser *p);
@@ -399,6 +400,7 @@ static asdl_seq* simple_stmt_rule(Parser *p);
static stmt_ty small_stmt_rule(Parser *p);
static stmt_ty compound_stmt_rule(Parser *p);
static stmt_ty call_stmt_rule(Parser *p);
+static expr_ty simple_primary_rule(Parser *p);
static stmt_ty assignment_rule(Parser *p);
static AugOperator* augassign_rule(Parser *p);
static stmt_ty global_stmt_rule(Parser *p);
@@ -2029,7 +2031,7 @@ compound_stmt_rule(Parser *p)
return _res;
}
-// call_stmt: NAME &(NAME | NUMBER | STRING) args
+// call_stmt: simple_primary &(NAME | NUMBER | STRING) args
static stmt_ty
call_stmt_rule(Parser *p)
{
@@ -2049,23 +2051,23 @@ call_stmt_rule(Parser *p)
UNUSED(_start_lineno); // Only used by EXTRA macro
int _start_col_offset = p->tokens[_mark]->col_offset;
UNUSED(_start_col_offset); // Only used by EXTRA macro
- { // NAME &(NAME | NUMBER | STRING) args
+ { // simple_primary &(NAME | NUMBER | STRING) args
if (p->error_indicator) {
D(p->level--);
return NULL;
}
- D(fprintf(stderr, "%*c> call_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME &(NAME | NUMBER | STRING) args"));
+ D(fprintf(stderr, "%*c> call_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_primary &(NAME | NUMBER | STRING) args"));
expr_ty a;
expr_ty b;
if (
- (a = _PyPegen_name_token(p)) // NAME
+ (a = simple_primary_rule(p)) // simple_primary
&&
_PyPegen_lookahead(1, _tmp_20_rule, p)
&&
(b = args_rule(p)) // args
)
{
- D(fprintf(stderr, "%*c+ call_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME &(NAME | NUMBER | STRING) args"));
+ D(fprintf(stderr, "%*c+ call_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_primary &(NAME | NUMBER | STRING) args"));
Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
if (_token == NULL) {
D(p->level--);
@@ -2085,7 +2087,121 @@ call_stmt_rule(Parser *p)
}
p->mark = _mark;
D(fprintf(stderr, "%*c%s call_stmt[%d-%d]: %s failed!\n", p->level, ' ',
- p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME &(NAME | NUMBER | STRING) args"));
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_primary &(NAME | NUMBER | STRING) args"));
+ }
+ _res = NULL;
+ done:
+ D(p->level--);
+ return _res;
+}
+
+// Left-recursive
+// simple_primary: simple_primary '.' NAME | NAME
+static expr_ty simple_primary_raw(Parser *);
+static expr_ty
+simple_primary_rule(Parser *p)
+{
+ D(p->level++);
+ expr_ty _res = NULL;
+ if (_PyPegen_is_memoized(p, simple_primary_type, &_res)) {
+ D(p->level--);
+ return _res;
+ }
+ int _mark = p->mark;
+ int _resmark = p->mark;
+ while (1) {
+ int tmpvar_0 = _PyPegen_update_memo(p, _mark, simple_primary_type, _res);
+ if (tmpvar_0) {
+ D(p->level--);
+ return _res;
+ }
+ p->mark = _mark;
+ void *_raw = simple_primary_raw(p);
+ if (_raw == NULL || p->mark <= _resmark)
+ break;
+ _resmark = p->mark;
+ _res = _raw;
+ }
+ p->mark = _resmark;
+ D(p->level--);
+ return _res;
+}
+static expr_ty
+simple_primary_raw(Parser *p)
+{
+ D(p->level++);
+ if (p->error_indicator) {
+ D(p->level--);
+ return NULL;
+ }
+ expr_ty _res = NULL;
+ int _mark = p->mark;
+ if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+ p->error_indicator = 1;
+ D(p->level--);
+ return NULL;
+ }
+ int _start_lineno = p->tokens[_mark]->lineno;
+ UNUSED(_start_lineno); // Only used by EXTRA macro
+ int _start_col_offset = p->tokens[_mark]->col_offset;
+ UNUSED(_start_col_offset); // Only used by EXTRA macro
+ { // simple_primary '.' NAME
+ if (p->error_indicator) {
+ D(p->level--);
+ return NULL;
+ }
+ D(fprintf(stderr, "%*c> simple_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_primary '.' NAME"));
+ Token * _literal;
+ expr_ty a;
+ expr_ty b;
+ if (
+ (a = simple_primary_rule(p)) // simple_primary
+ &&
+ (_literal = _PyPegen_expect_token(p, 23)) // token='.'
+ &&
+ (b = _PyPegen_name_token(p)) // NAME
+ )
+ {
+ D(fprintf(stderr, "%*c+ simple_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_primary '.' NAME"));
+ Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+ if (_token == NULL) {
+ D(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 = _Py_Attribute ( a , b -> v . Name . id , Load , EXTRA );
+ if (_res == NULL && PyErr_Occurred()) {
+ p->error_indicator = 1;
+ D(p->level--);
+ return NULL;
+ }
+ goto done;
+ }
+ p->mark = _mark;
+ D(fprintf(stderr, "%*c%s simple_primary[%d-%d]: %s failed!\n", p->level, ' ',
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_primary '.' NAME"));
+ }
+ { // NAME
+ if (p->error_indicator) {
+ D(p->level--);
+ return NULL;
+ }
+ D(fprintf(stderr, "%*c> simple_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+ expr_ty name_var;
+ if (
+ (name_var = _PyPegen_name_token(p)) // NAME
+ )
+ {
+ D(fprintf(stderr, "%*c+ simple_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+ _res = name_var;
+ goto done;
+ }
+ p->mark = _mark;
+ D(fprintf(stderr, "%*c%s simple_primary[%d-%d]: %s failed!\n", p->level, ' ',
+ p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
}
_res = NULL;
done:
@@ -3495,8 +3611,8 @@ dotted_name_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_0 = _PyPegen_update_memo(p, _mark, dotted_name_type, _res);
- if (tmpvar_0) {
+ int tmpvar_1 = _PyPegen_update_memo(p, _mark, dotted_name_type, _res);
+ if (tmpvar_1) {
D(p->level--);
return _res;
}
@@ -8932,8 +9048,8 @@ bitwise_or_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_1 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res);
- if (tmpvar_1) {
+ int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res);
+ if (tmpvar_2) {
D(p->level--);
return _res;
}
@@ -9046,8 +9162,8 @@ bitwise_xor_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res);
- if (tmpvar_2) {
+ int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res);
+ if (tmpvar_3) {
D(p->level--);
return _res;
}
@@ -9160,8 +9276,8 @@ bitwise_and_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res);
- if (tmpvar_3) {
+ int tmpvar_4 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res);
+ if (tmpvar_4) {
D(p->level--);
return _res;
}
@@ -9274,8 +9390,8 @@ shift_expr_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_4 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res);
- if (tmpvar_4) {
+ int tmpvar_5 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res);
+ if (tmpvar_5) {
D(p->level--);
return _res;
}
@@ -9427,8 +9543,8 @@ sum_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_5 = _PyPegen_update_memo(p, _mark, sum_type, _res);
- if (tmpvar_5) {
+ int tmpvar_6 = _PyPegen_update_memo(p, _mark, sum_type, _res);
+ if (tmpvar_6) {
D(p->level--);
return _res;
}
@@ -9586,8 +9702,8 @@ term_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_6 = _PyPegen_update_memo(p, _mark, term_type, _res);
- if (tmpvar_6) {
+ int tmpvar_7 = _PyPegen_update_memo(p, _mark, term_type, _res);
+ if (tmpvar_7) {
D(p->level--);
return _res;
}
@@ -10189,8 +10305,8 @@ primary_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_7 = _PyPegen_update_memo(p, _mark, primary_type, _res);
- if (tmpvar_7) {
+ int tmpvar_8 = _PyPegen_update_memo(p, _mark, primary_type, _res);
+ if (tmpvar_8) {
D(p->level--);
return _res;
}
@@ -13930,8 +14046,8 @@ t_primary_rule(Parser *p)
int _mark = p->mark;
int _resmark = p->mark;
while (1) {
- int tmpvar_8 = _PyPegen_update_memo(p, _mark, t_primary_type, _res);
- if (tmpvar_8) {
+ int tmpvar_9 = _PyPegen_update_memo(p, _mark, t_primary_type, _res);
+ if (tmpvar_9) {
D(p->level--);
return _res;
}