[Python-Dev] Switch statement
Thomas Lee
tom at vector-seven.com
Sat Jun 10 16:27:36 CEST 2006
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
More information about the Python-Dev
mailing list