diff --git a/DEPRECATED.pod b/DEPRECATED.pod index cc753995af..e05250c5af 100644 --- a/DEPRECATED.pod +++ b/DEPRECATED.pod @@ -104,12 +104,6 @@ will not auto-vivify nested hashes and return PMCNULL early. L -=item Method unescape on String [experimental] - -This is a helper method for testing of Parrot_str_unescape_string. - -L - =item logical_* vtables [eligiblie in 2.7] These can be replaced by C and intval ops unless you're using them for @@ -284,6 +278,12 @@ At this point, C<:init> is a no-op, and will therefore be removed. L +=item encoding:charset:"" string literals [eligible in 3.1] + +This form of string literals will be removed. + +L + =back =head1 Functions @@ -317,13 +317,6 @@ this rather than relying on in-place modification of an existing pointer. L -=item Parrot_str_unescape_string [experimental] - -This function is an experimental addition to enhance and maybe replace -Parrot_str_unescape - -L - =item Parrot_load_bytecode_file [experimental] Load a .pbc file into the interpreter. Experimental. @@ -347,6 +340,12 @@ VTABLEs, PCC, etc. L +=item Old string_* functions [eligible in 3.0] + +The old string_* functions will be removed. + +L + =back =head1 Compiler tools diff --git a/MANIFEST b/MANIFEST index e61cbd6b17..133e8fa5e4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -974,7 +974,6 @@ include/parrot/settings.h [main]include include/parrot/stat.h [main]include include/parrot/string.h [main]include include/parrot/string_funcs.h [main]include -include/parrot/string_primitives.h [main]include include/parrot/sub.h [main]include include/parrot/sysmem.h [main]include include/parrot/thr_pthread.h [main]include @@ -1444,7 +1443,6 @@ src/string/encoding/ucs2.c [] src/string/encoding/ucs4.c [] src/string/encoding/utf16.c [] src/string/encoding/utf8.c [] -src/string/primitives.c [] src/string/unicode.h [] src/sub.c [] src/thread.c [] diff --git a/compilers/imcc/imcc.y b/compilers/imcc/imcc.y index f71321946c..0b7f745948 100644 --- a/compilers/imcc/imcc.y +++ b/compilers/imcc/imcc.y @@ -1315,8 +1315,8 @@ sub: { IMCC_INFO(interp)->cur_call->pcc_sub->pragma = $5; if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) { - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = mem_sys_strdup( - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->name); + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]; } } sub_params @@ -1447,9 +1447,10 @@ subid: } | SUBID '(' any_string ')' { + SymReg *r = mk_const(interp, $3, 'S'); $$ = 0; - IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, $3, 'S'); - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3); + IMCC_INFO(interp)->cur_unit->subid = r; + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = r; mem_sys_free($3); } ; diff --git a/compilers/imcc/imcparser.c b/compilers/imcc/imcparser.c index 2ddebb2bad..047600104a 100644 --- a/compilers/imcc/imcparser.c +++ b/compilers/imcc/imcparser.c @@ -1786,33 +1786,33 @@ static const yytype_uint16 yyrline[] = 1239, 1243, 1247, 1247, 1259, 1261, 1265, 1280, 1281, 1285, 1285, 1297, 1298, 1307, 1311, 1315, 1306, 1327, 1328, 1329, 1342, 1342, 1346, 1371, 1375, 1381, 1390, 1396, 1405, 1411, - 1420, 1426, 1435, 1443, 1448, 1459, 1462, 1467, 1475, 1476, - 1477, 1478, 1479, 1490, 1501, 1504, 1506, 1511, 1510, 1541, - 1542, 1546, 1547, 1551, 1552, 1556, 1557, 1561, 1562, 1563, - 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, - 1574, 1578, 1583, 1590, 1591, 1603, 1608, 1609, 1617, 1618, - 1618, 1630, 1631, 1635, 1636, 1637, 1638, 1639, 1640, 1641, - 1646, 1646, 1649, 1657, 1657, 1663, 1664, 1669, 1677, 1678, - 1683, 1691, 1695, 1700, 1699, 1712, 1713, 1717, 1718, 1728, - 1733, 1743, 1752, 1753, 1765, 1769, 1771, 1772, 1773, 1774, - 1775, 1779, 1780, 1784, 1785, 1789, 1800, 1801, 1812, 1819, - 1828, 1837, 1838, 1839, 1839, 1852, 1869, 1882, 1882, 1889, - 1890, 1890, 1896, 1902, 1906, 1918, 1919, 1920, 1921, 1922, - 1923, 1927, 1928, 1929, 1930, 1934, 1936, 1938, 1940, 1942, - 1945, 1952, 1951, 1960, 1961, 1962, 1963, 1971, 1972, 1973, - 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, - 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2005, 2004, 2016, 2018, 2028, 2029, 2030, - 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2044, - 2055, 2056, 2057, 2058, 2064, 2078, 2084, 2090, 2096, 2095, - 2104, 2105, 2115, 2125, 2132, 2137, 2147, 2151, 2152, 2156, - 2157, 2158, 2160, 2161, 2165, 2169, 2179, 2185, 2195, 2200, - 2204, 2205, 2209, 2213, 2217, 2224, 2228, 2232, 2239, 2240, - 2244, 2245, 2246, 2247, 2248, 2249, 2253, 2254, 2258, 2259, - 2263, 2264, 2268, 2269, 2276, 2283, 2284, 2285, 2289, 2290, - 2294, 2295, 2299, 2300, 2304, 2305, 2309, 2309, 2321, 2321, - 2333, 2334, 2342, 2349, 2350, 2351, 2352, 2353, 2357, 2358, - 2362, 2363, 2364 + 1420, 1426, 1435, 1443, 1448, 1460, 1463, 1468, 1476, 1477, + 1478, 1479, 1480, 1491, 1502, 1505, 1507, 1512, 1511, 1542, + 1543, 1547, 1548, 1552, 1553, 1557, 1558, 1562, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, + 1575, 1579, 1584, 1591, 1592, 1604, 1609, 1610, 1618, 1619, + 1619, 1631, 1632, 1636, 1637, 1638, 1639, 1640, 1641, 1642, + 1647, 1647, 1650, 1658, 1658, 1664, 1665, 1670, 1678, 1679, + 1684, 1692, 1696, 1701, 1700, 1713, 1714, 1718, 1719, 1729, + 1734, 1744, 1753, 1754, 1766, 1770, 1772, 1773, 1774, 1775, + 1776, 1780, 1781, 1785, 1786, 1790, 1801, 1802, 1813, 1820, + 1829, 1838, 1839, 1840, 1840, 1853, 1870, 1883, 1883, 1890, + 1891, 1891, 1897, 1903, 1907, 1919, 1920, 1921, 1922, 1923, + 1924, 1928, 1929, 1930, 1931, 1935, 1937, 1939, 1941, 1943, + 1946, 1953, 1952, 1961, 1962, 1963, 1964, 1972, 1973, 1974, + 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, + 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + 1998, 1999, 2000, 2006, 2005, 2017, 2019, 2029, 2030, 2031, + 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2045, + 2056, 2057, 2058, 2059, 2065, 2079, 2085, 2091, 2097, 2096, + 2105, 2106, 2116, 2126, 2133, 2138, 2148, 2152, 2153, 2157, + 2158, 2159, 2161, 2162, 2166, 2170, 2180, 2186, 2196, 2201, + 2205, 2206, 2210, 2214, 2218, 2225, 2229, 2233, 2240, 2241, + 2245, 2246, 2247, 2248, 2249, 2250, 2254, 2255, 2259, 2260, + 2264, 2265, 2269, 2270, 2277, 2284, 2285, 2286, 2290, 2291, + 2295, 2296, 2300, 2301, 2305, 2306, 2310, 2310, 2322, 2322, + 2334, 2335, 2343, 2350, 2351, 2352, 2353, 2354, 2358, 2359, + 2363, 2364, 2365 }; #endif @@ -3548,8 +3548,8 @@ YYSTYPE yylval; { IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t); if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) { - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = mem_sys_strdup( - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->name); + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]; } } break; @@ -3749,9 +3749,10 @@ YYSTYPE yylval; /* Line 1455 of yacc.c */ #line 1449 "compilers/imcc/imcc.y" { + SymReg *r = mk_const(interp, (yyvsp[(3) - (4)].s), 'S'); (yyval.t) = 0; - IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S'); - IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes((yyvsp[(3) - (4)].s)); + IMCC_INFO(interp)->cur_unit->subid = r; + IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = r; mem_sys_free((yyvsp[(3) - (4)].s)); } break; @@ -3759,7 +3760,7 @@ YYSTYPE yylval; case 75: /* Line 1455 of yacc.c */ -#line 1459 "compilers/imcc/imcc.y" +#line 1460 "compilers/imcc/imcc.y" { add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL); } @@ -3768,7 +3769,7 @@ YYSTYPE yylval; case 76: /* Line 1455 of yacc.c */ -#line 1463 "compilers/imcc/imcc.y" +#line 1464 "compilers/imcc/imcc.y" { (yyval.t) = 0; add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr)); @@ -3778,7 +3779,7 @@ YYSTYPE yylval; case 77: /* Line 1455 of yacc.c */ -#line 1468 "compilers/imcc/imcc.y" +#line 1469 "compilers/imcc/imcc.y" { (yyval.t) = 0; add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr)); @@ -3788,35 +3789,35 @@ YYSTYPE yylval; case 78: /* Line 1455 of yacc.c */ -#line 1475 "compilers/imcc/imcc.y" +#line 1476 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "INTVAL", 'S'); } break; case 79: /* Line 1455 of yacc.c */ -#line 1476 "compilers/imcc/imcc.y" +#line 1477 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); } break; case 80: /* Line 1455 of yacc.c */ -#line 1477 "compilers/imcc/imcc.y" +#line 1478 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "PMC", 'S'); } break; case 81: /* Line 1455 of yacc.c */ -#line 1478 "compilers/imcc/imcc.y" +#line 1479 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "STRING", 'S'); } break; case 82: /* Line 1455 of yacc.c */ -#line 1480 "compilers/imcc/imcc.y" +#line 1481 "compilers/imcc/imcc.y" { SymReg *r; if (strcmp((yyvsp[(1) - (1)].s), "_") != 0) @@ -3832,7 +3833,7 @@ YYSTYPE yylval; case 83: /* Line 1455 of yacc.c */ -#line 1491 "compilers/imcc/imcc.y" +#line 1492 "compilers/imcc/imcc.y" { SymReg *r; if (strcmp((yyvsp[(1) - (1)].s), "_") != 0) @@ -3848,14 +3849,14 @@ YYSTYPE yylval; case 84: /* Line 1455 of yacc.c */ -#line 1501 "compilers/imcc/imcc.y" +#line 1502 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); } break; case 87: /* Line 1455 of yacc.c */ -#line 1511 "compilers/imcc/imcc.y" +#line 1512 "compilers/imcc/imcc.y" { char name[128]; SymReg *r, *r1; @@ -3882,112 +3883,112 @@ YYSTYPE yylval; case 88: /* Line 1455 of yacc.c */ -#line 1537 "compilers/imcc/imcc.y" +#line 1538 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } break; case 89: /* Line 1455 of yacc.c */ -#line 1541 "compilers/imcc/imcc.y" +#line 1542 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; } break; case 90: /* Line 1455 of yacc.c */ -#line 1542 "compilers/imcc/imcc.y" +#line 1543 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; } break; case 91: /* Line 1455 of yacc.c */ -#line 1546 "compilers/imcc/imcc.y" +#line 1547 "compilers/imcc/imcc.y" { (yyval.i) = NULL; } break; case 92: /* Line 1455 of yacc.c */ -#line 1547 "compilers/imcc/imcc.y" +#line 1548 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); } break; case 93: /* Line 1455 of yacc.c */ -#line 1551 "compilers/imcc/imcc.y" +#line 1552 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 95: /* Line 1455 of yacc.c */ -#line 1556 "compilers/imcc/imcc.y" +#line 1557 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (1)].t); } break; case 96: /* Line 1455 of yacc.c */ -#line 1557 "compilers/imcc/imcc.y" +#line 1558 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 97: /* Line 1455 of yacc.c */ -#line 1561 "compilers/imcc/imcc.y" +#line 1562 "compilers/imcc/imcc.y" { (yyval.t) = P_LOAD; } break; case 98: /* Line 1455 of yacc.c */ -#line 1562 "compilers/imcc/imcc.y" +#line 1563 "compilers/imcc/imcc.y" { (yyval.t) = P_INIT; } break; case 99: /* Line 1455 of yacc.c */ -#line 1563 "compilers/imcc/imcc.y" +#line 1564 "compilers/imcc/imcc.y" { (yyval.t) = P_MAIN; } break; case 100: /* Line 1455 of yacc.c */ -#line 1564 "compilers/imcc/imcc.y" +#line 1565 "compilers/imcc/imcc.y" { (yyval.t) = P_IMMEDIATE; } break; case 101: /* Line 1455 of yacc.c */ -#line 1565 "compilers/imcc/imcc.y" +#line 1566 "compilers/imcc/imcc.y" { (yyval.t) = P_POSTCOMP; } break; case 102: /* Line 1455 of yacc.c */ -#line 1566 "compilers/imcc/imcc.y" +#line 1567 "compilers/imcc/imcc.y" { (yyval.t) = P_ANON; } break; case 103: /* Line 1455 of yacc.c */ -#line 1567 "compilers/imcc/imcc.y" +#line 1568 "compilers/imcc/imcc.y" { (yyval.t) = P_NEED_LEX; } break; case 111: /* Line 1455 of yacc.c */ -#line 1579 "compilers/imcc/imcc.y" +#line 1580 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr)); add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr)); @@ -3997,7 +3998,7 @@ YYSTYPE yylval; case 112: /* Line 1455 of yacc.c */ -#line 1584 "compilers/imcc/imcc.y" +#line 1585 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); } @@ -4006,14 +4007,14 @@ YYSTYPE yylval; case 113: /* Line 1455 of yacc.c */ -#line 1590 "compilers/imcc/imcc.y" +#line 1591 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 114: /* Line 1455 of yacc.c */ -#line 1591 "compilers/imcc/imcc.y" +#line 1592 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call, @@ -4028,21 +4029,21 @@ YYSTYPE yylval; case 115: /* Line 1455 of yacc.c */ -#line 1603 "compilers/imcc/imcc.y" +#line 1604 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (2)].sr); } break; case 116: /* Line 1455 of yacc.c */ -#line 1608 "compilers/imcc/imcc.y" +#line 1609 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 117: /* Line 1455 of yacc.c */ -#line 1610 "compilers/imcc/imcc.y" +#line 1611 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); @@ -4052,21 +4053,21 @@ YYSTYPE yylval; case 118: /* Line 1455 of yacc.c */ -#line 1617 "compilers/imcc/imcc.y" +#line 1618 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 119: /* Line 1455 of yacc.c */ -#line 1618 "compilers/imcc/imcc.y" +#line 1619 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->is_def = 1; } break; case 120: /* Line 1455 of yacc.c */ -#line 1619 "compilers/imcc/imcc.y" +#line 1620 "compilers/imcc/imcc.y" { IdList * const l = (yyvsp[(4) - (4)].idlist); SymReg *ignored; @@ -4080,84 +4081,84 @@ YYSTYPE yylval; case 121: /* Line 1455 of yacc.c */ -#line 1630 "compilers/imcc/imcc.y" +#line 1631 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 122: /* Line 1455 of yacc.c */ -#line 1631 "compilers/imcc/imcc.y" +#line 1632 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 123: /* Line 1455 of yacc.c */ -#line 1635 "compilers/imcc/imcc.y" +#line 1636 "compilers/imcc/imcc.y" { (yyval.t) = VT_FLAT; } break; case 124: /* Line 1455 of yacc.c */ -#line 1636 "compilers/imcc/imcc.y" +#line 1637 "compilers/imcc/imcc.y" { (yyval.t) = VT_OPTIONAL; } break; case 125: /* Line 1455 of yacc.c */ -#line 1637 "compilers/imcc/imcc.y" +#line 1638 "compilers/imcc/imcc.y" { (yyval.t) = VT_OPT_FLAG; } break; case 126: /* Line 1455 of yacc.c */ -#line 1638 "compilers/imcc/imcc.y" +#line 1639 "compilers/imcc/imcc.y" { (yyval.t) = VT_NAMED; } break; case 127: /* Line 1455 of yacc.c */ -#line 1639 "compilers/imcc/imcc.y" +#line 1640 "compilers/imcc/imcc.y" { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); } break; case 128: /* Line 1455 of yacc.c */ -#line 1640 "compilers/imcc/imcc.y" +#line 1641 "compilers/imcc/imcc.y" { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); } break; case 129: /* Line 1455 of yacc.c */ -#line 1641 "compilers/imcc/imcc.y" +#line 1642 "compilers/imcc/imcc.y" { (yyval.t) = VT_CALL_SIG; } break; case 130: /* Line 1455 of yacc.c */ -#line 1646 "compilers/imcc/imcc.y" +#line 1647 "compilers/imcc/imcc.y" { begin_return_or_yield(interp, 0); } break; case 131: /* Line 1455 of yacc.c */ -#line 1648 "compilers/imcc/imcc.y" +#line 1649 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } break; case 132: /* Line 1455 of yacc.c */ -#line 1650 "compilers/imcc/imcc.y" +#line 1651 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->asm_state = AsmDefault; (yyval.i) = 0; @@ -4167,28 +4168,28 @@ YYSTYPE yylval; case 133: /* Line 1455 of yacc.c */ -#line 1657 "compilers/imcc/imcc.y" +#line 1658 "compilers/imcc/imcc.y" { begin_return_or_yield(interp, 1); } break; case 134: /* Line 1455 of yacc.c */ -#line 1659 "compilers/imcc/imcc.y" +#line 1660 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } break; case 135: /* Line 1455 of yacc.c */ -#line 1663 "compilers/imcc/imcc.y" +#line 1664 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 136: /* Line 1455 of yacc.c */ -#line 1665 "compilers/imcc/imcc.y" +#line 1666 "compilers/imcc/imcc.y" { if ((yyvsp[(1) - (2)].sr)) add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr)); @@ -4198,7 +4199,7 @@ YYSTYPE yylval; case 137: /* Line 1455 of yacc.c */ -#line 1670 "compilers/imcc/imcc.y" +#line 1671 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr)); @@ -4208,14 +4209,14 @@ YYSTYPE yylval; case 138: /* Line 1455 of yacc.c */ -#line 1677 "compilers/imcc/imcc.y" +#line 1678 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 139: /* Line 1455 of yacc.c */ -#line 1679 "compilers/imcc/imcc.y" +#line 1680 "compilers/imcc/imcc.y" { if ((yyvsp[(1) - (2)].sr)) add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr)); @@ -4225,7 +4226,7 @@ YYSTYPE yylval; case 140: /* Line 1455 of yacc.c */ -#line 1684 "compilers/imcc/imcc.y" +#line 1685 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr)); @@ -4235,21 +4236,21 @@ YYSTYPE yylval; case 141: /* Line 1455 of yacc.c */ -#line 1691 "compilers/imcc/imcc.y" +#line 1692 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 142: /* Line 1455 of yacc.c */ -#line 1695 "compilers/imcc/imcc.y" +#line 1696 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 143: /* Line 1455 of yacc.c */ -#line 1700 "compilers/imcc/imcc.y" +#line 1701 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->asm_state == AsmDefault) begin_return_or_yield(interp, (yyvsp[(1) - (2)].t)); @@ -4259,7 +4260,7 @@ YYSTYPE yylval; case 144: /* Line 1455 of yacc.c */ -#line 1705 "compilers/imcc/imcc.y" +#line 1706 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->asm_state = AsmDefault; (yyval.t) = 0; @@ -4269,28 +4270,28 @@ YYSTYPE yylval; case 145: /* Line 1455 of yacc.c */ -#line 1712 "compilers/imcc/imcc.y" +#line 1713 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 146: /* Line 1455 of yacc.c */ -#line 1713 "compilers/imcc/imcc.y" +#line 1714 "compilers/imcc/imcc.y" { (yyval.t) = 1; } break; case 147: /* Line 1455 of yacc.c */ -#line 1717 "compilers/imcc/imcc.y" +#line 1718 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 148: /* Line 1455 of yacc.c */ -#line 1719 "compilers/imcc/imcc.y" +#line 1720 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, @@ -4305,7 +4306,7 @@ YYSTYPE yylval; case 149: /* Line 1455 of yacc.c */ -#line 1729 "compilers/imcc/imcc.y" +#line 1730 "compilers/imcc/imcc.y" { SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S'); add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr)); @@ -4315,7 +4316,7 @@ YYSTYPE yylval; case 150: /* Line 1455 of yacc.c */ -#line 1734 "compilers/imcc/imcc.y" +#line 1735 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, @@ -4330,7 +4331,7 @@ YYSTYPE yylval; case 151: /* Line 1455 of yacc.c */ -#line 1744 "compilers/imcc/imcc.y" +#line 1745 "compilers/imcc/imcc.y" { SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S'); add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr)); @@ -4340,63 +4341,63 @@ YYSTYPE yylval; case 154: /* Line 1455 of yacc.c */ -#line 1765 "compilers/imcc/imcc.y" +#line 1766 "compilers/imcc/imcc.y" { clear_state(interp); } break; case 155: /* Line 1455 of yacc.c */ -#line 1770 "compilers/imcc/imcc.y" +#line 1771 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (2)].i); } break; case 156: /* Line 1455 of yacc.c */ -#line 1771 "compilers/imcc/imcc.y" +#line 1772 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 157: /* Line 1455 of yacc.c */ -#line 1772 "compilers/imcc/imcc.y" +#line 1773 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 158: /* Line 1455 of yacc.c */ -#line 1773 "compilers/imcc/imcc.y" +#line 1774 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 159: /* Line 1455 of yacc.c */ -#line 1774 "compilers/imcc/imcc.y" +#line 1775 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 160: /* Line 1455 of yacc.c */ -#line 1775 "compilers/imcc/imcc.y" +#line 1776 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 161: /* Line 1455 of yacc.c */ -#line 1779 "compilers/imcc/imcc.y" +#line 1780 "compilers/imcc/imcc.y" { (yyval.i) = NULL; } break; case 165: /* Line 1455 of yacc.c */ -#line 1790 "compilers/imcc/imcc.y" +#line 1791 "compilers/imcc/imcc.y" { Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s))); mem_sys_free((yyvsp[(1) - (1)].s)); @@ -4407,14 +4408,14 @@ YYSTYPE yylval; case 166: /* Line 1455 of yacc.c */ -#line 1800 "compilers/imcc/imcc.y" +#line 1801 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (3)].i); } break; case 167: /* Line 1455 of yacc.c */ -#line 1802 "compilers/imcc/imcc.y" +#line 1803 "compilers/imcc/imcc.y" { if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) { IMCC_warning(interp, "Too many errors. Correct some first.\n"); @@ -4427,7 +4428,7 @@ YYSTYPE yylval; case 168: /* Line 1455 of yacc.c */ -#line 1813 "compilers/imcc/imcc.y" +#line 1814 "compilers/imcc/imcc.y" { IdList* const l = (yyvsp[(1) - (1)].idlist); l->next = NULL; @@ -4438,7 +4439,7 @@ YYSTYPE yylval; case 169: /* Line 1455 of yacc.c */ -#line 1820 "compilers/imcc/imcc.y" +#line 1821 "compilers/imcc/imcc.y" { IdList* const l = (yyvsp[(3) - (3)].idlist); l->next = (yyvsp[(1) - (3)].idlist); @@ -4449,7 +4450,7 @@ YYSTYPE yylval; case 170: /* Line 1455 of yacc.c */ -#line 1829 "compilers/imcc/imcc.y" +#line 1830 "compilers/imcc/imcc.y" { IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList); l->id = (yyvsp[(1) - (1)].s); @@ -4460,14 +4461,14 @@ YYSTYPE yylval; case 173: /* Line 1455 of yacc.c */ -#line 1839 "compilers/imcc/imcc.y" +#line 1840 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->is_def = 1; } break; case 174: /* Line 1455 of yacc.c */ -#line 1840 "compilers/imcc/imcc.y" +#line 1841 "compilers/imcc/imcc.y" { IdList *l = (yyvsp[(4) - (4)].idlist); while (l) { @@ -4485,7 +4486,7 @@ YYSTYPE yylval; case 175: /* Line 1455 of yacc.c */ -#line 1853 "compilers/imcc/imcc.y" +#line 1854 "compilers/imcc/imcc.y" { if ((yyvsp[(4) - (4)].sr)->set != 'P') { mem_sys_free((yyvsp[(2) - (4)].s)); @@ -4507,7 +4508,7 @@ YYSTYPE yylval; case 176: /* Line 1455 of yacc.c */ -#line 1870 "compilers/imcc/imcc.y" +#line 1871 "compilers/imcc/imcc.y" { if ((yyvsp[(4) - (4)].sr)->set != 'P') { mem_sys_free((yyvsp[(2) - (4)].s)); @@ -4525,14 +4526,14 @@ YYSTYPE yylval; case 177: /* Line 1455 of yacc.c */ -#line 1882 "compilers/imcc/imcc.y" +#line 1883 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->is_def = 1; } break; case 178: /* Line 1455 of yacc.c */ -#line 1883 "compilers/imcc/imcc.y" +#line 1884 "compilers/imcc/imcc.y" { mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0); IMCC_INFO(interp)->is_def = 0; @@ -4543,14 +4544,14 @@ YYSTYPE yylval; case 180: /* Line 1455 of yacc.c */ -#line 1890 "compilers/imcc/imcc.y" +#line 1891 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->is_def = 1; } break; case 181: /* Line 1455 of yacc.c */ -#line 1891 "compilers/imcc/imcc.y" +#line 1892 "compilers/imcc/imcc.y" { mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1); IMCC_INFO(interp)->is_def = 0; @@ -4561,7 +4562,7 @@ YYSTYPE yylval; case 182: /* Line 1455 of yacc.c */ -#line 1897 "compilers/imcc/imcc.y" +#line 1898 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->tailcall = 1; @@ -4572,7 +4573,7 @@ YYSTYPE yylval; case 183: /* Line 1455 of yacc.c */ -#line 1903 "compilers/imcc/imcc.y" +#line 1904 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); } @@ -4581,7 +4582,7 @@ YYSTYPE yylval; case 184: /* Line 1455 of yacc.c */ -#line 1907 "compilers/imcc/imcc.y" +#line 1908 "compilers/imcc/imcc.y" { (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit, @@ -4598,98 +4599,98 @@ YYSTYPE yylval; case 185: /* Line 1455 of yacc.c */ -#line 1918 "compilers/imcc/imcc.y" +#line 1919 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); } break; case 186: /* Line 1455 of yacc.c */ -#line 1919 "compilers/imcc/imcc.y" +#line 1920 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } break; case 187: /* Line 1455 of yacc.c */ -#line 1920 "compilers/imcc/imcc.y" +#line 1921 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 190: /* Line 1455 of yacc.c */ -#line 1923 "compilers/imcc/imcc.y" +#line 1924 "compilers/imcc/imcc.y" { (yyval.i) = 0;} break; case 191: /* Line 1455 of yacc.c */ -#line 1927 "compilers/imcc/imcc.y" +#line 1928 "compilers/imcc/imcc.y" { (yyval.t) = 'I'; } break; case 192: /* Line 1455 of yacc.c */ -#line 1928 "compilers/imcc/imcc.y" +#line 1929 "compilers/imcc/imcc.y" { (yyval.t) = 'N'; } break; case 193: /* Line 1455 of yacc.c */ -#line 1929 "compilers/imcc/imcc.y" +#line 1930 "compilers/imcc/imcc.y" { (yyval.t) = 'S'; } break; case 194: /* Line 1455 of yacc.c */ -#line 1930 "compilers/imcc/imcc.y" +#line 1931 "compilers/imcc/imcc.y" { (yyval.t) = 'P'; } break; case 195: /* Line 1455 of yacc.c */ -#line 1935 "compilers/imcc/imcc.y" +#line 1936 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); } break; case 196: /* Line 1455 of yacc.c */ -#line 1937 "compilers/imcc/imcc.y" +#line 1938 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 197: /* Line 1455 of yacc.c */ -#line 1939 "compilers/imcc/imcc.y" +#line 1940 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); } break; case 198: /* Line 1455 of yacc.c */ -#line 1941 "compilers/imcc/imcc.y" +#line 1942 "compilers/imcc/imcc.y" { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); } break; case 199: /* Line 1455 of yacc.c */ -#line 1943 "compilers/imcc/imcc.y" +#line 1944 "compilers/imcc/imcc.y" { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); } break; case 200: /* Line 1455 of yacc.c */ -#line 1946 "compilers/imcc/imcc.y" +#line 1947 "compilers/imcc/imcc.y" { add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr)); IMCC_INFO(interp)->cur_call = NULL; @@ -4700,7 +4701,7 @@ YYSTYPE yylval; case 201: /* Line 1455 of yacc.c */ -#line 1952 "compilers/imcc/imcc.y" +#line 1953 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); } @@ -4709,7 +4710,7 @@ YYSTYPE yylval; case 202: /* Line 1455 of yacc.c */ -#line 1956 "compilers/imcc/imcc.y" +#line 1957 "compilers/imcc/imcc.y" { IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr)); IMCC_INFO(interp)->cur_call = NULL; @@ -4719,7 +4720,7 @@ YYSTYPE yylval; case 206: /* Line 1455 of yacc.c */ -#line 1964 "compilers/imcc/imcc.y" +#line 1965 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr)); } @@ -4728,189 +4729,189 @@ YYSTYPE yylval; case 207: /* Line 1455 of yacc.c */ -#line 1971 "compilers/imcc/imcc.y" +#line 1972 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"not"; } break; case 208: /* Line 1455 of yacc.c */ -#line 1972 "compilers/imcc/imcc.y" +#line 1973 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bnot"; } break; case 209: /* Line 1455 of yacc.c */ -#line 1973 "compilers/imcc/imcc.y" +#line 1974 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"neg"; } break; case 210: /* Line 1455 of yacc.c */ -#line 1977 "compilers/imcc/imcc.y" +#line 1978 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"sub"; } break; case 211: /* Line 1455 of yacc.c */ -#line 1978 "compilers/imcc/imcc.y" +#line 1979 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"add"; } break; case 212: /* Line 1455 of yacc.c */ -#line 1979 "compilers/imcc/imcc.y" +#line 1980 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mul"; } break; case 213: /* Line 1455 of yacc.c */ -#line 1980 "compilers/imcc/imcc.y" +#line 1981 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"div"; } break; case 214: /* Line 1455 of yacc.c */ -#line 1981 "compilers/imcc/imcc.y" +#line 1982 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mod"; } break; case 215: /* Line 1455 of yacc.c */ -#line 1982 "compilers/imcc/imcc.y" +#line 1983 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"fdiv"; } break; case 216: /* Line 1455 of yacc.c */ -#line 1983 "compilers/imcc/imcc.y" +#line 1984 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"pow"; } break; case 217: /* Line 1455 of yacc.c */ -#line 1984 "compilers/imcc/imcc.y" +#line 1985 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"concat"; } break; case 218: /* Line 1455 of yacc.c */ -#line 1985 "compilers/imcc/imcc.y" +#line 1986 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"iseq"; } break; case 219: /* Line 1455 of yacc.c */ -#line 1986 "compilers/imcc/imcc.y" +#line 1987 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isne"; } break; case 220: /* Line 1455 of yacc.c */ -#line 1987 "compilers/imcc/imcc.y" +#line 1988 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isgt"; } break; case 221: /* Line 1455 of yacc.c */ -#line 1988 "compilers/imcc/imcc.y" +#line 1989 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isge"; } break; case 222: /* Line 1455 of yacc.c */ -#line 1989 "compilers/imcc/imcc.y" +#line 1990 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"islt"; } break; case 223: /* Line 1455 of yacc.c */ -#line 1990 "compilers/imcc/imcc.y" +#line 1991 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isle"; } break; case 224: /* Line 1455 of yacc.c */ -#line 1991 "compilers/imcc/imcc.y" +#line 1992 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shl"; } break; case 225: /* Line 1455 of yacc.c */ -#line 1992 "compilers/imcc/imcc.y" +#line 1993 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shr"; } break; case 226: /* Line 1455 of yacc.c */ -#line 1993 "compilers/imcc/imcc.y" +#line 1994 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lsr"; } break; case 227: /* Line 1455 of yacc.c */ -#line 1994 "compilers/imcc/imcc.y" +#line 1995 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"and"; } break; case 228: /* Line 1455 of yacc.c */ -#line 1995 "compilers/imcc/imcc.y" +#line 1996 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"or"; } break; case 229: /* Line 1455 of yacc.c */ -#line 1996 "compilers/imcc/imcc.y" +#line 1997 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"xor"; } break; case 230: /* Line 1455 of yacc.c */ -#line 1997 "compilers/imcc/imcc.y" +#line 1998 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"band"; } break; case 231: /* Line 1455 of yacc.c */ -#line 1998 "compilers/imcc/imcc.y" +#line 1999 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bor"; } break; case 232: /* Line 1455 of yacc.c */ -#line 1999 "compilers/imcc/imcc.y" +#line 2000 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bxor"; } break; case 233: /* Line 1455 of yacc.c */ -#line 2005 "compilers/imcc/imcc.y" +#line 2006 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); (yyval.i)->type &= ~ITCALL; @@ -4921,21 +4922,21 @@ YYSTYPE yylval; case 234: /* Line 1455 of yacc.c */ -#line 2010 "compilers/imcc/imcc.y" +#line 2011 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 235: /* Line 1455 of yacc.c */ -#line 2017 "compilers/imcc/imcc.y" +#line 2018 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); } break; case 236: /* Line 1455 of yacc.c */ -#line 2019 "compilers/imcc/imcc.y" +#line 2020 "compilers/imcc/imcc.y" { if ((yyvsp[(1) - (3)].sr)->set == 'P') (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "concat", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); @@ -4947,91 +4948,91 @@ YYSTYPE yylval; case 237: /* Line 1455 of yacc.c */ -#line 2028 "compilers/imcc/imcc.y" +#line 2029 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"add"; } break; case 238: /* Line 1455 of yacc.c */ -#line 2029 "compilers/imcc/imcc.y" +#line 2030 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"sub"; } break; case 239: /* Line 1455 of yacc.c */ -#line 2030 "compilers/imcc/imcc.y" +#line 2031 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mul"; } break; case 240: /* Line 1455 of yacc.c */ -#line 2031 "compilers/imcc/imcc.y" +#line 2032 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"div"; } break; case 241: /* Line 1455 of yacc.c */ -#line 2032 "compilers/imcc/imcc.y" +#line 2033 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mod"; } break; case 242: /* Line 1455 of yacc.c */ -#line 2033 "compilers/imcc/imcc.y" +#line 2034 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"fdiv"; } break; case 243: /* Line 1455 of yacc.c */ -#line 2034 "compilers/imcc/imcc.y" +#line 2035 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"band"; } break; case 244: /* Line 1455 of yacc.c */ -#line 2035 "compilers/imcc/imcc.y" +#line 2036 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bor"; } break; case 245: /* Line 1455 of yacc.c */ -#line 2036 "compilers/imcc/imcc.y" +#line 2037 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bxor"; } break; case 246: /* Line 1455 of yacc.c */ -#line 2037 "compilers/imcc/imcc.y" +#line 2038 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shr"; } break; case 247: /* Line 1455 of yacc.c */ -#line 2038 "compilers/imcc/imcc.y" +#line 2039 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shl"; } break; case 248: /* Line 1455 of yacc.c */ -#line 2039 "compilers/imcc/imcc.y" +#line 2040 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lsr"; } break; case 249: /* Line 1455 of yacc.c */ -#line 2045 "compilers/imcc/imcc.y" +#line 2046 "compilers/imcc/imcc.y" { (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s), IMCC_INFO(interp) -> regs, @@ -5044,28 +5045,28 @@ YYSTYPE yylval; case 250: /* Line 1455 of yacc.c */ -#line 2055 "compilers/imcc/imcc.y" +#line 2056 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 251: /* Line 1455 of yacc.c */ -#line 2056 "compilers/imcc/imcc.y" +#line 2057 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 252: /* Line 1455 of yacc.c */ -#line 2057 "compilers/imcc/imcc.y" +#line 2058 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 253: /* Line 1455 of yacc.c */ -#line 2059 "compilers/imcc/imcc.y" +#line 2060 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); if ((yyvsp[(1) - (1)].sr)->set != 'P') @@ -5076,7 +5077,7 @@ YYSTYPE yylval; case 254: /* Line 1455 of yacc.c */ -#line 2065 "compilers/imcc/imcc.y" +#line 2066 "compilers/imcc/imcc.y" { /* disallow bareword method names; SREG name constants are fine */ const char * const name = (yyvsp[(3) - (3)].sr)->name; @@ -5095,7 +5096,7 @@ YYSTYPE yylval; case 255: /* Line 1455 of yacc.c */ -#line 2079 "compilers/imcc/imcc.y" +#line 2080 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'U'); @@ -5106,7 +5107,7 @@ YYSTYPE yylval; case 256: /* Line 1455 of yacc.c */ -#line 2085 "compilers/imcc/imcc.y" +#line 2086 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'S'); @@ -5117,14 +5118,14 @@ YYSTYPE yylval; case 257: /* Line 1455 of yacc.c */ -#line 2090 "compilers/imcc/imcc.y" +#line 2091 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); } break; case 258: /* Line 1455 of yacc.c */ -#line 2096 "compilers/imcc/imcc.y" +#line 2097 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr)); @@ -5134,21 +5135,21 @@ YYSTYPE yylval; case 259: /* Line 1455 of yacc.c */ -#line 2100 "compilers/imcc/imcc.y" +#line 2101 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (5)].i); } break; case 260: /* Line 1455 of yacc.c */ -#line 2104 "compilers/imcc/imcc.y" +#line 2105 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 261: /* Line 1455 of yacc.c */ -#line 2106 "compilers/imcc/imcc.y" +#line 2107 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -5163,7 +5164,7 @@ YYSTYPE yylval; case 262: /* Line 1455 of yacc.c */ -#line 2116 "compilers/imcc/imcc.y" +#line 2117 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -5178,7 +5179,7 @@ YYSTYPE yylval; case 263: /* Line 1455 of yacc.c */ -#line 2126 "compilers/imcc/imcc.y" +#line 2127 "compilers/imcc/imcc.y" { (yyval.sr) = 0; add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, @@ -5190,7 +5191,7 @@ YYSTYPE yylval; case 264: /* Line 1455 of yacc.c */ -#line 2133 "compilers/imcc/imcc.y" +#line 2134 "compilers/imcc/imcc.y" { (yyval.sr) = 0; add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); @@ -5200,7 +5201,7 @@ YYSTYPE yylval; case 265: /* Line 1455 of yacc.c */ -#line 2138 "compilers/imcc/imcc.y" +#line 2139 "compilers/imcc/imcc.y" { (yyval.sr) = 0; add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, @@ -5212,70 +5213,70 @@ YYSTYPE yylval; case 266: /* Line 1455 of yacc.c */ -#line 2147 "compilers/imcc/imcc.y" +#line 2148 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } break; case 267: /* Line 1455 of yacc.c */ -#line 2151 "compilers/imcc/imcc.y" +#line 2152 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 268: /* Line 1455 of yacc.c */ -#line 2152 "compilers/imcc/imcc.y" +#line 2153 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 269: /* Line 1455 of yacc.c */ -#line 2156 "compilers/imcc/imcc.y" +#line 2157 "compilers/imcc/imcc.y" { (yyval.t) = VT_FLAT; } break; case 270: /* Line 1455 of yacc.c */ -#line 2157 "compilers/imcc/imcc.y" +#line 2158 "compilers/imcc/imcc.y" { (yyval.t) = VT_NAMED; } break; case 271: /* Line 1455 of yacc.c */ -#line 2158 "compilers/imcc/imcc.y" +#line 2159 "compilers/imcc/imcc.y" { (yyval.t) = VT_CALL_SIG; } break; case 272: /* Line 1455 of yacc.c */ -#line 2160 "compilers/imcc/imcc.y" +#line 2161 "compilers/imcc/imcc.y" { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; } break; case 273: /* Line 1455 of yacc.c */ -#line 2161 "compilers/imcc/imcc.y" +#line 2162 "compilers/imcc/imcc.y" { adv_named_set(interp, (yyvsp[(3) - (4)].s)); mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; } break; case 274: /* Line 1455 of yacc.c */ -#line 2165 "compilers/imcc/imcc.y" +#line 2166 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } break; case 275: /* Line 1455 of yacc.c */ -#line 2170 "compilers/imcc/imcc.y" +#line 2171 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -5290,7 +5291,7 @@ YYSTYPE yylval; case 276: /* Line 1455 of yacc.c */ -#line 2180 "compilers/imcc/imcc.y" +#line 2181 "compilers/imcc/imcc.y" { add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr)); @@ -5301,7 +5302,7 @@ YYSTYPE yylval; case 277: /* Line 1455 of yacc.c */ -#line 2186 "compilers/imcc/imcc.y" +#line 2187 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -5316,7 +5317,7 @@ YYSTYPE yylval; case 278: /* Line 1455 of yacc.c */ -#line 2196 "compilers/imcc/imcc.y" +#line 2197 "compilers/imcc/imcc.y" { add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr)); mem_sys_free((yyvsp[(1) - (3)].s)); @@ -5326,28 +5327,28 @@ YYSTYPE yylval; case 279: /* Line 1455 of yacc.c */ -#line 2200 "compilers/imcc/imcc.y" +#line 2201 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 280: /* Line 1455 of yacc.c */ -#line 2204 "compilers/imcc/imcc.y" +#line 2205 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 281: /* Line 1455 of yacc.c */ -#line 2205 "compilers/imcc/imcc.y" +#line 2206 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 282: /* Line 1455 of yacc.c */ -#line 2210 "compilers/imcc/imcc.y" +#line 2211 "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)); } @@ -5356,7 +5357,7 @@ YYSTYPE yylval; case 283: /* Line 1455 of yacc.c */ -#line 2214 "compilers/imcc/imcc.y" +#line 2215 "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)); } @@ -5365,7 +5366,7 @@ YYSTYPE yylval; case 284: /* Line 1455 of yacc.c */ -#line 2218 "compilers/imcc/imcc.y" +#line 2219 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); } @@ -5374,7 +5375,7 @@ YYSTYPE yylval; case 285: /* Line 1455 of yacc.c */ -#line 2225 "compilers/imcc/imcc.y" +#line 2226 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); } @@ -5383,7 +5384,7 @@ YYSTYPE yylval; case 286: /* Line 1455 of yacc.c */ -#line 2229 "compilers/imcc/imcc.y" +#line 2230 "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)); } @@ -5392,7 +5393,7 @@ YYSTYPE yylval; case 287: /* Line 1455 of yacc.c */ -#line 2233 "compilers/imcc/imcc.y" +#line 2234 "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)); } @@ -5401,91 +5402,91 @@ YYSTYPE yylval; case 288: /* Line 1455 of yacc.c */ -#line 2239 "compilers/imcc/imcc.y" +#line 2240 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 289: /* Line 1455 of yacc.c */ -#line 2240 "compilers/imcc/imcc.y" +#line 2241 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 290: /* Line 1455 of yacc.c */ -#line 2244 "compilers/imcc/imcc.y" +#line 2245 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"eq"; } break; case 291: /* Line 1455 of yacc.c */ -#line 2245 "compilers/imcc/imcc.y" +#line 2246 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"ne"; } break; case 292: /* Line 1455 of yacc.c */ -#line 2246 "compilers/imcc/imcc.y" +#line 2247 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"gt"; } break; case 293: /* Line 1455 of yacc.c */ -#line 2247 "compilers/imcc/imcc.y" +#line 2248 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"ge"; } break; case 294: /* Line 1455 of yacc.c */ -#line 2248 "compilers/imcc/imcc.y" +#line 2249 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lt"; } break; case 295: /* Line 1455 of yacc.c */ -#line 2249 "compilers/imcc/imcc.y" +#line 2250 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"le"; } break; case 298: /* Line 1455 of yacc.c */ -#line 2258 "compilers/imcc/imcc.y" +#line 2259 "compilers/imcc/imcc.y" { (yyval.sr) = NULL; } break; case 299: /* Line 1455 of yacc.c */ -#line 2259 "compilers/imcc/imcc.y" +#line 2260 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); } break; case 300: /* Line 1455 of yacc.c */ -#line 2263 "compilers/imcc/imcc.y" +#line 2264 "compilers/imcc/imcc.y" { (yyval.sr) = IMCC_INFO(interp)->regs[0]; } break; case 302: /* Line 1455 of yacc.c */ -#line 2268 "compilers/imcc/imcc.y" +#line 2269 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); } break; case 303: /* Line 1455 of yacc.c */ -#line 2270 "compilers/imcc/imcc.y" +#line 2271 "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); @@ -5497,7 +5498,7 @@ YYSTYPE yylval; case 304: /* Line 1455 of yacc.c */ -#line 2277 "compilers/imcc/imcc.y" +#line 2278 "compilers/imcc/imcc.y" { IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr); (yyval.sr) = (yyvsp[(2) - (3)].sr); @@ -5507,49 +5508,49 @@ YYSTYPE yylval; case 306: /* Line 1455 of yacc.c */ -#line 2284 "compilers/imcc/imcc.y" +#line 2285 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 307: /* Line 1455 of yacc.c */ -#line 2285 "compilers/imcc/imcc.y" +#line 2286 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 308: /* Line 1455 of yacc.c */ -#line 2289 "compilers/imcc/imcc.y" +#line 2290 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 309: /* Line 1455 of yacc.c */ -#line 2290 "compilers/imcc/imcc.y" +#line 2291 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 310: /* Line 1455 of yacc.c */ -#line 2294 "compilers/imcc/imcc.y" +#line 2295 "compilers/imcc/imcc.y" { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 311: /* Line 1455 of yacc.c */ -#line 2295 "compilers/imcc/imcc.y" +#line 2296 "compilers/imcc/imcc.y" { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 316: /* Line 1455 of yacc.c */ -#line 2309 "compilers/imcc/imcc.y" +#line 2310 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->nkeys = 0; } @@ -5558,7 +5559,7 @@ YYSTYPE yylval; case 317: /* Line 1455 of yacc.c */ -#line 2313 "compilers/imcc/imcc.y" +#line 2314 "compilers/imcc/imcc.y" { (yyval.sr) = link_keys(interp, IMCC_INFO(interp)->nkeys, @@ -5569,7 +5570,7 @@ YYSTYPE yylval; case 318: /* Line 1455 of yacc.c */ -#line 2321 "compilers/imcc/imcc.y" +#line 2322 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->nkeys = 0; } @@ -5578,7 +5579,7 @@ YYSTYPE yylval; case 319: /* Line 1455 of yacc.c */ -#line 2325 "compilers/imcc/imcc.y" +#line 2326 "compilers/imcc/imcc.y" { (yyval.sr) = link_keys(interp, IMCC_INFO(interp)->nkeys, @@ -5589,14 +5590,14 @@ YYSTYPE yylval; case 320: /* Line 1455 of yacc.c */ -#line 2333 "compilers/imcc/imcc.y" +#line 2334 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); } break; case 321: /* Line 1455 of yacc.c */ -#line 2335 "compilers/imcc/imcc.y" +#line 2336 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr); (yyval.sr) = IMCC_INFO(interp)->keys[0]; @@ -5606,7 +5607,7 @@ YYSTYPE yylval; case 322: /* Line 1455 of yacc.c */ -#line 2343 "compilers/imcc/imcc.y" +#line 2344 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); } @@ -5615,77 +5616,77 @@ YYSTYPE yylval; case 323: /* Line 1455 of yacc.c */ -#line 2349 "compilers/imcc/imcc.y" +#line 2350 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); } break; case 324: /* Line 1455 of yacc.c */ -#line 2350 "compilers/imcc/imcc.y" +#line 2351 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); } break; case 325: /* Line 1455 of yacc.c */ -#line 2351 "compilers/imcc/imcc.y" +#line 2352 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); } break; case 326: /* Line 1455 of yacc.c */ -#line 2352 "compilers/imcc/imcc.y" +#line 2353 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); } break; case 327: /* Line 1455 of yacc.c */ -#line 2353 "compilers/imcc/imcc.y" +#line 2354 "compilers/imcc/imcc.y" { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 328: /* Line 1455 of yacc.c */ -#line 2357 "compilers/imcc/imcc.y" +#line 2358 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 329: /* Line 1455 of yacc.c */ -#line 2358 "compilers/imcc/imcc.y" +#line 2359 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 330: /* Line 1455 of yacc.c */ -#line 2362 "compilers/imcc/imcc.y" +#line 2363 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 331: /* Line 1455 of yacc.c */ -#line 2363 "compilers/imcc/imcc.y" +#line 2364 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 332: /* Line 1455 of yacc.c */ -#line 2364 "compilers/imcc/imcc.y" +#line 2365 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); } break; /* Line 1455 of yacc.c */ -#line 5678 "compilers/imcc/imcparser.c" +#line 5679 "compilers/imcc/imcparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5897,7 +5898,7 @@ YYSTYPE yylval; /* Line 1675 of yacc.c */ -#line 2370 "compilers/imcc/imcc.y" +#line 2371 "compilers/imcc/imcc.y" /* I need this prototype somewhere... */ diff --git a/compilers/imcc/pbc.c b/compilers/imcc/pbc.c index 5f7279f8ac..0eaccd532c 100644 --- a/compilers/imcc/pbc.c +++ b/compilers/imcc/pbc.c @@ -778,7 +778,7 @@ find_sub_by_subid(PARROT_INTERP, ARGIN(const char *lookup), const SymReg * const r = s->unit->instructions->symregs[0]; /* if subid matches - ok */ - if (r && (r->subid && (strcmp(r->subid, lookup) == 0))) + if (r && (r->subid && (strcmp(r->subid->name, lookup) == 0))) return s; *pc += s->size; @@ -916,73 +916,22 @@ IMCC_string_from_reg(PARROT_INTERP, ARGIN(const SymReg *r)) if (r->type & VT_ENCODED) { /* * the lexer parses: foo:"string" - * get first part as charset, rest as string + * get first part as encoding, rest as string */ - STRING *s; - const STR_VTABLE *s_encoding; - const STR_VTABLE *src_encoding; #define MAX_NAME 31 - char charset_name[MAX_NAME + 1]; char encoding_name[MAX_NAME + 1]; - char * p = strchr(r->name, '"'); - char * p2 = strchr(r->name, ':'); + char * p = strchr(buf, '"'); + size_t len; + PARROT_ASSERT(p && p[-1] == ':'); - if (p2 < p -1) { - /* Handle the old 'encoding:charset' format by trying - * encoding as well as charset */ - strncpy(encoding_name, buf, p2 - buf); - encoding_name[p2-buf] = '\0'; - strncpy(charset_name, p2 +1, p - p2 - 2); - charset_name[p- p2 - 2] = '\0'; - /*fprintf(stderr, "%s:%s\n", charset_name, encoding_name);*/ - s_encoding = Parrot_find_encoding(interp, encoding_name); - if (s_encoding == NULL) { - s_encoding = Parrot_find_encoding(interp, charset_name); - if (s_encoding == NULL) - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_INVALID_STRING_REPRESENTATION, - "Unknown encoding '%s:%s'", - encoding_name, charset_name); - } - } - else { - strncpy(encoding_name, buf, p - buf - 1); - encoding_name[p - buf - 1] = '\0'; - charset_name[0] = '\0'; - /*fprintf(stderr, "%s\n", encoding_name);*/ - s_encoding = Parrot_find_encoding(interp, encoding_name); - if (s_encoding == NULL) - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_INVALID_STRING_REPRESENTATION, - "Unknown encoding '%s'", encoding_name); - } - if (s_encoding->max_bytes_per_codepoint == 1) - src_encoding = s_encoding; - else - src_encoding = Parrot_utf8_encoding_ptr; - /* past delim */ - buf = p + 1; - if (strcmp(charset_name, "unicode") == 0 && strcmp(encoding_name, "utf8") == 0) { - /* Special case needed for backward compatibility with utf8 literals - * using \xHH\xHH byte sequences */ - s = Parrot_str_unescape(interp, buf, '"', "utf8:unicode"); - } - else { - p = buf; - p2 = strchr(buf, '"'); - while (p2 != NULL) { - p = p2; - p2 = strchr(p + 1, '"'); - } - { - STRING * aux = Parrot_str_new_init(interp, buf, p - buf, - src_encoding, 0); - s = Parrot_str_unescape_string(interp, aux, - s_encoding, PObj_constant_FLAG); - } - } - return s; + len = p - buf - 1; + if (len > MAX_NAME) + len = MAX_NAME; + memcpy(encoding_name, buf, len); + encoding_name[len] = '\0'; + + return Parrot_str_unescape(interp, p + 1, '"', encoding_name); } else if (*buf == '"') { buf++; diff --git a/compilers/imcc/symreg.c b/compilers/imcc/symreg.c index e131402b1a..e27fd5b3b0 100644 --- a/compilers/imcc/symreg.c +++ b/compilers/imcc/symreg.c @@ -1309,7 +1309,6 @@ free_sym(ARGMOD(SymReg *r)) } } - mem_sys_free(r->subid); mem_sys_free(r->name); mem_sys_free(r); } diff --git a/compilers/imcc/symreg.h b/compilers/imcc/symreg.h index 603f2b45f3..8350ad3f8d 100644 --- a/compilers/imcc/symreg.h +++ b/compilers/imcc/symreg.h @@ -42,7 +42,7 @@ enum USAGE { typedef struct _SymReg { char *name; - char *subid; + struct _SymReg *subid; struct _SymReg *nextkey; /* keys */ struct _SymReg *reg; /* key->register for VTREGKEYs */ struct pcc_sub_t *pcc_sub; /* PCC subroutine */ diff --git a/config/gen/makefiles/root.in b/config/gen/makefiles/root.in index eb1ecf3477..2131914d20 100644 --- a/config/gen/makefiles/root.in +++ b/config/gen/makefiles/root.in @@ -371,7 +371,6 @@ PARROT_H_HEADERS = \ $(INC_DIR)/datatypes.h \ $(INC_DIR)/encoding.h \ $(INC_DIR)/string.h \ - $(INC_DIR)/string_primitives.h \ $(INC_DIR)/hash.h \ $(INC_DIR)/pmc_freeze.h \ $(INC_DIR)/vtable.h \ @@ -506,7 +505,6 @@ INTERP_O_FILES = \ src/scheduler$(O) \ src/spf_render$(O) \ src/spf_vtable$(O) \ - src/string/primitives$(O) \ src/sub$(O) \ src/thread$(O) \ src/runcore/trace$(O) \ @@ -1454,8 +1452,6 @@ src/sub$(O) : \ src/string/api$(O) : $(PARROT_H_HEADERS) src/string/api.str \ src/string/private_cstring.h src/string/api.c -src/string/primitives$(O) : $(PARROT_H_HEADERS) src/string/primitives.c - src/longopt$(O) : \ $(PARROT_H_HEADERS) \ $(INC_DIR)/api.h \ diff --git a/include/parrot/parrot.h b/include/parrot/parrot.h index 551ae51139..329b02ab70 100644 --- a/include/parrot/parrot.h +++ b/include/parrot/parrot.h @@ -258,7 +258,6 @@ typedef struct PackFile_ByteCode PackFile_ByteCode; #include "parrot/datatypes.h" #include "parrot/encoding.h" #include "parrot/string.h" -#include "parrot/string_primitives.h" #include "parrot/hash.h" #include "parrot/pmc_freeze.h" #include "parrot/vtable.h" diff --git a/include/parrot/string_funcs.h b/include/parrot/string_funcs.h index a045a8b66d..b2daf2e9f4 100644 --- a/include/parrot/string_funcs.h +++ b/include/parrot/string_funcs.h @@ -410,34 +410,6 @@ PARROT_MALLOC STRING * Parrot_str_upcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s)) __attribute__nonnull__(1); -PARROT_EXPORT -PARROT_CANNOT_RETURN_NULL -PARROT_WARN_UNUSED_RESULT -STRING * string_chr(PARROT_INTERP, UINTVAL character) - __attribute__nonnull__(1); - -PARROT_EXPORT -PARROT_WARN_UNUSED_RESULT -PARROT_CANNOT_RETURN_NULL -STRING * string_make(PARROT_INTERP, - ARGIN_NULLOK(const char *buffer), - UINTVAL len, - ARGIN_NULLOK(const char *encoding_name), - UINTVAL flags) - __attribute__nonnull__(1); - -PARROT_EXPORT -PARROT_WARN_UNUSED_RESULT -INTVAL string_ord(PARROT_INTERP, ARGIN(const STRING *s), INTVAL idx) - __attribute__nonnull__(1) - __attribute__nonnull__(2); - -PARROT_EXPORT -PARROT_MALLOC -PARROT_CAN_RETURN_NULL -char * string_to_cstring_nullable(SHIM_INTERP, - ARGIN_NULLOK(const STRING *s)); - PARROT_WARN_UNUSED_RESULT PARROT_CANNOT_RETURN_NULL STRING* Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s)) @@ -621,14 +593,6 @@ STRING * Parrot_str_iter_substr(PARROT_INTERP, , PARROT_ASSERT_ARG(s)) #define ASSERT_ARGS_Parrot_str_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ PARROT_ASSERT_ARG(interp)) -#define ASSERT_ARGS_string_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(interp)) -#define ASSERT_ARGS_string_make __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(interp)) -#define ASSERT_ARGS_string_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(interp) \ - , PARROT_ASSERT_ARG(s)) -#define ASSERT_ARGS_string_to_cstring_nullable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) #define ASSERT_ARGS_Parrot_str_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ PARROT_ASSERT_ARG(interp) \ , PARROT_ASSERT_ARG(s)) diff --git a/include/parrot/string_primitives.h b/include/parrot/string_primitives.h deleted file mode 100644 index e2f1d2b85c..0000000000 --- a/include/parrot/string_primitives.h +++ /dev/null @@ -1,64 +0,0 @@ -/* string_funcs.h - * Copyright (C) 2001-2003, Parrot Foundation. - * Overview: - * This is the api header for the string subsystem - * Data Structure and Algorithms: - * History: - * Notes: - * References: - */ - -#ifndef PARROT_STRING_PRIMITIVES_H_GUARD -#define PARROT_STRING_PRIMITIVES_H_GUARD - -#ifdef PARROT_IN_CORE - -/* HEADERIZER BEGIN: src/string/primitives.c */ -/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */ - -PARROT_EXPORT -PARROT_CONST_FUNCTION -INTVAL Parrot_char_digit_value(SHIM_INTERP, UINTVAL character); - -PARROT_EXPORT -PARROT_MALLOC -PARROT_CANNOT_RETURN_NULL -char * str_dup_remove_quotes(ARGIN(const char *old)) - __attribute__nonnull__(1); - -PARROT_EXPORT -void string_set_data_directory(PARROT_INTERP, ARGIN(const char *dir)) - __attribute__nonnull__(1) - __attribute__nonnull__(2); - -PARROT_EXPORT -Parrot_UInt4 string_unescape_one(PARROT_INTERP, - ARGMOD(UINTVAL *offset), - ARGIN(const STRING *string)) - __attribute__nonnull__(1) - __attribute__nonnull__(2) - __attribute__nonnull__(3) - FUNC_MODIFIES(*offset); - -#define ASSERT_ARGS_Parrot_char_digit_value __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) -#define ASSERT_ARGS_str_dup_remove_quotes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(old)) -#define ASSERT_ARGS_string_set_data_directory __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(interp) \ - , PARROT_ASSERT_ARG(dir)) -#define ASSERT_ARGS_string_unescape_one __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ - PARROT_ASSERT_ARG(interp) \ - , PARROT_ASSERT_ARG(offset) \ - , PARROT_ASSERT_ARG(string)) -/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */ -/* HEADERIZER END: src/string/primitives.c */ - -#endif /* PARROT_IN_CORE */ -#endif /* PARROT_STRING_PRIMITIVES_H_GUARD */ - -/* - * Local variables: - * c-file-style: "parrot" - * End: - * vim: expandtab shiftwidth=4 cinoptions='\:2=2' : - */ diff --git a/lib/Parrot/Docs/Section/C.pm b/lib/Parrot/Docs/Section/C.pm index 94e3407a21..818617413c 100644 --- a/lib/Parrot/Docs/Section/C.pm +++ b/lib/Parrot/Docs/Section/C.pm @@ -176,11 +176,10 @@ sub new { '', $self->c_item( '', - 'sources' => [ 'string/primitives', 'string/api' ], - 'headers' => [ 'string', 'string_funcs', 'string_primitives' ] + 'sources' => [ 'string/api' ], + 'headers' => [ 'string', 'string_funcs' ] ), $self->c_item( 'String encodings', 'contents' => ['src/string/encoding'] ), - $self->c_item( 'String charset', 'contents' => ['src/string/charset'] ), $self->c_item( 'Miscellaneous, sprintf and utility functions.', 'pairs' => ['misc'], diff --git a/src/dynpmc/Defines.in b/src/dynpmc/Defines.in index 5bdb0c0622..512731bee4 100644 --- a/src/dynpmc/Defines.in +++ b/src/dynpmc/Defines.in @@ -69,7 +69,6 @@ DYNPMC_H_FILES_MIN = \ include/parrot/stat.h \ include/parrot/string.h \ include/parrot/string_funcs.h \ - include/parrot/string_primitives.h \ include/parrot/sub.h \ include/parrot/thread.h \ include/parrot/vtable.h \ diff --git a/src/string/api.c b/src/string/api.c index 68ba041417..9ead992b63 100644 --- a/src/string/api.c +++ b/src/string/api.c @@ -59,6 +59,11 @@ static const STR_VTABLE * string_rep_compatible(SHIM_INTERP, __attribute__nonnull__(2) __attribute__nonnull__(3); +PARROT_MALLOC +PARROT_CAN_RETURN_NULL +static char * string_to_cstring_nullable(SHIM_INTERP, + ARGIN_NULLOK(const STRING *s)); + PARROT_DOES_NOT_RETURN PARROT_COLD static void throw_illegal_escape(PARROT_INTERP) @@ -69,6 +74,7 @@ static void throw_illegal_escape(PARROT_INTERP) #define ASSERT_ARGS_string_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ PARROT_ASSERT_ARG(a) \ , PARROT_ASSERT_ARG(b)) +#define ASSERT_ARGS_string_to_cstring_nullable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) #define ASSERT_ARGS_throw_illegal_escape __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ PARROT_ASSERT_ARG(interp)) /* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */ @@ -627,57 +633,6 @@ Parrot_str_new_constant(PARROT_INTERP, ARGIN(const char *buffer)) } -/* - -=item C - -Creates and returns a new Parrot string using C bytes of string data read -from C. - -The value of C specifies the string's representation. -The currently recognized values are: - - 'iso-8859-1' - 'ascii' - 'binary' - 'unicode' - -The encoding is implicitly guessed; C implies the C encoding, -and the other three assume C encoding. - -If C is unspecified, the default encoding 'ascii' will be used. - -The value of C is optionally one or more C flags C-ed -together. - -=cut - -*/ - -PARROT_EXPORT -PARROT_WARN_UNUSED_RESULT -PARROT_CANNOT_RETURN_NULL -STRING * -string_make(PARROT_INTERP, ARGIN_NULLOK(const char *buffer), - UINTVAL len, ARGIN_NULLOK(const char *encoding_name), UINTVAL flags) -{ - ASSERT_ARGS(string_make) - const STR_VTABLE *encoding; - - if (encoding_name) { - encoding = Parrot_find_encoding(interp, encoding_name); - if (!encoding) - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, - "Can't make '%s' encoding strings", encoding_name); - } - else - encoding = Parrot_default_encoding_ptr; - - return Parrot_str_new_init(interp, buffer, len, encoding, flags); -} - - /* =item C - -Returns the codepoint at a given index into a string. Negative indexes are -treated as counting from the end of the string. - -=cut - -*/ - -PARROT_EXPORT -PARROT_WARN_UNUSED_RESULT -INTVAL -string_ord(PARROT_INTERP, ARGIN(const STRING *s), INTVAL idx) -{ - ASSERT_ARGS(string_ord) - - if (s == NULL) - s = STRINGNULL; - - return STRING_ord(interp, s, idx); -} - - /* =item C @@ -874,29 +804,6 @@ Parrot_str_chr(PARROT_INTERP, UINTVAL character) } -/* - -=item C - -Returns a single-character Parrot string. - -Deprecated, use Parrot_str_chr instead. - -=cut - -*/ - -PARROT_EXPORT -PARROT_CANNOT_RETURN_NULL -PARROT_WARN_UNUSED_RESULT -STRING * -string_chr(PARROT_INTERP, UINTVAL character) -{ - ASSERT_ARGS(string_chr) - return Parrot_str_chr(interp, character); -} - - /* =back @@ -2120,7 +2027,8 @@ Parrot_str_to_cstring(PARROT_INTERP, ARGIN_NULLOK(const STRING *s)) /* -=item C +=item C Returns a C string for the specified Parrot string. Use C to free the string, if it's not NULL. Failure to @@ -2131,10 +2039,9 @@ NULL will result in embarrassment for you. */ -PARROT_EXPORT PARROT_MALLOC PARROT_CAN_RETURN_NULL -char * +static char * string_to_cstring_nullable(SHIM_INTERP, ARGIN_NULLOK(const STRING *s)) { ASSERT_ARGS(string_to_cstring_nullable) @@ -2519,7 +2426,6 @@ Parrot_str_unescape_string(PARROT_INTERP, ARGIN(const STRING *src), Parrot_gc_allocate_string_storage(interp, result, reserved); result->bufused = reserved; - Parrot_warn_experimental(interp, "Parrot_str_unescape_string is experimental"); STRING_ITER_INIT(interp, &itersrc); STRING_ITER_INIT(interp, &iterdest); while (itersrc.bytepos < srclen) { @@ -2669,23 +2575,27 @@ Parrot_str_unescape(PARROT_INTERP, { ASSERT_ARGS(Parrot_str_unescape) - STRING *result; - const STR_VTABLE *encoding; + STRING *src, *result; + const STR_VTABLE *encoding, *src_encoding; /* does the encoding have a character set? */ const char *p = enc_char ? strchr(enc_char, ':') : NULL; size_t clength = strlen(cstring); - String_iter iter; - UINTVAL offs, d; - Parrot_UInt4 r; - - /* we are constructing const table strings here */ - const UINTVAL flags = PObj_constant_FLAG; if (delimiter && clength) --clength; - if (p) { + if (enc_char == NULL) { + encoding = Parrot_default_encoding_ptr; + } + else if (p == NULL) { + encoding = Parrot_find_encoding(interp, enc_char); + + if (!encoding) + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, + "Can't make '%s' encoding strings", enc_char); + } + else { #define MAX_ENCODING_NAME_ALLOWED 63 char buffer[MAX_ENCODING_NAME_ALLOWED + 1]; size_t l = p - enc_char; @@ -2698,45 +2608,27 @@ Parrot_str_unescape(PARROT_INTERP, buffer[0] = '\0'; } - result = string_make(interp, cstring, clength, buffer, flags); - encoding = Parrot_ascii_encoding_ptr; - } - else { - result = string_make(interp, cstring, clength, enc_char, flags); - encoding = result->encoding; - } - - STRING_ITER_INIT(interp, &iter); + encoding = Parrot_find_encoding(interp, buffer); - for (offs = d = 0; offs < clength; ++offs) { - r = (Parrot_UInt4)((unsigned char *)result->strstart)[offs]; - - /* There cannot be any NULs within this string. */ - PARROT_ASSERT(r != '\0'); - - if (r == '\\') { - ++offs; - r = string_unescape_one(interp, &offs, result); - --offs; - } + if (!encoding) { + encoding = Parrot_find_encoding(interp, p + 1); - if (d == offs) { - /* we did it in place - no action */ - ++d; - ++(iter.bytepos); - ++(iter.charpos); - continue; + if (!encoding) + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, + "Can't make '%s' encoding strings", enc_char); } - - PARROT_ASSERT(d < offs); - encoding->iter_set_and_advance(interp, result, &iter, r); - ++d; } - result->strlen = d; - result->bufused = iter.bytepos; + if (encoding->max_bytes_per_codepoint == 1) + src_encoding = encoding; + else + src_encoding = Parrot_utf8_encoding_ptr; - return result; + src = Parrot_str_new_init(interp, cstring, clength, src_encoding, + PObj_external_FLAG); + + return Parrot_str_unescape_string(interp, src, encoding, + PObj_constant_FLAG); } @@ -3266,8 +3158,6 @@ Parrot_str_gc_unregister(PARROT_INTERP, ARGIN(STRING *s)) =over -=item F - =item F =item F diff --git a/src/string/primitives.c b/src/string/primitives.c deleted file mode 100644 index 74e90e0585..0000000000 --- a/src/string/primitives.c +++ /dev/null @@ -1,394 +0,0 @@ -/* -Copyright (C) 2006-2009, Parrot Foundation. - -=head1 NAME - -src/string/string_primitives.c - String Primitives - -=head1 DESCRIPTION - -This file collects together all the functions that call into the ICU -API. - -=head2 Functions - -=over 4 - -=cut - -*/ - -/* HEADERIZER HFILE: include/parrot/string_primitives.h */ - -#include "parrot/parrot.h" -#if PARROT_HAS_ICU -# include -# include -# include -# include -#else -# include -#endif - -/* - -=item C - -Set the directory where ICU finds its data files (encodings, locales, -etc.). - -=cut - -*/ - -PARROT_EXPORT -void -string_set_data_directory(PARROT_INTERP, ARGIN(const char *dir)) -{ - ASSERT_ARGS(string_set_data_directory) -#if PARROT_HAS_ICU - u_setDataDirectory(dir); - - /* Since u_setDataDirectory doesn't have a result code, we'll spot - check that everything is okay by making sure that '9' had decimal - value 9. Using 57 rather than '9' so that the encoding of this - source code file isn't an issue.... (Don't want to get bitten by - EBCDIC.) */ - - if (!u_isdigit(57) || (u_charDigitValue(57) != 9)) - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ICU_ERROR, - "string_set_data_directory: ICU data files not found" - "(apparently) for directory [%s]", dir); -#else - UNUSED(dir); - - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ICU_ERROR, - "string_set_data_directory: parrot compiled without ICU support"); -#endif -} - -/* - -=item C - -Unescape a single character. We assume that we're at the start of a -sequence, right after the \. - -=cut - -*/ - -PARROT_EXPORT -Parrot_UInt4 -string_unescape_one(PARROT_INTERP, ARGMOD(UINTVAL *offset), - ARGIN(const STRING *string)) -{ - ASSERT_ARGS(string_unescape_one) - UINTVAL workchar = 0; - UINTVAL charcount = 0; - const UINTVAL len = Parrot_str_byte_length(interp, string); - const unsigned char * const buf = (unsigned char *)string->strstart; - - /* Well, not right now */ - UINTVAL codepoint = buf[*offset]; - ++*offset; - - switch (codepoint) { - case 'x': - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '9') { - workchar = codepoint - '0'; - } - else if (codepoint >= 'a' && codepoint <= 'f') { - workchar = codepoint - 'a' + 10; - } - else if (codepoint >= 'A' && codepoint <= 'F') { - workchar = codepoint - 'A' + 10; - } - else if (codepoint == '{') { - int i; - ++*offset; - workchar = 0; - for (i = 0; i < 8 && *offset < len; ++i, ++*offset) { - codepoint = buf[*offset]; - if (codepoint == '}') { - ++*offset; - return workchar; - } - workchar *= 16; - if (codepoint >= '0' && codepoint <= '9') { - workchar += codepoint - '0'; - } - else if (codepoint >= 'a' && codepoint <= 'f') { - workchar += codepoint - 'a' + 10; - } - else if (codepoint >= 'A' && codepoint <= 'F') { - workchar += codepoint - 'A' + 10; - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence inside {}"); - } - } - if (*offset == len) - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence no '}'"); - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence in"); - } - - ++*offset; - if (*offset < len) { - workchar *= 16; - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '9') { - workchar += codepoint - '0'; - } - else if (codepoint >= 'a' && codepoint <= 'f') { - workchar += codepoint - 'a' + 10; - } - else if (codepoint >= 'A' && codepoint <= 'F') { - workchar += codepoint - 'A' + 10; - } - else { - return workchar; - } - } - else { - return workchar; - } - ++*offset; - return workchar; - case 'c': - codepoint = buf[*offset]; - if (codepoint >= 'A' && codepoint <= 'Z') { - workchar = codepoint - 'A' + 1; - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence"); - } - - ++*offset; - return workchar; - case 'u': - workchar = 0; - for (charcount = 0; charcount < 4; charcount++) { - if (*offset < len) { - workchar *= 16; - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '9') { - workchar += codepoint - '0'; - } - else if (codepoint >= 'a' && codepoint <= 'f') { - workchar += codepoint - 'a' + 10; - } - else if (codepoint >= 'A' && codepoint <= 'F') { - workchar += codepoint - 'A' + 10; - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence in uxxx escape"); - } - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence in uxxx escape - too short"); - } - - ++*offset; - } - return workchar; - case 'U': - workchar = 0; - for (charcount = 0; charcount < 8; charcount++) { - if (*offset < len) { - workchar *= 16; - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '9') { - workchar += codepoint - '0'; - } - else if (codepoint >= 'a' && codepoint <= 'f') { - workchar += codepoint - 'a' + 10; - } - else if (codepoint >= 'A' && codepoint <= 'F') { - workchar += codepoint - 'A' + 10; - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence in Uxxx escape"); - } - } - else { - Parrot_ex_throw_from_c_args(interp, NULL, - EXCEPTION_UNIMPLEMENTED, - "Illegal escape sequence in uxxx escape - too short"); - } - - ++*offset; - } - return workchar; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - workchar = codepoint - '0'; - if (*offset < len) { - workchar *= 8; - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '7') { - workchar += codepoint - '0'; - } - else { - return workchar; - } - } - else { - return workchar; - } - ++*offset; - if (*offset < len) { - workchar *= 8; - codepoint = buf[*offset]; - if (codepoint >= '0' && codepoint <= '7') { - workchar += codepoint - '0'; - } - else { - return workchar; - } - } - else { - return workchar; - } - ++*offset; - return workchar; - case 'a': - return 7; /* bell */ - case 'b': - return 8; /* bs */ - case 't': - return 9; - case 'n': - return 10; - case 'v': - return 11; - case 'f': - return 12; - case 'r': - return 13; - case 'e': - return 27; - case 92: /* \ */ - return 92; - case '"': - return '"'; - default: - return codepoint; /* any not special return the char */ - } -} - -/* - -=back - -=head2 Character Property Functions - -=over 4 - -=item C - -Returns the decimal digit value of the specified character if it is a decimal -digit character. If not, then -1 is returned. - -Note that as currently written, C can -correctly return the decimal digit value of characters for which -C returns false. - -=cut - -*/ - -PARROT_EXPORT -PARROT_CONST_FUNCTION -INTVAL -Parrot_char_digit_value(SHIM_INTERP, UINTVAL character) -{ - ASSERT_ARGS(Parrot_char_digit_value) -#if PARROT_HAS_ICU - return u_charDigitValue(character); -#else - if ((character >= 0x30) && (character <= 0x39)) - return character - 0x30; - return -1; -#endif -} - -/* - -=item C - -Duplicates a C string (minus the wrapping quotes). Similar to strdup(), -except it dies if it runs out of memory. - -=cut - -*/ - -PARROT_EXPORT -PARROT_MALLOC -PARROT_CANNOT_RETURN_NULL -char * -str_dup_remove_quotes(ARGIN(const char *old)) -{ - ASSERT_ARGS(str_dup_remove_quotes) - const size_t oldlen = strlen(old) + 1; - - /* 2 for the beginning and ending quote chars */ - const size_t newlen = oldlen - 2; - char * const copy = (char *)mem_internal_allocate(newlen); - - memcpy(copy, old + 1, newlen); - copy[newlen - 1] = 0; - - return copy; -} - -/* - -=back - -=head1 SEE ALSO - -=over 4 - -=item F - -=item F - -=item F - -=back - -=cut - -*/ - - -/* - * Local variables: - * c-file-style: "parrot" - * End: - * vim: expandtab shiftwidth=4 cinoptions='\:2=2' : - */ diff --git a/t/op/stringu.t b/t/op/stringu.t index 34f2fc3fbd..0430b63599 100644 --- a/t/op/stringu.t +++ b/t/op/stringu.t @@ -186,7 +186,7 @@ pasm_error_output_like( <<'CODE', <