[svn:parrot] r42031 - in trunk: . compilers/imcc t/op

whiteknight at svn.parrot.org whiteknight at svn.parrot.org
Fri Oct 23 01:03:25 UTC 2009


Author: whiteknight
Date: Fri Oct 23 01:03:24 2009
New Revision: 42031
URL: https://trac.parrot.org/parrot/changeset/42031

Log:
[pcc] Add some tests for :call_sig that show how the proof-of-concept works. Also, wrote these tests in PIR so moved the old tests in Perl5 to cc_params_old.t

Added:
   trunk/t/op/cc_params_old.t
Modified:
   trunk/MANIFEST
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imcparser.c
   trunk/t/op/cc_params.t

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST	Fri Oct 23 01:00:40 2009	(r42030)
+++ trunk/MANIFEST	Fri Oct 23 01:03:24 2009	(r42031)
@@ -1741,6 +1741,7 @@
 t/op/box.t                                                  [test]
 t/op/calling.t                                              [test]
 t/op/cc_params.t                                            [test]
+t/op/cc_params_old.t                                        [test]
 t/op/cc_state.t                                             [test]
 t/op/cmp-nonbranch.t                                        [test]
 t/op/comp.t                                                 [test]

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	Fri Oct 23 01:00:40 2009	(r42030)
+++ trunk/compilers/imcc/imcc.y	Fri Oct 23 01:03:24 2009	(r42031)
@@ -2229,8 +2229,9 @@
    ;
 
 argtype:
-     ADV_FLAT                  { $$ = VT_FLAT; }
-   | ADV_NAMED                 { $$ = VT_NAMED; }
+     ADV_FLAT                  { $$ = VT_FLAT;     }
+   | ADV_NAMED                 { $$ = VT_NAMED;    }
+   | ADV_CALL_SIG              { $$ = VT_CALL_SIG; }
 
    /* don't free $3 here; adv_named_set uses the pointer directly */
    | ADV_NAMED '(' USTRINGC ')' { adv_named_set_u(interp, $3); $$ = 0; }

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	Fri Oct 23 01:00:40 2009	(r42030)
+++ trunk/compilers/imcc/imcparser.c	Fri Oct 23 01:03:24 2009	(r42031)
@@ -1638,16 +1638,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   651
+#define YYLAST   659
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  139
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  338
+#define YYNRULES  339
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  544
+#define YYNSTATES  545
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -1732,12 +1732,12 @@
      710,   712,   714,   716,   718,   720,   722,   724,   729,   731,
      733,   735,   737,   741,   745,   749,   753,   754,   760,   761,
      765,   767,   773,   777,   781,   784,   785,   788,   790,   792,
-     797,   802,   805,   809,   815,   817,   821,   822,   824,   826,
-     833,   839,   844,   849,   856,   862,   864,   866,   868,   870,
-     872,   874,   876,   878,   880,   882,   883,   885,   889,   891,
-     893,   898,   902,   904,   906,   908,   910,   912,   914,   916,
-     918,   920,   922,   924,   925,   928,   929,   932,   934,   938,
-     940,   942,   944,   946,   948,   950,   952,   954,   956
+     794,   799,   804,   807,   811,   817,   819,   823,   824,   826,
+     828,   835,   841,   846,   851,   858,   864,   866,   868,   870,
+     872,   874,   876,   878,   880,   882,   884,   885,   887,   891,
+     893,   895,   900,   904,   906,   908,   910,   912,   914,   916,
+     918,   920,   922,   924,   926,   927,   930,   931,   934,   936,
+     940,   942,   944,   946,   948,   950,   952,   954,   956,   958
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -1822,23 +1822,23 @@
       -1,   237,    72,   238,    -1,   238,    -1,   237,    72,   113,
       21,   256,    -1,   256,    21,   256,    -1,   113,    21,   256,
       -1,   256,   239,    -1,    -1,   239,   240,    -1,    16,    -1,
-      20,    -1,    20,   126,   116,   127,    -1,    20,   126,   113,
-     127,    -1,   248,   195,    -1,   242,    72,   241,    -1,   242,
-      72,   113,    21,   248,    -1,   241,    -1,   113,    21,   248,
-      -1,    -1,   245,    -1,   244,    -1,    12,   256,   247,   256,
-       9,   254,    -1,    12,    13,   256,     9,   254,    -1,    12,
-     256,   246,   254,    -1,    11,   256,   246,   254,    -1,    11,
-     256,   247,   256,     9,   254,    -1,    11,    13,   256,     9,
-     254,    -1,    72,    -1,     9,    -1,    57,    -1,    58,    -1,
-      59,    -1,    60,    -1,    61,    -1,    62,    -1,   118,    -1,
-     263,    -1,    -1,   250,    -1,   250,    72,   251,    -1,   251,
-      -1,   255,    -1,   248,   124,   257,   125,    -1,   124,   259,
-     125,    -1,   253,    -1,   113,    -1,   116,    -1,   109,    -1,
-     117,    -1,   109,    -1,   117,    -1,   254,    -1,   256,    -1,
-     248,    -1,   264,    -1,    -1,   258,   261,    -1,    -1,   260,
-     261,    -1,   262,    -1,   261,   138,   262,    -1,   256,    -1,
-     105,    -1,   106,    -1,   107,    -1,   108,    -1,   110,    -1,
-     114,    -1,   115,    -1,   113,    -1,   116,    -1
+      20,    -1,    24,    -1,    20,   126,   116,   127,    -1,    20,
+     126,   113,   127,    -1,   248,   195,    -1,   242,    72,   241,
+      -1,   242,    72,   113,    21,   248,    -1,   241,    -1,   113,
+      21,   248,    -1,    -1,   245,    -1,   244,    -1,    12,   256,
+     247,   256,     9,   254,    -1,    12,    13,   256,     9,   254,
+      -1,    12,   256,   246,   254,    -1,    11,   256,   246,   254,
+      -1,    11,   256,   247,   256,     9,   254,    -1,    11,    13,
+     256,     9,   254,    -1,    72,    -1,     9,    -1,    57,    -1,
+      58,    -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,
+     118,    -1,   263,    -1,    -1,   250,    -1,   250,    72,   251,
+      -1,   251,    -1,   255,    -1,   248,   124,   257,   125,    -1,
+     124,   259,   125,    -1,   253,    -1,   113,    -1,   116,    -1,
+     109,    -1,   117,    -1,   109,    -1,   117,    -1,   254,    -1,
+     256,    -1,   248,    -1,   264,    -1,    -1,   258,   261,    -1,
+      -1,   260,   261,    -1,   262,    -1,   261,   138,   262,    -1,
+     256,    -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,
+     110,    -1,   114,    -1,   115,    -1,   113,    -1,   116,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1871,13 +1871,13 @@
     2081,  2087,  2086,  2098,  2103,  2104,  2105,  2106,  2107,  2108,
     2109,  2110,  2111,  2112,  2113,  2114,  2115,  2120,  2131,  2132,
     2133,  2134,  2140,  2154,  2160,  2166,  2172,  2171,  2180,  2181,
-    2191,  2201,  2208,  2213,  2223,  2227,  2228,  2232,  2233,  2236,
-    2237,  2241,  2245,  2255,  2261,  2271,  2276,  2280,  2281,  2285,
-    2289,  2293,  2300,  2304,  2308,  2315,  2316,  2320,  2321,  2322,
-    2323,  2324,  2325,  2329,  2330,  2334,  2335,  2339,  2340,  2344,
-    2345,  2352,  2359,  2360,  2361,  2365,  2366,  2370,  2371,  2375,
-    2376,  2380,  2381,  2385,  2385,  2397,  2397,  2409,  2410,  2418,
-    2425,  2426,  2427,  2428,  2429,  2433,  2434,  2435,  2436
+    2191,  2201,  2208,  2213,  2223,  2227,  2228,  2232,  2233,  2234,
+    2237,  2238,  2242,  2246,  2256,  2262,  2272,  2277,  2281,  2282,
+    2286,  2290,  2294,  2301,  2305,  2309,  2316,  2317,  2321,  2322,
+    2323,  2324,  2325,  2326,  2330,  2331,  2335,  2336,  2340,  2341,
+    2345,  2346,  2353,  2360,  2361,  2362,  2366,  2367,  2371,  2372,
+    2376,  2377,  2381,  2382,  2386,  2386,  2398,  2398,  2410,  2411,
+    2419,  2426,  2427,  2428,  2429,  2430,  2434,  2435,  2436,  2437
 };
 #endif
 
@@ -1987,12 +1987,12 @@
      232,   232,   232,   232,   232,   232,   232,   233,   234,   234,
      234,   234,   234,   234,   234,   234,   236,   235,   237,   237,
      237,   237,   237,   237,   238,   239,   239,   240,   240,   240,
-     240,   241,   242,   242,   242,   242,   242,   243,   243,   244,
-     244,   244,   245,   245,   245,   246,   246,   247,   247,   247,
-     247,   247,   247,   248,   248,   249,   249,   250,   250,   251,
-     251,   251,   252,   252,   252,   253,   253,   254,   254,   255,
-     255,   256,   256,   258,   257,   260,   259,   261,   261,   262,
-     263,   263,   263,   263,   263,   264,   264,   264,   264
+     240,   240,   241,   242,   242,   242,   242,   242,   243,   243,
+     244,   244,   244,   245,   245,   245,   246,   246,   247,   247,
+     247,   247,   247,   247,   248,   248,   249,   249,   250,   250,
+     251,   251,   251,   252,   252,   252,   253,   253,   254,   254,
+     255,   255,   256,   256,   258,   257,   260,   259,   261,   261,
+     262,   263,   263,   263,   263,   263,   264,   264,   264,   264
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -2025,13 +2025,13 @@
        1,     0,     5,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     4,     1,     1,
        1,     1,     3,     3,     3,     3,     0,     5,     0,     3,
-       1,     5,     3,     3,     2,     0,     2,     1,     1,     4,
-       4,     2,     3,     5,     1,     3,     0,     1,     1,     6,
-       5,     4,     4,     6,     5,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     3,     1,     1,
-       4,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     2,     0,     2,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1
+       1,     5,     3,     3,     2,     0,     2,     1,     1,     1,
+       4,     4,     2,     3,     5,     1,     3,     0,     1,     1,
+       6,     5,     4,     4,     6,     5,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     1,     3,     1,
+       1,     4,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     2,     0,     2,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2041,59 +2041,59 @@
 {
        0,    12,     0,     0,     0,     0,    51,    19,     0,    44,
        0,     0,     2,     3,    10,    11,     0,     6,     8,     5,
-       7,    18,     0,     0,   323,     0,     0,     0,     0,   165,
+       7,    18,     0,     0,   324,     0,     0,     0,     0,   165,
        9,     1,     4,    13,     0,    16,    50,     0,     0,    48,
-     315,   313,   314,   316,    52,   312,   197,   198,   199,   200,
+     316,   314,   315,   317,    52,   313,   197,   198,   199,   200,
        0,    14,    21,   169,     0,    32,    31,    35,    34,   165,
-      27,     0,    33,    36,   166,   168,     0,    49,   330,   331,
-     332,   333,   334,   337,   335,   336,   338,   303,   321,   329,
-     324,   327,   304,   322,    91,     0,     0,     0,    30,    28,
+      27,     0,    33,    36,   166,   168,     0,    49,   331,   332,
+     333,   334,   335,   338,   336,   337,   339,   304,   322,   330,
+     325,   328,   305,   323,    91,     0,     0,     0,    30,    28,
       45,     0,     0,    38,     0,     0,   167,    15,     0,    97,
       95,    96,    98,    99,    66,   100,     0,   101,     0,    64,
        0,    71,    68,   102,   103,   104,   105,   106,   107,   108,
        0,    92,    93,     0,     0,     0,    40,     0,    91,    29,
-     305,   328,     0,     0,    73,     0,     0,     0,     0,    53,
-      94,    20,   317,   318,   319,     0,   320,     0,     0,     0,
-     325,    37,   321,    43,   306,   308,   309,    25,    26,     0,
-       0,     0,    76,    77,    79,    78,    80,    81,   323,     0,
+     306,   329,     0,     0,    73,     0,     0,     0,     0,    53,
+      94,    20,   318,   319,   320,     0,   321,     0,     0,     0,
+     326,    37,   322,    43,   307,   309,   310,    25,    26,     0,
+       0,     0,    76,    77,    79,    78,    80,    81,   324,     0,
       75,     0,     0,     0,     0,    55,     0,     0,    41,    39,
-       0,     0,   323,     0,    67,    63,    62,     0,     0,    61,
-      65,    70,    72,    69,    56,   158,    22,    24,   311,   326,
-       0,   307,    82,    74,    58,     0,     0,   162,   161,   163,
-     164,     0,     0,   158,     0,   156,   310,     0,     0,   160,
+       0,     0,   324,     0,    67,    63,    62,     0,     0,    61,
+      65,    70,    72,    69,    56,   158,    22,    24,   312,   327,
+       0,   308,    82,    74,    58,     0,     0,   162,   161,   163,
+     164,     0,     0,   158,     0,   156,   311,     0,     0,   160,
       57,    54,   157,     0,   196,   159,    59,     0,     0,   171,
        0,     0,     0,     0,   179,     0,   183,   186,   149,     0,
-     150,   241,     0,     0,     0,   258,   259,   260,   305,   209,
+     150,   241,     0,     0,     0,   258,   259,   260,   306,   209,
      185,   193,   194,   195,   136,     0,     0,   177,   211,   212,
-     213,   266,   192,   178,   288,   287,   261,   124,    17,   189,
+     213,   266,   192,   178,   289,   288,   261,   124,    17,   189,
        0,     0,     0,     0,   191,     0,     0,     0,     0,     0,
-     188,   261,     0,    85,   134,   137,   190,   286,   147,   170,
+     188,   261,     0,    85,   134,   137,   190,   287,   147,   170,
        0,   244,   245,   246,   247,   250,   251,   252,   253,   249,
-     248,   254,   255,   256,     0,     0,   323,     0,    60,     0,
-     296,   297,   298,   299,   300,   301,   302,   295,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,   116,
-     139,   142,     0,   284,     0,   124,   151,   268,   264,   263,
-     265,   262,   214,   337,   338,   305,     0,   215,   216,   217,
-       0,   208,   321,   202,     0,   243,   126,   127,   128,   129,
-     133,   132,   125,     0,   292,     0,     0,   291,     0,   175,
+     248,   254,   255,   256,     0,     0,   324,     0,    60,     0,
+     297,   298,   299,   300,   301,   302,   303,   296,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   287,   116,
+     139,   142,     0,   285,     0,   124,   151,   268,   264,   263,
+     265,   262,   214,   338,   339,   306,     0,   215,   216,   217,
+       0,   208,   322,   202,     0,   243,   126,   127,   128,   129,
+     133,   132,   125,     0,   293,     0,     0,   292,     0,   175,
      180,   172,   181,   182,     0,     0,     0,    89,     0,     0,
-       0,     0,     0,   281,   337,     0,   152,   275,   337,     0,
+       0,     0,     0,   282,   338,     0,   152,   275,   338,     0,
      270,   275,   257,   201,     0,   203,   223,   232,   233,   237,
      226,   227,   228,   229,   230,   231,   224,   234,   235,   236,
-     225,   323,   240,   218,   219,   220,   221,   222,   238,   239,
-       0,     0,     0,   294,     0,   290,     0,   176,   174,     0,
+     225,   324,   240,   218,   219,   220,   221,   222,   238,   239,
+       0,     0,     0,   295,     0,   291,     0,   176,   174,     0,
        0,     0,   242,     0,     0,     0,     0,   140,     0,   135,
-       0,   143,     0,   138,     0,   285,     0,   282,     0,     0,
-       0,   148,   274,     0,     0,   267,     0,   323,     0,   204,
-       0,     0,     0,   293,   289,   173,   184,   187,   118,     0,
+       0,   143,     0,   138,     0,   286,     0,   283,     0,     0,
+       0,   148,   274,     0,     0,   267,     0,   324,     0,   204,
+       0,     0,     0,   294,   290,   173,   184,   187,   118,     0,
        0,     0,     0,    87,   117,   275,   141,   275,   144,     0,
-       0,   153,   337,   154,   277,   278,   276,   273,   337,   269,
-     272,     0,   205,   206,   130,   131,    90,     0,     0,     0,
-       0,   119,     0,   145,   146,   283,   268,     0,     0,     0,
-     207,   110,     0,   111,   113,     0,   112,     0,     0,    88,
-       0,   155,     0,     0,   271,     0,     0,     0,   122,     0,
-      86,     0,   210,   280,   279,   109,   115,   114,     0,   124,
-     120,     0,   121,   123
+       0,   153,   338,   154,   277,   278,   279,   276,   273,   338,
+     269,   272,     0,   205,   206,   130,   131,    90,     0,     0,
+       0,     0,   119,     0,   145,   146,   284,   268,     0,     0,
+       0,   207,   110,     0,   111,   113,     0,   112,     0,     0,
+      88,     0,   155,     0,     0,   271,     0,     0,     0,   122,
+       0,    86,     0,   210,   281,   280,   109,   115,   114,     0,
+     124,   120,     0,   121,   123
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -2103,95 +2103,95 @@
       58,    86,    87,   159,    59,    60,    94,    95,   128,   151,
       18,    29,    61,    19,    25,    20,    26,    84,   175,   195,
      211,   217,   226,   113,   114,   115,   116,   117,   118,   119,
-     169,   170,   212,   251,   329,   501,   435,   120,   121,   122,
-     473,   377,   436,   518,   531,   538,   308,   362,   252,   330,
+     169,   170,   212,   251,   329,   502,   435,   120,   121,   122,
+     473,   377,   436,   519,   532,   539,   308,   362,   252,   330,
      253,   331,   378,   379,   440,   444,   254,   336,   255,   385,
      213,   214,   215,    63,    64,    65,   225,   370,   371,   428,
      256,   275,   278,   279,    50,   394,   257,   287,   350,   420,
      258,   282,   259,   307,   260,   261,   262,   290,   389,   390,
-     452,   486,   333,   334,   263,   264,   265,   318,   319,    78,
+     452,   487,   333,   334,   263,   264,   265,   318,   319,    78,
      153,   154,   155,    44,    45,   144,   156,   146,    37,    38,
      180,   181,    80,    81,    82,    83
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -397
+#define YYPACT_NINF -424
 static const yytype_int16 yypact[] =
 {
-     219,  -397,   -79,   -65,   -54,   -16,  -397,  -397,   -25,  -397,
-      62,   148,   219,  -397,  -397,  -397,    90,  -397,  -397,  -397,
-    -397,  -397,    91,   171,    59,   182,   159,   149,   184,    70,
-    -397,  -397,  -397,  -397,    79,  -397,  -397,    73,   431,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-      97,  -397,    86,  -397,   204,  -397,  -397,  -397,  -397,   160,
-    -397,   125,  -397,   152,   108,  -397,   229,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-      98,  -397,  -397,  -397,   421,   112,   124,   127,  -397,  -397,
-    -397,   431,   132,  -397,   244,   134,  -397,  -397,   431,  -397,
-    -397,  -397,  -397,  -397,   123,  -397,   128,  -397,   129,   130,
-     137,   144,   147,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-     254,   421,  -397,   188,   417,   417,  -397,   202,   421,  -397,
-     336,  -397,    33,   -29,   279,   164,   165,    33,    33,  -397,
-    -397,  -397,  -397,  -397,  -397,   168,  -397,   169,   172,   181,
-    -397,  -397,   183,  -397,   234,  -397,  -397,  -397,  -397,   186,
-     190,   191,  -397,  -397,  -397,  -397,  -397,  -397,  -397,   -64,
-    -397,   192,   194,   196,   198,   304,    33,    33,  -397,  -397,
-     185,   431,  -397,   336,  -397,  -397,  -397,   201,   279,  -397,
-    -397,  -397,  -397,  -397,  -397,    49,  -397,  -397,  -397,    98,
-     203,  -397,  -397,  -397,  -397,   214,   325,  -397,  -397,  -397,
-    -397,   337,   269,    60,     8,  -397,  -397,   149,   273,  -397,
-    -397,  -397,  -397,   345,   230,  -397,  -397,   241,   188,  -397,
-     -47,   106,   253,   431,  -397,    48,   -36,  -397,  -397,   501,
-    -397,  -397,   358,   360,   366,  -397,  -397,  -397,   336,  -397,
-    -397,  -397,  -397,  -397,  -397,   246,   385,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,   338,  -397,  -397,  -397,
-     431,   228,   431,   228,  -397,   149,   301,   318,   149,   149,
-    -397,   270,   267,  -397,  -397,  -397,  -397,   515,  -397,  -397,
-     268,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,   379,    22,  -397,   431,     5,   388,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,   -47,   431,
-     389,   -47,   431,   290,   247,   247,   293,   296,   515,  -397,
-    -397,  -397,   386,  -397,   -58,  -397,   445,   459,  -397,  -397,
-    -397,  -397,  -397,   280,   282,   336,   300,  -397,  -397,  -397,
-     431,  -397,    52,   369,   289,  -397,  -397,  -397,  -397,   291,
-    -397,  -397,  -397,   -47,  -397,   412,   -47,  -397,   414,   323,
-     362,  -397,  -397,  -397,   312,   313,   -41,     0,     2,    11,
-     247,   524,   324,     5,   427,   -30,  -397,  -397,   434,   -24,
-    -397,   435,  -397,  -397,   333,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-     431,   335,   102,  -397,   -47,  -397,   -47,  -397,  -397,   290,
-     188,   188,  -397,   431,   431,   -37,   460,  -397,   431,  -397,
-     461,  -397,   431,  -397,   462,  -397,   442,  -397,   501,   431,
-     473,  -397,   167,   431,   487,  -397,   431,  -397,   342,  -397,
-     431,   343,   346,  -397,  -397,  -397,  -397,  -397,  -397,   468,
-     431,   431,   533,   108,  -397,  -397,  -397,  -397,  -397,   247,
-     349,  -397,   455,  -397,  -397,   352,  -397,  -397,   469,  -397,
-    -397,   355,  -397,  -397,  -397,  -397,  -397,    26,   477,    28,
-      32,  -397,   478,   167,   167,  -397,   459,   431,   115,   431,
-    -397,  -397,   431,  -397,  -397,   431,  -397,   431,    94,  -397,
-     -22,  -397,   356,   367,  -397,   494,   514,   525,  -397,   247,
-    -397,   536,  -397,  -397,  -397,  -397,  -397,  -397,   149,  -397,
-    -397,   290,     5,  -397
+     219,  -424,   -86,   -55,   -62,   -58,  -424,  -424,    -8,  -424,
+      82,   163,   219,  -424,  -424,  -424,   169,  -424,  -424,  -424,
+    -424,  -424,    93,   171,    58,   184,    95,   166,   188,    70,
+    -424,  -424,  -424,  -424,    90,  -424,  -424,    81,   439,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+     100,  -424,   109,  -424,   220,  -424,  -424,  -424,  -424,   160,
+    -424,   129,  -424,    67,   133,  -424,   232,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+      99,  -424,  -424,  -424,   421,   117,   131,   135,  -424,  -424,
+    -424,   439,   136,  -424,   250,   134,  -424,  -424,   439,  -424,
+    -424,  -424,  -424,  -424,   130,  -424,   132,  -424,   137,   142,
+     146,   147,   149,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+     251,   421,  -424,   115,   425,   425,  -424,   204,   421,  -424,
+     350,  -424,    48,   -19,   161,   164,   165,    48,    48,  -424,
+    -424,  -424,  -424,  -424,  -424,   159,  -424,   177,   182,   200,
+    -424,  -424,   179,  -424,   234,  -424,  -424,  -424,  -424,   180,
+     181,   183,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -64,
+    -424,   186,   190,   191,   192,   300,    48,    48,  -424,  -424,
+     196,   439,  -424,   350,  -424,  -424,  -424,   198,   161,  -424,
+    -424,  -424,  -424,  -424,  -424,    49,  -424,  -424,  -424,    99,
+     199,  -424,  -424,  -424,  -424,   213,   323,  -424,  -424,  -424,
+    -424,   324,   256,    60,     8,  -424,  -424,   166,   259,  -424,
+    -424,  -424,  -424,   328,   230,  -424,  -424,   224,   115,  -424,
+     -67,   253,   270,   439,  -424,    71,    42,  -424,  -424,   509,
+    -424,  -424,   330,   337,   338,  -424,  -424,  -424,   350,  -424,
+    -424,  -424,  -424,  -424,  -424,   223,   341,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,   405,  -424,  -424,  -424,
+     439,   229,   439,   229,  -424,   166,   278,   290,   166,   166,
+    -424,   243,   244,  -424,  -424,  -424,  -424,   523,  -424,  -424,
+     246,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,   379,    22,  -424,   439,     5,   364,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -67,   439,
+     365,   -67,   439,   272,   247,   247,   280,   281,   523,  -424,
+    -424,  -424,   358,  -424,   -39,  -424,   453,   467,  -424,  -424,
+    -424,  -424,  -424,   261,   265,   350,   283,  -424,  -424,  -424,
+     439,  -424,    28,   369,   268,  -424,  -424,  -424,  -424,   271,
+    -424,  -424,  -424,   -67,  -424,   385,   -67,  -424,   389,   298,
+     329,  -424,  -424,  -424,   282,   284,   -36,     0,    27,    11,
+     247,   532,   285,     5,   382,   -27,  -424,  -424,   388,   -24,
+    -424,   393,  -424,  -424,   293,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+     439,   301,    85,  -424,   -67,  -424,   -67,  -424,  -424,   272,
+     115,   115,  -424,   439,   439,   -37,   402,  -424,   439,  -424,
+     417,  -424,   439,  -424,   419,  -424,   413,  -424,   509,   439,
+     481,  -424,   162,   439,   495,  -424,   439,  -424,   310,  -424,
+     439,   309,   322,  -424,  -424,  -424,  -424,  -424,  -424,   457,
+     439,   439,   541,   133,  -424,  -424,  -424,  -424,  -424,   247,
+     336,  -424,   450,  -424,  -424,   347,  -424,  -424,  -424,   455,
+    -424,  -424,   352,  -424,  -424,  -424,  -424,  -424,    10,   475,
+      12,    26,  -424,   477,   162,   162,  -424,   467,   439,    86,
+     439,  -424,  -424,   439,  -424,  -424,   439,  -424,   439,    94,
+    -424,   -23,  -424,   355,   356,  -424,   486,   490,   494,  -424,
+     247,  -424,   514,  -424,  -424,  -424,  -424,  -424,  -424,   166,
+    -424,  -424,   272,     5,  -424
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -397,  -397,  -397,   516,    -1,  -168,  -397,  -397,  -397,  -397,
-     319,  -397,  -397,   -86,  -397,   483,  -397,  -397,  -397,   209,
-    -397,  -397,  -397,    12,  -397,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-    -397,   368,  -397,  -397,  -397,  -397,  -397,   420,  -397,   436,
-    -397,  -397,  -397,  -397,  -397,  -397,  -330,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,   357,   348,  -397,   -63,  -397,  -397,  -396,  -397,
-    -397,  -397,  -397,  -397,  -214,  -397,  -397,  -397,  -397,  -397,
-    -397,  -397,  -397,  -397,  -397,   120,  -226,  -397,    65,  -292,
-    -368,  -397,   195,   256,  -397,  -397,  -397,   309,   317,  -128,
-     350,  -397,   402,  -397,   292,  -219,    30,   -38,  -164,  -397,
-    -397,  -397,   418,   506,  -397,  -116
+    -424,  -424,  -424,   510,    -1,  -161,  -424,  -424,  -424,  -424,
+     299,  -424,  -424,   -68,  -424,   465,  -424,  -424,  -424,   203,
+    -424,  -424,  -424,     3,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,   339,  -424,  -424,  -424,  -424,  -424,   397,  -424,   415,
+    -424,  -424,  -424,  -424,  -424,  -424,  -330,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,   343,   348,  -424,   -63,  -424,  -424,  -423,  -424,
+    -424,  -424,  -424,  -424,  -214,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,    89,  -226,  -424,    43,  -292,
+    -329,  -424,   170,   236,  -424,  -424,  -424,   292,   297,  -128,
+     331,  -424,   395,  -424,   286,  -219,   -47,   -38,  -164,  -424,
+    -424,  -424,   403,   478,  -424,  -116
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -2201,142 +2201,142 @@
 #define YYTABLE_NINF -262
 static const yytype_int16 yytable[] =
 {
-      79,    96,   152,   227,   187,   383,   437,   141,   188,   223,
-     433,   269,  -165,   280,   381,   441,   438,  -165,   200,  -165,
-    -165,  -165,   356,   357,   358,   359,   442,   209,    57,   360,
-     511,   381,   514,   465,    21,   342,   516,  -165,  -165,  -165,
-     470,    62,   450,  -165,   386,   209,   471,   472,   454,    22,
-     454,   173,   174,   126,   204,   152,     3,     4,    57,    23,
-      79,   323,   142,   189,   326,   327,    30,     3,     4,   382,
-     143,    62,  -165,  -165,  -165,  -165,     2,   -23,   -21,   351,
-     160,   205,   439,  -165,   161,   434,   432,  -165,    28,  -165,
-     196,   197,   205,   443,    33,     5,   266,   451,   512,   364,
-     515,    52,   367,   455,   517,   532,   361,   503,    24,   504,
-      53,   281,   268,  -165,  -165,  -165,  -165,  -165,  -165,   270,
-     152,  -165,   -83,   528,  -165,  -165,  -165,    68,    69,    70,
+      79,    96,   152,   227,   187,   383,   465,   141,   188,   223,
+     433,   269,  -165,   280,   512,   441,   515,  -165,   200,  -165,
+    -165,  -165,   356,   357,   358,   359,   442,    21,    57,   360,
+     517,   437,    62,   381,   209,   342,   381,  -165,  -165,  -165,
+     470,   438,   142,  -165,   386,   450,   471,   472,   454,   454,
+     143,    23,   209,   126,   204,   152,     3,     4,    57,    22,
+      79,   323,    62,   189,   326,   327,    24,     3,     4,   173,
+     174,   -42,  -165,  -165,  -165,  -165,     2,   145,   147,   351,
+      91,   205,   513,  -165,   516,   434,    30,  -165,   382,  -165,
+     160,   432,   205,   443,   161,     5,   266,    92,   518,   364,
+     451,    52,   367,   455,   533,    28,   361,   439,   196,   197,
+      53,   281,   268,  -165,  -165,  -165,  -165,  -165,  -165,   544,
+     152,  -165,   -83,   529,  -165,  -165,  -165,    68,    69,    70,
       71,   245,    72,   -84,  -165,   343,    74,    75,   344,   345,
-      77,   468,   354,    79,   423,   543,   157,   425,    31,   158,
-     346,   347,   348,   349,   145,   147,   -42,   529,   483,   335,
-     206,   276,   489,    34,   277,    91,     2,     8,   207,   208,
-     530,   206,    53,   304,   -46,    35,   340,   352,  -261,   207,
-     208,    54,    92,   484,    36,     5,    39,   485,    51,    55,
-      56,    52,    66,   271,   273,   274,   372,   373,    67,   -23,
-     335,    46,    47,    48,    49,   463,    85,   464,    88,   542,
-      53,    68,    69,    70,    71,   461,    72,   152,   462,    73,
-      74,    75,    76,     1,    77,     2,     3,     4,   522,    90,
-      93,   523,   309,    97,   320,   123,    98,   310,   124,   230,
-     125,   231,   232,   233,     5,   127,     6,   458,   129,   132,
-       7,   130,   445,   335,   133,   134,   135,     8,   139,   234,
-     235,   236,    53,   136,   -47,   237,   272,   353,    40,   355,
-     137,    54,    41,   138,   148,    42,    43,   171,   172,    55,
-      56,   365,   178,   179,   368,   311,   312,   313,   314,   315,
-     316,   176,   177,   491,   238,   239,   240,   241,   387,   391,
-     317,    73,    74,    75,    76,   242,   183,   182,   194,   243,
-     198,   244,   395,   184,   466,   467,     8,   185,   186,   190,
-     281,   191,     9,   192,   541,   193,   202,   218,   216,   219,
-      10,   162,   163,   164,   165,    68,    69,    70,    71,   245,
-      72,   220,   221,   246,   500,   228,   247,   248,    77,   229,
-     267,   505,    68,    69,    70,    71,   249,    72,    68,    69,
-      70,    71,   283,    72,   284,    77,    73,    74,    75,    76,
-     285,    77,   288,   324,   291,   292,   293,   294,   295,   296,
-     297,   298,   459,   299,   300,   301,   302,   303,   166,   289,
-     325,   304,   167,   328,   337,   387,   469,   363,   366,   369,
-     475,   539,   374,   168,   477,   375,  -259,   380,  -260,   393,
-     502,   481,   387,   396,   421,   487,   387,   422,   490,   397,
-     398,   424,   493,   426,   427,   399,   400,   401,   402,   403,
-     404,   405,   497,   498,   429,   430,   431,   406,   407,   408,
-     409,    68,    69,    70,    71,   142,    72,   448,   449,    73,
-      74,    75,    76,   143,    77,   453,   456,   457,   460,   304,
-     150,   305,   306,   479,   474,   476,   478,   492,   391,   521,
-     494,   524,   496,   495,   525,   506,   507,   526,   508,   527,
-     510,   513,   519,   533,    68,    69,    70,    71,    40,    72,
-     509,   410,   338,   411,   534,   339,    43,    77,   535,   412,
+      77,   468,   354,    79,   423,    93,   504,   425,   505,   304,
+     346,   347,   348,   349,  -261,   -23,   -21,   530,   483,   335,
+     206,   157,   490,    31,   158,    34,     2,     8,   207,   208,
+     531,   206,    53,    33,   -46,    35,   340,   352,   484,   207,
+     208,    54,   485,    36,   276,     5,   486,   277,    39,    55,
+      56,    52,    51,   271,   273,   274,   372,   373,   461,   523,
+     335,   462,   524,    66,    40,   463,    67,   464,    41,    85,
+     543,    42,    43,   162,   163,   164,   165,   152,    46,    47,
+      48,    49,   -23,     1,    88,     2,     3,     4,    73,    74,
+      75,    76,   309,    90,   320,    53,    97,    98,   310,   230,
+     123,   231,   232,   233,     5,   124,     6,   458,   125,   127,
+       7,   130,   445,   335,   129,   139,   132,     8,   133,   234,
+     235,   236,    53,   134,   -47,   237,   270,   353,   135,   355,
+     166,    54,   136,   137,   167,   138,   148,   171,   172,    55,
+      56,   365,   176,   272,   368,   168,   311,   312,   313,   314,
+     315,   316,   178,   492,   238,   239,   240,   241,   387,   391,
+     177,   317,   179,   182,   194,   242,   183,   184,   185,   243,
+     186,   244,   395,   190,   466,   467,     8,   191,   192,   193,
+     281,   198,     9,   202,   216,   542,   218,   219,   220,   221,
+      10,   228,   229,   267,   283,    68,    69,    70,    71,   245,
+      72,   284,   285,   246,   501,   289,   247,   248,    77,   288,
+     324,   506,    68,    69,    70,    71,   249,    72,    68,    69,
+      70,    71,   325,    72,   304,    77,    73,    74,    75,    76,
+     328,    77,   337,   363,   366,    68,    69,    70,    71,   380,
+      72,   369,   459,    73,    74,    75,    76,  -259,    77,   374,
+     375,  -260,   393,   421,   424,   387,   469,   422,   426,   427,
+     475,   429,   540,   449,   477,   430,   474,   431,   448,   453,
+     503,   481,   387,   396,   456,   488,   387,   457,   491,   397,
+     398,   476,   494,   478,   460,   399,   400,   401,   402,   403,
+     404,   405,   498,   499,   479,   493,   495,   406,   407,   408,
+     409,   291,   292,   293,   294,   295,   296,   297,   298,   496,
+     299,   300,   301,   302,   303,    68,    69,    70,    71,   142,
+      72,   497,   507,    73,    74,    75,    76,   143,    77,   391,
+     522,   508,   525,   509,   150,   526,   510,   511,   527,   514,
+     528,   520,   534,   535,    68,    69,    70,    71,    40,    72,
+     536,   410,   338,   411,   537,   339,    43,    77,   538,   412,
      413,   414,   415,   416,   417,   418,   419,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   536,   110,
-     111,   112,    68,    69,    70,    71,   142,    72,    32,   537,
-      73,    74,    75,    76,   143,    77,    68,    69,    70,    71,
-     540,    72,    89,   250,    73,    74,    75,    76,   149,    77,
-      68,    69,    70,    71,   392,    72,   203,   140,   384,    74,
-      75,    76,   224,    77,    68,    69,    70,    71,   480,    72,
-     222,   520,   388,    74,    75,    76,   447,    77,    68,    69,
-      70,    71,   321,    72,   376,   201,   482,    74,    75,    76,
-     322,    77,    68,    69,    70,    71,   341,    72,   286,   199,
-     488,    74,    75,    76,   131,    77,    68,    69,    70,    71,
-     245,    72,     0,     0,   246,     0,     0,   247,     0,    77,
-      68,    69,    70,    71,     0,    72,     0,     0,   332,    68,
-      69,    70,    71,    77,    72,     0,     0,   446,    68,    69,
-      70,    71,    77,    72,     0,     0,   499,     0,     0,     0,
-       0,    77
+     102,   103,   104,   105,   106,   107,   108,   109,   541,   110,
+     111,   112,    32,   250,    89,   149,   304,   203,   305,   306,
+      68,    69,    70,    71,   142,    72,   140,   480,    73,    74,
+      75,    76,   143,    77,    68,    69,    70,    71,   392,    72,
+     521,   447,    73,    74,    75,    76,   222,    77,    68,    69,
+      70,    71,   224,    72,   376,   321,   384,    74,    75,    76,
+     322,    77,    68,    69,    70,    71,   131,    72,   201,   286,
+     388,    74,    75,    76,   199,    77,    68,    69,    70,    71,
+     341,    72,     0,     0,   482,    74,    75,    76,     0,    77,
+      68,    69,    70,    71,     0,    72,     0,     0,   489,    74,
+      75,    76,     0,    77,    68,    69,    70,    71,   245,    72,
+       0,     0,   246,     0,     0,   247,     0,    77,    68,    69,
+      70,    71,     0,    72,     0,     0,   332,    68,    69,    70,
+      71,    77,    72,     0,     0,   446,    68,    69,    70,    71,
+      77,    72,     0,     0,   500,     0,     0,     0,     0,    77
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   130,   217,   168,   335,     4,   123,    72,     1,
-      10,   230,     4,   239,    72,     4,    14,     9,   182,    11,
-      12,    13,    17,    18,    19,    20,    15,   195,    29,    24,
-       4,    72,     4,   429,   113,    13,     4,    29,    30,    31,
-      77,    29,    72,    35,   336,   213,    83,    84,    72,   114,
-      72,   137,   138,    91,     5,   183,     7,     8,    59,   113,
-      98,   275,   109,   127,   278,   279,     4,     7,     8,   127,
-     117,    59,    64,    65,    66,    67,     6,   113,   114,   305,
-     109,    32,    80,    75,   113,    85,   127,    79,   113,    81,
-     176,   177,    32,    82,     4,    25,   224,   127,    72,   318,
-      72,    31,   321,   127,    72,   127,   101,   475,   124,   477,
-     102,   239,   228,   105,   106,   107,   108,   109,   110,    13,
+      38,    64,   130,   217,   168,   335,   429,   123,    72,     1,
+      10,   230,     4,   239,     4,     4,     4,     9,   182,    11,
+      12,    13,    17,    18,    19,    20,    15,   113,    29,    24,
+       4,     4,    29,    72,   195,    13,    72,    29,    30,    31,
+      77,    14,   109,    35,   336,    72,    83,    84,    72,    72,
+     117,   113,   213,    91,     5,   183,     7,     8,    59,   114,
+      98,   275,    59,   127,   278,   279,   124,     7,     8,   137,
+     138,     4,    64,    65,    66,    67,     6,   124,   125,   305,
+      13,    32,    72,    75,    72,    85,     4,    79,   127,    81,
+     109,   127,    32,    82,   113,    25,   224,    30,    72,   318,
+     127,    31,   321,   127,   127,   113,   101,    80,   176,   177,
+     102,   239,   228,   105,   106,   107,   108,   109,   110,   542,
      248,   113,    73,    29,   116,   117,   118,   105,   106,   107,
      108,   109,   110,    73,   126,   113,   114,   115,   116,   117,
-     118,   433,   306,   181,   363,   541,   113,   366,     0,   116,
-     128,   129,   130,   131,   124,   125,     4,    63,   450,   287,
-     111,   113,   454,    72,   116,    13,     6,    97,   119,   120,
-      76,   111,   102,   121,   104,     4,   304,   305,   126,   119,
-     120,   111,    30,    16,   125,    25,     4,    20,     4,   119,
-     120,    31,   113,   231,   232,   233,   324,   325,   125,   113,
-     328,    52,    53,    54,    55,   424,   109,   426,     4,   539,
-     102,   105,   106,   107,   108,   113,   110,   345,   116,   113,
-     114,   115,   116,     4,   118,     6,     7,     8,   113,   104,
-      78,   116,   270,     4,   272,   123,   138,     9,   114,     9,
-     113,    11,    12,    13,    25,   113,    27,   411,     4,   126,
-      31,   117,   380,   381,   126,   126,   126,    97,     4,    29,
-      30,    31,   102,   126,   104,    35,    13,   305,   109,   307,
-     126,   111,   113,   126,    72,   116,   117,   113,   113,   119,
-     120,   319,   110,   102,   322,    57,    58,    59,    60,    61,
-      62,   123,   123,   457,    64,    65,    66,    67,   336,   337,
-      72,   113,   114,   115,   116,    75,    72,   124,     4,    79,
-     125,    81,   350,   127,   430,   431,    97,   127,   127,   127,
-     448,   127,   103,   127,   538,   127,   125,   113,   125,     4,
-     111,    52,    53,    54,    55,   105,   106,   107,   108,   109,
-     110,     4,    73,   113,   472,    72,   116,   117,   118,     4,
-     109,   479,   105,   106,   107,   108,   126,   110,   105,   106,
-     107,   108,     4,   110,     4,   118,   113,   114,   115,   116,
-       4,   118,   126,    72,    36,    37,    38,    39,    40,    41,
-      42,    43,   420,    45,    46,    47,    48,    49,   109,     4,
-      72,   121,   113,   126,   126,   433,   434,     9,     9,   109,
-     438,   529,   109,   124,   442,   109,   126,    21,   126,   109,
-     473,   449,   450,    44,   125,   453,   454,   126,   456,    50,
-      51,     9,   460,     9,   101,    56,    57,    58,    59,    60,
-      61,    62,   470,   471,    72,   123,   123,    68,    69,    70,
-      71,   105,   106,   107,   108,   109,   110,   123,    21,   113,
-     114,   115,   116,   117,   118,    21,    21,   124,   123,   121,
-     124,   123,   124,    21,     4,     4,     4,   125,   506,   507,
-     127,   509,     4,   127,   512,   126,    21,   515,   126,   517,
-     125,     4,     4,   127,   105,   106,   107,   108,   109,   110,
-      21,   122,   113,   124,   127,   116,   117,   118,     4,   130,
+     118,   433,   306,   181,   363,    78,   475,   366,   477,   121,
+     128,   129,   130,   131,   126,   113,   114,    63,   450,   287,
+     111,   113,   454,     0,   116,    72,     6,    97,   119,   120,
+      76,   111,   102,     4,   104,     4,   304,   305,    16,   119,
+     120,   111,    20,   125,   113,    25,    24,   116,     4,   119,
+     120,    31,     4,   231,   232,   233,   324,   325,   113,   113,
+     328,   116,   116,   113,   109,   424,   125,   426,   113,   109,
+     540,   116,   117,    52,    53,    54,    55,   345,    52,    53,
+      54,    55,   113,     4,     4,     6,     7,     8,   113,   114,
+     115,   116,   270,   104,   272,   102,     4,   138,     9,     9,
+     123,    11,    12,    13,    25,   114,    27,   411,   113,   113,
+      31,   117,   380,   381,     4,     4,   126,    97,   126,    29,
+      30,    31,   102,   126,   104,    35,    13,   305,   126,   307,
+     109,   111,   126,   126,   113,   126,    72,   113,   113,   119,
+     120,   319,   123,    13,   322,   124,    57,    58,    59,    60,
+      61,    62,   110,   457,    64,    65,    66,    67,   336,   337,
+     123,    72,   102,   124,     4,    75,    72,   127,   127,    79,
+     127,    81,   350,   127,   430,   431,    97,   127,   127,   127,
+     448,   125,   103,   125,   125,   539,   113,     4,     4,    73,
+     111,    72,     4,   109,     4,   105,   106,   107,   108,   109,
+     110,     4,     4,   113,   472,     4,   116,   117,   118,   126,
+      72,   479,   105,   106,   107,   108,   126,   110,   105,   106,
+     107,   108,    72,   110,   121,   118,   113,   114,   115,   116,
+     126,   118,   126,     9,     9,   105,   106,   107,   108,    21,
+     110,   109,   420,   113,   114,   115,   116,   126,   118,   109,
+     109,   126,   109,   125,     9,   433,   434,   126,     9,   101,
+     438,    72,   530,    21,   442,   123,     4,   123,   123,    21,
+     473,   449,   450,    44,    21,   453,   454,   124,   456,    50,
+      51,     4,   460,     4,   123,    56,    57,    58,    59,    60,
+      61,    62,   470,   471,    21,   125,   127,    68,    69,    70,
+      71,    36,    37,    38,    39,    40,    41,    42,    43,   127,
+      45,    46,    47,    48,    49,   105,   106,   107,   108,   109,
+     110,     4,   126,   113,   114,   115,   116,   117,   118,   507,
+     508,    21,   510,   126,   124,   513,    21,   125,   516,     4,
+     518,     4,   127,   127,   105,   106,   107,   108,   109,   110,
+       4,   122,   113,   124,     4,   116,   117,   118,     4,   130,
      131,   132,   133,   134,   135,   136,   137,    86,    87,    88,
       89,    90,    91,    92,    93,    94,    95,    96,     4,    98,
-      99,   100,   105,   106,   107,   108,   109,   110,    12,     4,
-     113,   114,   115,   116,   117,   118,   105,   106,   107,   108,
-       4,   110,    59,   224,   113,   114,   115,   116,   128,   118,
-     105,   106,   107,   108,   345,   110,   188,   121,   113,   114,
-     115,   116,   214,   118,   105,   106,   107,   108,   448,   110,
-     213,   506,   113,   114,   115,   116,   381,   118,   105,   106,
-     107,   108,   273,   110,   328,   183,   113,   114,   115,   116,
-     273,   118,   105,   106,   107,   108,   304,   110,   248,   181,
-     113,   114,   115,   116,    98,   118,   105,   106,   107,   108,
-     109,   110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,
-     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   105,
-     106,   107,   108,   118,   110,    -1,    -1,   113,   105,   106,
-     107,   108,   118,   110,    -1,    -1,   113,    -1,    -1,    -1,
-      -1,   118
+      99,   100,    12,   224,    59,   128,   121,   188,   123,   124,
+     105,   106,   107,   108,   109,   110,   121,   448,   113,   114,
+     115,   116,   117,   118,   105,   106,   107,   108,   345,   110,
+     507,   381,   113,   114,   115,   116,   213,   118,   105,   106,
+     107,   108,   214,   110,   328,   273,   113,   114,   115,   116,
+     273,   118,   105,   106,   107,   108,    98,   110,   183,   248,
+     113,   114,   115,   116,   181,   118,   105,   106,   107,   108,
+     304,   110,    -1,    -1,   113,   114,   115,   116,    -1,   118,
+     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   114,
+     115,   116,    -1,   118,   105,   106,   107,   108,   109,   110,
+      -1,    -1,   113,    -1,    -1,   116,    -1,   118,   105,   106,
+     107,   108,    -1,   110,    -1,    -1,   113,   105,   106,   107,
+     108,   118,   110,    -1,    -1,   113,   105,   106,   107,   108,
+     118,   110,    -1,    -1,   113,    -1,    -1,    -1,    -1,   118
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2391,13 +2391,13 @@
       72,   127,   239,    21,    72,   127,    21,   124,   257,   256,
      123,   113,   116,   254,   254,   217,   264,   264,   238,   256,
       77,    83,    84,   189,     4,   256,     4,   256,     4,    21,
-     234,   256,   113,   238,    16,    20,   240,   256,   113,   238,
-     256,   257,   125,   256,   127,   127,     4,   256,   256,   113,
-     248,   184,   214,   239,   239,   248,   126,    21,   126,    21,
-     125,     4,    72,     4,     4,    72,     4,    72,   192,     4,
-     237,   256,   113,   116,   256,   256,   256,   256,    29,    63,
-      76,   193,   127,   127,   127,     4,     4,     4,   194,   248,
-       4,   223,   195,   217
+     234,   256,   113,   238,    16,    20,    24,   240,   256,   113,
+     238,   256,   257,   125,   256,   127,   127,     4,   256,   256,
+     113,   248,   184,   214,   239,   239,   248,   126,    21,   126,
+      21,   125,     4,    72,     4,     4,    72,     4,    72,   192,
+       4,   237,   256,   113,   116,   256,   256,   256,   256,    29,
+      63,    76,   193,   127,   127,   127,     4,     4,     4,   194,
+     248,     4,   223,   195,   217
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -4870,31 +4870,36 @@
 
   case 277:
 #line 2232 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_FLAT; }
+    { (yyval.t) = VT_FLAT;     }
     break;
 
   case 278:
 #line 2233 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_NAMED; }
+    { (yyval.t) = VT_NAMED;    }
     break;
 
   case 279:
-#line 2236 "compilers/imcc/imcc.y"
-    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
+#line 2234 "compilers/imcc/imcc.y"
+    { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 280:
 #line 2237 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
+    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 281:
-#line 2241 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
+#line 2238 "compilers/imcc/imcc.y"
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 282:
-#line 2246 "compilers/imcc/imcc.y"
+#line 2242 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
+    break;
+
+  case 283:
+#line 2247 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4906,8 +4911,8 @@
          }
     break;
 
-  case 283:
-#line 2256 "compilers/imcc/imcc.y"
+  case 284:
+#line 2257 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(IMCC_INFO(interp)->cur_call,
             mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -4915,8 +4920,8 @@
          }
     break;
 
-  case 284:
-#line 2262 "compilers/imcc/imcc.y"
+  case 285:
+#line 2263 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4928,22 +4933,17 @@
          }
     break;
 
-  case 285:
-#line 2272 "compilers/imcc/imcc.y"
+  case 286:
+#line 2273 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 286:
-#line 2276 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; }
-    break;
-
   case 287:
-#line 2280 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); }
+#line 2277 "compilers/imcc/imcc.y"
+    { (yyval.sr) = 0; }
     break;
 
   case 288:
@@ -4952,50 +4952,50 @@
     break;
 
   case 289:
-#line 2286 "compilers/imcc/imcc.y"
-    {
-           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
-         }
+#line 2282 "compilers/imcc/imcc.y"
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 290:
-#line 2290 "compilers/imcc/imcc.y"
+#line 2287 "compilers/imcc/imcc.y"
     {
-           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
+           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
   case 291:
-#line 2294 "compilers/imcc/imcc.y"
+#line 2291 "compilers/imcc/imcc.y"
     {
-           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
+           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
   case 292:
-#line 2301 "compilers/imcc/imcc.y"
+#line 2295 "compilers/imcc/imcc.y"
     {
-           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
+           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
   case 293:
-#line 2305 "compilers/imcc/imcc.y"
+#line 2302 "compilers/imcc/imcc.y"
     {
-           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
+           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
   case 294:
-#line 2309 "compilers/imcc/imcc.y"
+#line 2306 "compilers/imcc/imcc.y"
     {
-           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
+           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
   case 295:
-#line 2315 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; }
+#line 2310 "compilers/imcc/imcc.y"
+    {
+           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
+         }
     break;
 
   case 296:
@@ -5004,57 +5004,62 @@
     break;
 
   case 297:
-#line 2320 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"eq"; }
+#line 2317 "compilers/imcc/imcc.y"
+    { (yyval.t) = 0; }
     break;
 
   case 298:
 #line 2321 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ne"; }
+    { (yyval.s) = (char *)"eq"; }
     break;
 
   case 299:
 #line 2322 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"gt"; }
+    { (yyval.s) = (char *)"ne"; }
     break;
 
   case 300:
 #line 2323 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ge"; }
+    { (yyval.s) = (char *)"gt"; }
     break;
 
   case 301:
 #line 2324 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lt"; }
+    { (yyval.s) = (char *)"ge"; }
     break;
 
   case 302:
 #line 2325 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"le"; }
+    { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 305:
-#line 2334 "compilers/imcc/imcc.y"
-    { (yyval.sr) = NULL; }
+  case 303:
+#line 2326 "compilers/imcc/imcc.y"
+    { (yyval.s) = (char *)"le"; }
     break;
 
   case 306:
 #line 2335 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
+    { (yyval.sr) = NULL; }
     break;
 
   case 307:
-#line 2339 "compilers/imcc/imcc.y"
+#line 2336 "compilers/imcc/imcc.y"
+    { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
+    break;
+
+  case 308:
+#line 2340 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 309:
-#line 2344 "compilers/imcc/imcc.y"
+  case 310:
+#line 2345 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 310:
-#line 2346 "compilers/imcc/imcc.y"
+  case 311:
+#line 2347 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5063,27 +5068,22 @@
          }
     break;
 
-  case 311:
-#line 2353 "compilers/imcc/imcc.y"
+  case 312:
+#line 2354 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 313:
-#line 2360 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
-    break;
-
   case 314:
 #line 2361 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
+    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 315:
-#line 2365 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2362 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 316:
@@ -5092,8 +5092,8 @@
     break;
 
   case 317:
-#line 2370 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2367 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 318:
@@ -5101,15 +5101,20 @@
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 323:
-#line 2385 "compilers/imcc/imcc.y"
+  case 319:
+#line 2372 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+    break;
+
+  case 324:
+#line 2386 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
     break;
 
-  case 324:
-#line 2389 "compilers/imcc/imcc.y"
+  case 325:
+#line 2390 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5117,15 +5122,15 @@
          }
     break;
 
-  case 325:
-#line 2397 "compilers/imcc/imcc.y"
+  case 326:
+#line 2398 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
          }
     break;
 
-  case 326:
-#line 2401 "compilers/imcc/imcc.y"
+  case 327:
+#line 2402 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5133,74 +5138,74 @@
          }
     break;
 
-  case 327:
-#line 2409 "compilers/imcc/imcc.y"
+  case 328:
+#line 2410 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 328:
-#line 2411 "compilers/imcc/imcc.y"
+  case 329:
+#line 2412 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 329:
-#line 2419 "compilers/imcc/imcc.y"
+  case 330:
+#line 2420 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
          }
     break;
 
-  case 330:
-#line 2425 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
-    break;
-
   case 331:
 #line 2426 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 332:
 #line 2427 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 333:
 #line 2428 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 334:
 #line 2429 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 335:
-#line 2433 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2430 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 336:
 #line 2434 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 337:
 #line 2435 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 338:
 #line 2436 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
+    break;
+
+  case 339:
+#line 2437 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 5193 "compilers/imcc/imcparser.c"
+#line 5198 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5414,7 +5419,7 @@
 }
 
 
-#line 2442 "compilers/imcc/imcc.y"
+#line 2443 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: trunk/t/op/cc_params.t
==============================================================================
--- trunk/t/op/cc_params.t	Fri Oct 23 01:00:40 2009	(r42030)
+++ trunk/t/op/cc_params.t	Fri Oct 23 01:03:24 2009	(r42031)
@@ -1,20 +1,10 @@
-#!perl
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test 'no_plan';
-
 =head1 NAME
 
 t/op/cc_params.t - Parrot Calling Conventions parameter matching tests
 
 =head1 SYNOPSIS
 
-    % prove t/op/cc_params.t
+% prove t/op/cc_params.t
 
 =head1 DESCRIPTION
 
@@ -22,200 +12,44 @@
 
 =cut
 
-my $t_testbody = <<'TESTBODY';
-.sub 'test' :main
-    .include 'errors.pasm'
-    errorson .PARROT_ERRORS_PARAM_COUNT_FLAG
-    errorson .PARROT_ERRORS_RESULT_COUNT_FLAG
-
- at INIT_ARGS@
- at INIT_RESULTS@
+.sub test_main :main
+    .include 'test_more.pir'
+    plan(11)
+    'call_sig_with_no_args'()
+    'call_sig_with_positionals'(1, 2, 3)
+    'call_sig_with_named'(4 :named("x"), 5 :named("y"))
+.end
 
-    (@LIST_RESULTS@) = '@FUNC@'(@LIST_ARGS@)
-    print "ok\n"
+.sub call_sig_with_no_args
+    .param pmc sig :call_sig
+    $S0 = typeof sig
+    is('CallSignature', $S0)
+    $I0 = elements sig
+    is(0, $I0)
 .end
 
-.sub '@FUNC@'
- at INIT_PARAMS@
- at INIT_RETURNS@
- at CHECK_PARAMS@
-    .return(@LIST_RETURNS@)
+.sub call_sig_with_positionals
+    .param pmc sig :call_sig
+    $S0 = typeof sig
+    is('CallSignature', $S0)
+    $I0 = elements sig
+    is(3, $I0)
+    $I1 = sig[0]
+    is(1, $I1)
+    $I2 = sig[1]
+    is(2, $I2)
+    $I3 = sig[2]
+    is(3, $I3)
 .end
-TESTBODY
 
-my $t_expbody = <<'EXPBODY';
- at CHECK_RESULTS@
-EXPBODY
-
-## loop over test cases
-## expected in
-for my $c_args ( 0 .. 1 ) {
-    ## expected out
-    for my $c_results ( 0 .. 1 ) {
-        ## got in
-        for my $c_params ( 0 .. ( $c_args ? 2 : 1 ) ) {
-            ## got out
-            for my $c_returns ( 0 .. ( $c_results ? 2 : 1 ) ) {
-                my $td = TemplateData->new;
-
-                ## initialize template keys
-                for ( $t_testbody =~ m/@(\w+)@/g ) { $td->addkey($_) }
-
-                for ( $t_expbody =~ m/@(\w+)@/g ) { $td->addkey($_) }
-
-                ## initialize template data
-                $td->initialize( $c_args, $c_params, $c_returns, $c_results );
-
-                ## generate tests and results
-                my $testbody = $td->generate($t_testbody);
-                my $expbody  = $td->generate($t_expbody);
-                my $testhead = create_test_header( $c_args, $c_results, $c_params, $c_returns, );
-
-                ## execute tests
-                if ( $expbody eq "ok\n" ) {
-                    pir_output_like( $testbody, "/$expbody/", $testhead );
-                }
-                else {
-                    pir_error_output_like( $testbody, "/$expbody/", $testhead );
-                }
-            }
-        }
-    }
-}
-
-exit;
-
-sub create_test_header {
-    return 'param mismatch: args:'
-        . shift()
-        . ' results:'
-        . shift()
-        . ' params:'
-        . shift()
-        . ' returns:'
-        . shift();
-
-}
-
-package TemplateData;
-
-sub new { bless {} => shift; }
-sub addkey { my $self = shift; $self->{$_} = '' for @_ }
-
-sub create_args {
-    my $self = shift;
-    my $num  = shift;
-
-    $self->{C_ARGS} = $num;
-
-    if ( $self->{C_ARGS} ) {
-        $self->{_ARGS} = [ map { 'arg' . $_ } 1 .. $num ];
-        $self->{LIST_ARGS} = join ', ' => @{ $self->{_ARGS} };
-        $self->{INIT_ARGS} = '    .local int ' . $self->{LIST_ARGS} . $/;
-        $self->{INIT_ARGS} .= "    ${ $self->{_ARGS} }[$_] = $_$/" for 0 .. $#{ $self->{_ARGS} };
-    }
-}
-
-sub create_params {
-    my $self = shift;
-    my $num  = shift;
-
-    $self->{C_PARAMS} = $num;
-
-    if ( $self->{C_PARAMS} ) {
-        $self->{_PARAMS} = [ map { 'param' . $_ } 1 .. $num ];
-        $self->{LIST_PARAMS} = join ', ' => @{ $self->{_PARAMS} };
-        $self->{INIT_PARAMS} =
-            join( "\n" => map { '    .param int ' . ${ $self->{_PARAMS} }[$_] }
-                0 .. $#{ $self->{_PARAMS} } );
-    }
-    else {
-        $self->{INIT_PARAMS} = q{    get_params '()'};
-    }
-}
-
-sub create_returns {
-    my $self = shift;
-    my $num  = shift;
-
-    $self->{C_RETURNS} = $num;
-
-    if ( $self->{C_RETURNS} ) {
-        $self->{_RETURNS} = [ map { 'return' . $_ } 1 .. $num ];
-        $self->{LIST_RETURNS} = join ', ' => @{ $self->{_RETURNS} };
-        $self->{INIT_RETURNS} = '    .local int ' . $self->{LIST_RETURNS} . $/;
-        $self->{INIT_RETURNS} .= "    ${ $self->{_RETURNS} }[$_] = $_$/"
-            for 0 .. $#{ $self->{_RETURNS} };
-    }
-}
-
-sub create_results {
-    my $self = shift;
-    my $num  = shift;
-
-    $self->{C_RESULTS} = $num;
-
-    if ( $self->{C_RESULTS} ) {
-        $self->{_RESULTS} = [ map { 'result' . $_ } 1 .. $num ];
-        $self->{LIST_RESULTS} = join ', ' => @{ $self->{_RESULTS} };
-        $self->{INIT_RESULTS} =
-            join "\n" => ( map { '    .local int ' . $_ } @{ $self->{_RESULTS} } );
-    }
-}
-
-sub create_func {
-    my $self = shift;
-    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
-
-    $self->{FUNC} =
-        'args' . $c_args
-        . '_results'
-        . $c_results
-        . '__params'
-        . $c_params
-        . '_returns'
-        . $c_returns;
-}
-
-sub create_check_results {
-    my $self = shift;
-    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
-
-    $self->{CHECK_RESULTS} =
-        ( ( $c_args == $c_params ) and ( $c_results == $c_returns ) )
-        ? 'ok'
-        : 'too (many|few) ((positional|named) (arguments|returns)).*';
-}
-
-sub initialize {
-    my $self = shift;
-    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
-
-    $self->create_args($c_args);
-    $self->create_params($c_params);
-    $self->create_returns($c_returns);
-    $self->create_results($c_results);
-
-    $self->create_func( $c_args, $c_params, $c_returns, $c_results );
-
-    $self->create_check_results( $c_args, $c_params, $c_returns, $c_results );
-}
-
-sub generate {
-    my $self = shift;
-    my ($template) = @_;
-
-    for ( $template =~ m/@(\w+)@/g ) {
-        my $replacement = ( exists $self->{$_} and defined $self->{$_} ) ? $self->{$_} : '';
-
-        $template =~ s/@(\w+)@/$replacement/;
-    }
-    return $template;
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:
+.sub call_sig_with_named
+    .param pmc sig :call_sig
+    $S0 = typeof sig
+    is('CallSignature', $S0)
+    $I0 = elements sig
+    is(0, $I0)
+    $I1 = sig["x"]
+    is(4, $I1)
+    $I2 = sig["y"]
+    is(5, $I2)
+.end
\ No newline at end of file

Added: trunk/t/op/cc_params_old.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/t/op/cc_params_old.t	Fri Oct 23 01:03:24 2009	(r42031)
@@ -0,0 +1,221 @@
+#!perl
+# Copyright (C) 2007, Parrot Foundation.
+# $Id: cc_params.t 41972 2009-10-21 16:54:18Z allison $
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test 'no_plan';
+
+=head1 NAME
+
+t/op/cc_params.t - Parrot Calling Conventions parameter matching tests
+
+=head1 SYNOPSIS
+
+    % prove t/op/cc_params.t
+
+=head1 DESCRIPTION
+
+Tests Parrot calling conventions for parameter matching and mismatching.
+
+=cut
+
+my $t_testbody = <<'TESTBODY';
+.sub 'test' :main
+    .include 'errors.pasm'
+    errorson .PARROT_ERRORS_PARAM_COUNT_FLAG
+    errorson .PARROT_ERRORS_RESULT_COUNT_FLAG
+
+ at INIT_ARGS@
+ at INIT_RESULTS@
+
+    (@LIST_RESULTS@) = '@FUNC@'(@LIST_ARGS@)
+    print "ok\n"
+.end
+
+.sub '@FUNC@'
+ at INIT_PARAMS@
+ at INIT_RETURNS@
+ at CHECK_PARAMS@
+    .return(@LIST_RETURNS@)
+.end
+TESTBODY
+
+my $t_expbody = <<'EXPBODY';
+ at CHECK_RESULTS@
+EXPBODY
+
+## loop over test cases
+## expected in
+for my $c_args ( 0 .. 1 ) {
+    ## expected out
+    for my $c_results ( 0 .. 1 ) {
+        ## got in
+        for my $c_params ( 0 .. ( $c_args ? 2 : 1 ) ) {
+            ## got out
+            for my $c_returns ( 0 .. ( $c_results ? 2 : 1 ) ) {
+                my $td = TemplateData->new;
+
+                ## initialize template keys
+                for ( $t_testbody =~ m/@(\w+)@/g ) { $td->addkey($_) }
+
+                for ( $t_expbody =~ m/@(\w+)@/g ) { $td->addkey($_) }
+
+                ## initialize template data
+                $td->initialize( $c_args, $c_params, $c_returns, $c_results );
+
+                ## generate tests and results
+                my $testbody = $td->generate($t_testbody);
+                my $expbody  = $td->generate($t_expbody);
+                my $testhead = create_test_header( $c_args, $c_results, $c_params, $c_returns, );
+
+                ## execute tests
+                if ( $expbody eq "ok\n" ) {
+                    pir_output_like( $testbody, "/$expbody/", $testhead );
+                }
+                else {
+                    pir_error_output_like( $testbody, "/$expbody/", $testhead );
+                }
+            }
+        }
+    }
+}
+
+exit;
+
+sub create_test_header {
+    return 'param mismatch: args:'
+        . shift()
+        . ' results:'
+        . shift()
+        . ' params:'
+        . shift()
+        . ' returns:'
+        . shift();
+
+}
+
+package TemplateData;
+
+sub new { bless {} => shift; }
+sub addkey { my $self = shift; $self->{$_} = '' for @_ }
+
+sub create_args {
+    my $self = shift;
+    my $num  = shift;
+
+    $self->{C_ARGS} = $num;
+
+    if ( $self->{C_ARGS} ) {
+        $self->{_ARGS} = [ map { 'arg' . $_ } 1 .. $num ];
+        $self->{LIST_ARGS} = join ', ' => @{ $self->{_ARGS} };
+        $self->{INIT_ARGS} = '    .local int ' . $self->{LIST_ARGS} . $/;
+        $self->{INIT_ARGS} .= "    ${ $self->{_ARGS} }[$_] = $_$/" for 0 .. $#{ $self->{_ARGS} };
+    }
+}
+
+sub create_params {
+    my $self = shift;
+    my $num  = shift;
+
+    $self->{C_PARAMS} = $num;
+
+    if ( $self->{C_PARAMS} ) {
+        $self->{_PARAMS} = [ map { 'param' . $_ } 1 .. $num ];
+        $self->{LIST_PARAMS} = join ', ' => @{ $self->{_PARAMS} };
+        $self->{INIT_PARAMS} =
+            join( "\n" => map { '    .param int ' . ${ $self->{_PARAMS} }[$_] }
+                0 .. $#{ $self->{_PARAMS} } );
+    }
+    else {
+        $self->{INIT_PARAMS} = q{    get_params '()'};
+    }
+}
+
+sub create_returns {
+    my $self = shift;
+    my $num  = shift;
+
+    $self->{C_RETURNS} = $num;
+
+    if ( $self->{C_RETURNS} ) {
+        $self->{_RETURNS} = [ map { 'return' . $_ } 1 .. $num ];
+        $self->{LIST_RETURNS} = join ', ' => @{ $self->{_RETURNS} };
+        $self->{INIT_RETURNS} = '    .local int ' . $self->{LIST_RETURNS} . $/;
+        $self->{INIT_RETURNS} .= "    ${ $self->{_RETURNS} }[$_] = $_$/"
+            for 0 .. $#{ $self->{_RETURNS} };
+    }
+}
+
+sub create_results {
+    my $self = shift;
+    my $num  = shift;
+
+    $self->{C_RESULTS} = $num;
+
+    if ( $self->{C_RESULTS} ) {
+        $self->{_RESULTS} = [ map { 'result' . $_ } 1 .. $num ];
+        $self->{LIST_RESULTS} = join ', ' => @{ $self->{_RESULTS} };
+        $self->{INIT_RESULTS} =
+            join "\n" => ( map { '    .local int ' . $_ } @{ $self->{_RESULTS} } );
+    }
+}
+
+sub create_func {
+    my $self = shift;
+    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
+
+    $self->{FUNC} =
+        'args' . $c_args
+        . '_results'
+        . $c_results
+        . '__params'
+        . $c_params
+        . '_returns'
+        . $c_returns;
+}
+
+sub create_check_results {
+    my $self = shift;
+    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
+
+    $self->{CHECK_RESULTS} =
+        ( ( $c_args == $c_params ) and ( $c_results == $c_returns ) )
+        ? 'ok'
+        : 'too (many|few) ((positional|named) (arguments|returns)).*';
+}
+
+sub initialize {
+    my $self = shift;
+    my ( $c_args, $c_params, $c_returns, $c_results ) = @_;
+
+    $self->create_args($c_args);
+    $self->create_params($c_params);
+    $self->create_returns($c_returns);
+    $self->create_results($c_results);
+
+    $self->create_func( $c_args, $c_params, $c_returns, $c_results );
+
+    $self->create_check_results( $c_args, $c_params, $c_returns, $c_results );
+}
+
+sub generate {
+    my $self = shift;
+    my ($template) = @_;
+
+    for ( $template =~ m/@(\w+)@/g ) {
+        my $replacement = ( exists $self->{$_} and defined $self->{$_} ) ? $self->{$_} : '';
+
+        $template =~ s/@(\w+)@/$replacement/;
+    }
+    return $template;
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:


More information about the parrot-commits mailing list