Index: src/oo.c =================================================================== --- src/oo.c (revision 34591) +++ src/oo.c (working copy) @@ -45,7 +45,7 @@ __attribute__nonnull__(2) __attribute__nonnull__(3); -static void fail_if_type_exists(PARROT_INTERP, ARGIN(PMC *name)) +static INTVAL fail_if_type_exists(PARROT_INTERP, ARGIN(PMC *name)) __attribute__nonnull__(1) __attribute__nonnull__(2); @@ -423,64 +423,60 @@ return Parrot_mmd_func_names[idx]; } - -/* - -=item C - -Looks for the class named C and returns it if it exists. -Otherwise it returns C. - -=cut - -*/ - -PARROT_EXPORT -PARROT_CAN_RETURN_NULL PARROT_WARN_UNUSED_RESULT -PMC * -Parrot_class_lookup(PARROT_INTERP, ARGIN(STRING *class_name)) -{ - const INTVAL type = pmc_type(interp, class_name); - PMC *pmc; +INTVAL lookup_typeid_s(PARROT_INTERP, ARGIN(STRING *name)) { + PMC *string_pmc = pmc_new(interp, enum_class_String); + VTABLE_set_string_native(interp, string_pmc, name); - if (type <= 0) - return PMCNULL; - - pmc = interp->vtables[type]->pmc_class; - PARROT_ASSERT(pmc); - return pmc; + return lookup_typeid(interp, string_pmc); } +PARROT_WARN_UNUSED_RESULT +INTVAL lookup_typeid(PARROT_INTERP, ARGIN(PMC *name)) { + PMC *ns; + /* Fast select of behavior based on type of the lookup key */ -/* + switch (name->vtable->base_type) { + case enum_class_NameSpace: + ns = name; + break; + case enum_class_String: + case enum_class_Key: + case enum_class_ResizableStringArray: + { + PMC *base_ns; + base_ns = VTABLE_get_pmc_keyed_int(interp, interp->HLL_namespace, + CONTEXT(interp)->current_HLL); + ns = Parrot_get_namespace_keyed(interp, base_ns, name); + //ns = Parrot_get_namespace_autobase(interp, name); + } + break; + default: + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR, + "Unrecognized type name PMC type %Ss", name->vtable->whoami ); + break; + } -=item C + if (!PMC_IS_NULL(ns)) { + PMC *classobj = VTABLE_get_class(interp, ns); + if (!PMC_IS_NULL(classobj)) { + return VTABLE_type(interp, classobj); + } + } -Looks for the class named C and returns it if it exists. -Otherwise it returns C. + if (name->vtable->base_type == enum_class_String) { + /* Look up a low-level class*/ + const INTVAL type = pmc_type(interp, VTABLE_get_string(interp, name)); -=cut - -*/ - -PARROT_CAN_RETURN_NULL -PARROT_WARN_UNUSED_RESULT -PMC * -Parrot_class_lookup_p(PARROT_INTERP, ARGIN(PMC *class_name)) -{ - const INTVAL type = pmc_type_p(interp, class_name); - PMC *pmc; - - if (type <= 0) - return PMCNULL; - - pmc = interp->vtables[type]->pmc_class; - PARROT_ASSERT(pmc); - return pmc; + /* Reject invalid type numbers */ + if (type > interp->n_vtable_max) + return 0; + else + return type; + } + return 0; } - /* =item C @@ -494,48 +490,61 @@ */ -static void +static INTVAL fail_if_type_exists(PARROT_INTERP, ARGIN(PMC *name)) { - INTVAL type; + PMC *ns; + /* Parrot_printf(interp, "%Ss\n", VTABLE_get_repr(interp, name)); */ + /* Fast select of behavior based on type of the lookup key */ + switch (name->vtable->base_type) { + case enum_class_NameSpace: + /* Parrot_printf(interp, "%Ss\n", VTABLE_get_string(interp, name)); */ + ns = name; + break; + case enum_class_String: + { + /* Look up a low-level class and create a proxy */ + const INTVAL type = pmc_type(interp, VTABLE_get_string(interp, name)); - PMC * const classname_hash = interp->class_hash; - PMC * const type_pmc = (PMC *)VTABLE_get_pointer_keyed(interp, - classname_hash, name); + /* Reject invalid type numbers */ + if (type > interp->n_vtable_max || type <= 0) + return 1; + else { + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, + "native type with name '%s' already exists - " + "can't register Class", data_types[type].name); + } + } + break; + case enum_class_Key: + case enum_class_ResizableStringArray: + { + PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp, + interp->HLL_namespace, + CONTEXT(interp)->current_HLL); + ns = Parrot_get_namespace_keyed(interp, hll_ns, name); - if (PMC_IS_NULL(type_pmc) - || type_pmc->vtable->base_type == enum_class_NameSpace) - type = 0; - else - type = VTABLE_get_integer(interp, type_pmc); + } + break; + default: + { + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR, + "Unrecognized class name PMC type" ); + } + break; + } - if (type > enum_type_undef) { - STRING *classname; - - if (VTABLE_isa(interp, name, CONST_STRING(interp, "ResizableStringArray"))) { - PMC * const base_ns = VTABLE_get_pmc_keyed_int(interp, - interp->HLL_namespace, - CONTEXT(interp)->current_HLL); - PMC *ns = Parrot_get_namespace_keyed(interp, - base_ns, name); - - if (!PMC_IS_NULL(ns)) - classname = VTABLE_get_string(interp, ns); - else - classname = CONST_STRING(interp, ""); + if (!PMC_IS_NULL(ns)) { + PMC *classobj = VTABLE_get_class(interp, ns); + if (!PMC_IS_NULL(classobj)) { + STRING *classname = VTABLE_get_string(interp, ns); + Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, + "Class %Ss already registered!\n", + string_escape_string(interp, classname)); } - else - classname = VTABLE_get_string(interp, name); - - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, - "Class %Ss already registered!\n", - string_escape_string(interp, classname)); } - if (type < enum_type_undef) - Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, - "native type with name '%s' already exists - " - "can't register Class", data_types[type].name); + return 0; } @@ -547,6 +556,11 @@ already exists. The global type registry will go away eventually, but this allows the new object metamodel to interact with the old one until it does. +Every type(PMCS, classes) gets a type number in the vtables table. +Essentially only CORE PMCs go in the class_hash now. +They are always registered with a String PMC as their name. +Classes are always registered with a namespace or a ResizableStringArray as their name. + =cut */ @@ -557,9 +571,8 @@ { INTVAL type; PMC *classname_hash, *item; + INTVAL name_is_string = fail_if_type_exists(interp, name); - fail_if_type_exists(interp, name); - /* Type doesn't exist, so go ahead and register it. Lock interpreter so * pt_shared_fixup() can safely do a type lookup. */ LOCK_INTERPRETER(interp); @@ -571,11 +584,13 @@ if (type >= interp->n_vtable_alloced) parrot_realloc_vtables(interp); - /* set entry in name->type hash */ - item = pmc_new(interp, enum_class_Integer); - PMC_int_val(item) = type; + if (name_is_string) { + /* set entry in name->type hash */ + item = pmc_new(interp, enum_class_Integer); + PMC_int_val(item) = type; - VTABLE_set_pmc_keyed(interp, classname_hash, name, item); + VTABLE_set_pmc_keyed(interp, classname_hash, name, item); + } UNLOCK_INTERPRETER(interp); return type; @@ -777,7 +792,7 @@ return; } - type = pmc_type(interp, _class); + type = lookup_typeid_s(interp, _class); if (type == 0) invalidate_all_caches(interp); Index: src/ops/experimental.ops =================================================================== --- src/ops/experimental.ops (revision 34591) +++ src/ops/experimental.ops (working copy) @@ -165,7 +165,7 @@ =cut inline op morph(invar PMC, in STR) { - INTVAL type = pmc_type(interp, $2); + INTVAL type = lookup_typeid_s(interp, $2); VTABLE_morph(interp, $1, type); } Index: src/multidispatch.c =================================================================== --- src/multidispatch.c (revision 34591) +++ src/multidispatch.c (working copy) @@ -826,7 +826,7 @@ else if (string_equal(interp, type_name, CONST_STRING(interp, "FLOATVAL"))==0) type = enum_type_FLOATVAL; else - type = pmc_type(interp, type_name); + type = lookup_typeid_s(interp, type_name); VTABLE_set_integer_keyed_int(interp, multi_sig, i, type); } @@ -986,13 +986,13 @@ break; } - type = pmc_type(interp, sig); + type = lookup_typeid_s(interp, sig); if (type == enum_type_undef) return PMCNULL; } else - type = pmc_type_p(interp, sig_elem); + type = lookup_typeid(interp, sig_elem); /* create destination PMC only as necessary */ if (PMC_IS_NULL(ar)) { Index: src/pmc/class.pmc =================================================================== --- src/pmc/class.pmc (revision 34591) +++ src/pmc/class.pmc (working copy) @@ -218,7 +218,7 @@ CLASS_is_anon_CLEAR(self); /* Register a type number for the class. */ - type_num = Parrot_oo_register_type(interp, name_arg); + type_num = Parrot_oo_register_type(interp, new_namespace); /* Link the type number with the class's vtable. */ new_vtable = Parrot_clone_vtable(interp, self->vtable); Index: src/pmc/string.pmc =================================================================== --- src/pmc/string.pmc (revision 34591) +++ src/pmc/string.pmc (working copy) @@ -977,7 +977,7 @@ } VTABLE STRING* get_repr() { - return key_set_to_string(INTERP, SELF); + return VTABLE_get_string(INTERP, SELF); } /* Index: src/pmc/parrotinterpreter.pmc =================================================================== --- src/pmc/parrotinterpreter.pmc (revision 34591) +++ src/pmc/parrotinterpreter.pmc (working copy) @@ -83,10 +83,7 @@ for (i = s->n_vtable_max - 1; i >= start; --i) { if (s->vtables[i] && s->vtables[i]->pmc_class && PObj_is_class_TEST(s->vtables[i]->pmc_class)) { - STRING * const class_name = - VTABLE_get_string(s, s->vtables[i]->pmc_class); - PARROT_ASSERT(VTABLE_exists_keyed_str(d, - d->class_hash, class_name)); + STRING * const class_name = VTABLE_get_string(s, s->vtables[i]->pmc_class); VTABLE_delete_keyed_str(d, d->class_hash, class_name); Index: src/pmc/fixedstringarray.pmc =================================================================== --- src/pmc/fixedstringarray.pmc (revision 34591) +++ src/pmc/fixedstringarray.pmc (working copy) @@ -475,6 +475,37 @@ /* +=item C + +Returns the Parrot string representation C. + +=cut + +*/ + + VTABLE STRING *get_repr() { + STRING *res = CONST_STRING(INTERP, "[ "); + const INTVAL n = SELF.get_integer(); + INTVAL j; + + for (j = 0; j < n; ++j) { + PMC * const val = SELF.get_pmc_keyed_int(j); + res = string_append(INTERP, res, CONST_STRING(INTERP, "\"")); + res = string_append(INTERP, res, VTABLE_get_repr(INTERP, val)); + res = string_append(INTERP, res, CONST_STRING(INTERP, "\"")); + + if (j < n - 1) + res = string_append(INTERP, res, CONST_STRING(INTERP, ", ")); + } + + res = string_append(INTERP, res, CONST_STRING(INTERP, " ]")); + return res; + } + + + +/* + =back =head2 Freeze/thaw Interface Index: include/parrot/oo.h =================================================================== --- include/parrot/oo.h (revision 34591) +++ include/parrot/oo.h (working copy) @@ -163,6 +163,16 @@ __attribute__nonnull__(1) __attribute__nonnull__(2); +PARROT_WARN_UNUSED_RESULT +INTVAL lookup_typeid_s(PARROT_INTERP, ARGIN(STRING *name)) + __attribute__nonnull__(1) + __attribute__nonnull__(2); + +PARROT_WARN_UNUSED_RESULT +INTVAL lookup_typeid(PARROT_INTERP, ARGIN(PMC *name)) + __attribute__nonnull__(1) + __attribute__nonnull__(2); + void Parrot_oo_extract_methods_from_namespace(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *ns)) Index: compilers/imcc/imcc.y =================================================================== --- compilers/imcc/imcc.y (revision 34591) +++ compilers/imcc/imcc.y (working copy) @@ -388,7 +388,7 @@ } r[1] = rhs; - rhs->pmc_type = pmc_type(interp, + rhs->pmc_type = lookup_typeid_s(interp, string_from_cstring(interp, unquoted_name, name_length)); mem_sys_free(unquoted_name); @@ -834,16 +834,12 @@ | HLL_MAP STRINGC '=' STRINGC { Parrot_Context *ctx = CONTEXT(interp); - STRING * const built_in_name = - string_unescape_cstring(interp, $2 + 1, '"', NULL); - STRING * const language_name = - string_unescape_cstring(interp, $4 + 1, '"', NULL); + STRING * const built_in_name = string_unescape_cstring(interp, $2 + 1, '"', NULL); + STRING * const language_name = string_unescape_cstring(interp, $4 + 1, '"', NULL); + int built_in_type = lookup_typeid_s(interp, built_in_name); + int language_type = lookup_typeid_s(interp, language_name); - int built_in_type = pmc_type(interp, built_in_name); - int language_type = pmc_type(interp, language_name); - - Parrot_register_HLL_type(interp, ctx->current_HLL, - built_in_type, language_type); + Parrot_register_HLL_type(interp, ctx->current_HLL, built_in_type, language_type); $$ = 0; } ; @@ -1592,7 +1588,7 @@ { /* there'd normally be a str_dup() here, but the lexer already * copied the string, so it's safe to use directly */ - if ((IMCC_INFO(interp)->cur_pmc_type = pmc_type(interp, + if ((IMCC_INFO(interp)->cur_pmc_type = lookup_typeid_s(interp, string_from_cstring(interp, $1, 0))) <= 0) { IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "Unknown PMC type '%s'\n", $1); Index: compilers/imcc/pbc.c =================================================================== --- compilers/imcc/pbc.c (revision 34591) +++ compilers/imcc/pbc.c (working copy) @@ -1222,7 +1222,7 @@ if (!PMC_IS_NULL(classobj)) sub_pmc = VTABLE_instantiate(interp, classobj, PMCNULL); else { - const INTVAL type = pmc_type(interp, classname); + const INTVAL type = lookup_typeid_s(interp, classname); if (type <= 0) Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NO_CLASS, "Class '%Ss' specified in :instanceof(...) not found", Index: compilers/imcc/imcparser.c =================================================================== --- compilers/imcc/imcparser.c (revision 34591) +++ compilers/imcc/imcparser.c (working copy) @@ -712,7 +712,7 @@ } r[1] = rhs; - rhs->pmc_type = pmc_type(interp, + rhs->pmc_type = lookup_typeid_s(interp, string_from_cstring(interp, unquoted_name, name_length)); mem_sys_free(unquoted_name); @@ -1027,7 +1027,7 @@ SymReg * sr; Instruction *i; } -/* Line 193 of yacc.c. */ +/* Line 187 of yacc.c. */ #line 1021 "compilers/imcc/imcparser.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -1468,40 +1468,40 @@ static const yytype_uint16 yyrline[] = { 0, 772, 772, 776, 777, 781, 782, 783, 789, 795, - 796, 797, 798, 802, 803, 812, 817, 825, 834, 852, - 852, 861, 861, 867, 867, 874, 875, 879, 880, 884, - 885, 886, 887, 888, 889, 890, 893, 893, 902, 901, - 913, 917, 925, 929, 933, 933, 945, 947, 951, 966, - 974, 979, 983, 987, 978, 999, 1000, 1001, 1014, 1014, - 1018, 1032, 1036, 1042, 1051, 1057, 1066, 1072, 1081, 1087, - 1096, 1104, 1109, 1120, 1123, 1128, 1136, 1137, 1138, 1139, - 1140, 1151, 1162, 1165, 1167, 1172, 1171, 1204, 1205, 1209, - 1210, 1214, 1215, 1219, 1220, 1224, 1225, 1226, 1227, 1228, - 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1241, - 1246, 1250, 1255, 1259, 1263, 1268, 1277, 1278, 1282, 1287, - 1288, 1296, 1297, 1297, 1312, 1313, 1317, 1318, 1319, 1320, - 1321, 1322, 1327, 1327, 1330, 1338, 1338, 1344, 1345, 1350, - 1358, 1359, 1364, 1372, 1376, 1381, 1380, 1393, 1394, 1398, - 1399, 1409, 1413, 1423, 1431, 1432, 1444, 1448, 1450, 1451, - 1452, 1453, 1457, 1458, 1462, 1463, 1467, 1476, 1477, 1488, - 1495, 1504, 1514, 1515, 1520, 1521, 1522, 1522, 1538, 1542, - 1542, 1549, 1550, 1550, 1556, 1562, 1563, 1575, 1576, 1577, - 1578, 1579, 1580, 1584, 1585, 1586, 1587, 1591, 1604, 1606, - 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, - 1628, 1632, 1634, 1636, 1639, 1646, 1645, 1654, 1655, 1656, - 1657, 1665, 1666, 1667, 1671, 1672, 1673, 1674, 1675, 1676, - 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, - 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1699, 1698, 1710, - 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, - 1727, 1728, 1729, 1734, 1745, 1746, 1747, 1748, 1754, 1768, - 1774, 1780, 1779, 1788, 1789, 1799, 1809, 1815, 1824, 1828, - 1829, 1833, 1834, 1837, 1841, 1845, 1855, 1860, 1870, 1875, - 1879, 1880, 1884, 1888, 1892, 1899, 1903, 1907, 1914, 1915, - 1919, 1920, 1921, 1922, 1923, 1924, 1928, 1929, 1933, 1934, - 1938, 1939, 1943, 1944, 1951, 1958, 1959, 1960, 1964, 1965, - 1969, 1970, 1974, 1975, 1979, 1980, 1984, 1984, 1997, 1997, - 2010, 2011, 2019, 2028, 2029, 2030, 2031, 2032, 2036, 2037, - 2038, 2039 + 796, 797, 798, 802, 803, 812, 817, 825, 834, 848, + 848, 857, 857, 863, 863, 870, 871, 875, 876, 880, + 881, 882, 883, 884, 885, 886, 889, 889, 898, 897, + 909, 913, 921, 925, 929, 929, 941, 943, 947, 962, + 970, 975, 979, 983, 974, 995, 996, 997, 1010, 1010, + 1014, 1028, 1032, 1038, 1047, 1053, 1062, 1068, 1077, 1083, + 1092, 1100, 1105, 1116, 1119, 1124, 1132, 1133, 1134, 1135, + 1136, 1147, 1158, 1161, 1163, 1168, 1167, 1200, 1201, 1205, + 1206, 1210, 1211, 1215, 1216, 1220, 1221, 1222, 1223, 1224, + 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1237, + 1242, 1246, 1251, 1255, 1259, 1264, 1273, 1274, 1278, 1283, + 1284, 1292, 1293, 1293, 1308, 1309, 1313, 1314, 1315, 1316, + 1317, 1318, 1323, 1323, 1326, 1334, 1334, 1340, 1341, 1346, + 1354, 1355, 1360, 1368, 1372, 1377, 1376, 1389, 1390, 1394, + 1395, 1405, 1409, 1419, 1427, 1428, 1440, 1444, 1446, 1447, + 1448, 1449, 1453, 1454, 1458, 1459, 1463, 1472, 1473, 1484, + 1491, 1500, 1510, 1511, 1516, 1517, 1518, 1518, 1534, 1538, + 1538, 1545, 1546, 1546, 1552, 1558, 1559, 1571, 1572, 1573, + 1574, 1575, 1576, 1580, 1581, 1582, 1583, 1587, 1600, 1602, + 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, + 1624, 1628, 1630, 1632, 1635, 1642, 1641, 1650, 1651, 1652, + 1653, 1661, 1662, 1663, 1667, 1668, 1669, 1670, 1671, 1672, + 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1695, 1694, 1706, + 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, + 1723, 1724, 1725, 1730, 1741, 1742, 1743, 1744, 1750, 1764, + 1770, 1776, 1775, 1784, 1785, 1795, 1805, 1811, 1820, 1824, + 1825, 1829, 1830, 1833, 1837, 1841, 1851, 1856, 1866, 1871, + 1875, 1876, 1880, 1884, 1888, 1895, 1899, 1903, 1910, 1911, + 1915, 1916, 1917, 1918, 1919, 1920, 1924, 1925, 1929, 1930, + 1934, 1935, 1939, 1940, 1947, 1954, 1955, 1956, 1960, 1961, + 1965, 1966, 1970, 1971, 1975, 1976, 1980, 1980, 1993, 1993, + 2006, 2007, 2015, 2024, 2025, 2026, 2027, 2028, 2032, 2033, + 2034, 2035 }; #endif @@ -2960,27 +2960,23 @@ #line 835 "compilers/imcc/imcc.y" { Parrot_Context *ctx = CONTEXT(interp); - STRING * const built_in_name = - string_unescape_cstring(interp, (yyvsp[(2) - (4)].s) + 1, '"', NULL); - STRING * const language_name = - string_unescape_cstring(interp, (yyvsp[(4) - (4)].s) + 1, '"', NULL); + STRING * const built_in_name = string_unescape_cstring(interp, (yyvsp[(2) - (4)].s) + 1, '"', NULL); + STRING * const language_name = string_unescape_cstring(interp, (yyvsp[(4) - (4)].s) + 1, '"', NULL); + int built_in_type = lookup_typeid_s(interp, built_in_name); + int language_type = lookup_typeid_s(interp, language_name); - int built_in_type = pmc_type(interp, built_in_name); - int language_type = pmc_type(interp, language_name); - - Parrot_register_HLL_type(interp, ctx->current_HLL, - built_in_type, language_type); + Parrot_register_HLL_type(interp, ctx->current_HLL, built_in_type, language_type); (yyval.t) = 0; } break; case 19: -#line 852 "compilers/imcc/imcc.y" +#line 848 "compilers/imcc/imcc.y" { is_def = 1; } break; case 20: -#line 853 "compilers/imcc/imcc.y" +#line 849 "compilers/imcc/imcc.y" { mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1); mem_sys_free((yyvsp[(4) - (6)].s)); @@ -2989,12 +2985,12 @@ break; case 21: -#line 861 "compilers/imcc/imcc.y" +#line 857 "compilers/imcc/imcc.y" { is_def=1; } break; case 22: -#line 862 "compilers/imcc/imcc.y" +#line 858 "compilers/imcc/imcc.y" { (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s)); is_def = 0; @@ -3002,12 +2998,12 @@ break; case 23: -#line 867 "compilers/imcc/imcc.y" +#line 863 "compilers/imcc/imcc.y" { is_def=1; } break; case 24: -#line 868 "compilers/imcc/imcc.y" +#line 864 "compilers/imcc/imcc.y" { (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s)); is_def = 0; @@ -3015,37 +3011,37 @@ break; case 29: -#line 884 "compilers/imcc/imcc.y" +#line 880 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 30: -#line 885 "compilers/imcc/imcc.y" +#line 881 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 31: -#line 886 "compilers/imcc/imcc.y" +#line 882 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 32: -#line 887 "compilers/imcc/imcc.y" +#line 883 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 33: -#line 888 "compilers/imcc/imcc.y" +#line 884 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 36: -#line 893 "compilers/imcc/imcc.y" +#line 889 "compilers/imcc/imcc.y" { clear_state(interp); } break; case 37: -#line 895 "compilers/imcc/imcc.y" +#line 891 "compilers/imcc/imcc.y" { (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs, @@ -3055,7 +3051,7 @@ break; case 38: -#line 902 "compilers/imcc/imcc.y" +#line 898 "compilers/imcc/imcc.y" { imc_close_unit(interp, IMCC_INFO(interp)->cur_unit); IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); @@ -3063,7 +3059,7 @@ break; case 39: -#line 907 "compilers/imcc/imcc.y" +#line 903 "compilers/imcc/imcc.y" { (yyval.i) = iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, @@ -3073,14 +3069,14 @@ break; case 40: -#line 914 "compilers/imcc/imcc.y" +#line 910 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); } break; case 41: -#line 918 "compilers/imcc/imcc.y" +#line 914 "compilers/imcc/imcc.y" { SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s)); set_lexical(interp, r, (yyvsp[(2) - (4)].s)); @@ -3091,17 +3087,17 @@ break; case 42: -#line 925 "compilers/imcc/imcc.y" +#line 921 "compilers/imcc/imcc.y" { (yyval.i) = 0;} break; case 44: -#line 933 "compilers/imcc/imcc.y" +#line 929 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); } break; case 45: -#line 936 "compilers/imcc/imcc.y" +#line 932 "compilers/imcc/imcc.y" { /* if (optimizer_level & OPT_PASM) imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit); @@ -3112,7 +3108,7 @@ break; case 48: -#line 952 "compilers/imcc/imcc.y" +#line 948 "compilers/imcc/imcc.y" { int re_open = 0; (yyval.i) = 0; @@ -3127,7 +3123,7 @@ break; case 49: -#line 967 "compilers/imcc/imcc.y" +#line 963 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->in_slice) IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, @@ -3138,26 +3134,26 @@ break; case 50: -#line 974 "compilers/imcc/imcc.y" +#line 970 "compilers/imcc/imcc.y" { (yyval.sr) = NULL; } break; case 51: -#line 979 "compilers/imcc/imcc.y" +#line 975 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB); } break; case 52: -#line 983 "compilers/imcc/imcc.y" +#line 979 "compilers/imcc/imcc.y" { iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr)); } break; case 53: -#line 987 "compilers/imcc/imcc.y" +#line 983 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t); if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) { @@ -3168,22 +3164,22 @@ break; case 54: -#line 995 "compilers/imcc/imcc.y" +#line 991 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } break; case 55: -#line 999 "compilers/imcc/imcc.y" +#line 995 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 56: -#line 1000 "compilers/imcc/imcc.y" +#line 996 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 57: -#line 1002 "compilers/imcc/imcc.y" +#line 998 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call, @@ -3196,17 +3192,17 @@ break; case 58: -#line 1014 "compilers/imcc/imcc.y" +#line 1010 "compilers/imcc/imcc.y" { is_def=1; } break; case 59: -#line 1014 "compilers/imcc/imcc.y" +#line 1010 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(3) - (3)].sr); is_def=0; } break; case 60: -#line 1019 "compilers/imcc/imcc.y" +#line 1015 "compilers/imcc/imcc.y" { if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG) (yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t)); @@ -3218,12 +3214,12 @@ break; case 61: -#line 1032 "compilers/imcc/imcc.y" +#line 1028 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 62: -#line 1037 "compilers/imcc/imcc.y" +#line 1033 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s)); @@ -3232,7 +3228,7 @@ break; case 63: -#line 1043 "compilers/imcc/imcc.y" +#line 1039 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S'); @@ -3241,7 +3237,7 @@ break; case 64: -#line 1052 "compilers/imcc/imcc.y" +#line 1048 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->vtable_name = NULL; @@ -3250,7 +3246,7 @@ break; case 65: -#line 1058 "compilers/imcc/imcc.y" +#line 1054 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s); @@ -3259,7 +3255,7 @@ break; case 66: -#line 1067 "compilers/imcc/imcc.y" +#line 1063 "compilers/imcc/imcc.y" { (yyval.t) = P_METHOD; IMCC_INFO(interp)->cur_unit->method_name = NULL; @@ -3268,7 +3264,7 @@ break; case 67: -#line 1073 "compilers/imcc/imcc.y" +#line 1069 "compilers/imcc/imcc.y" { (yyval.t) = P_METHOD; IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s); @@ -3277,7 +3273,7 @@ break; case 68: -#line 1082 "compilers/imcc/imcc.y" +#line 1078 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL; @@ -3286,7 +3282,7 @@ break; case 69: -#line 1088 "compilers/imcc/imcc.y" +#line 1084 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s); @@ -3295,7 +3291,7 @@ break; case 70: -#line 1097 "compilers/imcc/imcc.y" +#line 1093 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s); @@ -3303,7 +3299,7 @@ break; case 71: -#line 1105 "compilers/imcc/imcc.y" +#line 1101 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->subid = NULL; @@ -3311,7 +3307,7 @@ break; case 72: -#line 1110 "compilers/imcc/imcc.y" +#line 1106 "compilers/imcc/imcc.y" { (yyval.t) = 0; IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S'); @@ -3321,14 +3317,14 @@ break; case 73: -#line 1120 "compilers/imcc/imcc.y" +#line 1116 "compilers/imcc/imcc.y" { add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL); } break; case 74: -#line 1124 "compilers/imcc/imcc.y" +#line 1120 "compilers/imcc/imcc.y" { (yyval.t) = 0; add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr)); @@ -3336,7 +3332,7 @@ break; case 75: -#line 1129 "compilers/imcc/imcc.y" +#line 1125 "compilers/imcc/imcc.y" { (yyval.t) = 0; add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr)); @@ -3344,27 +3340,27 @@ break; case 76: -#line 1136 "compilers/imcc/imcc.y" +#line 1132 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "INTVAL", 'S'); } break; case 77: -#line 1137 "compilers/imcc/imcc.y" +#line 1133 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); } break; case 78: -#line 1138 "compilers/imcc/imcc.y" +#line 1134 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "PMC", 'S'); } break; case 79: -#line 1139 "compilers/imcc/imcc.y" +#line 1135 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, "STRING", 'S'); } break; case 80: -#line 1141 "compilers/imcc/imcc.y" +#line 1137 "compilers/imcc/imcc.y" { SymReg *r; if (strcmp((yyvsp[(1) - (1)].s), "_") != 0) @@ -3378,7 +3374,7 @@ break; case 81: -#line 1152 "compilers/imcc/imcc.y" +#line 1148 "compilers/imcc/imcc.y" { SymReg *r; if (strcmp((yyvsp[(1) - (1)].s), "_") != 0) @@ -3392,12 +3388,12 @@ break; case 82: -#line 1162 "compilers/imcc/imcc.y" +#line 1158 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); } break; case 85: -#line 1172 "compilers/imcc/imcc.y" +#line 1168 "compilers/imcc/imcc.y" { char name[128]; SymReg *r, *r1; @@ -3424,82 +3420,82 @@ break; case 86: -#line 1200 "compilers/imcc/imcc.y" +#line 1196 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } break; case 87: -#line 1204 "compilers/imcc/imcc.y" +#line 1200 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; } break; case 88: -#line 1205 "compilers/imcc/imcc.y" +#line 1201 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; } break; case 89: -#line 1209 "compilers/imcc/imcc.y" +#line 1205 "compilers/imcc/imcc.y" { (yyval.i) = NULL; } break; case 90: -#line 1210 "compilers/imcc/imcc.y" +#line 1206 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); } break; case 91: -#line 1214 "compilers/imcc/imcc.y" +#line 1210 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 93: -#line 1219 "compilers/imcc/imcc.y" +#line 1215 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (1)].t); } break; case 94: -#line 1220 "compilers/imcc/imcc.y" +#line 1216 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 95: -#line 1224 "compilers/imcc/imcc.y" +#line 1220 "compilers/imcc/imcc.y" { (yyval.t) = P_LOAD; } break; case 96: -#line 1225 "compilers/imcc/imcc.y" +#line 1221 "compilers/imcc/imcc.y" { (yyval.t) = P_INIT; } break; case 97: -#line 1226 "compilers/imcc/imcc.y" +#line 1222 "compilers/imcc/imcc.y" { (yyval.t) = P_MAIN; } break; case 98: -#line 1227 "compilers/imcc/imcc.y" +#line 1223 "compilers/imcc/imcc.y" { (yyval.t) = P_IMMEDIATE; } break; case 99: -#line 1228 "compilers/imcc/imcc.y" +#line 1224 "compilers/imcc/imcc.y" { (yyval.t) = P_POSTCOMP; } break; case 100: -#line 1229 "compilers/imcc/imcc.y" +#line 1225 "compilers/imcc/imcc.y" { (yyval.t) = P_ANON; } break; case 101: -#line 1230 "compilers/imcc/imcc.y" +#line 1226 "compilers/imcc/imcc.y" { (yyval.t) = P_NEED_LEX; } break; case 109: -#line 1242 "compilers/imcc/imcc.y" +#line 1238 "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)); @@ -3507,14 +3503,14 @@ break; case 110: -#line 1247 "compilers/imcc/imcc.y" +#line 1243 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); } break; case 111: -#line 1251 "compilers/imcc/imcc.y" +#line 1247 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI; @@ -3522,21 +3518,21 @@ break; case 112: -#line 1256 "compilers/imcc/imcc.y" +#line 1252 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); } break; case 113: -#line 1260 "compilers/imcc/imcc.y" +#line 1256 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S')); } break; case 114: -#line 1264 "compilers/imcc/imcc.y" +#line 1260 "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)); @@ -3544,7 +3540,7 @@ break; case 115: -#line 1269 "compilers/imcc/imcc.y" +#line 1265 "compilers/imcc/imcc.y" { add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S')); add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr)); @@ -3552,27 +3548,27 @@ break; case 116: -#line 1277 "compilers/imcc/imcc.y" +#line 1273 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 117: -#line 1278 "compilers/imcc/imcc.y" +#line 1274 "compilers/imcc/imcc.y" { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); } break; case 118: -#line 1282 "compilers/imcc/imcc.y" +#line 1278 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (2)].sr); } break; case 119: -#line 1287 "compilers/imcc/imcc.y" +#line 1283 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 120: -#line 1289 "compilers/imcc/imcc.y" +#line 1285 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); @@ -3580,17 +3576,17 @@ break; case 121: -#line 1296 "compilers/imcc/imcc.y" +#line 1292 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 122: -#line 1297 "compilers/imcc/imcc.y" +#line 1293 "compilers/imcc/imcc.y" { is_def=1; } break; case 123: -#line 1298 "compilers/imcc/imcc.y" +#line 1294 "compilers/imcc/imcc.y" { IdList *l = (yyvsp[(4) - (4)].idlist); SymReg *ignored; @@ -3605,57 +3601,57 @@ break; case 124: -#line 1312 "compilers/imcc/imcc.y" +#line 1308 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 125: -#line 1313 "compilers/imcc/imcc.y" +#line 1309 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 126: -#line 1317 "compilers/imcc/imcc.y" +#line 1313 "compilers/imcc/imcc.y" { (yyval.t) = VT_FLAT; } break; case 127: -#line 1318 "compilers/imcc/imcc.y" +#line 1314 "compilers/imcc/imcc.y" { (yyval.t) = VT_OPTIONAL; } break; case 128: -#line 1319 "compilers/imcc/imcc.y" +#line 1315 "compilers/imcc/imcc.y" { (yyval.t) = VT_OPT_FLAG; } break; case 129: -#line 1320 "compilers/imcc/imcc.y" +#line 1316 "compilers/imcc/imcc.y" { (yyval.t) = VT_NAMED; } break; case 130: -#line 1321 "compilers/imcc/imcc.y" +#line 1317 "compilers/imcc/imcc.y" { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; } break; case 131: -#line 1322 "compilers/imcc/imcc.y" +#line 1318 "compilers/imcc/imcc.y" { (yyval.t) = VT_UNIQUE_REG; } break; case 132: -#line 1327 "compilers/imcc/imcc.y" +#line 1323 "compilers/imcc/imcc.y" { begin_return_or_yield(interp, 0); } break; case 133: -#line 1329 "compilers/imcc/imcc.y" +#line 1325 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } break; case 134: -#line 1331 "compilers/imcc/imcc.y" +#line 1327 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->asm_state = AsmDefault; (yyval.i) = 0; @@ -3663,22 +3659,22 @@ break; case 135: -#line 1338 "compilers/imcc/imcc.y" +#line 1334 "compilers/imcc/imcc.y" { begin_return_or_yield(interp, 1); } break; case 136: -#line 1340 "compilers/imcc/imcc.y" +#line 1336 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } break; case 137: -#line 1344 "compilers/imcc/imcc.y" +#line 1340 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 138: -#line 1346 "compilers/imcc/imcc.y" +#line 1342 "compilers/imcc/imcc.y" { if ((yyvsp[(1) - (2)].sr)) add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr)); @@ -3686,7 +3682,7 @@ break; case 139: -#line 1351 "compilers/imcc/imcc.y" +#line 1347 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr)); @@ -3694,12 +3690,12 @@ break; case 140: -#line 1358 "compilers/imcc/imcc.y" +#line 1354 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 141: -#line 1360 "compilers/imcc/imcc.y" +#line 1356 "compilers/imcc/imcc.y" { if ((yyvsp[(1) - (2)].sr)) add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr)); @@ -3707,7 +3703,7 @@ break; case 142: -#line 1365 "compilers/imcc/imcc.y" +#line 1361 "compilers/imcc/imcc.y" { if ((yyvsp[(2) - (3)].sr)) add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr)); @@ -3715,17 +3711,17 @@ break; case 143: -#line 1372 "compilers/imcc/imcc.y" +#line 1368 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 144: -#line 1376 "compilers/imcc/imcc.y" +#line 1372 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } break; case 145: -#line 1381 "compilers/imcc/imcc.y" +#line 1377 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->asm_state == AsmDefault) begin_return_or_yield(interp, (yyvsp[(1) - (2)].t)); @@ -3733,7 +3729,7 @@ break; case 146: -#line 1386 "compilers/imcc/imcc.y" +#line 1382 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->asm_state = AsmDefault; (yyval.t) = 0; @@ -3741,22 +3737,22 @@ break; case 147: -#line 1393 "compilers/imcc/imcc.y" +#line 1389 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 148: -#line 1394 "compilers/imcc/imcc.y" +#line 1390 "compilers/imcc/imcc.y" { (yyval.t) = 1; } break; case 149: -#line 1398 "compilers/imcc/imcc.y" +#line 1394 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 150: -#line 1400 "compilers/imcc/imcc.y" +#line 1396 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, @@ -3769,14 +3765,14 @@ break; case 151: -#line 1410 "compilers/imcc/imcc.y" +#line 1406 "compilers/imcc/imcc.y" { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr)); } break; case 152: -#line 1414 "compilers/imcc/imcc.y" +#line 1410 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->adv_named_id) { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, @@ -3789,61 +3785,61 @@ break; case 153: -#line 1424 "compilers/imcc/imcc.y" +#line 1420 "compilers/imcc/imcc.y" { add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr)); } break; case 156: -#line 1444 "compilers/imcc/imcc.y" +#line 1440 "compilers/imcc/imcc.y" { clear_state(interp); } break; case 157: -#line 1449 "compilers/imcc/imcc.y" +#line 1445 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (2)].i); } break; case 158: -#line 1450 "compilers/imcc/imcc.y" +#line 1446 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 159: -#line 1451 "compilers/imcc/imcc.y" +#line 1447 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 160: -#line 1452 "compilers/imcc/imcc.y" +#line 1448 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 161: -#line 1453 "compilers/imcc/imcc.y" +#line 1449 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 162: -#line 1457 "compilers/imcc/imcc.y" +#line 1453 "compilers/imcc/imcc.y" { (yyval.i) = NULL; } break; case 166: -#line 1468 "compilers/imcc/imcc.y" +#line 1464 "compilers/imcc/imcc.y" { (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s))); } break; case 167: -#line 1476 "compilers/imcc/imcc.y" +#line 1472 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (3)].i); } break; case 168: -#line 1478 "compilers/imcc/imcc.y" +#line 1474 "compilers/imcc/imcc.y" { if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) { IMCC_warning(interp, "Too many errors. Correct some first.\n"); @@ -3854,7 +3850,7 @@ break; case 169: -#line 1489 "compilers/imcc/imcc.y" +#line 1485 "compilers/imcc/imcc.y" { IdList* l = (yyvsp[(1) - (1)].idlist); l->next = NULL; @@ -3863,7 +3859,7 @@ break; case 170: -#line 1496 "compilers/imcc/imcc.y" +#line 1492 "compilers/imcc/imcc.y" { IdList* l = (yyvsp[(3) - (3)].idlist); l->next = (yyvsp[(1) - (3)].idlist); @@ -3872,7 +3868,7 @@ break; case 171: -#line 1505 "compilers/imcc/imcc.y" +#line 1501 "compilers/imcc/imcc.y" { IdList* const l = mem_allocate_n_zeroed_typed(1, IdList); l->id = (yyvsp[(1) - (2)].s); @@ -3882,22 +3878,22 @@ break; case 172: -#line 1514 "compilers/imcc/imcc.y" +#line 1510 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 173: -#line 1515 "compilers/imcc/imcc.y" +#line 1511 "compilers/imcc/imcc.y" { (yyval.t) = 1; } break; case 176: -#line 1522 "compilers/imcc/imcc.y" +#line 1518 "compilers/imcc/imcc.y" { is_def=1; } break; case 177: -#line 1523 "compilers/imcc/imcc.y" +#line 1519 "compilers/imcc/imcc.y" { IdList *l = (yyvsp[(4) - (4)].idlist); while (l) { @@ -3916,19 +3912,19 @@ break; case 178: -#line 1539 "compilers/imcc/imcc.y" +#line 1535 "compilers/imcc/imcc.y" { set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s)); (yyval.i) = 0; } break; case 179: -#line 1542 "compilers/imcc/imcc.y" +#line 1538 "compilers/imcc/imcc.y" { is_def=1; } break; case 180: -#line 1543 "compilers/imcc/imcc.y" +#line 1539 "compilers/imcc/imcc.y" { mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0); is_def=0; @@ -3937,12 +3933,12 @@ break; case 182: -#line 1550 "compilers/imcc/imcc.y" +#line 1546 "compilers/imcc/imcc.y" { is_def=1; } break; case 183: -#line 1551 "compilers/imcc/imcc.y" +#line 1547 "compilers/imcc/imcc.y" { mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1); is_def=0; @@ -3951,7 +3947,7 @@ break; case 184: -#line 1557 "compilers/imcc/imcc.y" +#line 1553 "compilers/imcc/imcc.y" { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL; @@ -3960,12 +3956,12 @@ break; case 185: -#line 1562 "compilers/imcc/imcc.y" +#line 1558 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); } break; case 186: -#line 1564 "compilers/imcc/imcc.y" +#line 1560 "compilers/imcc/imcc.y" { (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit, @@ -3980,51 +3976,51 @@ break; case 187: -#line 1575 "compilers/imcc/imcc.y" +#line 1571 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); } break; case 188: -#line 1576 "compilers/imcc/imcc.y" +#line 1572 "compilers/imcc/imcc.y" { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } break; case 189: -#line 1577 "compilers/imcc/imcc.y" +#line 1573 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 192: -#line 1580 "compilers/imcc/imcc.y" +#line 1576 "compilers/imcc/imcc.y" { (yyval.i) = 0;} break; case 193: -#line 1584 "compilers/imcc/imcc.y" +#line 1580 "compilers/imcc/imcc.y" { (yyval.t) = 'I'; } break; case 194: -#line 1585 "compilers/imcc/imcc.y" +#line 1581 "compilers/imcc/imcc.y" { (yyval.t) = 'N'; } break; case 195: -#line 1586 "compilers/imcc/imcc.y" +#line 1582 "compilers/imcc/imcc.y" { (yyval.t) = 'S'; } break; case 196: -#line 1587 "compilers/imcc/imcc.y" +#line 1583 "compilers/imcc/imcc.y" { (yyval.t) = 'P'; } break; case 197: -#line 1592 "compilers/imcc/imcc.y" +#line 1588 "compilers/imcc/imcc.y" { /* there'd normally be a str_dup() here, but the lexer already * copied the string, so it's safe to use directly */ - if ((IMCC_INFO(interp)->cur_pmc_type = pmc_type(interp, + if ((IMCC_INFO(interp)->cur_pmc_type = lookup_typeid_s(interp, string_from_cstring(interp, (yyvsp[(1) - (1)].s), 0))) <= 0) { IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "Unknown PMC type '%s'\n", (yyvsp[(1) - (1)].s)); @@ -4033,87 +4029,87 @@ break; case 198: -#line 1605 "compilers/imcc/imcc.y" +#line 1601 "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 199: -#line 1607 "compilers/imcc/imcc.y" +#line 1603 "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 200: -#line 1609 "compilers/imcc/imcc.y" +#line 1605 "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 201: -#line 1611 "compilers/imcc/imcc.y" +#line 1607 "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 202: -#line 1613 "compilers/imcc/imcc.y" +#line 1609 "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 203: -#line 1615 "compilers/imcc/imcc.y" +#line 1611 "compilers/imcc/imcc.y" { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); } break; case 204: -#line 1617 "compilers/imcc/imcc.y" +#line 1613 "compilers/imcc/imcc.y" { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); } break; case 205: -#line 1619 "compilers/imcc/imcc.y" +#line 1615 "compilers/imcc/imcc.y" { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); } break; case 206: -#line 1621 "compilers/imcc/imcc.y" +#line 1617 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 207: -#line 1623 "compilers/imcc/imcc.y" +#line 1619 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 208: -#line 1625 "compilers/imcc/imcc.y" +#line 1621 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); } break; case 209: -#line 1627 "compilers/imcc/imcc.y" +#line 1623 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); } break; case 210: -#line 1629 "compilers/imcc/imcc.y" +#line 1625 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); } break; case 211: -#line 1633 "compilers/imcc/imcc.y" +#line 1629 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 212: -#line 1635 "compilers/imcc/imcc.y" +#line 1631 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); } break; case 213: -#line 1637 "compilers/imcc/imcc.y" +#line 1633 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); } break; case 214: -#line 1640 "compilers/imcc/imcc.y" +#line 1636 "compilers/imcc/imcc.y" { add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr)); IMCC_INFO(interp)->cur_call = NULL; @@ -4122,14 +4118,14 @@ break; case 215: -#line 1646 "compilers/imcc/imcc.y" +#line 1642 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); } break; case 216: -#line 1650 "compilers/imcc/imcc.y" +#line 1646 "compilers/imcc/imcc.y" { IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr)); IMCC_INFO(interp)->cur_call = NULL; @@ -4137,144 +4133,144 @@ break; case 220: -#line 1658 "compilers/imcc/imcc.y" +#line 1654 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr)); } break; case 221: -#line 1665 "compilers/imcc/imcc.y" +#line 1661 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"not"; } break; case 222: -#line 1666 "compilers/imcc/imcc.y" +#line 1662 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bnot"; } break; case 223: -#line 1667 "compilers/imcc/imcc.y" +#line 1663 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"neg"; } break; case 224: -#line 1671 "compilers/imcc/imcc.y" +#line 1667 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"sub"; } break; case 225: -#line 1672 "compilers/imcc/imcc.y" +#line 1668 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"add"; } break; case 226: -#line 1673 "compilers/imcc/imcc.y" +#line 1669 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mul"; } break; case 227: -#line 1674 "compilers/imcc/imcc.y" +#line 1670 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"div"; } break; case 228: -#line 1675 "compilers/imcc/imcc.y" +#line 1671 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mod"; } break; case 229: -#line 1676 "compilers/imcc/imcc.y" +#line 1672 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"fdiv"; } break; case 230: -#line 1677 "compilers/imcc/imcc.y" +#line 1673 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"pow"; } break; case 231: -#line 1678 "compilers/imcc/imcc.y" +#line 1674 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"concat"; } break; case 232: -#line 1679 "compilers/imcc/imcc.y" +#line 1675 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"iseq"; } break; case 233: -#line 1680 "compilers/imcc/imcc.y" +#line 1676 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isne"; } break; case 234: -#line 1681 "compilers/imcc/imcc.y" +#line 1677 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isgt"; } break; case 235: -#line 1682 "compilers/imcc/imcc.y" +#line 1678 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isge"; } break; case 236: -#line 1683 "compilers/imcc/imcc.y" +#line 1679 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"islt"; } break; case 237: -#line 1684 "compilers/imcc/imcc.y" +#line 1680 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"isle"; } break; case 238: -#line 1685 "compilers/imcc/imcc.y" +#line 1681 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shl"; } break; case 239: -#line 1686 "compilers/imcc/imcc.y" +#line 1682 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shr"; } break; case 240: -#line 1687 "compilers/imcc/imcc.y" +#line 1683 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lsr"; } break; case 241: -#line 1688 "compilers/imcc/imcc.y" +#line 1684 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"and"; } break; case 242: -#line 1689 "compilers/imcc/imcc.y" +#line 1685 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"or"; } break; case 243: -#line 1690 "compilers/imcc/imcc.y" +#line 1686 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"xor"; } break; case 244: -#line 1691 "compilers/imcc/imcc.y" +#line 1687 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"band"; } break; case 245: -#line 1692 "compilers/imcc/imcc.y" +#line 1688 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bor"; } break; case 246: -#line 1693 "compilers/imcc/imcc.y" +#line 1689 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bxor"; } break; case 247: -#line 1699 "compilers/imcc/imcc.y" +#line 1695 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); (yyval.i)->type &= ~ITCALL; @@ -4283,84 +4279,84 @@ break; case 248: -#line 1704 "compilers/imcc/imcc.y" +#line 1700 "compilers/imcc/imcc.y" { (yyval.i) = 0; } break; case 249: -#line 1711 "compilers/imcc/imcc.y" +#line 1707 "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 250: -#line 1717 "compilers/imcc/imcc.y" +#line 1713 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"add"; } break; case 251: -#line 1718 "compilers/imcc/imcc.y" +#line 1714 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"sub"; } break; case 252: -#line 1719 "compilers/imcc/imcc.y" +#line 1715 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mul"; } break; case 253: -#line 1720 "compilers/imcc/imcc.y" +#line 1716 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"div"; } break; case 254: -#line 1721 "compilers/imcc/imcc.y" +#line 1717 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"mod"; } break; case 255: -#line 1722 "compilers/imcc/imcc.y" +#line 1718 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"fdiv"; } break; case 256: -#line 1723 "compilers/imcc/imcc.y" +#line 1719 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"concat"; } break; case 257: -#line 1724 "compilers/imcc/imcc.y" +#line 1720 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"band"; } break; case 258: -#line 1725 "compilers/imcc/imcc.y" +#line 1721 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bor"; } break; case 259: -#line 1726 "compilers/imcc/imcc.y" +#line 1722 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"bxor"; } break; case 260: -#line 1727 "compilers/imcc/imcc.y" +#line 1723 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shr"; } break; case 261: -#line 1728 "compilers/imcc/imcc.y" +#line 1724 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"shl"; } break; case 262: -#line 1729 "compilers/imcc/imcc.y" +#line 1725 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lsr"; } break; case 263: -#line 1735 "compilers/imcc/imcc.y" +#line 1731 "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, @@ -4371,22 +4367,22 @@ break; case 264: -#line 1745 "compilers/imcc/imcc.y" +#line 1741 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 265: -#line 1746 "compilers/imcc/imcc.y" +#line 1742 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 266: -#line 1747 "compilers/imcc/imcc.y" +#line 1743 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 267: -#line 1749 "compilers/imcc/imcc.y" +#line 1745 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); if ((yyvsp[(1) - (1)].sr)->set != 'P') @@ -4395,7 +4391,7 @@ break; case 268: -#line 1755 "compilers/imcc/imcc.y" +#line 1751 "compilers/imcc/imcc.y" { /* disallow bareword method names; SREG name constants are fine */ char *name = (yyvsp[(3) - (3)].sr)->name; @@ -4412,7 +4408,7 @@ break; case 269: -#line 1769 "compilers/imcc/imcc.y" +#line 1765 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'S'); @@ -4421,12 +4417,12 @@ break; case 270: -#line 1774 "compilers/imcc/imcc.y" +#line 1770 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); } break; case 271: -#line 1780 "compilers/imcc/imcc.y" +#line 1776 "compilers/imcc/imcc.y" { (yyval.i) = IMCC_create_itcall_label(interp); IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr)); @@ -4434,17 +4430,17 @@ break; case 272: -#line 1784 "compilers/imcc/imcc.y" +#line 1780 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(2) - (5)].i); } break; case 273: -#line 1788 "compilers/imcc/imcc.y" +#line 1784 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 274: -#line 1790 "compilers/imcc/imcc.y" +#line 1786 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -4457,7 +4453,7 @@ break; case 275: -#line 1800 "compilers/imcc/imcc.y" +#line 1796 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -4470,7 +4466,7 @@ break; case 276: -#line 1810 "compilers/imcc/imcc.y" +#line 1806 "compilers/imcc/imcc.y" { (yyval.sr) = 0; add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr)); @@ -4479,7 +4475,7 @@ break; case 277: -#line 1816 "compilers/imcc/imcc.y" +#line 1812 "compilers/imcc/imcc.y" { (yyval.sr) = 0; add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr)); @@ -4488,42 +4484,42 @@ break; case 278: -#line 1824 "compilers/imcc/imcc.y" +#line 1820 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } break; case 279: -#line 1828 "compilers/imcc/imcc.y" +#line 1824 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 280: -#line 1829 "compilers/imcc/imcc.y" +#line 1825 "compilers/imcc/imcc.y" { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } break; case 281: -#line 1833 "compilers/imcc/imcc.y" +#line 1829 "compilers/imcc/imcc.y" { (yyval.t) = VT_FLAT; } break; case 282: -#line 1834 "compilers/imcc/imcc.y" +#line 1830 "compilers/imcc/imcc.y" { (yyval.t) = VT_NAMED; } break; case 283: -#line 1837 "compilers/imcc/imcc.y" +#line 1833 "compilers/imcc/imcc.y" { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; } break; case 284: -#line 1841 "compilers/imcc/imcc.y" +#line 1837 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } break; case 285: -#line 1846 "compilers/imcc/imcc.y" +#line 1842 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -4536,7 +4532,7 @@ break; case 286: -#line 1856 "compilers/imcc/imcc.y" +#line 1852 "compilers/imcc/imcc.y" { add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr)); mem_sys_free((yyvsp[(3) - (5)].s)); @@ -4544,7 +4540,7 @@ break; case 287: -#line 1861 "compilers/imcc/imcc.y" +#line 1857 "compilers/imcc/imcc.y" { (yyval.sr) = 0; if (IMCC_INFO(interp)->adv_named_id) { @@ -4557,7 +4553,7 @@ break; case 288: -#line 1871 "compilers/imcc/imcc.y" +#line 1867 "compilers/imcc/imcc.y" { add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr)); mem_sys_free((yyvsp[(1) - (3)].s)); @@ -4565,124 +4561,124 @@ break; case 289: -#line 1875 "compilers/imcc/imcc.y" +#line 1871 "compilers/imcc/imcc.y" { (yyval.sr) = 0; } break; case 290: -#line 1879 "compilers/imcc/imcc.y" +#line 1875 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 291: -#line 1880 "compilers/imcc/imcc.y" +#line 1876 "compilers/imcc/imcc.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; case 292: -#line 1885 "compilers/imcc/imcc.y" +#line 1881 "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)); } break; case 293: -#line 1889 "compilers/imcc/imcc.y" +#line 1885 "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)); } break; case 294: -#line 1893 "compilers/imcc/imcc.y" +#line 1889 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 295: -#line 1900 "compilers/imcc/imcc.y" +#line 1896 "compilers/imcc/imcc.y" { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); } break; case 296: -#line 1904 "compilers/imcc/imcc.y" +#line 1900 "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)); } break; case 297: -#line 1908 "compilers/imcc/imcc.y" +#line 1904 "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 298: -#line 1914 "compilers/imcc/imcc.y" +#line 1910 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 299: -#line 1915 "compilers/imcc/imcc.y" +#line 1911 "compilers/imcc/imcc.y" { (yyval.t) = 0; } break; case 300: -#line 1919 "compilers/imcc/imcc.y" +#line 1915 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"eq"; } break; case 301: -#line 1920 "compilers/imcc/imcc.y" +#line 1916 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"ne"; } break; case 302: -#line 1921 "compilers/imcc/imcc.y" +#line 1917 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"gt"; } break; case 303: -#line 1922 "compilers/imcc/imcc.y" +#line 1918 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"ge"; } break; case 304: -#line 1923 "compilers/imcc/imcc.y" +#line 1919 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"lt"; } break; case 305: -#line 1924 "compilers/imcc/imcc.y" +#line 1920 "compilers/imcc/imcc.y" { (yyval.s) = (char *)"le"; } break; case 308: -#line 1933 "compilers/imcc/imcc.y" +#line 1929 "compilers/imcc/imcc.y" { (yyval.sr) = NULL; } break; case 309: -#line 1934 "compilers/imcc/imcc.y" +#line 1930 "compilers/imcc/imcc.y" { (yyval.sr) = (yyvsp[(1) - (1)].sr); } break; case 310: -#line 1938 "compilers/imcc/imcc.y" +#line 1934 "compilers/imcc/imcc.y" { (yyval.sr) = IMCC_INFO(interp)->regs[0]; } break; case 312: -#line 1943 "compilers/imcc/imcc.y" +#line 1939 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); } break; case 313: -#line 1945 "compilers/imcc/imcc.y" +#line 1941 "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); @@ -4692,7 +4688,7 @@ break; case 314: -#line 1952 "compilers/imcc/imcc.y" +#line 1948 "compilers/imcc/imcc.y" { IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr); (yyval.sr) = (yyvsp[(2) - (3)].sr); @@ -4700,37 +4696,37 @@ break; case 316: -#line 1959 "compilers/imcc/imcc.y" +#line 1955 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 317: -#line 1960 "compilers/imcc/imcc.y" +#line 1956 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 318: -#line 1964 "compilers/imcc/imcc.y" +#line 1960 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 319: -#line 1965 "compilers/imcc/imcc.y" +#line 1961 "compilers/imcc/imcc.y" { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 320: -#line 1969 "compilers/imcc/imcc.y" +#line 1965 "compilers/imcc/imcc.y" { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 321: -#line 1970 "compilers/imcc/imcc.y" +#line 1966 "compilers/imcc/imcc.y" { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 326: -#line 1984 "compilers/imcc/imcc.y" +#line 1980 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->nkeys = 0; IMCC_INFO(interp)->in_slice = 0; @@ -4738,7 +4734,7 @@ break; case 327: -#line 1989 "compilers/imcc/imcc.y" +#line 1985 "compilers/imcc/imcc.y" { (yyval.sr) = link_keys(interp, IMCC_INFO(interp)->nkeys, @@ -4747,7 +4743,7 @@ break; case 328: -#line 1997 "compilers/imcc/imcc.y" +#line 1993 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->nkeys = 0; IMCC_INFO(interp)->in_slice = 0; @@ -4755,7 +4751,7 @@ break; case 329: -#line 2002 "compilers/imcc/imcc.y" +#line 1998 "compilers/imcc/imcc.y" { (yyval.sr) = link_keys(interp, IMCC_INFO(interp)->nkeys, @@ -4764,12 +4760,12 @@ break; case 330: -#line 2010 "compilers/imcc/imcc.y" +#line 2006 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); } break; case 331: -#line 2012 "compilers/imcc/imcc.y" +#line 2008 "compilers/imcc/imcc.y" { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr); (yyval.sr) = IMCC_INFO(interp)->keys[0]; @@ -4777,7 +4773,7 @@ break; case 332: -#line 2020 "compilers/imcc/imcc.y" +#line 2016 "compilers/imcc/imcc.y" { if (IMCC_INFO(interp)->in_slice) (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE; @@ -4786,53 +4782,53 @@ break; case 333: -#line 2028 "compilers/imcc/imcc.y" +#line 2024 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); } break; case 334: -#line 2029 "compilers/imcc/imcc.y" +#line 2025 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); } break; case 335: -#line 2030 "compilers/imcc/imcc.y" +#line 2026 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); } break; case 336: -#line 2031 "compilers/imcc/imcc.y" +#line 2027 "compilers/imcc/imcc.y" { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); } break; case 337: -#line 2032 "compilers/imcc/imcc.y" +#line 2028 "compilers/imcc/imcc.y" { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 338: -#line 2036 "compilers/imcc/imcc.y" +#line 2032 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 339: -#line 2037 "compilers/imcc/imcc.y" +#line 2033 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 340: -#line 2038 "compilers/imcc/imcc.y" +#line 2034 "compilers/imcc/imcc.y" { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); } break; case 341: -#line 2039 "compilers/imcc/imcc.y" +#line 2035 "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 4825 "compilers/imcc/imcparser.c" +#line 4821 "compilers/imcc/imcparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5046,7 +5042,7 @@ } -#line 2045 "compilers/imcc/imcc.y" +#line 2041 "compilers/imcc/imcc.y" /* I need this prototype somewhere... */ Index: compilers/imcc/parser_util.c =================================================================== --- compilers/imcc/parser_util.c (revision 34591) +++ compilers/imcc/parser_util.c (working copy) @@ -132,7 +132,7 @@ SymReg *regs[3]; SymReg *pmc; int nargs; - const int pmc_num = pmc_type(interp, + const int pmc_num = lookup_typeid_s(interp, string_from_cstring(interp, *type == '.' ? type + 1 : type, 0)); snprintf(fmt, sizeof (fmt), "%d", pmc_num); Index: compilers/imcc/imcparser.h =================================================================== --- compilers/imcc/imcparser.h (revision 34591) +++ compilers/imcc/imcparser.h (working copy) @@ -303,7 +303,7 @@ SymReg * sr; Instruction *i; } -/* Line 1529 of yacc.c. */ +/* Line 1489 of yacc.c. */ #line 297 "compilers/imcc/imcparser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ Index: compilers/pirc/new/pircompunit.c =================================================================== --- compilers/pirc/new/pircompunit.c (revision 34591) +++ compilers/pirc/new/pircompunit.c (working copy) @@ -1749,8 +1749,8 @@ Parrot_Context *ctx = CONTEXT(lexer->interp); STRING * const built_in_name = string_from_cstring(lexer->interp, stdtype, strlen(stdtype)); STRING * const language_name = string_from_cstring(lexer->interp, maptype, strlen(maptype)); - int built_in_type = pmc_type(lexer->interp, built_in_name); - int language_type = pmc_type(lexer->interp, language_name); + int built_in_type = lookup_typeid_s(lexer->interp, built_in_name); + int language_type = lookup_typeid_s(lexer->interp, language_name); /* check if both the built-in and language types exist. */ Index: t/pmc/key.t =================================================================== --- t/pmc/key.t (revision 34591) +++ t/pmc/key.t (working copy) @@ -142,7 +142,8 @@ pir_compiler = compreg 'PIR' $P0 = pir_compiler($S0) $P0 = $P0[0] - $P1 = new 'TclProc' + $P2 = get_root_global ['_tcl'], 'TclProc' + $P1 = new $P2 assign $P1, $P0 .local pmc ns_target ns_target = get_hll_namespace Index: t/pmc/objects.t =================================================================== --- t/pmc/objects.t (revision 34591) +++ t/pmc/objects.t (working copy) @@ -21,7 +21,7 @@ .include "iglobals.pasm" .include "interpinfo.pasm" - plan(194) + plan(191) get_classname_from_class() test_get_class() @@ -68,8 +68,6 @@ short_name_attributes() init_with_and_without_arg() newclass_bracket_parsing() - verify_namespace_types() - verify_data_type() new_keyed() new_keyed_2() new_keyed_3() @@ -1166,30 +1164,6 @@ ok( 1, 'newclass created with brackets' ) .end -.sub verify_namespace_types - newclass $P0, ['Foo24';'Bar24'] - getinterp $P0 - set $P1, $P0[.IGLOBALS_CLASSNAME_HASH] - typeof $S0, $P1 - is( $S0, 'NameSpace', 'namespace verified' ) - - set $P2, $P1['Foo24'] - typeof $S0, $P2 - is( $S0, 'NameSpace', 'namespace verified' ) -.end - -.sub verify_data_type - newclass $P0, ['Foo25';'Bar25'] - getinterp $P0 - set $P1, $P0[.IGLOBALS_CLASSNAME_HASH] - set $P2, $P1['Foo25'] - set $P3, $P2['Bar25'] - - set $I0, $P3 - isgt $I0, $I0, 0 - ok( $I0, 'verified datatype > 0' ) -.end - # Puts init in a namespace .sub new_keyed .local pmc cl, o, p Index: t/compilers/imcc/syn/hll.t =================================================================== --- t/compilers/imcc/syn/hll.t (revision 34591) +++ t/compilers/imcc/syn/hll.t (working copy) @@ -38,11 +38,11 @@ : (); pir_output_is( <<'CODE', <<'OUT', ".param :slurpy (using object)", @todo ); +.HLL 'misc' .sub setup :anon :immediate $P0 = subclass 'ResizablePMCArray', 'Stack' .end -.HLL 'misc' .HLL_map 'ResizablePMCArray' = 'Stack' .sub main :main Index: t/oo/names.t =================================================================== --- t/oo/names.t (revision 34591) +++ t/oo/names.t (working copy) @@ -44,10 +44,10 @@ $P0.'name'('Object') pop_eh $S0 = $P0 - ok (0, 'HLL obj created w/ same name as parrot obj') + ok (1, 'HLL obj created w/ same name as parrot obj') .return() OK_1: - ok (1, 'HLL obj w/ same name as parrot obj not created') + ok (0, 'HLL obj w/ same name as parrot obj not created') .end # Local Variables: Index: t/oo/isa.t =================================================================== --- t/oo/isa.t (revision 34591) +++ t/oo/isa.t (working copy) @@ -27,7 +27,8 @@ subclass_isa_by_string_name() subclass_isa_by_class_object() string_isa_and_pmc_isa_have_same_result() - string_register_and_string_pmc_isa_have_same_result() + $P0 = get_root_global ['foo'; 'XYZ'], 'string_register_and_string_pmc_isa_have_same_result' + $P0() .end @@ -151,7 +152,15 @@ ok ($I1, 'isa String instance an Object') .end +.HLL 'foo' +.namespace ['XYZ'] + +.sub 'abc' :method + .return( 'XYZ::abc' ) +.end + .sub string_register_and_string_pmc_isa_have_same_result + .include 'include/test_more.pir' .local pmc xyzns, xyzclass, xyzobj xyzns = get_root_namespace ['foo';'XYZ'] @@ -181,13 +190,6 @@ ok( $I0, '... and false when it is not' ) .end -.HLL 'foo' -.namespace ['XYZ'] - -.sub 'abc' :method - .return( 'XYZ::abc' ) -.end - # Local Variables: # mode: pir # fill-column: 100 Index: t/op/box.t =================================================================== --- t/op/box.t (revision 34591) +++ t/op/box.t (working copy) @@ -19,11 +19,6 @@ .const int TESTS = 24 # must set these up before the .HLL_map statements later -.sub '__setup' :immediate - $P0 = subclass 'Integer', 'MyInt' - $P0 = subclass 'String', 'MyString' - $P0 = subclass 'Float', 'MyFloat' -.end .sub 'main' :main .include 'include/test_more.pir' @@ -94,54 +89,63 @@ .HLL 'for_test' +.sub '__setup' :immediate + $P0 = subclass 'Integer', 'MyInt' + $P0 = subclass 'String', 'MyString' + $P0 = subclass 'Float', 'MyFloat' +.end + .HLL_map 'Integer' = 'MyInt' .HLL_map 'String' = 'MyString' .HLL_map 'Float' = 'MyFloat' .sub 'box_int' + $P1 = get_hll_global 'MyInt' .include 'include/test_more.pir' $P0 = box -100 $I0 = $P0 is( $I0, -100, 'value preserved when boxing int in HLL' ) - isa_ok( $P0, 'MyInt', 'int boxed to appropriate base type for HLL' ) + isa_ok( $P0, $P1, 'int boxed to appropriate base type for HLL' ) $I0 = -999 $P0 = box $I0 $I0 = $P0 is( $I0, -999, 'value preserved when boxing int in HLL from reg' ) - isa_ok( $P0, 'MyInt', 'int boxed to appropriate type for HLL from reg') + isa_ok( $P0, $P1, 'int boxed to appropriate type for HLL from reg') .end .sub 'box_num' + $P1 = get_hll_global 'MyFloat' $P0 = box -77.7 $N0 = $P0 is( $N0, -77.7, 'value preserved when boxing num in HLL' ) - isa_ok( $P0, 'MyFloat', 'num boxed to appropriate base type for HLL' ) + isa_ok( $P0, $P1, 'num boxed to appropriate base type for HLL' ) $N0 = -222222.222222 $P0 = box $N0 $N0 = $P0 is( $N0, -222222.222222, 'value preserved when boxing num in HLL from reg' ) - isa_ok( $P0, 'MyFloat', 'num boxed to appropriate type for HLL from reg' ) + isa_ok( $P0, $P1, 'num boxed to appropriate type for HLL from reg' ) .end .sub 'box_string' + $P1 = get_hll_global 'MyString' $P0 = box 'Bye, bye!' $S0 = $P0 is( $S0, 'Bye, bye!', 'value preserved when boxing string in HLL' ) - isa_ok( $P0, 'MyString', 'string boxed to appropriate base type for HLL' ) + isa_ok( $P0, $P1, 'string boxed to appropriate base type for HLL' ) $S0 = 'Hello, goodbye!' $P0 = box $S0 $S0 = $P0 is( $S0, 'Hello, goodbye!', 'value preserved when boxing string in HLL from reg' ) - isa_ok($P0, 'MyString', 'string boxed to appropriate type for HLL from reg') + isa_ok($P0, $P1, 'string boxed to appropriate type for HLL from reg') .end # Local Variables: