Hi all, As the subject of this e-mail says, the attached patch adds a "switch" statement to the Python language. However, I've been reading through PEP 275 and it seems that the PEP calls for a new opcode - SWITCH - to be added to support the new construct. I got a bit lost as to why the SWITCH opcode is necessary for the implementation of the PEP. The reasoning seems to be improving performance, but I'm not sure how a new opcode could improve performance. Anybody care to take the time to explain this to me, perhaps within the context of my patch? Cheers, Tom -- Tom Lee http://www.vector-seven.com -------------- next part -------------- Index: Python/graminit.c =================================================================== --- Python/graminit.c (revision 46818) +++ Python/graminit.c (working copy) @@ -696,7 +696,7 @@ {1, arcs_34_3}, {1, arcs_34_4}, }; -static arc arcs_35_0[7] = { +static arc arcs_35_0[8] = { {85, 1}, {86, 1}, {87, 1}, @@ -704,16 +704,17 @@ {89, 1}, {17, 1}, {90, 1}, + {91, 1}, }; static arc arcs_35_1[1] = { {0, 1}, }; static state states_35[2] = { - {7, arcs_35_0}, + {8, arcs_35_0}, {1, arcs_35_1}, }; static arc arcs_36_0[1] = { - {91, 1}, + {92, 1}, }; static arc arcs_36_1[1] = { {26, 2}, @@ -725,8 +726,8 @@ {22, 4}, }; static arc arcs_36_4[3] = { - {92, 1}, - {93, 5}, + {93, 1}, + {94, 5}, {0, 4}, }; static arc arcs_36_5[1] = { @@ -749,411 +750,461 @@ {1, arcs_36_7}, }; static arc arcs_37_0[1] = { - {94, 1}, + {95, 1}, }; static arc arcs_37_1[1] = { - {26, 2}, + {82, 2}, }; static arc arcs_37_2[1] = { {21, 3}, }; static arc arcs_37_3[1] = { - {22, 4}, + {2, 4}, }; -static arc arcs_37_4[2] = { - {93, 5}, - {0, 4}, +static arc arcs_37_4[1] = { + {96, 5}, }; -static arc arcs_37_5[1] = { - {21, 6}, +static arc arcs_37_5[2] = { + {97, 6}, + {94, 7}, }; static arc arcs_37_6[1] = { - {22, 7}, + {82, 8}, }; static arc arcs_37_7[1] = { - {0, 7}, + {21, 9}, }; -static state states_37[8] = { +static arc arcs_37_8[1] = { + {21, 10}, +}; +static arc arcs_37_9[1] = { + {22, 11}, +}; +static arc arcs_37_10[1] = { + {22, 12}, +}; +static arc arcs_37_11[1] = { + {98, 13}, +}; +static arc arcs_37_12[3] = { + {97, 6}, + {94, 7}, + {98, 13}, +}; +static arc arcs_37_13[1] = { + {0, 13}, +}; +static state states_37[14] = { {1, arcs_37_0}, {1, arcs_37_1}, {1, arcs_37_2}, {1, arcs_37_3}, - {2, arcs_37_4}, - {1, arcs_37_5}, + {1, arcs_37_4}, + {2, arcs_37_5}, {1, arcs_37_6}, {1, arcs_37_7}, + {1, arcs_37_8}, + {1, arcs_37_9}, + {1, arcs_37_10}, + {1, arcs_37_11}, + {3, arcs_37_12}, + {1, arcs_37_13}, }; static arc arcs_38_0[1] = { - {95, 1}, + {99, 1}, }; static arc arcs_38_1[1] = { - {59, 2}, + {26, 2}, }; static arc arcs_38_2[1] = { - {83, 3}, + {21, 3}, }; static arc arcs_38_3[1] = { - {9, 4}, + {22, 4}, }; -static arc arcs_38_4[1] = { - {21, 5}, +static arc arcs_38_4[2] = { + {94, 5}, + {0, 4}, }; static arc arcs_38_5[1] = { - {22, 6}, + {21, 6}, }; -static arc arcs_38_6[2] = { - {93, 7}, - {0, 6}, +static arc arcs_38_6[1] = { + {22, 7}, }; static arc arcs_38_7[1] = { - {21, 8}, + {0, 7}, }; -static arc arcs_38_8[1] = { - {22, 9}, -}; -static arc arcs_38_9[1] = { - {0, 9}, -}; -static state states_38[10] = { +static state states_38[8] = { {1, arcs_38_0}, {1, arcs_38_1}, {1, arcs_38_2}, {1, arcs_38_3}, - {1, arcs_38_4}, + {2, arcs_38_4}, {1, arcs_38_5}, - {2, arcs_38_6}, + {1, arcs_38_6}, {1, arcs_38_7}, - {1, arcs_38_8}, - {1, arcs_38_9}, }; static arc arcs_39_0[1] = { - {96, 1}, + {100, 1}, }; static arc arcs_39_1[1] = { - {21, 2}, + {59, 2}, }; static arc arcs_39_2[1] = { - {22, 3}, + {83, 3}, }; -static arc arcs_39_3[2] = { - {97, 4}, - {98, 5}, +static arc arcs_39_3[1] = { + {9, 4}, }; static arc arcs_39_4[1] = { - {21, 6}, + {21, 5}, }; static arc arcs_39_5[1] = { - {21, 7}, + {22, 6}, }; -static arc arcs_39_6[1] = { - {22, 8}, +static arc arcs_39_6[2] = { + {94, 7}, + {0, 6}, }; static arc arcs_39_7[1] = { + {21, 8}, +}; +static arc arcs_39_8[1] = { {22, 9}, }; -static arc arcs_39_8[4] = { - {97, 4}, - {93, 10}, - {98, 5}, - {0, 8}, -}; static arc arcs_39_9[1] = { {0, 9}, }; -static arc arcs_39_10[1] = { - {21, 11}, -}; -static arc arcs_39_11[1] = { - {22, 12}, -}; -static arc arcs_39_12[2] = { - {98, 5}, - {0, 12}, -}; -static state states_39[13] = { +static state states_39[10] = { {1, arcs_39_0}, {1, arcs_39_1}, {1, arcs_39_2}, - {2, arcs_39_3}, + {1, arcs_39_3}, {1, arcs_39_4}, {1, arcs_39_5}, - {1, arcs_39_6}, + {2, arcs_39_6}, {1, arcs_39_7}, - {4, arcs_39_8}, + {1, arcs_39_8}, {1, arcs_39_9}, - {1, arcs_39_10}, - {1, arcs_39_11}, - {2, arcs_39_12}, }; static arc arcs_40_0[1] = { - {99, 1}, + {101, 1}, }; static arc arcs_40_1[1] = { - {26, 2}, + {21, 2}, }; -static arc arcs_40_2[2] = { - {100, 3}, - {21, 4}, +static arc arcs_40_2[1] = { + {22, 3}, }; -static arc arcs_40_3[1] = { - {21, 4}, +static arc arcs_40_3[2] = { + {102, 4}, + {103, 5}, }; static arc arcs_40_4[1] = { - {22, 5}, + {21, 6}, }; static arc arcs_40_5[1] = { - {0, 5}, + {21, 7}, }; -static state states_40[6] = { +static arc arcs_40_6[1] = { + {22, 8}, +}; +static arc arcs_40_7[1] = { + {22, 9}, +}; +static arc arcs_40_8[4] = { + {102, 4}, + {94, 10}, + {103, 5}, + {0, 8}, +}; +static arc arcs_40_9[1] = { + {0, 9}, +}; +static arc arcs_40_10[1] = { + {21, 11}, +}; +static arc arcs_40_11[1] = { + {22, 12}, +}; +static arc arcs_40_12[2] = { + {103, 5}, + {0, 12}, +}; +static state states_40[13] = { {1, arcs_40_0}, {1, arcs_40_1}, - {2, arcs_40_2}, - {1, arcs_40_3}, + {1, arcs_40_2}, + {2, arcs_40_3}, {1, arcs_40_4}, {1, arcs_40_5}, + {1, arcs_40_6}, + {1, arcs_40_7}, + {4, arcs_40_8}, + {1, arcs_40_9}, + {1, arcs_40_10}, + {1, arcs_40_11}, + {2, arcs_40_12}, }; -static arc arcs_41_0[2] = { +static arc arcs_41_0[1] = { + {104, 1}, +}; +static arc arcs_41_1[1] = { + {26, 2}, +}; +static arc arcs_41_2[2] = { + {105, 3}, + {21, 4}, +}; +static arc arcs_41_3[1] = { + {21, 4}, +}; +static arc arcs_41_4[1] = { + {22, 5}, +}; +static arc arcs_41_5[1] = { + {0, 5}, +}; +static state states_41[6] = { + {1, arcs_41_0}, + {1, arcs_41_1}, + {2, arcs_41_2}, + {1, arcs_41_3}, + {1, arcs_41_4}, + {1, arcs_41_5}, +}; +static arc arcs_42_0[2] = { {78, 1}, {19, 1}, }; -static arc arcs_41_1[1] = { +static arc arcs_42_1[1] = { {82, 2}, }; -static arc arcs_41_2[1] = { +static arc arcs_42_2[1] = { {0, 2}, }; -static state states_41[3] = { - {2, arcs_41_0}, - {1, arcs_41_1}, - {1, arcs_41_2}, +static state states_42[3] = { + {2, arcs_42_0}, + {1, arcs_42_1}, + {1, arcs_42_2}, }; -static arc arcs_42_0[1] = { - {101, 1}, +static arc arcs_43_0[1] = { + {106, 1}, }; -static arc arcs_42_1[2] = { +static arc arcs_43_1[2] = { {26, 2}, {0, 1}, }; -static arc arcs_42_2[2] = { +static arc arcs_43_2[2] = { {27, 3}, {0, 2}, }; -static arc arcs_42_3[1] = { +static arc arcs_43_3[1] = { {26, 4}, }; -static arc arcs_42_4[1] = { +static arc arcs_43_4[1] = { {0, 4}, }; -static state states_42[5] = { - {1, arcs_42_0}, - {2, arcs_42_1}, - {2, arcs_42_2}, - {1, arcs_42_3}, - {1, arcs_42_4}, +static state states_43[5] = { + {1, arcs_43_0}, + {2, arcs_43_1}, + {2, arcs_43_2}, + {1, arcs_43_3}, + {1, arcs_43_4}, }; -static arc arcs_43_0[2] = { +static arc arcs_44_0[2] = { {3, 1}, {2, 2}, }; -static arc arcs_43_1[1] = { +static arc arcs_44_1[1] = { {0, 1}, }; -static arc arcs_43_2[1] = { - {102, 3}, +static arc arcs_44_2[1] = { + {96, 3}, }; -static arc arcs_43_3[1] = { +static arc arcs_44_3[1] = { {6, 4}, }; -static arc arcs_43_4[2] = { +static arc arcs_44_4[2] = { {6, 4}, - {103, 1}, + {98, 1}, }; -static state states_43[5] = { - {2, arcs_43_0}, - {1, arcs_43_1}, - {1, arcs_43_2}, - {1, arcs_43_3}, - {2, arcs_43_4}, +static state states_44[5] = { + {2, arcs_44_0}, + {1, arcs_44_1}, + {1, arcs_44_2}, + {1, arcs_44_3}, + {2, arcs_44_4}, }; -static arc arcs_44_0[1] = { - {105, 1}, +static arc arcs_45_0[1] = { + {108, 1}, }; -static arc arcs_44_1[2] = { +static arc arcs_45_1[2] = { {27, 2}, {0, 1}, }; -static arc arcs_44_2[1] = { - {105, 3}, +static arc arcs_45_2[1] = { + {108, 3}, }; -static arc arcs_44_3[2] = { +static arc arcs_45_3[2] = { {27, 4}, {0, 3}, }; -static arc arcs_44_4[2] = { - {105, 3}, +static arc arcs_45_4[2] = { + {108, 3}, {0, 4}, }; -static state states_44[5] = { - {1, arcs_44_0}, - {2, arcs_44_1}, - {1, arcs_44_2}, - {2, arcs_44_3}, - {2, arcs_44_4}, +static state states_45[5] = { + {1, arcs_45_0}, + {2, arcs_45_1}, + {1, arcs_45_2}, + {2, arcs_45_3}, + {2, arcs_45_4}, }; -static arc arcs_45_0[2] = { - {106, 1}, - {107, 1}, +static arc arcs_46_0[2] = { + {109, 1}, + {110, 1}, }; -static arc arcs_45_1[1] = { +static arc arcs_46_1[1] = { {0, 1}, }; -static state states_45[2] = { - {2, arcs_45_0}, - {1, arcs_45_1}, +static state states_46[2] = { + {2, arcs_46_0}, + {1, arcs_46_1}, }; -static arc arcs_46_0[1] = { - {108, 1}, +static arc arcs_47_0[1] = { + {111, 1}, }; -static arc arcs_46_1[2] = { +static arc arcs_47_1[2] = { {23, 2}, {21, 3}, }; -static arc arcs_46_2[1] = { +static arc arcs_47_2[1] = { {21, 3}, }; -static arc arcs_46_3[1] = { - {105, 4}, +static arc arcs_47_3[1] = { + {108, 4}, }; -static arc arcs_46_4[1] = { +static arc arcs_47_4[1] = { {0, 4}, }; -static state states_46[5] = { - {1, arcs_46_0}, - {2, arcs_46_1}, - {1, arcs_46_2}, - {1, arcs_46_3}, - {1, arcs_46_4}, +static state states_47[5] = { + {1, arcs_47_0}, + {2, arcs_47_1}, + {1, arcs_47_2}, + {1, arcs_47_3}, + {1, arcs_47_4}, }; -static arc arcs_47_0[2] = { - {106, 1}, - {109, 2}, +static arc arcs_48_0[2] = { + {109, 1}, + {112, 2}, }; -static arc arcs_47_1[2] = { - {91, 3}, +static arc arcs_48_1[2] = { + {92, 3}, {0, 1}, }; -static arc arcs_47_2[1] = { +static arc arcs_48_2[1] = { {0, 2}, }; -static arc arcs_47_3[1] = { - {106, 4}, +static arc arcs_48_3[1] = { + {109, 4}, }; -static arc arcs_47_4[1] = { - {93, 5}, +static arc arcs_48_4[1] = { + {94, 5}, }; -static arc arcs_47_5[1] = { +static arc arcs_48_5[1] = { {26, 2}, }; -static state states_47[6] = { - {2, arcs_47_0}, - {2, arcs_47_1}, - {1, arcs_47_2}, - {1, arcs_47_3}, - {1, arcs_47_4}, - {1, arcs_47_5}, -}; -static arc arcs_48_0[1] = { - {110, 1}, -}; -static arc arcs_48_1[2] = { - {111, 0}, - {0, 1}, -}; -static state states_48[2] = { - {1, arcs_48_0}, +static state states_48[6] = { + {2, arcs_48_0}, {2, arcs_48_1}, + {1, arcs_48_2}, + {1, arcs_48_3}, + {1, arcs_48_4}, + {1, arcs_48_5}, }; static arc arcs_49_0[1] = { - {112, 1}, + {113, 1}, }; static arc arcs_49_1[2] = { - {113, 0}, + {114, 0}, {0, 1}, }; static state states_49[2] = { {1, arcs_49_0}, {2, arcs_49_1}, }; -static arc arcs_50_0[2] = { - {114, 1}, +static arc arcs_50_0[1] = { + {115, 1}, +}; +static arc arcs_50_1[2] = { + {116, 0}, + {0, 1}, +}; +static state states_50[2] = { + {1, arcs_50_0}, + {2, arcs_50_1}, +}; +static arc arcs_51_0[2] = { + {117, 1}, + {118, 2}, +}; +static arc arcs_51_1[1] = { {115, 2}, }; -static arc arcs_50_1[1] = { - {112, 2}, -}; -static arc arcs_50_2[1] = { +static arc arcs_51_2[1] = { {0, 2}, }; -static state states_50[3] = { - {2, arcs_50_0}, - {1, arcs_50_1}, - {1, arcs_50_2}, +static state states_51[3] = { + {2, arcs_51_0}, + {1, arcs_51_1}, + {1, arcs_51_2}, }; -static arc arcs_51_0[1] = { +static arc arcs_52_0[1] = { {82, 1}, }; -static arc arcs_51_1[2] = { - {116, 0}, +static arc arcs_52_1[2] = { + {119, 0}, {0, 1}, }; -static state states_51[2] = { - {1, arcs_51_0}, - {2, arcs_51_1}, +static state states_52[2] = { + {1, arcs_52_0}, + {2, arcs_52_1}, }; -static arc arcs_52_0[10] = { - {117, 1}, - {118, 1}, - {119, 1}, +static arc arcs_53_0[10] = { {120, 1}, {121, 1}, {122, 1}, {123, 1}, + {124, 1}, + {125, 1}, + {126, 1}, {83, 1}, - {114, 2}, - {124, 3}, + {117, 2}, + {127, 3}, }; -static arc arcs_52_1[1] = { +static arc arcs_53_1[1] = { {0, 1}, }; -static arc arcs_52_2[1] = { +static arc arcs_53_2[1] = { {83, 1}, }; -static arc arcs_52_3[2] = { - {114, 1}, +static arc arcs_53_3[2] = { + {117, 1}, {0, 3}, }; -static state states_52[4] = { - {10, arcs_52_0}, - {1, arcs_52_1}, - {1, arcs_52_2}, - {2, arcs_52_3}, +static state states_53[4] = { + {10, arcs_53_0}, + {1, arcs_53_1}, + {1, arcs_53_2}, + {2, arcs_53_3}, }; -static arc arcs_53_0[1] = { - {125, 1}, -}; -static arc arcs_53_1[2] = { - {126, 0}, - {0, 1}, -}; -static state states_53[2] = { - {1, arcs_53_0}, - {2, arcs_53_1}, -}; static arc arcs_54_0[1] = { - {127, 1}, + {128, 1}, }; static arc arcs_54_1[2] = { - {128, 0}, + {129, 0}, {0, 1}, }; static state states_54[2] = { @@ -1161,10 +1212,10 @@ {2, arcs_54_1}, }; static arc arcs_55_0[1] = { - {129, 1}, + {130, 1}, }; static arc arcs_55_1[2] = { - {130, 0}, + {131, 0}, {0, 1}, }; static state states_55[2] = { @@ -1172,23 +1223,22 @@ {2, arcs_55_1}, }; static arc arcs_56_0[1] = { - {131, 1}, + {132, 1}, }; -static arc arcs_56_1[3] = { - {132, 0}, - {57, 0}, +static arc arcs_56_1[2] = { + {133, 0}, {0, 1}, }; static state states_56[2] = { {1, arcs_56_0}, - {3, arcs_56_1}, + {2, arcs_56_1}, }; static arc arcs_57_0[1] = { - {133, 1}, + {134, 1}, }; static arc arcs_57_1[3] = { - {134, 0}, {135, 0}, + {57, 0}, {0, 1}, }; static state states_57[2] = { @@ -1198,142 +1248,128 @@ static arc arcs_58_0[1] = { {136, 1}, }; -static arc arcs_58_1[5] = { - {28, 0}, +static arc arcs_58_1[3] = { {137, 0}, {138, 0}, - {139, 0}, {0, 1}, }; static state states_58[2] = { {1, arcs_58_0}, - {5, arcs_58_1}, + {3, arcs_58_1}, }; -static arc arcs_59_0[4] = { - {134, 1}, - {135, 1}, - {140, 1}, - {141, 2}, +static arc arcs_59_0[1] = { + {139, 1}, }; -static arc arcs_59_1[1] = { - {136, 2}, +static arc arcs_59_1[5] = { + {28, 0}, + {140, 0}, + {141, 0}, + {142, 0}, + {0, 1}, }; -static arc arcs_59_2[1] = { +static state states_59[2] = { + {1, arcs_59_0}, + {5, arcs_59_1}, +}; +static arc arcs_60_0[4] = { + {137, 1}, + {138, 1}, + {143, 1}, + {144, 2}, +}; +static arc arcs_60_1[1] = { + {139, 2}, +}; +static arc arcs_60_2[1] = { {0, 2}, }; -static state states_59[3] = { - {4, arcs_59_0}, - {1, arcs_59_1}, - {1, arcs_59_2}, +static state states_60[3] = { + {4, arcs_60_0}, + {1, arcs_60_1}, + {1, arcs_60_2}, }; -static arc arcs_60_0[1] = { - {142, 1}, +static arc arcs_61_0[1] = { + {145, 1}, }; -static arc arcs_60_1[3] = { - {143, 1}, +static arc arcs_61_1[3] = { + {146, 1}, {29, 2}, {0, 1}, }; -static arc arcs_60_2[1] = { - {136, 3}, +static arc arcs_61_2[1] = { + {139, 3}, }; -static arc arcs_60_3[1] = { +static arc arcs_61_3[1] = { {0, 3}, }; -static state states_60[4] = { - {1, arcs_60_0}, - {3, arcs_60_1}, - {1, arcs_60_2}, - {1, arcs_60_3}, +static state states_61[4] = { + {1, arcs_61_0}, + {3, arcs_61_1}, + {1, arcs_61_2}, + {1, arcs_61_3}, }; -static arc arcs_61_0[7] = { +static arc arcs_62_0[7] = { {13, 1}, - {145, 2}, - {148, 3}, - {151, 4}, + {148, 2}, + {151, 3}, + {154, 4}, {19, 5}, - {153, 5}, - {154, 6}, + {156, 5}, + {157, 6}, }; -static arc arcs_61_1[3] = { +static arc arcs_62_1[3] = { {43, 7}, - {144, 7}, + {147, 7}, {15, 5}, }; -static arc arcs_61_2[2] = { - {146, 8}, - {147, 5}, -}; -static arc arcs_61_3[2] = { - {149, 9}, +static arc arcs_62_2[2] = { + {149, 8}, {150, 5}, }; -static arc arcs_61_4[1] = { - {152, 10}, +static arc arcs_62_3[2] = { + {152, 9}, + {153, 5}, }; -static arc arcs_61_5[1] = { +static arc arcs_62_4[1] = { + {155, 10}, +}; +static arc arcs_62_5[1] = { {0, 5}, }; -static arc arcs_61_6[2] = { - {154, 6}, +static arc arcs_62_6[2] = { + {157, 6}, {0, 6}, }; -static arc arcs_61_7[1] = { +static arc arcs_62_7[1] = { {15, 5}, }; -static arc arcs_61_8[1] = { - {147, 5}, -}; -static arc arcs_61_9[1] = { +static arc arcs_62_8[1] = { {150, 5}, }; -static arc arcs_61_10[1] = { - {151, 5}, +static arc arcs_62_9[1] = { + {153, 5}, }; -static state states_61[11] = { - {7, arcs_61_0}, - {3, arcs_61_1}, - {2, arcs_61_2}, - {2, arcs_61_3}, - {1, arcs_61_4}, - {1, arcs_61_5}, - {2, arcs_61_6}, - {1, arcs_61_7}, - {1, arcs_61_8}, - {1, arcs_61_9}, - {1, arcs_61_10}, +static arc arcs_62_10[1] = { + {154, 5}, }; -static arc arcs_62_0[1] = { - {26, 1}, -}; -static arc arcs_62_1[3] = { - {155, 2}, - {27, 3}, - {0, 1}, -}; -static arc arcs_62_2[1] = { - {0, 2}, -}; -static arc arcs_62_3[2] = { - {26, 4}, - {0, 3}, -}; -static arc arcs_62_4[2] = { - {27, 3}, - {0, 4}, -}; -static state states_62[5] = { - {1, arcs_62_0}, +static state states_62[11] = { + {7, arcs_62_0}, {3, arcs_62_1}, - {1, arcs_62_2}, + {2, arcs_62_2}, {2, arcs_62_3}, - {2, arcs_62_4}, + {1, arcs_62_4}, + {1, arcs_62_5}, + {2, arcs_62_6}, + {1, arcs_62_7}, + {1, arcs_62_8}, + {1, arcs_62_9}, + {1, arcs_62_10}, }; static arc arcs_63_0[1] = { {26, 1}, }; static arc arcs_63_1[3] = { - {156, 2}, + {158, 2}, {27, 3}, {0, 1}, }; @@ -1356,153 +1392,163 @@ {2, arcs_63_4}, }; static arc arcs_64_0[1] = { - {108, 1}, + {26, 1}, }; -static arc arcs_64_1[2] = { - {23, 2}, - {21, 3}, +static arc arcs_64_1[3] = { + {159, 2}, + {27, 3}, + {0, 1}, }; static arc arcs_64_2[1] = { - {21, 3}, + {0, 2}, }; -static arc arcs_64_3[1] = { +static arc arcs_64_3[2] = { {26, 4}, + {0, 3}, }; -static arc arcs_64_4[1] = { +static arc arcs_64_4[2] = { + {27, 3}, {0, 4}, }; static state states_64[5] = { {1, arcs_64_0}, - {2, arcs_64_1}, + {3, arcs_64_1}, {1, arcs_64_2}, - {1, arcs_64_3}, - {1, arcs_64_4}, + {2, arcs_64_3}, + {2, arcs_64_4}, }; -static arc arcs_65_0[3] = { +static arc arcs_65_0[1] = { + {111, 1}, +}; +static arc arcs_65_1[2] = { + {23, 2}, + {21, 3}, +}; +static arc arcs_65_2[1] = { + {21, 3}, +}; +static arc arcs_65_3[1] = { + {26, 4}, +}; +static arc arcs_65_4[1] = { + {0, 4}, +}; +static state states_65[5] = { + {1, arcs_65_0}, + {2, arcs_65_1}, + {1, arcs_65_2}, + {1, arcs_65_3}, + {1, arcs_65_4}, +}; +static arc arcs_66_0[3] = { {13, 1}, - {145, 2}, + {148, 2}, {75, 3}, }; -static arc arcs_65_1[2] = { +static arc arcs_66_1[2] = { {14, 4}, {15, 5}, }; -static arc arcs_65_2[1] = { - {157, 6}, +static arc arcs_66_2[1] = { + {160, 6}, }; -static arc arcs_65_3[1] = { +static arc arcs_66_3[1] = { {19, 5}, }; -static arc arcs_65_4[1] = { +static arc arcs_66_4[1] = { {15, 5}, }; -static arc arcs_65_5[1] = { +static arc arcs_66_5[1] = { {0, 5}, }; -static arc arcs_65_6[1] = { - {147, 5}, +static arc arcs_66_6[1] = { + {150, 5}, }; -static state states_65[7] = { - {3, arcs_65_0}, - {2, arcs_65_1}, - {1, arcs_65_2}, - {1, arcs_65_3}, - {1, arcs_65_4}, - {1, arcs_65_5}, - {1, arcs_65_6}, +static state states_66[7] = { + {3, arcs_66_0}, + {2, arcs_66_1}, + {1, arcs_66_2}, + {1, arcs_66_3}, + {1, arcs_66_4}, + {1, arcs_66_5}, + {1, arcs_66_6}, }; -static arc arcs_66_0[1] = { - {158, 1}, +static arc arcs_67_0[1] = { + {161, 1}, }; -static arc arcs_66_1[2] = { +static arc arcs_67_1[2] = { {27, 2}, {0, 1}, }; -static arc arcs_66_2[2] = { - {158, 1}, +static arc arcs_67_2[2] = { + {161, 1}, {0, 2}, }; -static state states_66[3] = { - {1, arcs_66_0}, - {2, arcs_66_1}, - {2, arcs_66_2}, +static state states_67[3] = { + {1, arcs_67_0}, + {2, arcs_67_1}, + {2, arcs_67_2}, }; -static arc arcs_67_0[3] = { +static arc arcs_68_0[3] = { {75, 1}, {26, 2}, {21, 3}, }; -static arc arcs_67_1[1] = { +static arc arcs_68_1[1] = { {75, 4}, }; -static arc arcs_67_2[2] = { +static arc arcs_68_2[2] = { {21, 3}, {0, 2}, }; -static arc arcs_67_3[3] = { +static arc arcs_68_3[3] = { {26, 5}, - {159, 6}, + {162, 6}, {0, 3}, }; -static arc arcs_67_4[1] = { +static arc arcs_68_4[1] = { {75, 6}, }; -static arc arcs_67_5[2] = { - {159, 6}, +static arc arcs_68_5[2] = { + {162, 6}, {0, 5}, }; -static arc arcs_67_6[1] = { +static arc arcs_68_6[1] = { {0, 6}, }; -static state states_67[7] = { - {3, arcs_67_0}, - {1, arcs_67_1}, - {2, arcs_67_2}, - {3, arcs_67_3}, - {1, arcs_67_4}, - {2, arcs_67_5}, - {1, arcs_67_6}, +static state states_68[7] = { + {3, arcs_68_0}, + {1, arcs_68_1}, + {2, arcs_68_2}, + {3, arcs_68_3}, + {1, arcs_68_4}, + {2, arcs_68_5}, + {1, arcs_68_6}, }; -static arc arcs_68_0[1] = { +static arc arcs_69_0[1] = { {21, 1}, }; -static arc arcs_68_1[2] = { +static arc arcs_69_1[2] = { {26, 2}, {0, 1}, }; -static arc arcs_68_2[1] = { +static arc arcs_69_2[1] = { {0, 2}, }; -static state states_68[3] = { - {1, arcs_68_0}, - {2, arcs_68_1}, - {1, arcs_68_2}, -}; -static arc arcs_69_0[1] = { - {82, 1}, -}; -static arc arcs_69_1[2] = { - {27, 2}, - {0, 1}, -}; -static arc arcs_69_2[2] = { - {82, 1}, - {0, 2}, -}; static state states_69[3] = { {1, arcs_69_0}, {2, arcs_69_1}, - {2, arcs_69_2}, + {1, arcs_69_2}, }; static arc arcs_70_0[1] = { - {26, 1}, + {82, 1}, }; static arc arcs_70_1[2] = { {27, 2}, {0, 1}, }; static arc arcs_70_2[2] = { - {26, 1}, + {82, 1}, {0, 2}, }; static state states_70[3] = { @@ -1513,445 +1559,463 @@ static arc arcs_71_0[1] = { {26, 1}, }; -static arc arcs_71_1[1] = { +static arc arcs_71_1[2] = { + {27, 2}, + {0, 1}, +}; +static arc arcs_71_2[2] = { + {26, 1}, + {0, 2}, +}; +static state states_71[3] = { + {1, arcs_71_0}, + {2, arcs_71_1}, + {2, arcs_71_2}, +}; +static arc arcs_72_0[1] = { + {26, 1}, +}; +static arc arcs_72_1[1] = { {21, 2}, }; -static arc arcs_71_2[1] = { +static arc arcs_72_2[1] = { {26, 3}, }; -static arc arcs_71_3[2] = { +static arc arcs_72_3[2] = { {27, 4}, {0, 3}, }; -static arc arcs_71_4[2] = { +static arc arcs_72_4[2] = { {26, 1}, {0, 4}, }; -static state states_71[5] = { - {1, arcs_71_0}, - {1, arcs_71_1}, - {1, arcs_71_2}, - {2, arcs_71_3}, - {2, arcs_71_4}, +static state states_72[5] = { + {1, arcs_72_0}, + {1, arcs_72_1}, + {1, arcs_72_2}, + {2, arcs_72_3}, + {2, arcs_72_4}, }; -static arc arcs_72_0[1] = { - {160, 1}, +static arc arcs_73_0[1] = { + {163, 1}, }; -static arc arcs_72_1[1] = { +static arc arcs_73_1[1] = { {19, 2}, }; -static arc arcs_72_2[2] = { +static arc arcs_73_2[2] = { {13, 3}, {21, 4}, }; -static arc arcs_72_3[2] = { +static arc arcs_73_3[2] = { {9, 5}, {15, 6}, }; -static arc arcs_72_4[1] = { +static arc arcs_73_4[1] = { {22, 7}, }; -static arc arcs_72_5[1] = { +static arc arcs_73_5[1] = { {15, 6}, }; -static arc arcs_72_6[1] = { +static arc arcs_73_6[1] = { {21, 4}, }; -static arc arcs_72_7[1] = { +static arc arcs_73_7[1] = { {0, 7}, }; -static state states_72[8] = { - {1, arcs_72_0}, - {1, arcs_72_1}, - {2, arcs_72_2}, - {2, arcs_72_3}, - {1, arcs_72_4}, - {1, arcs_72_5}, - {1, arcs_72_6}, - {1, arcs_72_7}, +static state states_73[8] = { + {1, arcs_73_0}, + {1, arcs_73_1}, + {2, arcs_73_2}, + {2, arcs_73_3}, + {1, arcs_73_4}, + {1, arcs_73_5}, + {1, arcs_73_6}, + {1, arcs_73_7}, }; -static arc arcs_73_0[3] = { - {161, 1}, +static arc arcs_74_0[3] = { + {164, 1}, {28, 2}, {29, 3}, }; -static arc arcs_73_1[2] = { +static arc arcs_74_1[2] = { {27, 4}, {0, 1}, }; -static arc arcs_73_2[1] = { +static arc arcs_74_2[1] = { {26, 5}, }; -static arc arcs_73_3[1] = { +static arc arcs_74_3[1] = { {26, 6}, }; -static arc arcs_73_4[4] = { - {161, 1}, +static arc arcs_74_4[4] = { + {164, 1}, {28, 2}, {29, 3}, {0, 4}, }; -static arc arcs_73_5[2] = { +static arc arcs_74_5[2] = { {27, 7}, {0, 5}, }; -static arc arcs_73_6[1] = { +static arc arcs_74_6[1] = { {0, 6}, }; -static arc arcs_73_7[1] = { +static arc arcs_74_7[1] = { {29, 3}, }; -static state states_73[8] = { - {3, arcs_73_0}, - {2, arcs_73_1}, - {1, arcs_73_2}, - {1, arcs_73_3}, - {4, arcs_73_4}, - {2, arcs_73_5}, - {1, arcs_73_6}, - {1, arcs_73_7}, +static state states_74[8] = { + {3, arcs_74_0}, + {2, arcs_74_1}, + {1, arcs_74_2}, + {1, arcs_74_3}, + {4, arcs_74_4}, + {2, arcs_74_5}, + {1, arcs_74_6}, + {1, arcs_74_7}, }; -static arc arcs_74_0[1] = { +static arc arcs_75_0[1] = { {26, 1}, }; -static arc arcs_74_1[3] = { - {156, 2}, +static arc arcs_75_1[3] = { + {159, 2}, {25, 3}, {0, 1}, }; -static arc arcs_74_2[1] = { +static arc arcs_75_2[1] = { {0, 2}, }; -static arc arcs_74_3[1] = { +static arc arcs_75_3[1] = { {26, 2}, }; -static state states_74[4] = { - {1, arcs_74_0}, - {3, arcs_74_1}, - {1, arcs_74_2}, - {1, arcs_74_3}, +static state states_75[4] = { + {1, arcs_75_0}, + {3, arcs_75_1}, + {1, arcs_75_2}, + {1, arcs_75_3}, }; -static arc arcs_75_0[2] = { - {155, 1}, - {163, 1}, +static arc arcs_76_0[2] = { + {158, 1}, + {166, 1}, }; -static arc arcs_75_1[1] = { +static arc arcs_76_1[1] = { {0, 1}, }; -static state states_75[2] = { - {2, arcs_75_0}, - {1, arcs_75_1}, +static state states_76[2] = { + {2, arcs_76_0}, + {1, arcs_76_1}, }; -static arc arcs_76_0[1] = { - {95, 1}, +static arc arcs_77_0[1] = { + {100, 1}, }; -static arc arcs_76_1[1] = { +static arc arcs_77_1[1] = { {59, 2}, }; -static arc arcs_76_2[1] = { +static arc arcs_77_2[1] = { {83, 3}, }; -static arc arcs_76_3[1] = { - {104, 4}, +static arc arcs_77_3[1] = { + {107, 4}, }; -static arc arcs_76_4[2] = { - {162, 5}, +static arc arcs_77_4[2] = { + {165, 5}, {0, 4}, }; -static arc arcs_76_5[1] = { +static arc arcs_77_5[1] = { {0, 5}, }; -static state states_76[6] = { - {1, arcs_76_0}, - {1, arcs_76_1}, - {1, arcs_76_2}, - {1, arcs_76_3}, - {2, arcs_76_4}, - {1, arcs_76_5}, +static state states_77[6] = { + {1, arcs_77_0}, + {1, arcs_77_1}, + {1, arcs_77_2}, + {1, arcs_77_3}, + {2, arcs_77_4}, + {1, arcs_77_5}, }; -static arc arcs_77_0[1] = { - {91, 1}, +static arc arcs_78_0[1] = { + {92, 1}, }; -static arc arcs_77_1[1] = { - {105, 2}, +static arc arcs_78_1[1] = { + {108, 2}, }; -static arc arcs_77_2[2] = { - {162, 3}, +static arc arcs_78_2[2] = { + {165, 3}, {0, 2}, }; -static arc arcs_77_3[1] = { +static arc arcs_78_3[1] = { {0, 3}, }; -static state states_77[4] = { - {1, arcs_77_0}, - {1, arcs_77_1}, - {2, arcs_77_2}, - {1, arcs_77_3}, +static state states_78[4] = { + {1, arcs_78_0}, + {1, arcs_78_1}, + {2, arcs_78_2}, + {1, arcs_78_3}, }; -static arc arcs_78_0[2] = { - {156, 1}, - {165, 1}, +static arc arcs_79_0[2] = { + {159, 1}, + {168, 1}, }; -static arc arcs_78_1[1] = { +static arc arcs_79_1[1] = { {0, 1}, }; -static state states_78[2] = { - {2, arcs_78_0}, - {1, arcs_78_1}, +static state states_79[2] = { + {2, arcs_79_0}, + {1, arcs_79_1}, }; -static arc arcs_79_0[1] = { - {95, 1}, +static arc arcs_80_0[1] = { + {100, 1}, }; -static arc arcs_79_1[1] = { +static arc arcs_80_1[1] = { {59, 2}, }; -static arc arcs_79_2[1] = { +static arc arcs_80_2[1] = { {83, 3}, }; -static arc arcs_79_3[1] = { - {106, 4}, +static arc arcs_80_3[1] = { + {109, 4}, }; -static arc arcs_79_4[2] = { - {164, 5}, +static arc arcs_80_4[2] = { + {167, 5}, {0, 4}, }; -static arc arcs_79_5[1] = { +static arc arcs_80_5[1] = { {0, 5}, }; -static state states_79[6] = { - {1, arcs_79_0}, - {1, arcs_79_1}, - {1, arcs_79_2}, - {1, arcs_79_3}, - {2, arcs_79_4}, - {1, arcs_79_5}, +static state states_80[6] = { + {1, arcs_80_0}, + {1, arcs_80_1}, + {1, arcs_80_2}, + {1, arcs_80_3}, + {2, arcs_80_4}, + {1, arcs_80_5}, }; -static arc arcs_80_0[1] = { - {91, 1}, +static arc arcs_81_0[1] = { + {92, 1}, }; -static arc arcs_80_1[1] = { - {105, 2}, +static arc arcs_81_1[1] = { + {108, 2}, }; -static arc arcs_80_2[2] = { - {164, 3}, +static arc arcs_81_2[2] = { + {167, 3}, {0, 2}, }; -static arc arcs_80_3[1] = { +static arc arcs_81_3[1] = { {0, 3}, }; -static state states_80[4] = { - {1, arcs_80_0}, - {1, arcs_80_1}, - {2, arcs_80_2}, - {1, arcs_80_3}, +static state states_81[4] = { + {1, arcs_81_0}, + {1, arcs_81_1}, + {2, arcs_81_2}, + {1, arcs_81_3}, }; -static arc arcs_81_0[1] = { +static arc arcs_82_0[1] = { {26, 1}, }; -static arc arcs_81_1[2] = { +static arc arcs_82_1[2] = { {27, 0}, {0, 1}, }; -static state states_81[2] = { - {1, arcs_81_0}, - {2, arcs_81_1}, +static state states_82[2] = { + {1, arcs_82_0}, + {2, arcs_82_1}, }; -static arc arcs_82_0[1] = { +static arc arcs_83_0[1] = { {19, 1}, }; -static arc arcs_82_1[1] = { +static arc arcs_83_1[1] = { {0, 1}, }; -static state states_82[2] = { - {1, arcs_82_0}, - {1, arcs_82_1}, +static state states_83[2] = { + {1, arcs_83_0}, + {1, arcs_83_1}, }; -static arc arcs_83_0[1] = { - {167, 1}, +static arc arcs_84_0[1] = { + {170, 1}, }; -static arc arcs_83_1[2] = { +static arc arcs_84_1[2] = { {9, 2}, {0, 1}, }; -static arc arcs_83_2[1] = { +static arc arcs_84_2[1] = { {0, 2}, }; -static state states_83[3] = { - {1, arcs_83_0}, - {2, arcs_83_1}, - {1, arcs_83_2}, +static state states_84[3] = { + {1, arcs_84_0}, + {2, arcs_84_1}, + {1, arcs_84_2}, }; -static dfa dfas[84] = { +static dfa dfas[85] = { {256, "single_input", 0, 3, states_0, - "\004\050\014\000\000\000\000\025\074\005\023\310\011\020\004\000\300\020\222\006\201"}, + "\004\050\014\000\000\000\000\025\074\005\023\220\070\201\040\000\000\206\220\064\010\004"}, {257, "file_input", 0, 2, states_1, - "\204\050\014\000\000\000\000\025\074\005\023\310\011\020\004\000\300\020\222\006\201"}, + "\204\050\014\000\000\000\000\025\074\005\023\220\070\201\040\000\000\206\220\064\010\004"}, {258, "eval_input", 0, 3, states_2, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, {259, "decorator", 0, 7, states_3, - "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {260, "decorators", 0, 2, states_4, - "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {261, "funcdef", 0, 7, states_5, - "\000\010\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\010\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {262, "parameters", 0, 4, states_6, - "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {263, "varargslist", 0, 10, states_7, - "\000\040\010\060\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\040\010\060\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {264, "fpdef", 0, 4, states_8, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {265, "fplist", 0, 3, states_9, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {266, "stmt", 0, 2, states_10, - "\000\050\014\000\000\000\000\025\074\005\023\310\011\020\004\000\300\020\222\006\201"}, + "\000\050\014\000\000\000\000\025\074\005\023\220\070\201\040\000\000\206\220\064\010\004"}, {267, "simple_stmt", 0, 4, states_11, - "\000\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"}, + "\000\040\010\000\000\000\000\025\074\005\023\000\000\200\040\000\000\206\220\064\000\004"}, {268, "small_stmt", 0, 2, states_12, - "\000\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"}, + "\000\040\010\000\000\000\000\025\074\005\023\000\000\200\040\000\000\206\220\064\000\004"}, {269, "expr_stmt", 0, 6, states_13, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, {270, "augassign", 0, 2, states_14, - "\000\000\000\000\000\360\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\360\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {271, "print_stmt", 0, 9, states_15, - "\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {272, "del_stmt", 0, 3, states_16, - "\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {273, "pass_stmt", 0, 2, states_17, - "\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {274, "flow_stmt", 0, 2, states_18, - "\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\200"}, + "\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\000\004"}, {275, "break_stmt", 0, 2, states_19, - "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {276, "continue_stmt", 0, 2, states_20, - "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {277, "return_stmt", 0, 3, states_21, - "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {278, "yield_stmt", 0, 2, states_22, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004"}, {279, "raise_stmt", 0, 7, states_23, - "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {280, "import_stmt", 0, 2, states_24, - "\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000"}, {281, "import_name", 0, 3, states_25, - "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"}, {282, "import_from", 0, 8, states_26, - "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"}, {283, "import_as_name", 0, 4, states_27, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {284, "dotted_as_name", 0, 4, states_28, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {285, "import_as_names", 0, 3, states_29, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {286, "dotted_as_names", 0, 2, states_30, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {287, "dotted_name", 0, 2, states_31, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {288, "global_stmt", 0, 3, states_32, - "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"}, {289, "exec_stmt", 0, 7, states_33, - "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000"}, {290, "assert_stmt", 0, 5, states_34, - "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000"}, {291, "compound_stmt", 0, 2, states_35, - "\000\010\004\000\000\000\000\000\000\000\000\310\011\000\000\000\000\000\000\000\001"}, + "\000\010\004\000\000\000\000\000\000\000\000\220\070\001\000\000\000\000\000\000\010\000"}, {292, "if_stmt", 0, 8, states_36, - "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, - {293, "while_stmt", 0, 8, states_37, - "\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"}, - {294, "for_stmt", 0, 10, states_38, - "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"}, - {295, "try_stmt", 0, 13, states_39, - "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"}, - {296, "with_stmt", 0, 6, states_40, - "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"}, - {297, "with_var", 0, 3, states_41, - "\000\000\010\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"}, - {298, "except_clause", 0, 5, states_42, - "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"}, - {299, "suite", 0, 5, states_43, - "\004\040\010\000\000\000\000\025\074\005\023\000\000\020\004\000\300\020\222\006\200"}, - {300, "testlist_safe", 0, 5, states_44, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {301, "old_test", 0, 2, states_45, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {302, "old_lambdef", 0, 5, states_46, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"}, - {303, "test", 0, 6, states_47, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {304, "or_test", 0, 2, states_48, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"}, - {305, "and_test", 0, 2, states_49, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"}, - {306, "not_test", 0, 3, states_50, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\004\000\300\020\222\006\000"}, - {307, "comparison", 0, 2, states_51, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {308, "comp_op", 0, 4, states_52, - "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\344\037\000\000\000\000\000"}, - {309, "expr", 0, 2, states_53, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {310, "xor_expr", 0, 2, states_54, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {311, "and_expr", 0, 2, states_55, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {312, "shift_expr", 0, 2, states_56, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {313, "arith_expr", 0, 2, states_57, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {314, "term", 0, 2, states_58, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {315, "factor", 0, 3, states_59, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {316, "power", 0, 4, states_60, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\222\006\000"}, - {317, "atom", 0, 11, states_61, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\222\006\000"}, - {318, "listmaker", 0, 5, states_62, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {319, "testlist_gexp", 0, 5, states_63, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {320, "lambdef", 0, 5, states_64, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"}, - {321, "trailer", 0, 7, states_65, - "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\002\000\000"}, - {322, "subscriptlist", 0, 3, states_66, - "\000\040\050\000\000\000\000\000\000\010\000\000\000\020\004\000\300\020\222\006\000"}, - {323, "subscript", 0, 7, states_67, - "\000\040\050\000\000\000\000\000\000\010\000\000\000\020\004\000\300\020\222\006\000"}, - {324, "sliceop", 0, 3, states_68, - "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {325, "exprlist", 0, 3, states_69, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020\222\006\000"}, - {326, "testlist", 0, 3, states_70, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {327, "dictmaker", 0, 5, states_71, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {328, "classdef", 0, 8, states_72, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"}, - {329, "arglist", 0, 8, states_73, - "\000\040\010\060\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {330, "argument", 0, 4, states_74, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {331, "list_iter", 0, 2, states_75, - "\000\000\000\000\000\000\000\000\000\000\000\210\000\000\000\000\000\000\000\000\000"}, - {332, "list_for", 0, 6, states_76, - "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"}, - {333, "list_if", 0, 4, states_77, - "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, - {334, "gen_iter", 0, 2, states_78, - "\000\000\000\000\000\000\000\000\000\000\000\210\000\000\000\000\000\000\000\000\000"}, - {335, "gen_for", 0, 6, states_79, - "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"}, - {336, "gen_if", 0, 4, states_80, - "\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, - {337, "testlist1", 0, 2, states_81, - "\000\040\010\000\000\000\000\000\000\000\000\000\000\020\004\000\300\020\222\006\000"}, - {338, "encoding_decl", 0, 2, states_82, - "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {339, "yield_expr", 0, 3, states_83, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200"}, + "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + {293, "switch_stmt", 0, 14, states_37, + "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"}, + {294, "while_stmt", 0, 8, states_38, + "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, + {295, "for_stmt", 0, 10, states_39, + "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, + {296, "try_stmt", 0, 13, states_40, + "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"}, + {297, "with_stmt", 0, 6, states_41, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"}, + {298, "with_var", 0, 3, states_42, + "\000\000\010\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000"}, + {299, "except_clause", 0, 5, states_43, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"}, + {300, "suite", 0, 5, states_44, + "\004\040\010\000\000\000\000\025\074\005\023\000\000\200\040\000\000\206\220\064\000\004"}, + {301, "testlist_safe", 0, 5, states_45, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {302, "old_test", 0, 2, states_46, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {303, "old_lambdef", 0, 5, states_47, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"}, + {304, "test", 0, 6, states_48, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {305, "or_test", 0, 2, states_49, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\000\000"}, + {306, "and_test", 0, 2, states_50, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\000\000"}, + {307, "not_test", 0, 3, states_51, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\000\000"}, + {308, "comparison", 0, 2, states_52, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {309, "comp_op", 0, 4, states_53, + "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\040\377\000\000\000\000\000\000"}, + {310, "expr", 0, 2, states_54, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {311, "xor_expr", 0, 2, states_55, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {312, "and_expr", 0, 2, states_56, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {313, "shift_expr", 0, 2, states_57, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {314, "arith_expr", 0, 2, states_58, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {315, "term", 0, 2, states_59, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {316, "factor", 0, 3, states_60, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {317, "power", 0, 4, states_61, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\064\000\000"}, + {318, "atom", 0, 11, states_62, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\064\000\000"}, + {319, "listmaker", 0, 5, states_63, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {320, "testlist_gexp", 0, 5, states_64, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {321, "lambdef", 0, 5, states_65, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"}, + {322, "trailer", 0, 7, states_66, + "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\020\000\000\000"}, + {323, "subscriptlist", 0, 3, states_67, + "\000\040\050\000\000\000\000\000\000\010\000\000\000\200\040\000\000\206\220\064\000\000"}, + {324, "subscript", 0, 7, states_68, + "\000\040\050\000\000\000\000\000\000\010\000\000\000\200\040\000\000\206\220\064\000\000"}, + {325, "sliceop", 0, 3, states_69, + "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {326, "exprlist", 0, 3, states_70, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"}, + {327, "testlist", 0, 3, states_71, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {328, "dictmaker", 0, 5, states_72, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {329, "classdef", 0, 8, states_73, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000"}, + {330, "arglist", 0, 8, states_74, + "\000\040\010\060\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {331, "argument", 0, 4, states_75, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {332, "list_iter", 0, 2, states_76, + "\000\000\000\000\000\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\000"}, + {333, "list_for", 0, 6, states_77, + "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, + {334, "list_if", 0, 4, states_78, + "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + {335, "gen_iter", 0, 2, states_79, + "\000\000\000\000\000\000\000\000\000\000\000\020\020\000\000\000\000\000\000\000\000\000"}, + {336, "gen_for", 0, 6, states_80, + "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, + {337, "gen_if", 0, 4, states_81, + "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + {338, "testlist1", 0, 2, states_82, + "\000\040\010\000\000\000\000\000\000\000\000\000\000\200\040\000\000\206\220\064\000\000"}, + {339, "encoding_decl", 0, 2, states_83, + "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {340, "yield_expr", 0, 3, states_84, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004"}, }; -static label labels[168] = { +static label labels[171] = { {0, "EMPTY"}, {256, 0}, {4, 0}, @@ -1961,12 +2025,12 @@ {266, 0}, {0, 0}, {258, 0}, - {326, 0}, + {327, 0}, {259, 0}, {50, 0}, {287, 0}, {7, 0}, - {329, 0}, + {330, 0}, {8, 0}, {260, 0}, {261, 0}, @@ -1974,11 +2038,11 @@ {1, 0}, {262, 0}, {11, 0}, - {299, 0}, + {300, 0}, {263, 0}, {264, 0}, {22, 0}, - {303, 0}, + {304, 0}, {12, 0}, {16, 0}, {36, 0}, @@ -1995,7 +2059,7 @@ {289, 0}, {290, 0}, {270, 0}, - {339, 0}, + {340, 0}, {37, 0}, {38, 0}, {39, 0}, @@ -2011,7 +2075,7 @@ {1, "print"}, {35, 0}, {1, "del"}, - {325, 0}, + {326, 0}, {1, "pass"}, {275, 0}, {276, 0}, @@ -2034,41 +2098,44 @@ {284, 0}, {1, "global"}, {1, "exec"}, - {309, 0}, + {310, 0}, {1, "in"}, {1, "assert"}, {292, 0}, - {293, 0}, {294, 0}, {295, 0}, {296, 0}, - {328, 0}, + {297, 0}, + {329, 0}, + {293, 0}, {1, "if"}, {1, "elif"}, {1, "else"}, + {1, "switch"}, + {5, 0}, + {1, "case"}, + {6, 0}, {1, "while"}, {1, "for"}, {1, "try"}, - {298, 0}, + {299, 0}, {1, "finally"}, {1, "with"}, - {297, 0}, + {298, 0}, {1, "except"}, - {5, 0}, - {6, 0}, - {300, 0}, {301, 0}, - {304, 0}, {302, 0}, + {305, 0}, + {303, 0}, {1, "lambda"}, - {320, 0}, - {305, 0}, + {321, 0}, + {306, 0}, {1, "or"}, - {306, 0}, + {307, 0}, {1, "and"}, {1, "not"}, - {307, 0}, {308, 0}, + {309, 0}, {20, 0}, {21, 0}, {28, 0}, @@ -2077,53 +2144,53 @@ {29, 0}, {29, 0}, {1, "is"}, - {310, 0}, + {311, 0}, {18, 0}, - {311, 0}, + {312, 0}, {33, 0}, - {312, 0}, + {313, 0}, {19, 0}, - {313, 0}, + {314, 0}, {34, 0}, - {314, 0}, + {315, 0}, {14, 0}, {15, 0}, - {315, 0}, + {316, 0}, {17, 0}, {24, 0}, {48, 0}, {32, 0}, - {316, 0}, {317, 0}, - {321, 0}, + {318, 0}, + {322, 0}, + {320, 0}, + {9, 0}, {319, 0}, - {9, 0}, - {318, 0}, {10, 0}, {26, 0}, - {327, 0}, + {328, 0}, {27, 0}, {25, 0}, - {337, 0}, + {338, 0}, {2, 0}, {3, 0}, - {332, 0}, - {335, 0}, - {322, 0}, + {333, 0}, + {336, 0}, {323, 0}, {324, 0}, + {325, 0}, {1, "class"}, - {330, 0}, {331, 0}, - {333, 0}, + {332, 0}, {334, 0}, - {336, 0}, - {338, 0}, + {335, 0}, + {337, 0}, + {339, 0}, {1, "yield"}, }; grammar _PyParser_Grammar = { - 84, + 85, dfas, - {168, labels}, + {171, labels}, 256 }; Index: Python/ast.c =================================================================== --- Python/ast.c (revision 46818) +++ Python/ast.c (working copy) @@ -2575,6 +2575,69 @@ } static stmt_ty +ast_for_switch_stmt(struct compiling *c, const node *n) +{ + const char *s; + expr_ty expression; + asdl_seq *orelse = NULL; + asdl_seq *cases = NULL; + + /* switch_stmt: ('switch' expr ':' NEWLINE INDENT (('case' expr ':' suite)+ ['else' ':' suite] | 'else' ':' suite) DEDENT) */ + REQ(n, switch_stmt); + + /* the main test expression */ + expression = ast_for_expr(c, CHILD(n, 1)); + if (expression == NULL) + return NULL; + + /* see if we have any case statements */ + s = STR(CHILD(n, 5)); + if (s[0] == 'c') { + int i; + int n_cases = NCH(n) - 5; + + /* how many cases do we have? */ + s = STR(CHILD(n, NCH(n) - 4)); + if (s[0] == 'e') + n_cases -= 3; + n_cases /= 4; + + /* we have to have at least one case at this point */ + cases = asdl_seq_new(n_cases, c->c_arena); + if (cases == NULL) + return NULL; + + /* traverse the case statements */ + for (i = 0; i < n_cases; i++) { + casestatement_ty case_stmt; + expr_ty case_test; + asdl_seq *case_body; + + case_test = ast_for_expr(c, CHILD(n, 5 + (i * 4) + 1)); + if (case_test == NULL) + return NULL; + case_body = ast_for_suite(c, CHILD(n, 5 + (i * 4) + 3)); + if (case_body == NULL) + return NULL; + case_stmt = casestatement(case_test, case_body, LINENO(n), n->n_col_offset, c->c_arena); + if (case_stmt == NULL) + return NULL; + asdl_seq_SET(cases, i, case_stmt); + } + } + + /* handle the default case */ + s = STR(CHILD(n, NCH(n) - 4)); + if (s[0] == 'e') { + orelse = ast_for_suite(c, CHILD(n, NCH(n) - 2)); + if (orelse == NULL) + return NULL; + } + + return Switch(expression, cases, orelse, LINENO(n), n->n_col_offset, c->c_arena); +} + +static stmt_ty ast_for_while_stmt(struct compiling *c, const node *n) { /* while_stmt: 'while' test ':' suite ['else' ':' suite] */ @@ -2909,7 +2972,7 @@ } else { /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt - | funcdef | classdef + | funcdef | classdef | switch_stmt */ node *ch = CHILD(n, 0); REQ(n, compound_stmt); @@ -2924,6 +2987,8 @@ return ast_for_try_stmt(c, ch); case with_stmt: return ast_for_with_stmt(c, ch); + case switch_stmt: + return ast_for_switch_stmt(c, ch); case funcdef: return ast_for_funcdef(c, ch); case classdef: Index: Python/symtable.c =================================================================== --- Python/symtable.c (revision 46818) +++ Python/symtable.c (working copy) @@ -995,6 +995,26 @@ if (s->v.If.orelse) VISIT_SEQ(st, stmt, s->v.If.orelse); break; + case Switch_kind: + VISIT(st, expr, s->v.Switch.value); + + if (s->v.Switch.cases) { + int i, n_cases; + + n_cases = asdl_seq_LEN(s->v.Switch.cases); + for (i = 0; i < n_cases; i++) { + casestatement_ty c; + + c = asdl_seq_GET(s->v.Switch.cases, i); + VISIT(st, expr, c->test); + VISIT_SEQ(st, stmt, c->body); + } + } + + if (s->v.Switch.orelse) + VISIT_SEQ(st, stmt, s->v.Switch.orelse); + + break; case Raise_kind: if (s->v.Raise.type) { VISIT(st, expr, s->v.Raise.type); Index: Python/compile.c =================================================================== --- Python/compile.c (revision 46818) +++ Python/compile.c (working copy) @@ -2182,6 +2182,65 @@ } static int +compiler_switch(struct compiler *c, stmt_ty s) +{ + basicblock *end; + + assert(s->kind == Switch_kind); + + end = compiler_new_block(c); + if (end == NULL) + return 0; + + /* evaluate the switch expression just once */ + VISIT(c, expr, s->v.Switch.value); + + if (s->v.Switch.cases) { + int i; + int n_cases; + + n_cases = asdl_seq_LEN(s->v.Switch.cases); + for (i = 0; i < n_cases; i++) { + casestatement_ty case_stmt; + basicblock *next; + + next = compiler_new_block(c); + if (next == NULL) + return 0; + + case_stmt = asdl_seq_GET(s->v.Switch.cases, i); + + /* compare the case test to the original, jump if no match */ + ADDOP(c, DUP_TOP); + VISIT(c, expr, case_stmt->test); + ADDOP_I(c, COMPARE_OP, PyCmp_EQ); + ADDOP_JREL(c, JUMP_IF_FALSE, next); + ADDOP(c, POP_TOP); + + /* test passes, this code gets executed */ + VISIT_SEQ(c, stmt, case_stmt->body); + + /* once the case has been executed, always jump to the end */ + ADDOP_JREL(c, JUMP_FORWARD, end); + compiler_use_next_block(c, next); + + /* pop off the comparison result */ + ADDOP(c, POP_TOP); + } + } + + if (s->v.Switch.orelse) + VISIT_SEQ(c, stmt, s->v.Switch.orelse); + + compiler_use_next_block(c, end); + + /* pop the switch value off the statck */ + ADDOP(c, POP_TOP); + + return 1; +} + +static int compiler_for(struct compiler *c, stmt_ty s) { basicblock *start, *cleanup, *end; @@ -2743,6 +2802,8 @@ return compiler_continue(c); case With_kind: return compiler_with(c, s); + case Switch_kind: + return compiler_switch(c, s); } return 1; } Index: Python/Python-ast.c =================================================================== --- Python/Python-ast.c (revision 46818) +++ Python/Python-ast.c (working copy) @@ -91,6 +91,12 @@ "optional_vars", "body", }; +static PyTypeObject *Switch_type; +static char *Switch_fields[]={ + "value", + "cases", + "orelse", +}; static PyTypeObject *Raise_type; static char *Raise_fields[]={ "type", @@ -334,6 +340,14 @@ "lineno", "col_offset", }; +static PyTypeObject *casestatement_type; +static PyObject* ast2obj_casestatement(void*); +static char *casestatement_fields[]={ + "test", + "body", + "lineno", + "col_offset", +}; static PyTypeObject *arguments_type; static PyObject* ast2obj_arguments(void*); static char *arguments_fields[]={ @@ -480,6 +494,8 @@ if (!If_type) return 0; With_type = make_type("With", stmt_type, With_fields, 3); if (!With_type) return 0; + Switch_type = make_type("Switch", stmt_type, Switch_fields, 3); + if (!Switch_type) return 0; Raise_type = make_type("Raise", stmt_type, Raise_fields, 3); if (!Raise_type) return 0; TryExcept_type = make_type("TryExcept", stmt_type, TryExcept_fields, 3); @@ -716,6 +732,9 @@ excepthandler_type = make_type("excepthandler", AST_type, excepthandler_fields, 5); if (!excepthandler_type) return 0; + casestatement_type = make_type("casestatement", AST_type, + casestatement_fields, 4); + if (!casestatement_type) return 0; arguments_type = make_type("arguments", AST_type, arguments_fields, 4); if (!arguments_type) return 0; keyword_type = make_type("keyword", AST_type, keyword_fields, 2); @@ -1052,6 +1071,30 @@ } stmt_ty +Switch(expr_ty value, asdl_seq * cases, asdl_seq * orelse, int lineno, int + col_offset, PyArena *arena) +{ + stmt_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for Switch"); + return NULL; + } + p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) { + PyErr_NoMemory(); + return NULL; + } + p->kind = Switch_kind; + p->v.Switch.value = value; + p->v.Switch.cases = cases; + p->v.Switch.orelse = orelse; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +stmt_ty Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, int col_offset, PyArena *arena) { @@ -1862,6 +1905,28 @@ return p; } +casestatement_ty +casestatement(expr_ty test, asdl_seq * body, int lineno, int col_offset, + PyArena *arena) +{ + casestatement_ty p; + if (!test) { + PyErr_SetString(PyExc_ValueError, + "field test is required for casestatement"); + return NULL; + } + p = (casestatement_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) { + PyErr_NoMemory(); + return NULL; + } + p->test = test; + p->body = body; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + arguments_ty arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq * defaults, PyArena *arena) @@ -2184,6 +2249,25 @@ goto failed; Py_DECREF(value); break; + case Switch_kind: + result = PyType_GenericNew(Switch_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(o->v.Switch.value); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "value", value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(o->v.Switch.cases, ast2obj_casestatement); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "cases", value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(o->v.Switch.orelse, ast2obj_stmt); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "orelse", value) == -1) + goto failed; + Py_DECREF(value); + break; case Raise_kind: result = PyType_GenericNew(Raise_type, NULL, NULL); if (!result) goto failed; @@ -2940,6 +3024,45 @@ } PyObject* +ast2obj_casestatement(void* _o) +{ + casestatement_ty o = (casestatement_ty)_o; + PyObject *result = NULL, *value = NULL; + if (!o) { + Py_INCREF(Py_None); + return Py_None; + } + + result = PyType_GenericNew(casestatement_type, NULL, NULL); + if (!result) return NULL; + value = ast2obj_expr(o->test); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "test", value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_list(o->body, ast2obj_stmt); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "body", value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->lineno); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "lineno", value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->col_offset); + if (!value) goto failed; + if (PyObject_SetAttrString(result, "col_offset", value) == -1) + goto failed; + Py_DECREF(value); + return result; +failed: + Py_XDECREF(value); + Py_XDECREF(result); + return NULL; +} + +PyObject* ast2obj_arguments(void* _o) { arguments_ty o = (arguments_ty)_o; @@ -3076,6 +3199,8 @@ if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return; if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return; if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return; + if (PyDict_SetItemString(d, "Switch", (PyObject*)Switch_type) < 0) + return; if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return; if (PyDict_SetItemString(d, "TryExcept", (PyObject*)TryExcept_type) < 0) return; @@ -3185,6 +3310,8 @@ (PyObject*)comprehension_type) < 0) return; if (PyDict_SetItemString(d, "excepthandler", (PyObject*)excepthandler_type) < 0) return; + if (PyDict_SetItemString(d, "casestatement", + (PyObject*)casestatement_type) < 0) return; if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) < 0) return; if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0) Index: Include/graminit.h =================================================================== --- Include/graminit.h (revision 46818) +++ Include/graminit.h (working copy) @@ -35,50 +35,51 @@ #define assert_stmt 290 #define compound_stmt 291 #define if_stmt 292 -#define while_stmt 293 -#define for_stmt 294 -#define try_stmt 295 -#define with_stmt 296 -#define with_var 297 -#define except_clause 298 -#define suite 299 -#define testlist_safe 300 -#define old_test 301 -#define old_lambdef 302 -#define test 303 -#define or_test 304 -#define and_test 305 -#define not_test 306 -#define comparison 307 -#define comp_op 308 -#define expr 309 -#define xor_expr 310 -#define and_expr 311 -#define shift_expr 312 -#define arith_expr 313 -#define term 314 -#define factor 315 -#define power 316 -#define atom 317 -#define listmaker 318 -#define testlist_gexp 319 -#define lambdef 320 -#define trailer 321 -#define subscriptlist 322 -#define subscript 323 -#define sliceop 324 -#define exprlist 325 -#define testlist 326 -#define dictmaker 327 -#define classdef 328 -#define arglist 329 -#define argument 330 -#define list_iter 331 -#define list_for 332 -#define list_if 333 -#define gen_iter 334 -#define gen_for 335 -#define gen_if 336 -#define testlist1 337 -#define encoding_decl 338 -#define yield_expr 339 +#define switch_stmt 293 +#define while_stmt 294 +#define for_stmt 295 +#define try_stmt 296 +#define with_stmt 297 +#define with_var 298 +#define except_clause 299 +#define suite 300 +#define testlist_safe 301 +#define old_test 302 +#define old_lambdef 303 +#define test 304 +#define or_test 305 +#define and_test 306 +#define not_test 307 +#define comparison 308 +#define comp_op 309 +#define expr 310 +#define xor_expr 311 +#define and_expr 312 +#define shift_expr 313 +#define arith_expr 314 +#define term 315 +#define factor 316 +#define power 317 +#define atom 318 +#define listmaker 319 +#define testlist_gexp 320 +#define lambdef 321 +#define trailer 322 +#define subscriptlist 323 +#define subscript 324 +#define sliceop 325 +#define exprlist 326 +#define testlist 327 +#define dictmaker 328 +#define classdef 329 +#define arglist 330 +#define argument 331 +#define list_iter 332 +#define list_for 333 +#define list_if 334 +#define gen_iter 335 +#define gen_for 336 +#define gen_if 337 +#define testlist1 338 +#define encoding_decl 339 +#define yield_expr 340 Index: Include/Python-ast.h =================================================================== --- Include/Python-ast.h (revision 46818) +++ Include/Python-ast.h (working copy) @@ -28,6 +28,8 @@ typedef struct _excepthandler *excepthandler_ty; +typedef struct _casestatement *casestatement_ty; + typedef struct _arguments *arguments_ty; typedef struct _keyword *keyword_ty; @@ -62,10 +64,10 @@ enum _stmt_kind {FunctionDef_kind=1, ClassDef_kind=2, Return_kind=3, Delete_kind=4, Assign_kind=5, AugAssign_kind=6, Print_kind=7, For_kind=8, While_kind=9, If_kind=10, With_kind=11, - Raise_kind=12, TryExcept_kind=13, TryFinally_kind=14, - Assert_kind=15, Import_kind=16, ImportFrom_kind=17, - Exec_kind=18, Global_kind=19, Expr_kind=20, Pass_kind=21, - Break_kind=22, Continue_kind=23}; + Switch_kind=12, Raise_kind=13, TryExcept_kind=14, + TryFinally_kind=15, Assert_kind=16, Import_kind=17, + ImportFrom_kind=18, Exec_kind=19, Global_kind=20, + Expr_kind=21, Pass_kind=22, Break_kind=23, Continue_kind=24}; struct _stmt { enum _stmt_kind kind; union { @@ -133,6 +135,12 @@ } With; struct { + expr_ty value; + asdl_seq *cases; + asdl_seq *orelse; + } Switch; + + struct { expr_ty type; expr_ty inst; expr_ty tback; @@ -331,6 +339,13 @@ int col_offset; }; +struct _casestatement { + expr_ty test; + asdl_seq *body; + int lineno; + int col_offset; +}; + struct _arguments { asdl_seq *args; identifier vararg; @@ -374,6 +389,8 @@ col_offset, PyArena *arena); stmt_ty With(expr_ty context_expr, expr_ty optional_vars, asdl_seq * body, int lineno, int col_offset, PyArena *arena); +stmt_ty Switch(expr_ty value, asdl_seq * cases, asdl_seq * orelse, int lineno, + int col_offset, PyArena *arena); stmt_ty Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, int col_offset, PyArena *arena); stmt_ty TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int @@ -435,6 +452,8 @@ PyArena *arena); excepthandler_ty excepthandler(expr_ty type, expr_ty name, asdl_seq * body, int lineno, int col_offset, PyArena *arena); +casestatement_ty casestatement(expr_ty test, asdl_seq * body, int lineno, int + col_offset, PyArena *arena); arguments_ty arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq * defaults, PyArena *arena); keyword_ty keyword(identifier arg, expr_ty value, PyArena *arena); Index: Grammar/Grammar =================================================================== --- Grammar/Grammar (revision 46818) +++ Grammar/Grammar (working copy) @@ -73,8 +73,9 @@ exec_stmt: 'exec' expr ['in' test [',' test]] assert_stmt: 'assert' test [',' test] -compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | switch_stmt if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +switch_stmt: ('switch' expr ':' NEWLINE INDENT (('case' expr ':' suite)+ ['else' ':' suite] | 'else' ':' suite) DEDENT) while_stmt: 'while' test ':' suite ['else' ':' suite] for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] try_stmt: ('try' ':' suite Index: Parser/Python.asdl =================================================================== --- Parser/Python.asdl (revision 46818) +++ Parser/Python.asdl (working copy) @@ -26,6 +26,7 @@ | While(expr test, stmt* body, stmt* orelse) | If(expr test, stmt* body, stmt* orelse) | With(expr context_expr, expr? optional_vars, stmt* body) + | Switch(expr value, casestatement* cases, stmt* orelse) -- 'type' is a bad name | Raise(expr? type, expr? inst, expr? tback) @@ -103,7 +104,9 @@ -- ast is exposed to Python. excepthandler = (expr? type, expr? name, stmt* body, int lineno, int col_offset) - + + casestatement = (expr test, stmt* body, int lineno, int col_offset) + arguments = (expr* args, identifier? vararg, identifier? kwarg, expr* defaults) Index: Lib/distutils/extension.py =================================================================== --- Lib/distutils/extension.py (revision 46818) +++ Lib/distutils/extension.py (working copy) @@ -185,31 +185,31 @@ continue suffix = os.path.splitext(word)[1] - switch = word[0:2] ; value = word[2:] + switch_word = word[0:2] ; value = word[2:] if suffix in (".c", ".cc", ".cpp", ".cxx", ".c++", ".m", ".mm"): # hmm, should we do something about C vs. C++ sources? # or leave it up to the CCompiler implementation to # worry about? ext.sources.append(word) - elif switch == "-I": + elif switch_word == "-I": ext.include_dirs.append(value) - elif switch == "-D": + elif switch_word == "-D": equals = string.find(value, "=") if equals == -1: # bare "-DFOO" -- no value ext.define_macros.append((value, None)) else: # "-DFOO=blah" ext.define_macros.append((value[0:equals], value[equals+2:])) - elif switch == "-U": + elif switch_word == "-U": ext.undef_macros.append(value) - elif switch == "-C": # only here 'cause makesetup has it! + elif switch_word == "-C": # only here 'cause makesetup has it! ext.extra_compile_args.append(word) - elif switch == "-l": + elif switch_word == "-l": ext.libraries.append(value) - elif switch == "-L": + elif switch_word == "-L": ext.library_dirs.append(value) - elif switch == "-R": + elif switch_word == "-R": ext.runtime_library_dirs.append(value) elif word == "-rpath": append_next_word = ext.runtime_library_dirs @@ -217,7 +217,7 @@ append_next_word = ext.extra_link_args elif word == "-Xcompiler": append_next_word = ext.extra_compile_args - elif switch == "-u": + elif switch_word == "-u": ext.extra_link_args.append(word) if not value: append_next_word = ext.extra_link_args
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4