diff options
author | Guido van Rossum <guido@python.org> | 2020-06-09 16:13:56 -0700 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2020-06-09 16:13:56 -0700 |
commit | 5ed19fcc1ae5ea296eb1e398137a9fa51d6a9f54 (patch) | |
tree | 08e43b7d60e5a4a9e08d2527d9aa0724642892e9 | |
parent | 220dcedf7832c37d8cfe79dae35c6d10d6c6356d (diff) | |
download | cpython-git-5ed19fcc1ae5ea296eb1e398137a9fa51d6a9f54.tar.gz |
Allow calling function given by dotted name, e.g. foo.bar 1, 2
-rw-r--r-- | Grammar/python.gram | 5 | ||||
-rw-r--r-- | Parser/pegen/parse.c | 758 |
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; } |