1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781
|
module Ast_c :
sig
type posl = int * int
type virtual_position = Common.parse_info * int
type parse_info =
Ast_c.parse_info =
OriginTok of Common.parse_info
| FakeTok of string * virtual_position
| ExpandedTok of Common.parse_info * virtual_position
| AbstractLineTok of Common.parse_info
type danger = Ast_c.danger = DangerStart | DangerEnd | Danger | NoDanger
type info =
Ast_c.info = {
pinfo : parse_info;
cocci_tag : (Ast_cocci.mcodekind * metavars_binding list) option ref;
comments_tag : comments_around ref;
mutable annots_tag : Token_annot.annots;
danger : danger ref;
}
and il = info list
and 'a wrap = 'a * il
and 'a wrap2 = 'a * il
and 'a wrap3 = 'a * il
and name =
Ast_c.name =
RegularName of string wrap
| CppConcatenatedName of string wrap wrap2 list
| CppVariadicName of string wrap
| CppIdentBuilder of string wrap * string wrap wrap2 list
and fullType = typeQualifier * typeC
and typeC = typeCbis wrap
and typeCbis =
Ast_c.typeCbis =
NoType
| BaseType of baseType
| Pointer of fullType
| Array of constExpression option * fullType
| Decimal of constExpression * constExpression option
| FunctionType of functionType
| Enum of string option * enumType
| StructUnion of structUnion * string option * structType
| EnumName of string
| StructUnionName of structUnion * string
| TypeName of name * fullType option
| FieldType of fullType * name * constExpression option
| ParenType of fullType
| TypeOfExpr of expression
| TypeOfType of fullType
and baseType =
Ast_c.baseType =
Void
| IntType of intType
| FloatType of floatType
| SizeType
| SSizeType
| PtrDiffType
and intType = Ast_c.intType = CChar | Si of signed
and signed = sign * base
and base = Ast_c.base = CChar2 | CShort | CInt | CLong | CLongLong
and sign = Ast_c.sign = Signed | UnSigned
and floatType =
Ast_c.floatType =
CFloat | CDouble | CLongDouble | CFloatComplex | CDoubleComplex
| CLongDoubleComplex
and structUnion = Ast_c.structUnion = Struct | Union
and structType = field list
and field =
Ast_c.field =
DeclarationField of field_declaration
| EmptyField of info
| MacroDeclField of (string * argument wrap2 list) wrap
| CppDirectiveStruct of cpp_directive
| IfdefStruct of ifdef_directive
and field_declaration =
Ast_c.field_declaration =
FieldDeclList of fieldkind wrap2 list wrap
and fieldkind =
Ast_c.fieldkind =
Simple of name option * fullType
| BitField of name option * fullType * info * constExpression
and enumType = oneEnumType wrap2 list
and oneEnumType = name * (info * constExpression) option
and functionType = fullType * (parameterType wrap2 list * bool wrap)
and parameterType =
Ast_c.parameterType = {
p_namei : name option;
p_register : bool wrap;
p_type : fullType;
}
and typeQualifier = typeQualifierbis wrap
and typeQualifierbis =
Ast_c.typeQualifierbis = {
const : bool;
volatile : bool;
}
and attribute = attributebis wrap
and attributebis = Ast_c.attributebis = Attribute of string
and expression = (expressionbis * exp_info ref) wrap3
and exp_info = exp_type option * test
and exp_type = fullType * local
and local =
Ast_c.local =
LocalVar of parse_info
| StaticLocalVar of parse_info
| NotLocalVar
and test = Ast_c.test = Test | NotTest
and expressionbis =
Ast_c.expressionbis =
Ident of name
| Constant of constant
| StringConstant of string_fragment list * string * isWchar
| FunCall of expression * argument wrap2 list
| CondExpr of expression * expression option * expression
| Sequence of expression * expression
| Assignment of expression * assignOp * expression
| Postfix of expression * fixOp
| Infix of expression * fixOp
| Unary of expression * unaryOp
| Binary of expression * binaryOp * expression
| ArrayAccess of expression * expression
| RecordAccess of expression * name
| RecordPtAccess of expression * name
| SizeOfExpr of expression
| SizeOfType of fullType
| Cast of fullType * expression
| StatementExpr of compound wrap
| Constructor of fullType * initialiser
| ParenExpr of expression
| New of argument wrap2 list option * argument
| Delete of bool * expression
| Defined of name
and argument = (expression, weird_argument) Common.either
and weird_argument =
Ast_c.weird_argument =
ArgType of parameterType
| ArgAction of action_macro
and action_macro = Ast_c.action_macro = ActMisc of il
and constant =
Ast_c.constant =
String of (string * isWchar)
| MultiString of string list
| Char of (string * isWchar)
| Int of (string * intType)
| Float of (string * floatType)
| DecimalConst of (string * string * string)
and isWchar = Ast_c.isWchar = IsWchar | IsChar
and unaryOp =
Ast_c.unaryOp =
GetRef
| DeRef
| UnPlus
| UnMinus
| Tilde
| Not
| GetRefLabel
and assignOpbis = Ast_c.assignOpbis = SimpleAssign | OpAssign of arithOp
and assignOp = assignOpbis wrap
and fixOp = Ast_c.fixOp = Dec | Inc
and binaryOpbis =
Ast_c.binaryOpbis =
Arith of arithOp
| Logical of logicalOp
and binaryOp = binaryOpbis wrap
and arithOp =
Ast_c.arithOp =
Plus
| Minus
| Mul
| Div
| Mod
| DecLeft
| DecRight
| And
| Or
| Xor
| Max
| Min
and logicalOp =
Ast_c.logicalOp =
Inf
| Sup
| InfEq
| SupEq
| Eq
| NotEq
| AndLog
| OrLog
and constExpression = expression
and string_fragment = string_fragment_bis wrap
and string_fragment_bis =
Ast_c.string_fragment_bis =
ConstantFragment of string
| FormatFragment of string_format
and string_format = string_format_bis wrap
and string_format_bis =
Ast_c.string_format_bis =
ConstantFormat of string
and statement = statementbis wrap3
and statementbis =
Ast_c.statementbis =
Labeled of labeled
| Compound of compound
| ExprStatement of exprStatement
| Selection of selection
| Iteration of iteration
| Jump of jump
| Decl of declaration
| Asm of asmbody
| NestedFunc of definition
| MacroStmt
| Exec of exec_code list
| IfdefStmt1 of ifdef_directive list * statement list
and labeled =
Ast_c.labeled =
Label of name * statement
| Case of expression * statement
| CaseRange of expression * expression * statement
| Default of statement
and compound = statement_sequencable list
and statement_sequencable =
Ast_c.statement_sequencable =
StmtElem of statement
| CppDirectiveStmt of cpp_directive
| IfdefStmt of ifdef_directive
| IfdefStmt2 of ifdef_directive list * statement_sequencable list list
and exprStatement = expression option
and declOrExpr =
Ast_c.declOrExpr =
ForDecl of declaration
| ForExp of expression option wrap
and selection =
Ast_c.selection =
If of expression * statement * statement
| Switch of expression * statement
| Ifdef_Ite of expression * statement * statement
| Ifdef_Ite2 of expression * statement * statement * statement
and iteration =
Ast_c.iteration =
While of expression * statement
| DoWhile of statement * expression
| For of declOrExpr * exprStatement wrap * exprStatement wrap *
statement
| MacroIteration of string * argument wrap2 list * statement
and jump =
Ast_c.jump =
Goto of name
| Continue
| Break
| Return
| ReturnExpr of expression
| GotoComputed of expression
and asmbody = il * colon wrap list
and colon = Ast_c.colon = Colon of colon_option wrap2 list
and colon_option = colon_option_bis wrap
and colon_option_bis =
Ast_c.colon_option_bis =
ColonMisc
| ColonExpr of expression
and exec_code_bis =
Ast_c.exec_code_bis =
ExecEval of expression
| ExecToken
and exec_code = exec_code_bis wrap
and declaration =
Ast_c.declaration =
DeclList of onedecl wrap2 list wrap
| MacroDecl of (storagebis * string * argument wrap2 list * bool) wrap
| MacroDeclInit of
(storagebis * string * argument wrap2 list * initialiser) wrap
and onedecl =
Ast_c.onedecl = {
v_namei : (name * v_init) option;
v_type : fullType;
v_type_bis : fullType option ref;
v_storage : storage;
v_local : local_decl;
v_attr : attribute list;
v_endattr : attribute list;
}
and v_init =
Ast_c.v_init =
NoInit
| ValInit of info * initialiser
| ConstrInit of argument wrap2 list wrap
and storage = storagebis * bool
and storagebis =
Ast_c.storagebis =
NoSto
| StoTypedef
| Sto of storageClass
and storageClass = Ast_c.storageClass = Auto | Static | Register | Extern
and local_decl = Ast_c.local_decl = LocalDecl | NotLocalDecl
and initialiser = initialiserbis wrap
and initialiserbis =
Ast_c.initialiserbis =
InitExpr of expression
| InitList of initialiser wrap2 list
| InitDesignators of designator list * initialiser
| InitFieldOld of string * initialiser
| InitIndexOld of expression * initialiser
and designator = designatorbis wrap
and designatorbis =
Ast_c.designatorbis =
DesignatorField of string
| DesignatorIndex of expression
| DesignatorRange of expression * expression
and definition = definitionbis wrap
and definitionbis =
Ast_c.definitionbis = {
f_name : name;
f_type : functionType;
f_storage : storage;
f_body : compound;
f_attr : attribute list;
f_old_c_style : declaration list option;
}
and cpp_directive =
Ast_c.cpp_directive =
Define of define
| Include of includ
| Pragma of (name * string wrap list) wrap
| OtherDirective of il
and define = string wrap * (define_kind * define_val)
and define_kind =
Ast_c.define_kind =
DefineVar
| DefineFunc of string wrap wrap2 list wrap
| Undef
and define_val =
Ast_c.define_val =
DefineExpr of expression
| DefineStmt of statement
| DefineType of fullType
| DefineDoWhileZero of (statement * expression) wrap
| DefineFunction of definition
| DefineInit of initialiser
| DefineMulti of statement list
| DefineText of string wrap
| DefineEmpty
| DefineTodo
and includ =
Ast_c.includ = {
i_include : inc_file wrap;
i_rel_pos : include_rel_pos option ref;
i_overall_rel_pos : include_rel_pos option ref;
i_is_in_ifdef : bool;
i_content : (Common.filename * program) option;
}
and inc_file =
Ast_c.inc_file =
Local of inc_elem list
| NonLocal of inc_elem list
| Weird of string
and inc_elem = string
and include_rel_pos =
Ast_c.include_rel_pos = {
first_of : string list list;
last_of : string list list;
}
and ifdef_directive =
Ast_c.ifdef_directive =
IfdefDirective of (ifdefkind * matching_tag) wrap
and ifdefkind =
Ast_c.ifdefkind =
Ifdef of ifdef_guard
| IfdefElseif of ifdef_guard
| IfdefElse
| IfdefEndif
and ifdef_guard =
Ast_c.ifdef_guard =
Gifdef of macro_symbol
| Gifndef of macro_symbol
| Gif_str of string
| Gif of expression
| Gnone
and macro_symbol = string
and matching_tag = Ast_c.matching_tag = IfdefTag of (int * int)
and toplevel =
Ast_c.toplevel =
Declaration of declaration
| Definition of definition
| CppTop of cpp_directive
| IfdefTop of ifdef_directive
| MacroTop of string * argument wrap2 list * il
| EmptyDef of il
| NotParsedCorrectly of il
| FinalDef of info
| Namespace of toplevel list * il
and program = toplevel list
and metavars_binding =
(Ast_cocci.meta_name, metavar_binding_kind) Common.assoc
and metavar_binding_kind =
Ast_c.metavar_binding_kind =
MetaIdVal of string
| MetaFuncVal of string
| MetaLocalFuncVal of string
| MetaExprVal of expression * Ast_cocci.meta_name list * stripped
| MetaExprListVal of argument wrap2 list
| MetaParamVal of parameterType
| MetaParamListVal of parameterType wrap2 list
| MetaTypeVal of fullType
| MetaInitVal of initialiser
| MetaInitListVal of initialiser wrap2 list
| MetaDeclVal of declaration * declaration
| MetaFieldVal of field
| MetaFieldListVal of field list
| MetaStmtVal of statement * statement * stripped
| MetaStmtListVal of statement_sequencable list * stripped
| MetaDParamListVal of string wrap wrap2 list
| MetaFmtVal of string_format
| MetaFragListVal of string_fragment list
| MetaAssignOpVal of assignOp
| MetaBinaryOpVal of binaryOp
| MetaPosVal of (Ast_cocci.fixpos * Ast_cocci.fixpos)
| MetaPosValList of
(Common.filename * string * (posl * posl) option * posl * posl)
list
| MetaComValList of (Token_c.comment_like_token list *
Token_c.comment_like_token list *
Token_c.comment_like_token list) list
| MetaListlenVal of int
| MetaNoVal
and stripped = Ast_c.stripped = WITH_TYPES | WITHOUT_TYPES
and comments_around =
Ast_c.comments_around = {
mbefore : Token_c.comment_like_token list;
mafter : Token_c.comment_like_token list;
mbefore2 : comment_and_relative_pos list;
mafter2 : comment_and_relative_pos list;
}
and comment_and_relative_pos =
Ast_c.comment_and_relative_pos = {
minfo : Common.parse_info;
mpos : int;
}
and comment = Common.parse_info
and com = comment list ref
val nullQualif : typeQualifierbis * 'a list
val nQ : typeQualifierbis * 'a list
val defaultInt : typeCbis
val noType : unit -> ('a option * test) ref
val noInstr : statementbis * 'a list
val noTypedefDef : unit -> 'a option
val emptyMetavarsBinding : metavars_binding
val emptyAnnotCocci : Ast_cocci.mcodekind * metavars_binding list
val emptyAnnot : (Ast_cocci.mcodekind * metavars_binding list) option
val mcode_and_env_of_cocciref :
(Ast_cocci.mcodekind * metavars_binding list) option ref ->
Ast_cocci.mcodekind * metavars_binding list
val emptyComments : comments_around
val noRelPos : unit -> include_rel_pos option ref
val noInIfdef : unit -> bool ref
val no_virt_pos : Common.parse_info * int
val fakeInfo : 'a -> info
val noii : 'a list
val noattr : 'a list
val noi_content : (Common.filename * program) option
val unwrap : 'a * 'b -> 'a
val unwrap2 : 'a * 'b -> 'a
val unwrap_expr : ('a * 'b) * 'c -> 'a
val rewrap_expr : ('a * 'b) * 'c -> 'd -> ('d * 'b) * 'c
val unwrap_typeC : 'a * ('b * 'c) -> 'b
val rewrap_typeC : 'a * ('b * 'c) -> 'd -> 'a * ('d * 'c)
val unwrap_typeCbis : 'a * 'b -> 'a
val unwrap_st : 'a * 'b -> 'a
val mk_e : 'a -> 'b -> ('a * ('c option * test) ref) * 'b
val mk_e_bis : 'a -> 'b -> 'c -> ('a * 'b) * 'c
val mk_ty : 'a -> 'b -> (typeQualifierbis * 'c list) * ('a * 'b)
val mk_tybis : 'a -> 'b -> 'a * 'b
val mk_st : 'a -> 'b -> 'a * 'b
val get_ii_typeC_take_care : 'a * 'b -> 'b
val get_ii_st_take_care : 'a * 'b -> 'b
val get_ii_expr_take_care : 'a * 'b -> 'b
val get_st_and_ii : 'a * 'b -> 'a * 'b
val get_ty_and_ii : 'a * ('b * 'c) -> 'a * ('b * 'c)
val get_e_and_ii : 'a * 'b -> 'a * 'b
val get_type_expr : ('a * 'b ref) * 'c -> 'b
val set_type_expr : ('a * 'b ref) * 'c -> 'b -> unit
val get_onlytype_expr :
('a * (('b * 'c) option * 'd) ref) * 'e -> 'b option
val get_onlylocal_expr :
('a * (('b * 'c) option * 'd) ref) * 'e -> 'c option
val rewrap_str : string -> info -> info
val rewrap_charpos : int -> info -> info
val rewrap_col : int -> info -> info
val rewrap_pinfo : parse_info -> info -> info
val get_pi : parse_info -> Common.parse_info
val get_opi : parse_info -> Common.parse_info
val str_of_info : info -> string
val get_info : (Common.parse_info -> 'a) -> info -> 'a
val get_orig_info : (Common.parse_info -> 'a) -> info -> 'a
val make_expanded : info -> info
val pos_of_info : info -> int
val opos_of_info : info -> int
val line_of_info : info -> int
val col_of_info : info -> int
val file_of_info : info -> Common.filename
val mcode_of_info : info -> Ast_cocci.mcodekind
val pinfo_of_info : info -> parse_info
val parse_info_of_info : info -> Common.parse_info
val strloc_of_info : info -> string
val is_fake : info -> bool
val is_origintok : info -> bool
type posrv =
Ast_c.posrv =
Real of Common.parse_info
| Virt of virtual_position
val compare_pos : info -> info -> int
val equal_posl : 'a * 'b -> 'a * 'b -> bool
val compare_posl : int * int -> int * int -> int
val info_to_fixpos : info -> Ast_cocci.fixpos
val is_test : expression -> bool
val al_info : int -> info -> info
val semi_al_info : info -> info
val magic_real_number : int
val real_al_info : info -> info
val al_comments : bool -> comments_around -> comments_around
val al_info_cpp : int -> info -> info
val semi_al_info_cpp : info -> info
val real_al_info_cpp : bool -> info -> info
val split_comma : 'a wrap2 list -> ('a, il) Common.either list
val unsplit_comma : ('a, il) Common.either list -> 'a wrap2 list
val split_nocomma : 'a list -> ('a, il) Common.either list
val unsplit_nocomma : ('a, il) Common.either list -> 'a list
val s_of_inc_file : inc_file -> string
val s_of_inc_file_bis : inc_file -> string
val fieldname_of_fieldkind : fieldkind -> name option
val s_of_attr : (attributebis * 'a) list -> string
val str_of_name : name -> string
val get_s_and_ii_of_name : name -> string * il
val get_s_and_info_of_name : name -> string * info
val info_of_name : name -> info
val ii_of_name : name -> il
val get_local_ii_of_expr_inlining_ii_of_name :
(expressionbis * 'a) * il -> il
val get_local_ii_of_tybis_inlining_ii_of_name : typeCbis * il -> il
val info_of_type : 'a * (typeCbis * il) -> parse_info option
val get_local_ii_of_st_inlining_ii_of_name :
statementbis * info list -> info list
val name_of_parameter : parameterType -> string option
val put_annot_info :
info -> Token_annot.annot_key -> Token_annot.annot_val -> unit
val get_annot_info :
info -> Token_annot.annot_key -> Token_annot.annot_val option
val get_comments_before : info -> Token_c.comment_like_token list
val get_comments_after : info -> Token_c.comment_like_token list
val string_of_toplevel : toplevel -> string
val string_of_inc_file : inc_file -> string
end
module Parse_c :
sig
type program2 = toplevel2 list
and extended_program2 =
toplevel2 list *
(string, Lexer_parser.identkind) Common.scoped_h_env *
(string, Cpp_token_c.define_def) Hashtbl.t
and toplevel2 = Ast_c.toplevel * info_item
and info_item = string * Parser_c.token list
type 'a generic_parse_info =
'a Parse_c.generic_parse_info = {
filename : string;
ranges : Parse_c.line_restriction list option;
parse_trees : 'a;
statistics : Parsing_stat.parsing_stat;
}
type parse_info = program2 generic_parse_info
type extended_parse_info = extended_program2 generic_parse_info
val _defs : (string, Cpp_token_c.define_def) Hashtbl.t ref
val _defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref
val init_defs_macros : Common.filename -> unit
val init_defs_builtins : Common.filename -> unit
val parse_c_and_cpp :
bool -> bool -> Common.filename -> program2 * Parsing_stat.parsing_stat
val parse_c_and_cpp_keep_typedefs :
(string, Lexer_parser.identkind) Common.scoped_h_env option ->
(string, Cpp_token_c.define_def) Hashtbl.t option ->
bool ->
bool ->
Common.filename -> extended_parse_info * extended_parse_info list
val parse_cache :
(string, Lexer_parser.identkind) Common.scoped_h_env option ->
bool ->
bool ->
Common.filename ->
bool -> extended_parse_info * extended_parse_info list
val extract_macros :
Common.filename -> (string, Cpp_token_c.define_def) Common.assoc
val tokens : ?profile:bool -> Common.filename -> Parser_c.token list
val tokens_of_string : string -> Parser_c.token list
val parse : Common.filename -> Ast_c.program
val parse_gen :
cpp:bool ->
tos:bool ->
((Lexing.lexbuf -> Parser_c.token) -> Lexing.lexbuf -> 'a) ->
string -> 'a
val type_of_string : string -> Ast_c.fullType
val statement_of_string : string -> Ast_c.statement
val cstatement_of_string : string -> Ast_c.statement
val cexpression_of_string : string -> Ast_c.expression
val print_commentized : Parser_c.token list -> unit
val program_of_program2 : program2 -> Ast_c.program
val with_program2 :
(Ast_c.program -> Ast_c.program) -> program2 -> program2
type parse_error_function =
int ->
Parser_c.token list -> int * int -> string array -> int -> unit
val set_parse_error_function : parse_error_function -> unit
end
module Parser_c :
sig
type token =
Parser_c.token =
TUnknown of Ast_c.info
| TCommentSpace of Ast_c.info
| TCommentNewline of Ast_c.info
| TComment of Ast_c.info
| TInt of ((string * (Ast_c.sign * Ast_c.base)) * Ast_c.info)
| TFloat of ((string * Ast_c.floatType) * Ast_c.info)
| TChar of ((string * Ast_c.isWchar) * Ast_c.info)
| TString of ((string * Ast_c.isWchar) * Ast_c.info)
| TQuote of ((string * Ast_c.isWchar) * Ast_c.info)
| TPct of Ast_c.info
| TFormat of (string * Ast_c.info)
| TSubString of (string * Ast_c.info)
| TDecimal of ((string * string * string) * Ast_c.info)
| TIdent of (string * Ast_c.info)
| TKRParam of (string * Ast_c.info)
| Tconstructorname of (string * Ast_c.info)
| TypedefIdent of (string * Ast_c.info)
| TOPar of Ast_c.info
| TCPar of Ast_c.info
| TOBrace of Ast_c.info
| TCBrace of Ast_c.info
| TOCro of Ast_c.info
| TCCro of Ast_c.info
| TDot of Ast_c.info
| TComma of Ast_c.info
| TPtrOp of Ast_c.info
| TInc of Ast_c.info
| TDec of Ast_c.info
| TAssign of Ast_c.assignOp
| TEq of Ast_c.info
| TWhy of Ast_c.info
| TTilde of Ast_c.info
| TBang of Ast_c.info
| TEllipsis of Ast_c.info
| TDotDot of Ast_c.info
| TPtVirg of Ast_c.info
| TOrLog of Ast_c.info
| TAndLog of Ast_c.info
| TOr of Ast_c.info
| TXor of Ast_c.info
| TAnd of Ast_c.info
| TEqEq of Ast_c.info
| TNotEq of Ast_c.info
| TInf of Ast_c.info
| TSup of Ast_c.info
| TInfEq of Ast_c.info
| TSupEq of Ast_c.info
| TShl of Ast_c.info
| TShr of Ast_c.info
| TPlus of Ast_c.info
| TMinus of Ast_c.info
| TMul of Ast_c.info
| TDiv of Ast_c.info
| TMod of Ast_c.info
| TMax of Ast_c.info
| TMin of Ast_c.info
| Tchar of Ast_c.info
| Tshort of Ast_c.info
| Tint of Ast_c.info
| Tdouble of Ast_c.info
| Tfloat of Ast_c.info
| Tcomplex of Ast_c.info
| Tlong of Ast_c.info
| Tunsigned of Ast_c.info
| Tsigned of Ast_c.info
| Tvoid of Ast_c.info
| Tsize_t of Ast_c.info
| Tssize_t of Ast_c.info
| Tptrdiff_t of Ast_c.info
| Tauto of Ast_c.info
| Tregister of Ast_c.info
| Textern of Ast_c.info
| Tstatic of Ast_c.info
| Ttypedef of Ast_c.info
| Tconst of Ast_c.info
| Tvolatile of Ast_c.info
| Tstruct of Ast_c.info
| Tunion of Ast_c.info
| Tenum of Ast_c.info
| Tdecimal of Ast_c.info
| Texec of Ast_c.info
| Tbreak of Ast_c.info
| Telse of Ast_c.info
| Tswitch of Ast_c.info
| Tcase of Ast_c.info
| Tcontinue of Ast_c.info
| Tfor of Ast_c.info
| Tdo of Ast_c.info
| Tif of Ast_c.info
| Twhile of Ast_c.info
| Treturn of Ast_c.info
| Tgoto of Ast_c.info
| Tdefault of Ast_c.info
| Tsizeof of Ast_c.info
| Tnew of Ast_c.info
| Tdelete of Ast_c.info
| Tdefined of Ast_c.info
| TOParCplusplusInit of Ast_c.info
| Tnamespace of Ast_c.info
| Trestrict of Ast_c.info
| Tasm of Ast_c.info
| Tattribute of Ast_c.info
| TattributeNoarg of Ast_c.info
| Tinline of Ast_c.info
| Ttypeof of Ast_c.info
| TDefine of Ast_c.info
| TDefParamVariadic of (string * Ast_c.info)
| TCppEscapedNewline of Ast_c.info
| TCppConcatOp of Ast_c.info
| TOParDefine of Ast_c.info
| TOBraceDefineInit of Ast_c.info
| TIdentDefine of (string * Ast_c.info)
| TDefEOL of Ast_c.info
| TInclude of (string * string * bool ref * Ast_c.info)
| TIncludeStart of (Ast_c.info * bool ref)
| TIncludeFilename of (string * Ast_c.info)
| TIfdef of (Ast_c.ifdef_guard * (int * int) option ref * Ast_c.info)
| TIfdefelif of
(Ast_c.ifdef_guard * (int * int) option ref * Ast_c.info)
| TIfdefelse of ((int * int) option ref * Ast_c.info)
| TEndif of ((int * int) option ref * Ast_c.info)
| TIfdefBool of (bool * (int * int) option ref * Ast_c.info)
| TIfdefMisc of (bool * (int * int) option ref * Ast_c.info)
| TIfdefVersion of (bool * (int * int) option ref * Ast_c.info)
| TUifdef of Ast_c.info
| TUelseif of Ast_c.info
| TUendif of Ast_c.info
| TUndef of Ast_c.info
| TPrePragma of (Ast_c.info*Ast_c.info*string*Ast_c.info*
Ast_c.info*(string*Ast_c.info)list)
| TPragma of (Ast_c.info)
| TPragmaString of (string*Ast_c.info)
| TCppDirectiveOther of Ast_c.info
| TMacroAttr of (string * Ast_c.info)
| TMacroEndAttr of (string * Ast_c.info)
| TMacroStmt of (string * Ast_c.info)
| TMacroIdentBuilder of (string * Ast_c.info)
| TMacroString of (string * Ast_c.info)
| TMacroDecl of (string * Ast_c.info)
| TMacroDeclConst of Ast_c.info
| TMacroIterator of (string * Ast_c.info)
| TCommentSkipTagStart of Ast_c.info
| TCommentSkipTagEnd of Ast_c.info
| TCParEOL of Ast_c.info
| TAction of Ast_c.info
| TCommentMisc of Ast_c.info
| TCommentCpp of (Token_c.cppcommentkind * Ast_c.info)
| EOF of Ast_c.info
| TTODO of Ast_c.info
val main : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ast_c.program
val celem : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ast_c.toplevel
val statement :
(Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ast_c.statement
val expr : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ast_c.expression
val type_name :
(Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ast_c.fullType
end
module Lexer_c :
sig
val pr2 : string -> unit
val pr2_once : string -> unit
exception Lexical of string
val tok : Lexing.lexbuf -> string
val eoltok : Lexing.lexbuf -> string
val tokinfo : Lexing.lexbuf -> Ast_c.info
val eoltokinfo : Lexing.lexbuf -> Ast_c.info
val eoftokinfo : Lexing.lexbuf -> Parser_c.token
val no_ifdef_mark : unit -> (int * int) option ref
val tok_add_s : string -> Ast_c.info -> Ast_c.info
val function_cpp_eat_until_nl :
('a -> string) ->
('a -> string) -> ('a -> string) -> string -> 'a -> string
val keyword_table : (string, Ast_c.info -> Parser_c.token) Hashtbl.t
val cpp_keyword_table : (string, Ast_c.info -> Parser_c.token) Hashtbl.t
val ibm_keyword_table : (string, Ast_c.info -> Parser_c.token) Hashtbl.t
val error_radix : string -> string
val token : Lexing.lexbuf -> Parser_c.token
val char : Lexing.lexbuf -> string
val restchars : Lexing.lexbuf -> string
val string : Lexing.lexbuf -> string
val comment : Lexing.lexbuf -> string
val parse_newline : Lexing.lexbuf -> string
val cpp_in_comment_eat_until_nl : Lexing.lexbuf -> string
val cpp_eat_until_nl : Lexing.lexbuf -> string
end
module Pretty_print_c :
sig
type type_with_ident = Ast_c.fullType -> (unit -> unit) -> unit
type 'a printer = 'a -> unit
type pretty_printers =
Pretty_print_c.pretty_printers = {
expression : Ast_c.expression printer;
assignOp : Ast_c.assignOp printer;
binaryOp : Ast_c.binaryOp printer;
arg_list : Ast_c.argument Ast_c.wrap2 list printer;
arg : Ast_c.argument printer;
statement : Ast_c.statement printer;
statement_seq_list : Ast_c.statement_sequencable list printer;
decl : Ast_c.declaration printer;
field : Ast_c.field printer;
field_list : Ast_c.field list printer;
init : Ast_c.initialiser printer;
init_list : Ast_c.initialiser Ast_c.wrap2 list printer;
param : Ast_c.parameterType printer;
paramlist : Ast_c.parameterType Ast_c.wrap2 list printer;
dparamlist : string Ast_c.wrap Ast_c.wrap2 list printer;
ty : Ast_c.fullType printer;
type_with_ident : type_with_ident;
base_type : Ast_c.fullType printer;
type_with_ident_rest : type_with_ident;
toplevel : Ast_c.toplevel printer;
fragment : Ast_c.string_fragment printer;
fragment_list : Ast_c.string_fragment list printer;
format : Ast_c.string_format printer;
flow : Control_flow_c.node printer;
name : Ast_c.name printer;
}
val mk_pretty_printers :
pr_elem:Ast_c.info printer ->
pr_space:unit printer ->
pr_nl:unit printer ->
pr_indent:unit printer ->
pr_outdent:unit printer -> pr_unindent:unit printer -> pretty_printers
val pp_expression_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.expression printer
val pp_assignOp_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.assignOp printer
val pp_binaryOp_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.binaryOp printer
val pp_arg_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.argument Ast_c.wrap2 list printer
val pp_arg_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.argument printer
val pp_decl_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.declaration printer
val pp_field_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.field printer
val pp_field_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.field list printer
val pp_statement_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.statement printer
val pp_statement_seq_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.statement_sequencable list printer
val pp_param_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.parameterType printer
val pp_param_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.parameterType Ast_c.wrap2 list printer
val pp_define_param_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> string Ast_c.wrap Ast_c.wrap2 list printer
val pp_type_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.fullType printer
val pp_init_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.initialiser printer
val pp_init_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.initialiser Ast_c.wrap2 list printer
val pp_string_fragment_list_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.string_fragment list printer
val pp_string_format_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.string_format printer
val pp_program_gen :
pr_elem:Ast_c.info printer ->
pr_space:unit printer -> Ast_c.toplevel printer
val pp_expression_simple : Ast_c.expression printer
val pp_assignOp_simple : Ast_c.assignOp printer
val pp_binaryOp_simple : Ast_c.binaryOp printer
val pp_init_simple : Ast_c.initialiser printer
val pp_type_simple : Ast_c.fullType printer
val pp_decl_simple : Ast_c.declaration printer
val pp_field_simple : Ast_c.field printer
val pp_statement_simple : Ast_c.statement printer
val pp_statement_seq_list_simple :
Ast_c.statement_sequencable list printer
val pp_toplevel_simple : Ast_c.toplevel printer
val pp_string_fragment_simple : Ast_c.string_fragment printer
val pp_string_format_simple : Ast_c.string_format printer
val debug_info_of_node :
Control_flow_c.G.key -> Control_flow_c.cflow -> string
val string_of_expression : Ast_c.expression -> string
val string_of_ifdef_guard : Ast_c.ifdef_guard -> string
val string_of_toplevel : Ast_c.toplevel -> string
val string_of_fullType : Ast_c.fullType -> string
val string_of_name : Ast_c.name -> string
end
module Lib_parsing_c :
sig
val pr2 : string -> unit
val pr2_once : string -> unit
val strip_info_visitor : 'a -> Visitor_c.visitor_c_s
val al_expr : Ast_c.expression -> Ast_c.expression
val al_declaration : Ast_c.declaration -> Ast_c.declaration
val al_field : Ast_c.field -> Ast_c.field
val al_statement : Ast_c.statement -> Ast_c.statement
val al_statement_seq_list :
Ast_c.statement_sequencable list -> Ast_c.statement_sequencable list
val al_type : Ast_c.fullType -> Ast_c.fullType
val al_init : Ast_c.initialiser -> Ast_c.initialiser
val al_inits :
Ast_c.initialiser Ast_c.wrap2 list ->
Ast_c.initialiser Ast_c.wrap2 list
val al_param : Ast_c.parameterType -> Ast_c.parameterType
val al_params :
Ast_c.parameterType Ast_c.wrap2 list ->
Ast_c.parameterType Ast_c.wrap2 list
val al_define_params :
string Ast_c.wrap Ast_c.wrap2 list ->
string Ast_c.wrap Ast_c.wrap2 list
val al_arguments :
Ast_c.argument Ast_c.wrap2 list -> Ast_c.argument Ast_c.wrap2 list
val al_fields : Ast_c.field list -> Ast_c.field list
val al_name : Ast_c.name -> Ast_c.name
val al_string_format : Ast_c.string_format -> Ast_c.string_format
val al_string_fragments :
Ast_c.string_fragment list -> Ast_c.string_fragment list
val al_node : Control_flow_c.node -> Control_flow_c.node
val al_program : Ast_c.toplevel list -> Ast_c.toplevel list
val al_ii : Ast_c.info list -> Ast_c.info list
val strip_inh_info_visitor : 'a -> Visitor_c.visitor_c_s
val al_inh_expr : Ast_c.expression -> Ast_c.expression
val al_inh_declaration : Ast_c.declaration -> Ast_c.declaration
val al_inh_field : Ast_c.field -> Ast_c.field
val al_inh_field_list : Ast_c.field list -> Ast_c.field list
val al_inh_statement : Ast_c.statement -> Ast_c.statement
val al_inh_statement_seq_list :
Ast_c.statement_sequencable list -> Ast_c.statement_sequencable list
val al_inh_type : Ast_c.fullType -> Ast_c.fullType
val al_inh_init : Ast_c.initialiser -> Ast_c.initialiser
val al_inh_inits :
Ast_c.initialiser Ast_c.wrap2 list ->
Ast_c.initialiser Ast_c.wrap2 list
val al_inh_arguments :
Ast_c.argument Ast_c.wrap2 list -> Ast_c.argument Ast_c.wrap2 list
val al_inh_string_format : Ast_c.string_format -> Ast_c.string_format
val al_inh_string_fragments :
Ast_c.string_fragment list -> Ast_c.string_fragment list
val semi_strip_info_visitor : Visitor_c.visitor_c_s
val semi_al_expr : Ast_c.expression -> Ast_c.expression
val semi_al_declaration : Ast_c.declaration -> Ast_c.declaration
val semi_al_field : Ast_c.field -> Ast_c.field
val semi_al_fields : Ast_c.field list -> Ast_c.field list
val semi_al_statement : Ast_c.statement -> Ast_c.statement
val semi_al_statement_seq_list :
Ast_c.statement_sequencable list -> Ast_c.statement_sequencable list
val semi_al_type : Ast_c.fullType -> Ast_c.fullType
val semi_al_init : Ast_c.initialiser -> Ast_c.initialiser
val semi_al_inits :
Ast_c.initialiser Ast_c.wrap2 list ->
Ast_c.initialiser Ast_c.wrap2 list
val semi_al_param : Ast_c.parameterType -> Ast_c.parameterType
val semi_al_params :
Ast_c.parameterType Ast_c.wrap2 list ->
Ast_c.parameterType Ast_c.wrap2 list
val semi_al_define_params :
string Ast_c.wrap Ast_c.wrap2 list ->
string Ast_c.wrap Ast_c.wrap2 list
val semi_al_arguments :
Ast_c.argument Ast_c.wrap2 list -> Ast_c.argument Ast_c.wrap2 list
val semi_al_string_format : Ast_c.string_format -> Ast_c.string_format
val semi_al_string_fragments :
Ast_c.string_fragment list -> Ast_c.string_fragment list
val semi_al_program : Ast_c.toplevel list -> Ast_c.toplevel list
val real_strip_info_visitor : 'a -> Visitor_c.visitor_c_s
val real_al_expr : Ast_c.expression -> Ast_c.expression
val real_al_arguments :
Ast_c.argument Ast_c.wrap2 list -> Ast_c.argument Ast_c.wrap2 list
val real_al_node : Control_flow_c.node -> Control_flow_c.node
val real_al_type : Ast_c.fullType -> Ast_c.fullType
val real_al_binop : Ast_c.binaryOp -> Ast_c.binaryOp
val real_al_assignop : Ast_c.assignOp -> Ast_c.assignOp
val real_al_decl : Ast_c.declaration -> Ast_c.declaration
val real_al_init : Ast_c.initialiser -> Ast_c.initialiser
val real_al_inits :
Ast_c.initialiser Ast_c.wrap2 list ->
Ast_c.initialiser Ast_c.wrap2 list
val real_al_statement : Ast_c.statement -> Ast_c.statement
val real_al_statement_seq_list :
Ast_c.statement_sequencable list -> Ast_c.statement_sequencable list
val real_al_def : Ast_c.toplevel -> Ast_c.toplevel
val extract_info_visitor :
(Visitor_c.visitor_c -> 'a -> 'b) -> 'a -> Ast_c.info list
val ii_of_def : Ast_c.definition -> Ast_c.info list
val ii_of_decl : Ast_c.declaration -> Ast_c.info list
val ii_of_field : Ast_c.field -> Ast_c.info list
val ii_of_node : Control_flow_c.node -> Ast_c.info list
val ii_of_expr : Ast_c.expression -> Ast_c.info list
val ii_of_assignOp : Ast_c.assignOp -> Ast_c.info list
val ii_of_binaryOp : Ast_c.binaryOp -> Ast_c.info list
val ii_of_stmt : Ast_c.statement -> Ast_c.info list
val ii_of_stmtseq : Ast_c.statement_sequencable -> Ast_c.info list
val ii_of_stmtseqlist :
Ast_c.statement_sequencable list -> Ast_c.info list
val ii_of_args :
(Ast_c.argument, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_type : Ast_c.fullType -> Ast_c.info list
val ii_of_ini : Ast_c.initialiser -> Ast_c.info list
val ii_of_inis :
(Ast_c.initialiser, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_param : Ast_c.parameterType -> Ast_c.info list
val ii_of_params :
(Ast_c.parameterType, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_enum_fields :
(Ast_c.oneEnumType, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_struct_fields : Ast_c.field list -> Ast_c.info list
val ii_of_struct_fieldkinds :
Ast_c.fieldkind Ast_c.wrap list -> Ast_c.info list
val ii_of_cst :
(Ast_c.constant, string) Common.either Ast_c.wrap -> Ast_c.info list
val ii_of_fragments :
(Ast_c.string_fragment, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_format : Ast_c.string_format -> Ast_c.info list
val ii_of_define_params :
(string Ast_c.wrap, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_ident_list :
(Ast_c.name, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_exec_code_list :
(Ast_c.exec_code, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_attrs :
(Ast_c.attribute, Ast_c.il) Common.either list -> Ast_c.info list
val ii_of_toplevel : Ast_c.toplevel -> Ast_c.info list
val max_min_ii_by_pos : Ast_c.info list -> Ast_c.info * Ast_c.info
val info_to_fixpos : Ast_c.info -> Ast_cocci.fixpos
val max_min_by_pos :
Ast_c.info list -> Ast_cocci.fixpos * Ast_cocci.fixpos
val lin_col_by_pos :
Ast_c.info list ->
Common.filename * string * Ast_c.posl * Ast_c.posl
val min_pinfo_of_node : Control_flow_c.node -> Common.parse_info
val range_of_origin_ii : Ast_c.info list -> (int * int) option
val names_of_parameters_in_def : Ast_c.definitionbis -> string list
val names_of_parameters_in_macro : (('a * 'b) * 'c) list -> 'a list
val stmt_elems_of_sequencable :
Ast_c.statement_sequencable list -> Ast_c.statement list
end
module Visitor_c :
sig
type visitor_c =
Visitor_c.visitor_c = {
kexpr :
(Ast_c.expression -> unit) * visitor_c -> Ast_c.expression -> unit;
kassignOp :
(Ast_c.assignOp -> unit) * visitor_c -> Ast_c.assignOp -> unit;
kbinaryOp :
(Ast_c.binaryOp -> unit) * visitor_c -> Ast_c.binaryOp -> unit;
kstatement :
(Ast_c.statement -> unit) * visitor_c -> Ast_c.statement -> unit;
ktype : (Ast_c.fullType -> unit) * visitor_c -> Ast_c.fullType -> unit;
kdecl :
(Ast_c.declaration -> unit) * visitor_c -> Ast_c.declaration -> unit;
konedecl : (Ast_c.onedecl -> unit) * visitor_c -> Ast_c.onedecl -> unit;
konedecl_opt : bool -> (Ast_c.onedecl -> unit) * visitor_c ->
Ast_c.onedecl -> unit;
kparam :
(Ast_c.parameterType -> unit) * visitor_c ->
Ast_c.parameterType -> unit;
kdef :
(Ast_c.definition -> unit) * visitor_c -> Ast_c.definition -> unit;
kname : (Ast_c.name -> unit) * visitor_c -> Ast_c.name -> unit;
kini :
(Ast_c.initialiser -> unit) * visitor_c -> Ast_c.initialiser -> unit;
kfield : (Ast_c.field -> unit) * visitor_c -> Ast_c.field -> unit;
kcppdirective :
(Ast_c.cpp_directive -> unit) * visitor_c ->
Ast_c.cpp_directive -> unit;
kifdefdirective :
(Ast_c.ifdef_directive -> unit) * visitor_c ->
Ast_c.ifdef_directive -> unit;
kdefineval :
(Ast_c.define_val -> unit) * visitor_c -> Ast_c.define_val -> unit;
kstatementseq :
(Ast_c.statement_sequencable -> unit) * visitor_c ->
Ast_c.statement_sequencable -> unit;
knode :
(Control_flow_c.node -> unit) * visitor_c ->
Control_flow_c.node -> unit;
ktoplevel :
(Ast_c.toplevel -> unit) * visitor_c -> Ast_c.toplevel -> unit;
kfragment :
(Ast_c.string_fragment -> unit) * visitor_c ->
Ast_c.string_fragment -> unit;
kformat :
(Ast_c.string_format -> unit) * visitor_c ->
Ast_c.string_format -> unit;
kinfo : (Ast_c.info -> unit) * visitor_c -> Ast_c.info -> unit;
}
val default_visitor_c : visitor_c
val vk_expr : visitor_c -> Ast_c.expression -> unit
val vk_assignOp : visitor_c -> Ast_c.assignOp -> unit
val vk_binaryOp : visitor_c -> Ast_c.binaryOp -> unit
val vk_statement : visitor_c -> Ast_c.statement -> unit
val vk_statement_sequencable :
visitor_c -> Ast_c.statement_sequencable -> unit
val vk_statement_sequencable_list :
visitor_c -> Ast_c.statement_sequencable list -> unit
val vk_type : visitor_c -> Ast_c.fullType -> unit
val vk_decl : visitor_c -> Ast_c.declaration -> unit
val vk_decl_list : visitor_c -> Ast_c.declaration list -> unit
val vk_onedecl_opt : bool -> visitor_c -> Ast_c.onedecl -> unit
val vk_onedecl : visitor_c -> Ast_c.onedecl -> unit
val vk_ini : visitor_c -> Ast_c.initialiser -> unit
val vk_ini_list : visitor_c -> Ast_c.initialiser Ast_c.wrap2 list -> unit
val vk_inis_splitted :
visitor_c -> (Ast_c.initialiser, Ast_c.il) Common.either list -> unit
val vk_name : visitor_c -> Ast_c.name -> unit
val vk_def : visitor_c -> Ast_c.definition -> unit
val vk_node : visitor_c -> Control_flow_c.node -> unit
val vk_string_fragment : visitor_c -> Ast_c.string_fragment -> unit
val vk_string_fragments : visitor_c -> Ast_c.string_fragment list -> unit
val vk_string_fragments_splitted :
visitor_c ->
(Ast_c.string_fragment, Ast_c.il) Common.either list -> unit
val vk_string_format : visitor_c -> Ast_c.string_format -> unit
val vk_info : visitor_c -> Ast_c.info -> unit
val vk_toplevel : visitor_c -> Ast_c.toplevel -> unit
val vk_program : visitor_c -> Ast_c.program -> unit
val vk_argument : visitor_c -> Ast_c.argument -> unit
val vk_argument_list :
visitor_c -> Ast_c.argument Ast_c.wrap2 list -> unit
val vk_args_splitted :
visitor_c -> (Ast_c.argument, Ast_c.il) Common.either list -> unit
val vk_param : visitor_c -> Ast_c.parameterType -> unit
val vk_param_list :
visitor_c -> Ast_c.parameterType Ast_c.wrap2 list -> unit
val vk_params_splitted :
visitor_c -> (Ast_c.parameterType, Ast_c.il) Common.either list -> unit
val vk_struct_field : visitor_c -> Ast_c.field -> unit
val vk_struct_fields : visitor_c -> Ast_c.field list -> unit
val vk_struct_fieldkinds :
visitor_c -> Ast_c.fieldkind Ast_c.wrap list -> unit
val vk_enum_fields : visitor_c -> Ast_c.enumType -> unit
val vk_enum_fields_splitted :
visitor_c -> (Ast_c.oneEnumType, Ast_c.il) Common.either list -> unit
val vk_cst :
visitor_c -> (Ast_c.constant, string) Common.either Ast_c.wrap -> unit
val vk_define_params :
visitor_c -> string Ast_c.wrap Ast_c.wrap2 list -> unit
val vk_define_params_splitted :
visitor_c -> (string Ast_c.wrap, Ast_c.il) Common.either list -> unit
val vk_ident_list_splitted :
visitor_c -> (Ast_c.name, Ast_c.il) Common.either list -> unit
val vk_exec_code_list_splitted :
visitor_c -> (Ast_c.exec_code, Ast_c.il) Common.either list -> unit
val vk_attrs_splitted :
visitor_c -> (Ast_c.attribute, Ast_c.il) Common.either list -> unit
type 'a inout = 'a -> 'a
type visitor_c_s =
Visitor_c.visitor_c_s = {
kexpr_s :
Ast_c.expression inout * visitor_c_s -> Ast_c.expression inout;
kassignOp_s :
Ast_c.assignOp inout * visitor_c_s -> Ast_c.assignOp inout;
kbinaryOp_s :
Ast_c.binaryOp inout * visitor_c_s -> Ast_c.binaryOp inout;
kstatement_s :
Ast_c.statement inout * visitor_c_s -> Ast_c.statement inout;
ktype_s : Ast_c.fullType inout * visitor_c_s -> Ast_c.fullType inout;
kdecl_s :
Ast_c.declaration inout * visitor_c_s -> Ast_c.declaration inout;
kdef_s : Ast_c.definition inout * visitor_c_s -> Ast_c.definition inout;
kname_s : Ast_c.name inout * visitor_c_s -> Ast_c.name inout;
kini_s :
Ast_c.initialiser inout * visitor_c_s -> Ast_c.initialiser inout;
kcppdirective_s :
Ast_c.cpp_directive inout * visitor_c_s -> Ast_c.cpp_directive inout;
kifdefdirective_s :
Ast_c.ifdef_directive inout * visitor_c_s ->
Ast_c.ifdef_directive inout;
kdefineval_s :
Ast_c.define_val inout * visitor_c_s -> Ast_c.define_val inout;
kstatementseq_s :
Ast_c.statement_sequencable inout * visitor_c_s ->
Ast_c.statement_sequencable inout;
kstatementseq_list_s :
Ast_c.statement_sequencable list inout * visitor_c_s ->
Ast_c.statement_sequencable list inout;
knode_s :
Control_flow_c.node inout * visitor_c_s -> Control_flow_c.node inout;
ktoplevel_s :
Ast_c.toplevel inout * visitor_c_s -> Ast_c.toplevel inout;
kfragment_s :
Ast_c.string_fragment inout * visitor_c_s ->
Ast_c.string_fragment inout;
kformat_s :
Ast_c.string_format inout * visitor_c_s -> Ast_c.string_format inout;
kinfo_s : Ast_c.info inout * visitor_c_s -> Ast_c.info inout;
}
val default_visitor_c_s : visitor_c_s
val vk_expr_s : visitor_c_s -> Ast_c.expression -> Ast_c.expression
val vk_assignOp_s : visitor_c_s -> Ast_c.assignOp -> Ast_c.assignOp
val vk_binaryOp_s : visitor_c_s -> Ast_c.binaryOp -> Ast_c.binaryOp
val vk_argument_s : visitor_c_s -> Ast_c.argument -> Ast_c.argument
val vk_statement_s : visitor_c_s -> Ast_c.statement -> Ast_c.statement
val vk_statement_sequencable_s :
visitor_c_s ->
Ast_c.statement_sequencable -> Ast_c.statement_sequencable
val vk_statement_sequencable_list_s :
visitor_c_s ->
Ast_c.statement_sequencable list -> Ast_c.statement_sequencable list
val vk_type_s : visitor_c_s -> Ast_c.fullType -> Ast_c.fullType
val vk_decl_s : visitor_c_s -> Ast_c.declaration -> Ast_c.declaration
val vk_onedecl_opt_s : bool -> visitor_c_s -> Ast_c.onedecl -> Ast_c.onedecl
val vk_onedecl_s : visitor_c_s -> Ast_c.onedecl -> Ast_c.onedecl
val vk_decl_list_s :
visitor_c_s -> Ast_c.declaration list -> Ast_c.declaration list
val vk_ini_s : visitor_c_s -> Ast_c.initialiser -> Ast_c.initialiser
val vk_inis_splitted_s :
visitor_c_s ->
(Ast_c.initialiser, Ast_c.il) Common.either list ->
(Ast_c.initialiser, Ast_c.il) Common.either list
val vk_def_s : visitor_c_s -> Ast_c.definition -> Ast_c.definition
val vk_name_s : visitor_c_s -> Ast_c.name -> Ast_c.name
val vk_toplevel_s : visitor_c_s -> Ast_c.toplevel -> Ast_c.toplevel
val vk_string_fragment_s :
visitor_c_s -> Ast_c.string_fragment -> Ast_c.string_fragment
val vk_string_fragments_s :
visitor_c_s -> Ast_c.string_fragment list -> Ast_c.string_fragment list
val vk_string_fragments_splitted_s :
visitor_c_s ->
(Ast_c.string_fragment, Ast_c.il) Common.either list ->
(Ast_c.string_fragment, Ast_c.il) Common.either list
val vk_string_format_s :
visitor_c_s -> Ast_c.string_format -> Ast_c.string_format
val vk_info_s : visitor_c_s -> Ast_c.info -> Ast_c.info
val vk_ii_s : visitor_c_s -> Ast_c.info list -> Ast_c.info list
val vk_node_s : visitor_c_s -> Control_flow_c.node -> Control_flow_c.node
val vk_program_s : visitor_c_s -> Ast_c.program -> Ast_c.program
val vk_arguments_s :
visitor_c_s ->
Ast_c.argument Ast_c.wrap2 list -> Ast_c.argument Ast_c.wrap2 list
val vk_inis_s :
visitor_c_s ->
Ast_c.initialiser Ast_c.wrap2 list ->
Ast_c.initialiser Ast_c.wrap2 list
val vk_args_splitted_s :
visitor_c_s ->
(Ast_c.argument, Ast_c.il) Common.either list ->
(Ast_c.argument, Ast_c.il) Common.either list
val vk_params_s :
visitor_c_s ->
Ast_c.parameterType Ast_c.wrap2 list ->
Ast_c.parameterType Ast_c.wrap2 list
val vk_params_splitted_s :
visitor_c_s ->
(Ast_c.parameterType, Ast_c.il) Common.either list ->
(Ast_c.parameterType, Ast_c.il) Common.either list
val vk_param_s :
visitor_c_s -> Ast_c.parameterType -> Ast_c.parameterType
val vk_define_params_s :
visitor_c_s ->
string Ast_c.wrap Ast_c.wrap2 list ->
string Ast_c.wrap Ast_c.wrap2 list
val vk_define_params_splitted_s :
visitor_c_s ->
(string Ast_c.wrap, Ast_c.il) Common.either list ->
(string Ast_c.wrap, Ast_c.il) Common.either list
val vk_ident_list_splitted_s :
visitor_c_s ->
(Ast_c.name, Ast_c.il) Common.either list ->
(Ast_c.name, Ast_c.il) Common.either list
val vk_enum_fields_s : visitor_c_s -> Ast_c.enumType -> Ast_c.enumType
val vk_enum_fields_splitted_s :
visitor_c_s ->
(Ast_c.oneEnumType, Ast_c.il) Common.either list ->
(Ast_c.oneEnumType, Ast_c.il) Common.either list
val vk_struct_field_s : visitor_c_s -> Ast_c.field -> Ast_c.field
val vk_struct_fields_s :
visitor_c_s -> Ast_c.field list -> Ast_c.field list
val vk_exec_code_list_splitted_s :
visitor_c_s ->
(Ast_c.exec_code, Ast_c.il) Common.either list ->
(Ast_c.exec_code, Ast_c.il) Common.either list
val vk_attrs_splitted_s :
visitor_c_s ->
(Ast_c.attribute, Ast_c.il) Common.either list ->
(Ast_c.attribute, Ast_c.il) Common.either list
val vk_cst_s :
visitor_c_s -> (Ast_c.constant, string) Common.either Ast_c.wrap inout
end
module Regexp :
sig
type regexp = Regexp.regexp
val pcre_support : bool ref
val regexp : string -> regexp
val string_match : regexp -> string -> bool
end
module Config :
sig
val version : string
val path : string
val std_iso : string ref
val std_h : string ref
val dynlink_is_native : bool
val get_temp_dir_name : string
val configure_flags : string
val ocaml_version : string
val python_interpreter : string ref
end
module Flag :
sig
val sgrep_mode2 : bool ref
val show_misc : bool ref
val show_transinfo : bool ref
val show_trying : bool ref
val track_iso_usage : bool ref
val worth_trying_opt : bool ref
type scanner =
Flag.scanner =
IdUtils
| Glimpse
| CocciGrep
| GitGrep
| NoScanner
val scanner : scanner ref
val pyoutput : string ref
val ocamlc : string ref
val ocamlopt : string ref
val ocamldep : string ref
val ocamlfind : string ref
val patch : string option ref
val make_hrule : string option ref
val hrule_per_file : bool ref
val currentfile : string option ref
val currentfiles : string list ref
val current_element : string ref
val current_element_pos : (Ast_c.posl * Ast_c.posl) Lazy.t ref
val dir : string ref
val defined_virtual_rules : string list ref
val defined_virtual_env : (string * string) list ref
val set_defined_virtual_rules : string -> unit
val c_plus_plus : bool ref
val ibm : bool ref
val include_headers : bool ref
val no_include_cache : bool ref
val parmap_cores : int option ref
val parmap_chunk_size : int option ref
exception UnreadableFile of string
val cocci_attribute_names : string list ref
val add_cocci_attribute_names : string -> unit
end
module Flag_parsing_c :
sig
val path : string ref
val macro_dir : string
val mk_macro_path : cocci_path:string -> string -> string
val std_h : string ref
val common_h : string ref
val cmdline_flags_macrofile : unit -> (string * Arg.spec * string) list
val cpp_i_opts : string list ref
val cpp_d_opts : string list ref
val cmdline_flags_cpp : unit -> (string * Arg.spec * string) list
val show_parsing_error : bool ref
val verbose_lexing : bool ref
val verbose_parsing : bool ref
val verbose_type : bool ref
val verbose_cfg : bool ref
val verbose_annotater : bool ref
val verbose_unparsing : bool ref
val verbose_visit : bool ref
val verbose_cpp_ast : bool ref
val verbose_includes : bool ref
val filter_msg : bool ref
val filter_msg_define_error : bool ref
val filter_define_error : bool ref
val filter_passed_level : int ref
val pretty_print_type_info : bool ref
val pretty_print_comment_info : bool ref
val pretty_print_typedef_value : bool ref
val show_flow_labels : bool ref
val cmdline_flags_verbose : unit -> (string * Arg.spec * string) list
val debug_lexer : bool ref
val debug_etdt : bool ref
val debug_typedef : bool ref
val debug_cpp : bool ref
val debug_cpp_ast : bool ref
val debug_unparsing : bool ref
val debug_cfg : bool ref
val cmdline_flags_debugging : unit -> (string * Arg.spec * string) list
val check_annotater : bool ref
val cmdline_flags_checks : unit -> (string * Arg.spec * string) list
val label_strategy_2 : bool ref
val cmdline_flags_algos : unit -> (string * Arg.spec * string) list
val cpp_directive_passing : bool ref
val ifdef_directive_passing : bool ref
val ifdef_to_if : bool ref
val disable_multi_pass : bool ref
val disable_add_typedef : bool ref
val if0_passing : bool ref
val add_typedef_root : bool ref
val exts_ITU : bool ref
val add : string list ref -> string -> unit
val defined : string list ref
val undefined : string list ref
val cmdline_flags_parsing_algos :
unit -> (string * Arg.spec * string) list
val diff_lines : string option ref
val use_cache : bool ref
val cache_prefix : string option ref
val cache_limit : int option ref
val cmdline_flags_other : unit -> (string * Arg.spec * string) list
val int_thresholds :
(int * int * string * string * string * string) option ref
val set_int_bits : int -> unit
val set_long_bits : int -> unit
type spacing = Flag_parsing_c.spacing = LINUX | SMPL
val spacing : spacing ref
val indent : int ref
val set_linux_spacing : 'a -> unit
val set_smpl_spacing : 'a -> unit
val max_width : int ref
val no_loops : bool ref
val no_gotos : bool ref
val keep_comments : bool ref
val parsing_header_for_types : bool ref
val force_kr : bool ref
val prevent_kr : bool ref
end
module Iteration :
sig
type init_info =
(string * string) * (string list * (string * string) list)
val initialization_stack : init_info list ref
val base_file_list : string list ref
val parsed_virtual_rules : string list ref
val parsed_virtual_identifiers : string list ref
type pending_info = string list * string list * (string * string) list
val add_pending_instance :
string list option * string list * (string * string) list * bool ->
unit
val get_pending_instance : unit -> pending_info option
val check_virtual_rule : string -> unit
val check_virtual_ident : string -> unit
end
module Commands :
sig
val ocamlfind_cmd : string
val ocamlc_cmd : string
val ocamlopt_cmd : string
val ocamldep_cmd : string
end
module Common :
sig
val debugger : bool ref
type prof = Common.prof = PALL | PNONE | PSOME of string list
val profile : prof ref
val show_trace_profile : bool ref
val verbose_level : int ref
val disable_pr2_once : bool ref
val save_tmp_files : bool ref
type filename = string
type dirname = string
module BasicType : sig type filename = string end
module Infix :
sig
val ( +> ) : 'a -> ('a -> 'b) -> 'b
val ( =~ ) : string -> string -> bool
val ( ==~ ) : string -> Str.regexp -> bool
end
val _tab_level_print : int ref
val indent_do : (unit -> 'a) -> 'a
val reset_pr_indent : unit -> unit
val _prefix_pr : string ref
val pr : string -> unit
val pr_no_nl : string -> unit
val pr_xxxxxxxxxxxxxxxxx : unit -> unit
val _chan_pr2 : out_channel option ref
val print_to_stderr : bool ref
val pr2 : string -> unit
val pr2_no_nl : string -> unit
val pr2_xxxxxxxxxxxxxxxxx : unit -> unit
val pr2_gen : 'a -> unit
val _already_printed : (string, bool) Hashtbl.t
val pr2_once : string -> unit
val clear_pr2_once : unit -> unit
val mk_pr2_wrappers : bool ref -> (string -> unit) * (string -> unit)
val redirect_stdout_opt : filename option -> (unit -> 'a) -> 'a
val redirect_stdout_stderr : filename -> (unit -> unit) -> unit
val redirect_stdin : filename -> (unit -> 'a) -> 'a
val redirect_stdin_opt : filename option -> (unit -> 'a) -> 'a
val with_pr2_to_string : (unit -> unit) -> string list
val spf : ('a, unit, string) format -> 'a
val _chan : out_channel ref
val start_log_file : unit -> unit
val log : string -> unit
val log2 : string -> unit
val log3 : string -> unit
val log4 : string -> unit
val if_log : (unit -> unit) -> unit
val if_log2 : (unit -> unit) -> unit
val if_log3 : (unit -> unit) -> unit
val if_log4 : (unit -> unit) -> unit
val pause : unit -> unit
val _trace_var : int ref
val add_var : unit -> unit
val dec_var : unit -> unit
val get_var : unit -> int
val print_n : int -> string -> unit
val printerr_n : int -> string -> unit
val _debug : bool ref
val debugon : unit -> unit
val debugoff : unit -> unit
val debug : (unit -> unit) -> unit
val _profile_table : (string, float ref * int ref) Hashtbl.t ref
val profile_code : string -> (unit -> 'a) -> 'a
val profile_diagnostic : unit -> string
val reset_profile : unit -> unit
val profile_code_exclusif : string -> (unit -> 'a) -> 'a
val profile_code_inside_exclusif_ok : string -> (unit -> 'a) -> 'a
val report_if_take_time : int -> string -> (unit -> 'a) -> 'a
val profile_code2 : string -> (unit -> 'a) -> 'a
val example : bool -> unit
val example2 : string -> bool -> unit
val assert_equal : 'a -> 'a -> unit
val _list_bool : (string * bool) list ref
val example3 : string -> bool -> unit
val test_all : unit -> unit
type score_result = Common.score_result = Ok | Pb of string
type score = (string, score_result) Hashtbl.t
type score_list = (string * score_result) list
val empty_score : unit -> score
val load_score : string -> unit -> score
val save_score : score -> string -> unit
val regression_testing : score -> filename -> unit
val regression_testing_vs : score -> score -> score
val total_scores : score -> int * int
val print_score : score -> unit
val print_total_score : score -> unit
type 'a gen = unit -> 'a
val ig : int gen
val lg : 'a gen -> 'a list gen
val pg : 'a gen -> 'b gen -> ('a * 'b) gen
val polyg : int gen
val ng : string gen
val oneofl : 'a list -> 'a gen
val oneof : 'a gen list -> 'a gen
val always : 'a -> 'a gen
val frequency : (int * 'a gen) list -> 'a gen
val frequencyl : (int * 'a) list -> 'a gen
val laws : string -> ('a -> bool) -> 'a gen -> 'a option
val statistic_number : 'a list -> (int * 'a) list
val statistic : 'a list -> (int * 'a) list
val laws2 :
string -> ('a -> bool * 'b) -> 'a gen -> 'a option * (int * 'b) list
val get_value : filename -> 'a
val read_value : filename -> 'a
val write_value : 'a -> filename -> unit
val write_back : ('a -> 'b) -> filename -> unit
val marshal__to_string : 'a -> Marshal.extern_flags list -> string
val marshal__from_string : string -> int -> 'a
val _counter : int ref
val _counter2 : int ref
val _counter3 : int ref
val counter : unit -> int
val counter2 : unit -> int
val counter3 : unit -> int
type timestamp = int
val string_of_string : (string -> string) -> string
val string_of_list : ('a -> string) -> 'a list -> string
val string_of_unit : unit -> string
val string_of_array : ('a -> string) -> 'a array -> string
val string_of_option : ('a -> string) -> 'a option -> string
val print_bool : bool -> unit
val print_option : ('a -> 'b) -> 'a option -> unit
val print_list : ('a -> 'b) -> 'a list -> unit
val print_between : (unit -> unit) -> ('a -> unit) -> 'a list -> unit
val pp_do_in_box : (unit -> unit) -> unit
val pp_f_in_box : (unit -> 'a) -> 'a
val pp_do_in_zero_box : (unit -> unit) -> unit
val pp : string -> unit
val format_to_string : (unit -> unit) -> string
val adjust_pp_with_indent : (unit -> unit) -> unit
val adjust_pp_with_indent_and_header : string -> (unit -> unit) -> unit
val mk_str_func_of_assoc_conv :
('a * string) list -> (string -> 'a) * ('a -> string)
val ( +> ) : 'a -> ('a -> 'b) -> 'b
val ( +!> ) : 'a ref -> ('a -> 'a) -> unit
val ( $ ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c
val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
val uncurry : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
val id : 'a -> 'a
val do_nothing : unit -> unit
val forever : (unit -> unit) -> unit
val applyn : int -> ('a -> 'a) -> 'a -> 'a
class ['a] shared_variable_hook :
'a ->
object
val mutable data : 'a
val mutable registered : (unit -> unit) list
method get : 'a
method modify : ('a -> 'a) -> unit
method register : (unit -> unit) -> unit
method set : 'a -> unit
end
val fixpoint : ('a -> 'a) -> 'a -> 'a
val fixpoint_for_object :
((< equal : 'a -> bool; .. > as 'a) -> 'a) -> 'a -> 'a
val add_hook :
('a -> ('a -> 'b) -> 'b) ref -> ('a -> ('a -> 'b) -> 'b) -> unit
val add_hook_action : ('a -> unit) -> ('a -> unit) list ref -> unit
val run_hooks_action : 'a -> ('a -> unit) list ref -> unit
type 'a mylazy = unit -> 'a
val save_excursion : 'a ref -> (unit -> 'b) -> 'b
val save_excursion_and_disable : bool ref -> (unit -> 'a) -> 'a
val save_excursion_and_enable : bool ref -> (unit -> 'a) -> 'a
val unwind_protect : (unit -> 'a) -> (exn -> 'b) -> 'a
val finalize : (unit -> 'a) -> (unit -> 'b) -> 'a
val memoized : ('a, 'b) Hashtbl.t -> 'a -> (unit -> 'b) -> 'b
val cache_in_ref : 'a option ref -> (unit -> 'a) -> 'a
val cache_computation :
?verbose:bool ->
?use_cache:bool -> filename -> string -> (unit -> 'a) -> 'a
val cache_computation_robust :
filename ->
string -> filename list * 'a -> string -> (unit -> 'b) -> 'b
val cache_computation_robust_in_dir :
string option ->
filename ->
string -> filename list * 'a -> string -> (unit -> 'b) -> 'b
val once : ('a -> unit) -> 'a -> unit
val before_leaving : ('a -> unit) -> 'a -> 'a
val main_boilerplate : (unit -> unit) -> unit
exception FileAlreadyLocked
val acquire_file_lock : filename -> unit
val release_file_lock : filename -> unit
exception Todo
exception Impossible of int
exception Here
exception ReturnExn
exception Multi_found
exception WrongFormat of string
val internal_error : string -> 'a
val myassert : bool -> unit
val warning : string -> 'a -> 'a
val error_cant_have : 'a -> 'b
val exn_to_s : exn -> string
val string_of_exn : exn -> string
type evotype = unit
val evoval : evotype
val check_stack_size : int -> unit
val check_stack_nbfiles : int -> unit
val _init_gc_stack : unit
type arg_spec_full = Arg.key * Arg.spec * Arg.doc
type cmdline_options = arg_spec_full list
type options_with_title = string * string * arg_spec_full list
type cmdline_sections = options_with_title list
val parse_options :
cmdline_options -> Arg.usage_msg -> string array -> string list
val usage : Arg.usage_msg -> cmdline_options -> unit
val short_usage : Arg.usage_msg -> short_opt:cmdline_options -> unit
val long_usage :
Arg.usage_msg ->
short_opt:cmdline_options -> long_opt:cmdline_sections -> unit
val arg_align2 : cmdline_options -> cmdline_options
val arg_parse2 :
cmdline_options -> Arg.usage_msg -> (unit -> unit) -> string list
type flag_spec = Arg.key * Arg.spec * Arg.doc
type action_spec = Arg.key * Arg.doc * action_func
and action_func = string list -> unit
type cmdline_actions = action_spec list
exception WrongNumberOfArguments
val mk_action_0_arg : (unit -> unit) -> action_func
val mk_action_1_arg : (string -> unit) -> action_func
val mk_action_2_arg : (string -> string -> unit) -> action_func
val mk_action_3_arg : (string -> string -> string -> unit) -> action_func
val mk_action_n_arg : (string list -> unit) -> action_func
val options_of_actions : string ref -> cmdline_actions -> cmdline_options
val action_list : cmdline_actions -> Arg.key list
val do_action : Arg.key -> string list -> cmdline_actions -> unit
val ( ||| ) : 'a -> 'a -> 'a
val ( ==> ) : bool -> bool -> bool
val xor : 'a -> 'a -> bool
val string_of_char : char -> string
val string_of_chars : char list -> string
val is_single : char -> bool
val is_symbol : char -> bool
val is_space : char -> bool
val is_upper : char -> bool
val is_lower : char -> bool
val is_alpha : char -> bool
val is_digit : char -> bool
val cbetween : char -> char -> char -> bool
val ( /! ) : int -> int -> int
val do_n : int -> (unit -> unit) -> unit
val foldn : ('a -> int -> 'a) -> 'a -> int -> 'a
val pi : float
val pi2 : float
val pi4 : float
val deg_to_rad : float -> float
val clampf : float -> float
val square : float -> float
val power : int -> int -> int
val between : 'a -> 'a -> 'a -> bool
val between_strict : int -> int -> int -> bool
val bitrange : int -> int -> bool
val prime1 : int -> int option
val prime : int -> int option
val sum : int list -> int
val product : int list -> int
val decompose : int -> int list
val mysquare : int -> int
val sqr : float -> float
type compare = Common.compare = Equal | Inf | Sup
val ( <=> ) : 'a -> 'a -> compare
val ( <==> ) : 'a -> 'a -> int
type uint = int
val int_of_stringchar : string -> int
val int_of_base : string -> int -> int
val int_of_stringbits : string -> int
val int_of_octal : string -> int
val int_of_all : string -> int
val ( += ) : int ref -> int -> unit
val ( -= ) : int ref -> int -> unit
val pourcent : int -> int -> int
val pourcent_float : int -> int -> float
val pourcent_float_of_floats : float -> float -> float
val pourcent_good_bad : int -> int -> int
val pourcent_good_bad_float : int -> int -> float
type 'a max_with_elem = int ref * 'a ref
val update_max_with_elem :
'a max_with_elem ->
is_better:(int -> int ref -> bool) -> int * 'a -> unit
type 'a numdict =
'a Common.numdict =
NumDict of
(('a -> 'a -> 'a) * ('a -> 'a -> 'a) * ('a -> 'a -> 'a) *
('a -> 'a))
val add : 'a numdict -> 'a -> 'a -> 'a
val mul : 'a numdict -> 'a -> 'a -> 'a
val div : 'a numdict -> 'a -> 'a -> 'a
val neg : 'a numdict -> 'a -> 'a
val numd_int : int numdict
val numd_float : float numdict
val testd : 'a numdict -> 'a -> 'a
module ArithFloatInfix :
sig
val ( + ) : float -> float -> float
val ( - ) : float -> float -> float
val ( / ) : float -> float -> float
val ( * ) : float -> float -> float
val ( +.. ) : int -> int -> int
val ( -.. ) : int -> int -> int
val ( /.. ) : int -> int -> int
val ( *.. ) : int -> int -> int
val ( += ) : float ref -> float -> unit
end
val _init_random : unit
val random_list : 'a list -> 'a
val randomize_list : 'a list -> 'a list
val random_subset_of_list : int -> 'a list -> 'a list
type 'a pair = 'a * 'a
type 'a triple = 'a * 'a * 'a
val fst3 : 'a * 'b * 'c -> 'a
val snd3 : 'a * 'b * 'c -> 'b
val thd3 : 'a * 'b * 'c -> 'c
val sndthd : 'a * 'b * 'c -> 'b * 'c
val map_fst : ('a -> 'b) -> 'a * 'c -> 'b * 'c
val map_snd : ('a -> 'b) -> 'c * 'a -> 'c * 'b
val pair : ('a -> 'b) -> 'a * 'a -> 'b * 'b
val snd : 'a * 'b -> 'b
val fst : 'a * 'b -> 'a
val double : 'a -> 'a * 'a
val swap : 'a * 'b -> 'b * 'a
val tuple_of_list1 : 'a list -> 'a
val tuple_of_list2 : 'a list -> 'a * 'a
val tuple_of_list3 : 'a list -> 'a * 'a * 'a
val tuple_of_list4 : 'a list -> 'a * 'a * 'a * 'a
val tuple_of_list5 : 'a list -> 'a * 'a * 'a * 'a * 'a
val tuple_of_list6 : 'a list -> 'a * 'a * 'a * 'a * 'a * 'a
type ('a, 'b) either = ('a, 'b) Common.either = Left of 'a | Right of 'b
type ('a, 'b, 'c) either3 =
('a, 'b, 'c) Common.either3 =
Left3 of 'a
| Middle3 of 'b
| Right3 of 'c
val just : 'a option -> 'a
val some : 'a option -> 'a
val fmap : ('a -> 'b) -> 'a option -> 'b option
val map_option : ('a -> 'b) -> 'a option -> 'b option
val equal_option : ('a -> 'b -> bool) -> 'a option -> 'b option -> bool
val default : 'a -> ('b -> 'a) -> 'b option -> 'a
val do_option : ('a -> unit) -> 'a option -> unit
val optionise : (unit -> 'a) -> 'a option
val some_or : 'a option -> 'a -> 'a
val partition_either :
('a -> ('b, 'c) either) -> 'a list -> 'b list * 'c list
val partition_either3 :
('a -> ('b, 'c, 'd) either3) -> 'a list -> 'b list * 'c list * 'd list
val filter_some : 'a option list -> 'a list
val map_filter : ('a -> 'b option) -> 'a list -> 'b list
val tail_map_filter : ('a -> 'b option) -> 'a list -> 'b list
val find_some : ('a -> 'b option) -> 'a list -> 'b
val list_to_single_or_exn : 'a list -> 'a
type bool3 = Common.bool3 = True3 | False3 | TrueFalsePb3 of string
val _shareds : (string, string) Hashtbl.t
val shared_string : string -> string
val chop : string -> string
val chop_dirsymbol : string -> string
val ( <!!> ) : string -> int * int -> string
val ( <!> ) : string -> int -> char
val take_string : int -> string -> string
val take_string_safe : int -> string -> string
val quote : string -> string
val is_blank_string : string -> bool
val is_string_prefix : string -> string -> bool
val plural : int -> string -> string
val showCodeHex : int list -> unit
val size_mo_ko : int -> string
val size_ko : int -> string
val edit_distance : string -> string -> int
val md5sum_of_string : string -> string
val regexp_alpha : Str.regexp
val regexp_int : Str.regexp
val regexp_word : Str.regexp
val _memo_compiled_regexp : (string, Str.regexp) Hashtbl.t
val ( =~ ) : string -> string -> bool
val ( ==~ ) : string -> Str.regexp -> bool
val regexp_match : string -> string -> string
val matched : int -> string -> string
val matched1 : string -> string
val matched2 : string -> string * string
val matched3 : string -> string * string * string
val matched4 : string -> string * string * string * string
val matched5 : string -> string * string * string * string * string
val matched6 :
string -> string * string * string * string * string * string
val matched7 :
string -> string * string * string * string * string * string * string
val string_match_substring : Str.regexp -> string -> bool
val split : string -> string -> string list
val split_list_regexp :
string -> string list -> (string * string list) list
val all_match : string -> string -> string list
val global_replace_regexp :
string -> (string -> string) -> string -> string
val regular_words : string -> string list
val contain_regular_word : string -> bool
val filesuffix : filename -> string
val fileprefix : filename -> string
val adjust_ext_if_needed : filename -> string -> filename
val db_of_filename : filename -> string * filename
val filename_of_db : string * filename -> filename
val dbe_of_filename : filename -> string * string * string
val dbe_of_filename_nodot : filename -> string * string * string
val dbe_of_filename_safe :
filename -> (string * string * string, string * string) either
val filename_of_dbe : string * string * string -> filename
val replace_ext : filename -> string -> string -> filename
val normalize_path : filename -> filename
val relative_to_absolute : filename -> filename
val is_relative : filename -> bool
val is_absolute : filename -> bool
val filename_without_leading_path : string -> filename -> filename
type langage = Common.langage = English | Francais | Deutsch
type month =
Common.month =
Jan
| Feb
| Mar
| Apr
| May
| Jun
| Jul
| Aug
| Sep
| Oct
| Nov
| Dec
type year = Common.year = Year of int
type day = Common.day = Day of int
type date_dmy = Common.date_dmy = DMY of day * month * year
type hour = Common.hour = Hour of int
type minute = Common.minute = Min of int
type second = Common.second = Sec of int
type time_hms = Common.time_hms = HMS of hour * minute * second
type full_date = date_dmy * time_hms
type days = Common.days = Days of int
type time_dmy = Common.time_dmy = TimeDMY of day * month * year
type float_time = float
val mk_date_dmy : int -> int -> int -> date_dmy
val check_date_dmy : date_dmy -> unit
val check_time_dmy : time_dmy -> unit
val check_time_hms : time_hms -> unit
val int_to_month : int -> string
val int_of_month : month -> int
val month_of_string : string -> month
val month_of_string_long : string -> month
val string_of_month : month -> string
val string_of_date_dmy : date_dmy -> string
val string_of_unix_time : ?langage:langage -> Unix.tm -> string
val short_string_of_unix_time : ?langage:langage -> Unix.tm -> string
val string_of_floattime : ?langage:langage -> float_time -> string
val short_string_of_floattime : ?langage:langage -> float_time -> string
val floattime_of_string : string -> float_time
val dmy_to_unixtime : date_dmy -> float_time * Unix.tm
val unixtime_to_dmy : Unix.tm -> date_dmy
val unixtime_to_floattime : Unix.tm -> float_time
val floattime_to_unixtime : float_time -> Unix.tm
val sec_to_days : int -> string
val sec_to_hours : int -> string
val today : unit -> float_time
val yesterday : unit -> float_time
val tomorrow : unit -> float_time
val lastweek : unit -> float_time
val lastmonth : unit -> float_time
val week_before : float_time -> float_time
val month_before : float_time -> float_time
val week_after : float_time -> float_time
val days_in_week_of_day : float_time -> float_time list
val first_day_in_week_of_day : float_time -> float_time
val last_day_in_week_of_day : float_time -> float_time
val day_secs : float_time
val rough_days_since_jesus : date_dmy -> days
val rough_days_between_dates : date_dmy -> date_dmy -> days
val string_of_unix_time_lfs : Unix.tm -> string
val is_more_recent : date_dmy -> date_dmy -> bool
val max_dmy : date_dmy -> date_dmy -> date_dmy
val min_dmy : date_dmy -> date_dmy -> date_dmy
val maximum_dmy : date_dmy list -> date_dmy
val minimum_dmy : date_dmy list -> date_dmy
val this_year : unit -> int
val list_of_string : string -> char list
val lines : string -> string list
val unlines : string list -> string
val words : string -> string list
val unwords : string list -> string
val split_space : string -> string list
val lines_with_nl : string -> string list
val nblines : string -> int
val cat : filename -> string list
val cat_orig : filename -> string list
val cat_array : filename -> string array
val uncat : string list -> filename -> unit
val interpolate : string -> string list
val echo : string -> string
val process_output_to_list : string -> string list
val cmd_to_list : string -> string list
val cmd_to_list_and_status : string -> string list * Unix.process_status
val file_to_stdout : string -> unit
val file_to_stderr : string -> unit
val command2 : string -> unit
val _batch_mode : bool ref
val command2_y_or_no : string -> bool
val command2_y_or_no_exit_if_no : string -> unit
val do_in_fork : (unit -> unit) -> int
val mkdir : ?mode:Unix.file_perm -> string -> unit
val write_file : file:filename -> string -> unit
val filesize : filename -> int
val filemtime : filename -> float
val nblines_file : filename -> int
val lfile_exists : filename -> bool
val is_directory : filename -> bool
val capsule_unix : ('a -> unit) -> 'a -> unit
val readdir_to_kind_list : string -> Unix.file_kind -> string list
val readdir_to_dir_list : string -> string list
val readdir_to_file_list : string -> string list
val readdir_to_link_list : string -> string list
val readdir_to_dir_size_list : string -> (string * int) list
val glob : string -> filename list
val files_of_dir_or_files : string -> string list -> filename list
val files_of_dir_or_files_no_vcs : string -> string list -> filename list
val files_of_dir_or_files_no_vcs_post_filter :
string -> string list -> filename list
val sanity_check_files_and_adjust :
string -> string list -> filename list
type rwx = [ `R | `W | `X ] list
val file_perm_of : u:rwx -> g:rwx -> o:rwx -> Unix.file_perm
val has_env : string -> bool
val with_open_outfile :
filename -> ((string -> unit) * out_channel -> 'a) -> 'a
val with_open_infile : filename -> (in_channel -> 'a) -> 'a
val with_open_outfile_append :
filename -> ((string -> unit) * out_channel -> 'a) -> 'a
val with_open_stringbuf : ((string -> unit) * Buffer.t -> unit) -> string
exception Timeout
val timeout_function : string -> int -> (unit -> 'a) -> 'a
val timeout_function_opt : string -> int option -> (unit -> 'a) -> 'a
val remove_file : string -> unit
val _temp_files_created : string list ref
val temp_files : string ref
val new_temp_file : string -> string -> filename
val erase_temp_files : unit -> unit
val erase_this_temp_file : filename -> unit
exception UnixExit of int
val exn_to_real_unixexit : (unit -> 'a) -> 'a
val map_eff_rev : ('a -> 'b) -> 'a list -> 'b list
val acc_map : ('a -> 'b) -> 'a list -> 'b list
val zip : 'a list -> 'b list -> ('a * 'b) list
val combine4 :
'a list -> 'b list -> 'c list -> 'd list -> ('a * 'b * 'c * 'd) list
val zip_safe : 'a list -> 'b list -> ('a * 'b) list
val unzip : ('a * 'b) list -> 'a list * 'b list
val take : int -> 'a list -> 'a list
val take_safe : int -> 'a list -> 'a list
val take_until : ('a -> bool) -> 'a list -> 'a list
val take_while : ('a -> bool) -> 'a list -> 'a list
val drop : int -> 'a list -> 'a list
val drop_while : ('a -> bool) -> 'a list -> 'a list
val drop_until : ('a -> bool) -> 'a list -> 'a list
val span : ('a -> bool) -> 'a list -> 'a list * 'a list
val skip_until : ('a list -> bool) -> 'a list -> 'a list
val skipfirst : 'a -> 'a list -> 'a list
val fpartition : ('a -> 'b option) -> 'a list -> 'b list * 'a list
val groupBy : ('a -> 'a -> bool) -> 'a list -> 'a list list
val exclude_but_keep_attached :
('a -> bool) -> 'a list -> ('a * 'a list) list
val group_by_post :
('a -> bool) -> 'a list -> ('a list * 'a) list * 'a list
val group_by_pre :
('a -> bool) -> 'a list -> 'a list * ('a * 'a list) list
val group_by_mapped_key : ('a -> 'b) -> 'a list -> ('b * 'a list) list
val group_assoc_bykey_eff : ('a * 'b) list -> ('a * 'b list) list
val splitAt : int -> 'a list -> 'a list * 'a list
val split_when : ('a -> bool) -> 'a list -> 'a list * 'a * 'a list
val split_gen_when :
('a list -> 'a list option) -> 'a list -> 'a list list
val pack : int -> 'a list -> 'a list list
val enum : int -> int -> int list
val repeat : 'a -> int -> 'a list
val generate : int -> 'a -> 'a list
val index_list : 'a list -> ('a * int) list
val index_list_1 : 'a list -> ('a * int) list
val index_list_and_total : 'a list -> ('a * int * int) list
val iter_index : ('a -> int -> 'b) -> 'a list -> unit
val map_index : ('a -> int -> 'b) -> 'a list -> 'b list
val filter_index : (int -> 'a -> bool) -> 'a list -> 'a list
val fold_left_with_index : ('a -> 'b -> int -> 'a) -> 'a -> 'b list -> 'a
val nth : 'a list -> int -> 'a
val rang : 'a -> 'a list -> int
val last_n : int -> 'a list -> 'a list
val snoc : 'a -> 'a list -> 'a list
val cons : 'a -> 'a list -> 'a list
val uncons : 'a list -> 'a * 'a list
val safe_tl : 'a list -> 'a list
val head_middle_tail : 'a list -> 'a * 'a list * 'a
val last : 'a list -> 'a
val list_init : 'a list -> 'a list
val list_last : 'a list -> 'a
val removelast : 'a list -> 'a list
val inits : 'a list -> 'a list list
val tails : 'a list -> 'a list list
val foldl1 : ('a -> 'a -> 'a) -> 'a list -> 'a
val fold_k :
('a -> 'b -> ('a -> 'a) -> 'a) -> ('a -> 'a) -> 'a -> 'b list -> 'a
val fold_right1 : ('a -> 'a -> 'a) -> 'a list -> 'a
val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
val rev_map : ('a -> 'b) -> 'a list -> 'b list
val join_gen : 'a -> 'a list -> 'a list
val do_withenv :
(('a -> 'b) -> 'c -> 'd) ->
('e -> 'a -> 'b * 'e) -> 'e -> 'c -> 'd * 'e
val map_withenv : ('a -> 'b -> 'c * 'a) -> 'a -> 'b list -> 'c list * 'a
val map_withkeep : ('a -> 'b) -> 'a list -> ('b * 'a) list
val collect_accu : ('a -> 'b list) -> 'b list -> 'a list -> 'b list
val collect : ('a -> 'b list) -> 'a list -> 'b list
val remove : 'a -> 'a list -> 'a list
val exclude : ('a -> bool) -> 'a list -> 'a list
val uniq : 'a list -> 'a list
val uniq_eff : 'a list -> 'a list
val has_no_duplicate : 'a list -> bool
val is_set_as_list : 'a list -> bool
val get_duplicates : 'a list -> 'a list
val doublon : 'a list -> bool
val reverse : 'a list -> 'a list
val rev : 'a list -> 'a list
val rotate : 'a list -> 'a list
val map_flatten : ('a -> 'b list) -> 'a list -> 'b list
val map2 : ('a -> 'b) -> 'a list -> 'b list
val map3 : ('a -> 'b) -> 'a list -> 'b list
val maximum : 'a list -> 'a
val minimum : 'a list -> 'a
val min_with : ('a -> 'b) -> 'a list -> 'a
val two_mins_with : ('a -> 'b) -> 'a list -> 'a * 'a
val all_assoc : 'a -> ('a * 'b) list -> 'b list
val prepare_want_all_assoc : ('a * 'b) list -> ('a * 'b list) list
val or_list : bool list -> bool
val and_list : bool list -> bool
val sum_float : float list -> float
val sum_int : int list -> int
val avg_list : int list -> float
val return_when : ('a -> 'b option) -> 'a list -> 'b
val grep_with_previous : ('a -> 'a -> bool) -> 'a list -> 'a list
val iter_with_previous : ('a -> 'a -> 'b) -> 'a list -> unit
val iter_with_before_after :
('a list -> 'a -> 'a list -> unit) -> 'a list -> unit
val get_pair : 'a list -> ('a * 'a) list
val permutation : 'a list -> 'a list list
val remove_elem_pos : int -> 'a list -> 'a list
val insert_elem_pos : 'a * int -> 'a list -> 'a list
val uncons_permut : 'a list -> (('a * int) * 'a list) list
val uncons_permut_lazy : 'a list -> (('a * int) * 'a list Lazy.t) list
val pack_sorted : ('a -> 'a -> bool) -> 'a list -> 'a list list
val keep_best : ('a * 'a -> 'a option) -> 'a list -> 'a list
val sorted_keep_best : ('a -> 'a -> 'a option) -> 'a list -> 'a list
val cartesian_product : 'a list -> 'b list -> ('a * 'b) list
val equal_list : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
val surEnsemble : 'a list -> 'a list list -> 'a list list
val realCombinaison : 'a list -> 'a list list
val combinaison : 'a list -> ('a * 'a) list
val insere : 'a -> 'a list list -> 'a list list
val insereListeContenant : 'a list -> 'a -> 'a list list -> 'a list list
val fusionneListeContenant : 'a * 'a -> 'a list list -> 'a list list
val array_find_index : (int -> bool) -> 'a array -> int
val array_find_index_via_elem : ('a -> bool) -> 'a array -> int
type idx = Common.idx = Idx of int
val next_idx : idx -> idx
val int_of_idx : idx -> int
val array_find_index_typed : (idx -> bool) -> 'a array -> idx
type 'a matrix = 'a array array
val map_matrix : ('a -> 'b) -> 'a matrix -> 'b matrix
val make_matrix_init :
nrow:int -> ncolumn:int -> (int -> int -> 'a) -> 'a matrix
val iter_matrix : (int -> int -> 'a -> unit) -> 'a matrix -> unit
val nb_rows_matrix : 'a matrix -> int
val nb_columns_matrix : 'a matrix -> int
val rows_of_matrix : 'a matrix -> 'a list list
val columns_of_matrix : 'a matrix -> 'a list list
val all_elems_matrix_by_row : 'a matrix -> 'a list
type 'a set = 'a list
val empty_set : 'a set
val insert_set : 'a -> 'a set -> 'a set
val single_set : 'a -> 'a set
val set : 'a list -> 'a set
val is_set : 'a list -> bool
val exists_set : ('a -> bool) -> 'a set -> bool
val forall_set : ('a -> bool) -> 'a set -> bool
val filter_set : ('a -> bool) -> 'a set -> 'a set
val fold_set : ('a -> 'b -> 'a) -> 'a -> 'b set -> 'a
val map_set : ('a -> 'b) -> 'a set -> 'b set
val member_set : 'a -> 'a set -> bool
val find_set : ('a -> bool) -> 'a list -> 'a
val sort_set : ('a -> 'a -> int) -> 'a list -> 'a list
val iter_set : ('a -> unit) -> 'a list -> unit
val top_set : 'a set -> 'a
val inter_set : 'a set -> 'a set -> 'a set
val union_set : 'a set -> 'a set -> 'a set
val minus_set : 'a set -> 'a set -> 'a set
val union_all : 'a set list -> 'a set
val inter_all : 'a set list -> 'a set
val big_union_set : ('a -> 'b set) -> 'a set -> 'b set
val card_set : 'a set -> int
val include_set : 'a set -> 'a set -> bool
val equal_set : 'a set -> 'a set -> bool
val include_set_strict : 'a set -> 'a set -> bool
val ( $*$ ) : 'a set -> 'a set -> 'a set
val ( $+$ ) : 'a set -> 'a set -> 'a set
val ( $-$ ) : 'a set -> 'a set -> 'a set
val ( $?$ ) : 'a -> 'a set -> bool
val ( $<$ ) : 'a set -> 'a set -> bool
val ( $<=$ ) : 'a set -> 'a set -> bool
val ( $=$ ) : 'a set -> 'a set -> bool
val ( $@$ ) : 'a list -> 'a list -> 'a list
val nub : 'a list -> 'a list
val diff_two_say_set_eff :
'a list -> 'a list -> 'a list * 'a list * 'a list
type ('a, 'b) assoc = ('a * 'b) list
val assoc_to_function : ('a, 'b) assoc -> 'a -> 'b
val empty_assoc : ('a, 'b) assoc
val fold_assoc : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
val insert_assoc : 'a -> 'a list -> 'a list
val map_assoc : ('a -> 'b) -> 'a list -> 'b list
val filter_assoc : ('a -> bool) -> 'a list -> 'a list
val assoc : 'a -> ('a * 'b) list -> 'b
val keys : ('a * 'b) list -> 'a list
val lookup : 'a -> ('a * 'b) list -> 'b
val del_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list
val replace_assoc : 'a * 'b -> ('a * 'b) list -> ('a * 'b) list
val apply_assoc : 'a -> ('b -> 'b) -> ('a * 'b) list -> ('a * 'b) list
val big_union_assoc : ('a -> 'b set) -> 'a list -> 'b set
val assoc_reverse : ('a * 'b) list -> ('b * 'a) list
val assoc_map : ('a * 'b) list -> ('a * 'b) list -> ('a * 'a) list
val lookup_list : 'a -> ('a, 'b) assoc list -> 'b
val lookup_list2 : 'a -> ('a, 'b) assoc list -> 'b * int
val assoc_option : 'a -> ('a, 'b) assoc -> 'b option
val assoc_with_err_msg : 'a -> ('a, 'b) assoc -> 'b
val sort_by_val_lowfirst : ('a, 'b) assoc -> ('a * 'b) list
val sort_by_val_highfirst : ('a, 'b) assoc -> ('a * 'b) list
val sort_by_key_lowfirst : (int, 'a) assoc -> (int * 'a) list
val sort_by_key_highfirst : (int, 'a) assoc -> (int * 'a) list
val sortgen_by_key_lowfirst : ('a, 'b) assoc -> ('a * 'b) list
val sortgen_by_key_highfirst : ('a, 'b) assoc -> ('a * 'b) list
module IntMap : Map.S with type key = int
val intmap_to_list : 'a IntMap.t -> (IntMap.key * 'a) list
val intmap_string_of_t : 'a -> 'b -> string
module IntIntMap : Map.S with type key = int * int
val intintmap_to_list : 'a IntIntMap.t -> (IntIntMap.key * 'a) list
val intintmap_string_of_t : 'a -> 'b -> string
val hcreate : unit -> ('a, 'b) Hashtbl.t
val hadd : 'a * 'b -> ('a, 'b) Hashtbl.t -> unit
val hmem : 'a -> ('a, 'b) Hashtbl.t -> bool
val hfind : 'a -> ('a, 'b) Hashtbl.t -> 'b
val hreplace : 'a * 'b -> ('a, 'b) Hashtbl.t -> unit
val hiter : ('a -> 'b -> unit) -> ('a, 'b) Hashtbl.t -> unit
val hfold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) Hashtbl.t -> 'c -> 'c
val hremove : 'a -> ('a, 'b) Hashtbl.t -> unit
val hfind_default : 'a -> (unit -> 'b) -> ('a, 'b) Hashtbl.t -> 'b
val hfind_option : 'a -> ('a, 'b) Hashtbl.t -> 'b option
val hupdate_default :
'a -> ('b -> 'b) -> (unit -> 'b) -> ('a, 'b) Hashtbl.t -> unit
val hash_to_list : ('a, 'b) Hashtbl.t -> ('a * 'b) list
val hash_to_list_unsorted : ('a, 'b) Hashtbl.t -> ('a * 'b) list
val hash_of_list : ('a * 'b) list -> ('a, 'b) Hashtbl.t
val hashadd : ('a, 'b list ref) Hashtbl.t -> 'a -> 'b -> unit
val hashinc : ('a, int ref) Hashtbl.t -> 'a -> int -> unit
val hkeys : ('a, 'b) Hashtbl.t -> 'a list
type 'a hashset = ('a, bool) Hashtbl.t
val hash_hashset_add : 'a -> 'b -> ('a, 'b hashset) Hashtbl.t -> unit
val hashset_to_set :
< fromlist : 'a list -> 'b; .. > -> ('a, 'c) Hashtbl.t -> 'b
val hashset_to_list : 'a hashset -> 'a list
val hashset_of_list : 'a list -> 'a hashset
type 'a stack = 'a list
val empty_stack : 'a stack
val push : 'a -> 'a stack -> 'a stack
val top : 'a stack -> 'a
val pop : 'a stack -> 'a stack
val top_option : 'a stack -> 'a option
val push2 : 'a -> 'a stack ref -> unit
val pop2 : 'a stack ref -> 'a
type 'a undo_stack = 'a list * 'a list
val empty_undo_stack : 'a undo_stack
val push_undo : 'a -> 'a undo_stack -> 'a undo_stack
val top_undo : 'a undo_stack -> 'a
val pop_undo : 'a undo_stack -> 'a undo_stack
val redo_undo : 'a undo_stack -> 'a undo_stack
val undo_pop : 'a undo_stack -> 'a undo_stack
val top_undo_option : 'a undo_stack -> 'a option
type 'a bintree =
'a Common.bintree =
Leaf of 'a
| Branch of ('a bintree * 'a bintree)
type 'a tree = 'a Common.tree = Tree of 'a * 'a tree list
val tree_iter : ('a -> unit) -> 'a tree -> unit
type 'a treeref = 'a Common.treeref = NodeRef of 'a * 'a treeref list ref
val treeref_node_iter :
('a * 'a treeref list ref -> unit) -> 'a treeref -> unit
val treeref_node_iter_with_parents :
('a * 'a treeref list ref -> 'a list -> unit) -> 'a treeref -> unit
val find_treeref :
('a * 'a treeref list ref -> bool) -> 'a treeref -> 'a treeref
val treeref_children_ref : 'a treeref -> 'a treeref list ref
val find_treeref_with_parents_some :
('a * 'a treeref list ref -> 'a list -> 'b option) -> 'a treeref -> 'b
val find_multi_treeref_with_parents_some :
('a * 'a treeref list ref -> 'a list -> 'b option) ->
'a treeref -> 'b list
type ('a, 'b) treeref2 =
('a, 'b) Common.treeref2 =
NodeRef2 of 'a * ('a, 'b) treeref2 list ref
| LeafRef2 of 'b
val find_treeref2 :
('a * ('a, 'b) treeref2 list ref -> bool) ->
('a, 'b) treeref2 -> ('a, 'b) treeref2
val treeref_node_iter_with_parents2 :
('a * ('a, 'b) treeref2 list ref -> 'a list -> unit) ->
('a, 'b) treeref2 -> unit
val treeref_node_iter2 :
('a * ('a, 'b) treeref2 list ref -> unit) -> ('a, 'b) treeref2 -> unit
type 'a graph = 'a set * ('a * 'a) set
val add_node : 'a -> 'a graph -> 'a graph
val del_node : 'a -> 'a graph -> 'a graph
val add_arc : 'a * 'a -> 'a graph -> 'a graph
val del_arc : 'a * 'a -> 'a graph -> 'a graph
val successors : 'a -> 'a graph -> 'a set
val predecessors : 'a -> 'a graph -> 'a set
val nodes : 'a graph -> 'a set
val fold_upward : ('a -> 'b -> 'a) -> 'b set -> 'a -> 'b graph -> 'a
val empty_graph : 'a list * 'b list
val map : ('a -> 'b) -> 'a list -> 'b list
val tail_map : ('a -> 'b) -> 'a list -> 'b list
val filter : ('a -> bool) -> 'a list -> 'a list
val fold : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
val member : 'a -> 'a list -> bool
val iter : ('a -> unit) -> 'a list -> unit
val find : ('a -> bool) -> 'a list -> 'a
val exists : ('a -> bool) -> 'a list -> bool
val forall : ('a -> bool) -> 'a list -> bool
val big_union : ('a -> 'b set) -> 'a list -> 'b set
val sort : ('a -> 'a -> int) -> 'a list -> 'a list
val length : 'a list -> int
val head : 'a list -> 'a
val tail : 'a list -> 'a list
val is_singleton : 'a list -> bool
type vector = float * float * float
type point = vector
type color = vector
val dotproduct : vector * vector -> float
val vector_length : vector -> float
val minus_point : point * point -> vector
val distance : point * point -> float
val normalise : vector -> vector
val mult_coeff : vector -> float -> vector
val add_vector : vector -> vector -> vector
val mult_vector : vector -> vector -> vector
val sum_vector : vector list -> vector
type pixel = int * int * int
val write_ppm : int -> int -> pixel list -> filename -> unit
val test_ppm1 : unit -> unit
type diff = Common.diff = Match | BnotinA | AnotinB
val diff :
(int -> int -> diff -> unit) -> string list * string list -> unit
val diff2 : (int -> int -> diff -> unit) -> string * string -> unit
type parse_info =
Common.parse_info = {
str : string;
charpos : int;
line : int;
column : int;
file : filename;
}
val fake_parse_info : parse_info
val string_of_parse_info : parse_info -> string
val string_of_parse_info_bis : parse_info -> string
val full_charpos_to_pos : filename -> (int * int) array
val complete_parse_info :
filename -> (int * int) array -> parse_info -> parse_info
val info_from_charpos : int -> filename -> int * int * string
val error_message : filename -> string * int -> string
val error_message_short : filename -> string * int -> string
val error_messagebis : filename -> string * int -> int -> string
type ('a, 'b) scoped_env = ('a, 'b) assoc list
val lookup_env : 'a -> ('a, 'b) scoped_env -> 'b
val member_env_key : 'a -> ('a, 'b) scoped_env -> bool
val new_scope : ('a, 'b) scoped_env ref -> unit
val del_scope : ('a, 'b) scoped_env ref -> unit
val do_in_new_scope : ('a, 'b) scoped_env ref -> (unit -> unit) -> unit
val add_in_scope : ('a, 'b) scoped_env ref -> 'a * 'b -> unit
type ('a, 'b) scoped_h_env =
('a, 'b) Common.scoped_h_env = {
scoped_h : ('a, 'b) Hashtbl.t;
scoped_list : ('a, 'b) assoc list;
}
val empty_scoped_h_env : unit -> ('a, 'b) scoped_h_env
val clone_scoped_h_env : ('a, 'b) scoped_h_env -> ('a, 'b) scoped_h_env
val lookup_h_env : 'a -> ('a, 'b) scoped_h_env -> 'b
val member_h_env_key : 'a -> ('a, 'b) scoped_h_env -> bool
val new_scope_h : ('a, 'b) scoped_h_env ref -> unit
val del_scope_h : ('a, 'b) scoped_h_env ref -> unit
val clean_scope_h : ('a, 'b) scoped_h_env ref -> unit
val do_in_new_scope_h :
('a, 'b) scoped_h_env ref -> (unit -> unit) -> unit
val add_in_scope_h : ('a, 'b) scoped_h_env ref -> 'a * 'b -> unit
val _execute_and_show_progress_func :
(int -> ((unit -> unit) -> unit) -> unit) ref
val execute_and_show_progress : int -> ((unit -> unit) -> unit) -> unit
val cmdline_flags_devel : unit -> cmdline_options
val cmdline_flags_verbose : unit -> cmdline_options
val cmdline_flags_other : unit -> cmdline_options
val generic_print : 'a -> string -> string
class ['a] olist :
'a list ->
object
val xs : 'a list
method fold : ('b -> 'a -> 'b) -> 'b -> 'b
method view : 'a list
end
val typing_sux_test : unit -> unit
module StringSet : Set.S with type elt = string
end
module Ast_cocci :
sig
type added_string =
Ast_cocci.added_string =
Noindent of string
| Indent of string
| Space of string
type info =
Ast_cocci.info = {
line : int;
column : int;
strbef : (added_string * int * int) list;
straft : (added_string * int * int) list;
whitespace : string;
}
type line = int
type meta_name = string * string
type script_position = string * line
type 'a wrap =
'a Ast_cocci.wrap = {
node : 'a;
node_line : line;
free_vars : meta_name list;
minus_free_vars : meta_name list;
minus_nc_free_vars : meta_name list;
fresh_vars : (meta_name * seed) list;
inherited : meta_name list;
positive_inherited_positions : meta_name list;
constraints : (meta_name * constraints) list;
saved_witness : meta_name list;
bef_aft : dots_bef_aft;
pos_info : meta_name mcode option;
true_if_test_exp : bool;
safe_for_multi_decls : Ast_cocci.safety;
iso_info : (string * anything) list;
}
and 'a befaft =
'a Ast_cocci.befaft =
BEFORE of 'a list list * count
| AFTER of 'a list list * count
| BEFOREAFTER of 'a list list * 'a list list * count
| NOTHING
and 'a replacement =
'a Ast_cocci.replacement =
REPLACEMENT of 'a list list * count
| NOREPLACEMENT
and 'a mcode = 'a * info * mcodekind * meta_pos list
and adjacency = Ast_cocci.adjacency = ALLMINUS | ADJ of int
and mcodekind =
Ast_cocci.mcodekind =
MINUS of pos * int list * adjacency * anything replacement
| CONTEXT of pos * anything befaft
| PLUS of count
and count = Ast_cocci.count = ONE | MANY
and fixpos = Ast_cocci.fixpos = Real of int | Virt of int * int
and pos =
Ast_cocci.pos =
NoPos
| DontCarePos
| FixPos of (fixpos * fixpos)
and dots_bef_aft =
Ast_cocci.dots_bef_aft =
NoDots
| AddingBetweenDots of statement * int
| DroppingBetweenDots of statement * int
and inherited = bool
and keep_binding = Ast_cocci.keep_binding = Unitary | Nonunitary | Saved
and multi = bool
and end_info =
meta_name list * (meta_name * seed) list * meta_name list * mcodekind
and safety = Safe | Unsafe | NoStorage
and arity = Ast_cocci.arity = UNIQUE | OPT | MULTI | NONE
and metavar =
Ast_cocci.metavar =
MetaMetaDecl of arity * meta_name
| MetaIdDecl of arity * meta_name
| MetaFreshIdDecl of meta_name * seed
| MetaTypeDecl of arity * meta_name
| MetaInitDecl of arity * meta_name
| MetaInitListDecl of arity * meta_name * list_len
| MetaListlenDecl of meta_name
| MetaParamDecl of arity * meta_name
| MetaParamListDecl of arity * meta_name * list_len
| MetaBinaryOperatorDecl of arity * meta_name
| MetaAssignmentOperatorDecl of arity * meta_name
| MetaConstDecl of arity * meta_name * fullType list option
| MetaErrDecl of arity * meta_name
| MetaExpDecl of arity * meta_name * fullType list option *
list_len option
| MetaIdExpDecl of arity * meta_name * fullType list option
| MetaLocalIdExpDecl of arity * meta_name * fullType list option
| MetaGlobalIdExpDecl of arity * meta_name * fullType list option
| MetaExpListDecl of arity * meta_name * list_len
| MetaDeclDecl of arity * meta_name
| MetaFieldDecl of arity * meta_name
| MetaFieldListDecl of arity * meta_name * list_len
| MetaStmDecl of arity * meta_name
| MetaStmListDecl of arity * meta_name * list_len
| MetaDParamListDecl of arity * meta_name * list_len
| MetaFuncDecl of arity * meta_name
| MetaLocalFuncDecl of arity * meta_name
| MetaPosDecl of arity * meta_name
| MetaComDecl of arity * meta_name
| MetaFmtDecl of arity * meta_name
| MetaFragListDecl of arity * meta_name * list_len
| MetaAnalysisDecl of string * meta_name
| MetaDeclarerDecl of arity * meta_name
| MetaIteratorDecl of arity * meta_name
| MetaScriptDecl of metavar option ref * meta_name
and list_len =
Ast_cocci.list_len =
AnyLen
| MetaLen of meta_name * constraints
| CstLen of int
and seed =
Ast_cocci.seed =
NoVal
| StringSeed of string
| ListSeed of seed_elem list
and seed_elem =
Ast_cocci.seed_elem =
SeedString of string
| SeedId of meta_name
and 'a dots = 'a list wrap
and base_ident =
Ast_cocci.base_ident =
Id of string mcode
| MetaId of meta_name mcode * constraints * keep_binding * inherited
| MetaFunc of meta_name mcode * constraints * keep_binding * inherited
| MetaLocalFunc of meta_name mcode * constraints * keep_binding *
inherited
| AsIdent of ident * ident
| DisjId of ident list
| ConjId of ident list
| OptIdent of ident
and ident = base_ident wrap
and base_expression =
Ast_cocci.base_expression =
Ident of ident
| Constant of constant mcode
| StringConstant of string mcode * string_fragment dots * string mcode
| FunCall of expression * string mcode * expression dots * string mcode
| Assignment of expression * assignOp * expression * bool
| Sequence of expression * string mcode * expression
| CondExpr of expression * string mcode * expression option *
string mcode * expression
| Postfix of expression * fixOp mcode
| Infix of expression * fixOp mcode
| Unary of expression * unaryOp mcode
| Binary of expression * binaryOp * expression
| Nested of expression * binaryOp * expression
| ArrayAccess of expression * string mcode * expression * string mcode
| RecordAccess of expression * string mcode * ident
| RecordPtAccess of expression * string mcode * ident
| Cast of string mcode * fullType * string mcode * expression
| SizeOfExpr of string mcode * expression
| SizeOfType of string mcode * string mcode * fullType * string mcode
| TypeExp of fullType
| Paren of string mcode * expression * string mcode
| Constructor of string mcode * fullType * string mcode * initialiser
| MetaErr of meta_name mcode * constraints * keep_binding * inherited
| MetaExpr of meta_name mcode * constraints * keep_binding *
fullType list option * form * inherited * listlen option
| MetaExprList of meta_name mcode * listlen * constraints *
keep_binding * inherited
| AsExpr of expression * expression
| AsSExpr of expression * rule_elem
| EComma of string mcode
| DisjExpr of expression list
| ConjExpr of expression list
| NestExpr of string mcode * expression dots * string mcode *
expression option * multi
| Edots of string mcode * expression option
| OptExp of expression
and 'a generic_constraints =
'a Ast_cocci.generic_constraints =
CstrFalse
| CstrTrue
| CstrAnd of 'a generic_constraints list
| CstrOr of 'a generic_constraints list
| CstrNot of 'a generic_constraints
| CstrConstant of constant_constraint
| CstrOperator of operator_constraint
| CstrMeta_name of meta_name
| CstrRegexp of string * Regexp.regexp
| CstrScript of bool * script_constraint
| CstrExpr of 'a
| CstrSub of meta_name list
| CstrType of fullType
and constant_constraint =
Ast_cocci.constant_constraint =
CstrInt of int_constraint
| CstrString of string
and int_constraint =
Ast_cocci.int_constraint =
CstrIntEq of string
| CstrIntLeq of int
| CstrIntGeq of int
and operator_constraint =
Ast_cocci.operator_constraint =
CstrAssignOp of assignOp
| CstrBinaryOp of binaryOp
and constraints = expression generic_constraints
and script_constraint =
string * string * (meta_name * metavar) list * script_position *
string
and form = Ast_cocci.form = ANY | ID | LocalID | GlobalID | CONST
and expression = base_expression wrap
and listlen =
Ast_cocci.listlen =
MetaListLen of meta_name mcode * constraints * keep_binding *
inherited
| CstListLen of int
| AnyListLen
and base_string_fragment =
Ast_cocci.base_string_fragment =
ConstantFragment of string mcode
| FormatFragment of string mcode * string_format
| Strdots of string mcode
| MetaFormatList of string mcode * meta_name mcode * listlen *
constraints * keep_binding * inherited
and string_fragment = base_string_fragment wrap
and base_string_format =
Ast_cocci.base_string_format =
ConstantFormat of string mcode
| MetaFormat of meta_name mcode * constraints * keep_binding *
inherited
and string_format = base_string_format wrap
and unaryOp =
Ast_cocci.unaryOp =
GetRef
| GetRefLabel
| DeRef
| UnPlus
| UnMinus
| Tilde
| Not
and base_assignOp =
Ast_cocci.base_assignOp =
SimpleAssign of simpleAssignOp mcode
| OpAssign of arithOp mcode
| MetaAssign of meta_name mcode * constraints * keep_binding *
inherited
and simpleAssignOp = string
and assignOp = base_assignOp wrap
and fixOp = Ast_cocci.fixOp = Dec | Inc
and base_binaryOp =
Ast_cocci.base_binaryOp =
Arith of arithOp mcode
| Logical of logicalOp mcode
| MetaBinary of meta_name mcode * constraints * keep_binding *
inherited
and binaryOp = base_binaryOp wrap
and arithOp =
Ast_cocci.arithOp =
Plus
| Minus
| Mul
| Div
| Mod
| DecLeft
| DecRight
| And
| Or
| Xor
| Min
| Max
and logicalOp =
Ast_cocci.logicalOp =
Inf
| Sup
| InfEq
| SupEq
| Eq
| NotEq
| AndLog
| OrLog
and constant =
Ast_cocci.constant =
String of string
| Char of string
| Int of string
| Float of string
| DecimalConst of (string * string * string)
and base_fullType =
Ast_cocci.base_fullType =
Type of bool * const_vol mcode option * typeC
| AsType of fullType * fullType
| DisjType of fullType list
| ConjType of fullType list
| OptType of fullType
and base_typeC =
Ast_cocci.base_typeC =
BaseType of baseType * string mcode list
| SignedT of sign mcode * typeC option
| Pointer of fullType * string mcode
| FunctionPointer of fullType * string mcode * string mcode *
string mcode * string mcode * parameter_list * string mcode
| Array of fullType * string mcode * expression option * string mcode
| Decimal of string mcode * string mcode * expression *
string mcode option * expression option * string mcode
| EnumName of string mcode * ident option
| EnumDef of fullType * string mcode * expression dots * string mcode
| StructUnionName of structUnion mcode * ident option
| StructUnionDef of fullType * string mcode * annotated_field dots *
string mcode
| TypeOfExpr of string mcode * string mcode * expression * string mcode
| TypeOfType of string mcode * string mcode * fullType * string mcode
| TypeName of string mcode
| MetaType of meta_name mcode * constraints * keep_binding * inherited
and fullType = base_fullType wrap
and typeC = base_typeC wrap
and baseType =
Ast_cocci.baseType =
VoidType
| CharType
| ShortType
| ShortIntType
| IntType
| DoubleType
| LongDoubleType
| FloatType
| LongDoubleComplexType
| DoubleComplexType
| FloatComplexType
| LongType
| LongIntType
| LongLongType
| LongLongIntType
| SizeType
| SSizeType
| PtrDiffType
| BoolType
| Unknown
and structUnion = Ast_cocci.structUnion = Struct | Union
and sign = Ast_cocci.sign = Signed | Unsigned
and const_vol = Ast_cocci.const_vol = Const | Volatile
and base_declaration =
Ast_cocci.base_declaration =
Init of storage mcode option * fullType * ident * attr list *
string mcode * initialiser * string mcode
| UnInit of storage mcode option * fullType * ident * attr list *
string mcode
| FunProto of fninfo list * ident * string mcode * parameter_list *
(string mcode * string mcode) option * string mcode * string mcode
| TyDecl of fullType * string mcode
| MacroDecl of storage mcode option * ident * string mcode *
expression dots * string mcode * string mcode
| MacroDeclInit of storage mcode option * ident * string mcode *
expression dots * string mcode * string mcode * initialiser *
string mcode
| Typedef of string mcode * fullType * typeC * string mcode
| DisjDecl of declaration list
| ConjDecl of declaration list
| MetaDecl of meta_name mcode * constraints * keep_binding * inherited
| AsDecl of declaration * declaration
| OptDecl of declaration
and declaration = base_declaration wrap
and base_annotated_decl =
Ast_cocci.base_annotated_decl =
DElem of mcodekind * bool * declaration
and annotated_decl = base_annotated_decl wrap
and base_field =
Ast_cocci.base_field =
Field of fullType * ident option * bitfield option * string mcode
| DisjField of field list
| ConjField of field list
| OptField of field
| MetaField of meta_name mcode * constraints * keep_binding * inherited
| MetaFieldList of meta_name mcode * listlen * constraints *
keep_binding * inherited
and bitfield = string mcode * expression
and field = base_field wrap
and base_annotated_field =
Ast_cocci.base_annotated_field =
FElem of mcodekind * bool * field
| Fdots of string mcode * field option
and annotated_field = base_annotated_field wrap
and base_initialiser =
Ast_cocci.base_initialiser =
MetaInit of meta_name mcode * constraints * keep_binding * inherited
| MetaInitList of meta_name mcode * listlen * constraints *
keep_binding * inherited
| AsInit of initialiser * initialiser
| InitExpr of expression
| ArInitList of string mcode * initialiser dots * string mcode
| StrInitList of bool * string mcode * initialiser list *
string mcode * initialiser list
| InitGccExt of designator list * string mcode * initialiser
| InitGccName of ident * string mcode * initialiser
| IComma of string mcode
| Idots of string mcode * initialiser option
| OptIni of initialiser
and designator =
Ast_cocci.designator =
DesignatorField of string mcode * ident
| DesignatorIndex of string mcode * expression * string mcode
| DesignatorRange of string mcode * expression * string mcode *
expression * string mcode
and initialiser = base_initialiser wrap
and base_parameterTypeDef =
Ast_cocci.base_parameterTypeDef =
VoidParam of fullType
| Param of fullType * ident option
| MetaParam of meta_name mcode * constraints * keep_binding * inherited
| MetaParamList of meta_name mcode * listlen * constraints *
keep_binding * inherited
| AsParam of parameterTypeDef * expression
| PComma of string mcode
| Pdots of string mcode
| OptParam of parameterTypeDef
and parameterTypeDef = base_parameterTypeDef wrap
and parameter_list = parameterTypeDef dots
and base_define_param =
Ast_cocci.base_define_param =
DParam of ident
| MetaDParamList of meta_name mcode * listlen * constraints *
keep_binding * inherited
| DPComma of string mcode
| DPdots of string mcode
| OptDParam of define_param
and define_param = base_define_param wrap
and base_define_parameters =
Ast_cocci.base_define_parameters =
NoParams
| DParams of string mcode * define_param dots * string mcode
and define_parameters = base_define_parameters wrap
and meta_collect = Ast_cocci.meta_collect = PER | ALL
and meta_pos =
Ast_cocci.meta_pos =
MetaPos of meta_name mcode * constraints * meta_collect *
keep_binding * inherited
| MetaCom of meta_name mcode * constraints * keep_binding * inherited
and storage = Ast_cocci.storage = Static | Auto | Register | Extern
and base_rule_elem =
Ast_cocci.base_rule_elem =
FunHeader of mcodekind * bool * fninfo list * ident * string mcode *
parameter_list * (string mcode * string mcode) option *
string mcode
| Decl of annotated_decl
| SeqStart of string mcode
| SeqEnd of string mcode
| ExprStatement of expression option * string mcode
| IfHeader of string mcode * string mcode * expression * string mcode
| Else of string mcode
| WhileHeader of string mcode * string mcode * expression *
string mcode
| DoHeader of string mcode
| WhileTail of string mcode * string mcode * expression *
string mcode * string mcode
| ForHeader of string mcode * string mcode * forinfo *
expression option * string mcode * expression option * string mcode
| IteratorHeader of ident * string mcode * expression dots *
string mcode
| SwitchHeader of string mcode * string mcode * expression *
string mcode
| Break of string mcode * string mcode
| Continue of string mcode * string mcode
| Label of ident * string mcode
| Goto of string mcode * ident * string mcode
| Return of string mcode * string mcode
| ReturnExpr of string mcode * expression * string mcode
| Exec of string mcode * string mcode * exec_code dots * string mcode
| MetaRuleElem of meta_name mcode * constraints * keep_binding *
inherited
| MetaStmt of meta_name mcode * constraints * keep_binding *
metaStmtInfo * inherited
| MetaStmtList of meta_name mcode * listlen * constraints *
keep_binding * inherited
| Exp of expression
| TopExp of expression
| Ty of fullType
| TopId of ident
| TopInit of initialiser
| Include of string mcode * inc_file mcode
| MetaInclude of string mcode * expression
| Undef of string mcode * ident
| DefineHeader of string mcode * ident * define_parameters
| Pragma of string mcode * ident * pragmainfo
| Case of string mcode * expression * string mcode
| Default of string mcode * string mcode
| AsRe of rule_elem * rule_elem
| DisjRuleElem of rule_elem list
and base_pragmainfo =
Ast_cocci.base_pragmainfo =
PragmaString of string mcode
| PragmaDots of string mcode
and pragmainfo = base_pragmainfo wrap
and forinfo =
Ast_cocci.forinfo =
ForExp of expression option * string mcode
| ForDecl of annotated_decl
and fninfo =
Ast_cocci.fninfo =
FStorage of storage mcode
| FType of fullType
| FInline of string mcode
| FAttr of attr
and attr = string mcode
and metaStmtInfo =
Ast_cocci.metaStmtInfo =
NotSequencible
| SequencibleAfterDots of dots_whencode list
| Sequencible
and rule_elem = base_rule_elem wrap
and base_statement =
Ast_cocci.base_statement =
Seq of rule_elem * statement dots * rule_elem
| IfThen of rule_elem * statement * end_info
| IfThenElse of rule_elem * statement * rule_elem * statement *
end_info
| While of rule_elem * statement * end_info
| Do of rule_elem * statement * rule_elem
| For of rule_elem * statement * end_info
| Iterator of rule_elem * statement * end_info
| Switch of rule_elem * rule_elem * statement dots * case_line list *
rule_elem
| Atomic of rule_elem
| Disj of statement dots list
| Conj of statement dots list
| Nest of string mcode * statement dots * string mcode *
(statement dots, statement) whencode list * multi *
dots_whencode list * dots_whencode list
| FunDecl of rule_elem * rule_elem * statement dots * rule_elem *
end_info
| Define of rule_elem * statement dots
| AsStmt of statement * statement
| Dots of string mcode * (statement dots, statement) whencode list *
dots_whencode list * dots_whencode list
| OptStm of statement
and ('a, 'b) whencode =
('a, 'b) Ast_cocci.whencode =
WhenNot of 'a
| WhenAlways of 'b
| WhenModifier of when_modifier
| WhenNotTrue of rule_elem
| WhenNotFalse of rule_elem
and when_modifier =
Ast_cocci.when_modifier =
WhenAny
| WhenStrict
| WhenForall
| WhenExists
and dots_whencode =
Ast_cocci.dots_whencode =
WParen of rule_elem * meta_name
| Other of statement
| Other_dots of statement dots
and statement = base_statement wrap
and base_case_line =
Ast_cocci.base_case_line =
CaseLine of rule_elem * statement dots
| OptCase of case_line
and case_line = base_case_line wrap
and base_exec_code =
Ast_cocci.base_exec_code =
ExecEval of string mcode * expression
| ExecToken of string mcode
| ExecDots of string mcode
and exec_code = base_exec_code wrap
and inc_file =
Ast_cocci.inc_file =
Local of inc_elem list
| NonLocal of inc_elem list
| AnyInc
and inc_elem = Ast_cocci.inc_elem = IncPath of string | IncDots
and base_top_level =
Ast_cocci.base_top_level =
NONDECL of statement
| CODE of statement dots
| FILEINFO of string mcode * string mcode
| ERRORWORDS of expression list
and top_level = base_top_level wrap
and parser_kind = Ast_cocci.parser_kind = ExpP | IdP | TyP | AnyP
and rulename =
Ast_cocci.rulename =
CocciRulename of string option * dependency * string list *
string list * exists * parser_kind
| GeneratedRulename of string option * dependency * string list *
string list * exists * parser_kind
| ScriptRulename of string option * string * dependency
| InitialScriptRulename of string option * string * dependency
| FinalScriptRulename of string option * string * dependency
and ruletype = Ast_cocci.ruletype = Normal | Generated
and rule =
Ast_cocci.rule =
CocciRule of string * (dependency * string list * exists) *
top_level list * bool list * ruletype
| ScriptRule of string * string * dependency *
(script_meta_name * meta_name * metavar * mvinit) list *
meta_name list * script_position * string
| InitialScriptRule of string * string * dependency *
(script_meta_name * meta_name * metavar * mvinit) list *
script_position * string
| FinalScriptRule of string * string * dependency *
(script_meta_name * meta_name * metavar * mvinit) list *
script_position * string
and script_meta_name = string option * string option
and mvinit =
Ast_cocci.mvinit =
NoMVInit
| MVInitString of string
| MVInitPosList
and dep =
Ast_cocci.dep =
Dep of string
| AntiDep of string
| EverDep of string
| NeverDep of string
| AndDep of dep * dep
| OrDep of dep * dep
| FileIn of string
| NotFileIn of string
and dependency =
Ast_cocci.dependency =
NoDep
| FailDep
| ExistsDep of dep
| ForallDep of dep
and rule_with_metavars = metavar list * rule
and anything =
Ast_cocci.anything =
FullTypeTag of fullType
| BaseTypeTag of baseType
| StructUnionTag of structUnion
| SignTag of sign
| IdentTag of ident
| ExpressionTag of expression
| ConstantTag of constant
| UnaryOpTag of unaryOp
| AssignOpTag of assignOp
| SimpleAssignOpTag of simpleAssignOp
| OpAssignOpTag of arithOp
| FixOpTag of fixOp
| BinaryOpTag of binaryOp
| ArithOpTag of arithOp
| LogicalOpTag of logicalOp
| DeclarationTag of declaration
| FieldTag of field
| InitTag of initialiser
| StorageTag of storage
| IncFileTag of inc_file
| Rule_elemTag of rule_elem
| StatementTag of statement
| ForInfoTag of forinfo
| CaseLineTag of case_line
| StringFragmentTag of string_fragment
| ConstVolTag of const_vol
| Token of string * info option
| Directive of added_string list
| Code of top_level
| ExprDotsTag of expression dots
| ParamDotsTag of parameterTypeDef dots
| StmtDotsTag of statement dots
| AnnDeclDotsTag of annotated_decl dots
| AnnFieldDotsTag of annotated_field dots
| DefParDotsTag of define_param dots
| TypeCTag of typeC
| ParamTag of parameterTypeDef
| SgrepStartTag of string
| SgrepEndTag of string
and exists = Ast_cocci.exists = Exists | Forall | Undetermined
val mkToken : string -> anything
val lub_count : count -> count -> count
val rewrap : 'a wrap -> 'b -> 'b wrap
val rewrap_mcode : 'a mcode -> 'b -> 'b mcode
val unwrap : 'a wrap -> 'a
val unwrap_mcode : 'a mcode -> 'a
val get_mcodekind : 'a mcode -> mcodekind
val get_line : 'a wrap -> line
val get_mcode_line : 'a mcode -> line
val get_mcode_col : 'a mcode -> int
val get_fvs : 'a wrap -> meta_name list
val get_wcfvs : ('a wrap, 'b wrap) whencode list -> meta_name list
val set_fvs : meta_name list -> 'a wrap -> 'a wrap
val get_mfvs : 'a wrap -> meta_name list
val set_mfvs : meta_name list -> 'a wrap -> 'a wrap
val get_minus_nc_fvs : 'a wrap -> meta_name list
val get_fresh : 'a wrap -> (meta_name * seed) list
val get_inherited : 'a wrap -> meta_name list
val get_inherited_pos : 'a wrap -> meta_name list
val get_constraints : 'a wrap -> (meta_name * constraints) list
val add_constraint : 'a wrap -> meta_name * constraints -> 'a wrap
val get_saved : 'a wrap -> meta_name list
val get_dots_bef_aft : statement -> dots_bef_aft
val set_dots_bef_aft : dots_bef_aft -> statement -> statement
val get_pos : 'a wrap -> meta_name mcode option
val set_pos : 'a wrap -> meta_name mcode option -> 'a wrap
val get_test_exp : 'a wrap -> bool
val set_test_exp : expression -> expression
val get_safe_decl : 'a wrap -> Ast_cocci.safety
val get_isos : 'a wrap -> (string * anything) list
val set_isos : 'a wrap -> (string * anything) list -> 'a wrap
val get_pos_var : 'a mcode -> meta_pos list
val set_pos_var : meta_pos list -> 'a mcode -> 'a mcode
val drop_pos : 'a mcode -> 'a mcode
val get_meta_name : metavar -> meta_name
val tag2c : anything -> string
val no_info : info
val make_meta_rule_elem :
string ->
mcodekind ->
constraints ->
meta_name list * (meta_name * seed) list * meta_name list -> rule_elem
val make_meta_decl :
string ->
mcodekind ->
constraints ->
meta_name list * (meta_name * seed) list * meta_name list ->
declaration
val make_term : 'a -> 'a wrap
val make_inherited_term :
'a -> meta_name list -> meta_name list -> 'a wrap
val make_mcode : 'a -> 'a mcode
val equal_pos : fixpos -> fixpos -> bool
val string_of_arithOp : arithOp -> string
val string_of_logicalOp : logicalOp -> string
val string_of_assignOp : assignOp -> string
val string_of_binaryOp : binaryOp -> string
val string_of_sign : sign -> string
val string_of_baseType : baseType -> string
val string_of_const_vol : const_vol -> string
val string_of_structUnion : structUnion -> string
val string_of_typeC : typeC -> string
val string_of_fullType : fullType -> string
val typeC_of_fullType_opt : fullType -> typeC option
val ident_of_expression_opt : expression -> ident option
type 'a transformer =
'a Ast_cocci.transformer = {
baseType : (baseType -> string mcode list -> 'a) option;
decimal :
(string mcode ->
string mcode ->
expression ->
string mcode option -> expression option -> string mcode -> 'a)
option;
enumName : (string mcode -> ident option -> 'a) option;
structUnionName : (structUnion mcode -> ident option -> 'a) option;
typeName : (string mcode -> 'a) option;
metaType :
(meta_name mcode -> constraints -> keep_binding -> inherited -> 'a)
option;
}
val empty_transformer : 'a transformer
val fullType_map : base_typeC transformer -> fullType -> fullType
val fullType_fold : ('a -> 'a) transformer -> fullType -> 'a -> 'a
val fullType_iter : unit transformer -> fullType -> unit
val meta_names_of_fullType : fullType -> meta_name list
val string_of_expression : expression -> string option
type ('a, 'b) cstr_transformer =
('a, 'b) Ast_cocci.cstr_transformer = {
cstr_constant : (constant_constraint -> 'b) option;
cstr_operator : (operator_constraint -> 'b) option;
cstr_meta_name : (meta_name -> 'b) option;
cstr_regexp : (string -> Regexp.regexp -> 'b) option;
cstr_script : (bool * script_constraint -> 'b) option;
cstr_expr : ('a -> 'b) option;
cstr_sub : (meta_name list -> 'b) option;
cstr_type : (fullType -> 'b) option;
}
val empty_cstr_transformer : ('a, 'b) cstr_transformer
val cstr_fold_sign :
('a, 'b -> 'b) cstr_transformer ->
('a, 'b -> 'b) cstr_transformer -> 'a generic_constraints -> 'b -> 'b
val cstr_fold :
('a, 'b -> 'b) cstr_transformer -> 'a generic_constraints -> 'b -> 'b
val cstr_iter :
('a, unit) cstr_transformer -> 'a generic_constraints -> unit
val cstr_map :
('a, 'b generic_constraints) cstr_transformer ->
'a generic_constraints -> 'b generic_constraints
val cstr_meta_names : 'a generic_constraints -> meta_name list
val cstr_pos_meta_names : 'a generic_constraints -> meta_name list
val filter_merge_variables :
(script_meta_name * meta_name * metavar * mvinit) list ->
(string * string) list
val prepare_merge_variables :
('a ->
('b * (script_meta_name * meta_name * metavar * mvinit) list) option) ->
'a list -> ('b * (int * string array)) list * string array
end
module Ast0_cocci :
sig
type arity = Ast0_cocci.arity = OPT | NONE
type token_info =
Ast0_cocci.token_info = {
tline_start : int;
tline_end : int;
left_offset : int;
right_offset : int;
}
val default_token_info : token_info
type mcodekind =
Ast0_cocci.mcodekind =
MINUS of (Ast_cocci.anything Ast_cocci.replacement * token_info) ref
| PLUS of Ast_cocci.count
| CONTEXT of
(Ast_cocci.anything Ast_cocci.befaft * token_info * token_info) ref
| MIXED of
(Ast_cocci.anything Ast_cocci.befaft * token_info * token_info) ref
type position_info =
Ast0_cocci.position_info = {
line_start : int;
line_end : int;
logical_start : int;
logical_end : int;
column : int;
offset : int;
}
type info =
Ast0_cocci.info = {
pos_info : position_info;
whitespace : string;
attachable_start : bool;
attachable_end : bool;
mcode_start : mcodekind list;
mcode_end : mcodekind list;
strings_before : (Ast_cocci.added_string * position_info) list;
strings_after : (Ast_cocci.added_string * position_info) list;
isSymbolIdent : bool;
}
type adjacency = int
type fake_mcode = info * mcodekind * adjacency
type 'a mcode =
'a * arity * info * mcodekind * anything list ref * adjacency
and 'a wrap =
'a Ast0_cocci.wrap = {
node : 'a;
info : info;
index : int ref;
mcodekind : mcodekind ref;
exp_ty : typeC option ref;
bef_aft : dots_bef_aft;
true_if_arg : bool;
true_if_test : bool;
true_if_test_exp : bool;
iso_info : (string * anything) list;
}
and dots_bef_aft =
Ast0_cocci.dots_bef_aft =
NoDots
| AddingBetweenDots of statement
| DroppingBetweenDots of statement
and pure = Ast0_cocci.pure = Impure | Pure | Context | PureContext
and 'a dots = 'a list wrap
and base_ident =
Ast0_cocci.base_ident =
Id of string mcode
| MetaId of Ast_cocci.meta_name mcode * constraints * Ast_cocci.seed *
pure
| MetaFunc of Ast_cocci.meta_name mcode * constraints * pure
| MetaLocalFunc of Ast_cocci.meta_name mcode * constraints * pure
| AsIdent of ident * ident
| DisjId of string mcode * ident list * string mcode list *
string mcode
| ConjId of string mcode * ident list * string mcode list *
string mcode
| OptIdent of ident
and ident = base_ident wrap
and base_expression =
Ast0_cocci.base_expression =
Ident of ident
| Constant of Ast_cocci.constant mcode
| StringConstant of string mcode * string_fragment dots * string mcode
| FunCall of expression * string mcode * expression dots * string mcode
| Assignment of expression * assignOp * expression * bool
| Sequence of expression * string mcode * expression
| CondExpr of expression * string mcode * expression option *
string mcode * expression
| Postfix of expression * Ast_cocci.fixOp mcode
| Infix of expression * Ast_cocci.fixOp mcode
| Unary of expression * Ast_cocci.unaryOp mcode
| Binary of expression * binaryOp * expression
| Nested of expression * binaryOp * expression
| Paren of string mcode * expression * string mcode
| ArrayAccess of expression * string mcode * expression * string mcode
| RecordAccess of expression * string mcode * ident
| RecordPtAccess of expression * string mcode * ident
| Cast of string mcode * typeC * string mcode * expression
| SizeOfExpr of string mcode * expression
| SizeOfType of string mcode * string mcode * typeC * string mcode
| TypeExp of typeC
| Constructor of string mcode * typeC * string mcode * initialiser
| MetaErr of Ast_cocci.meta_name mcode * constraints * pure
| MetaExpr of Ast_cocci.meta_name mcode * constraints *
typeC list option * Ast_cocci.form * pure * listlen option
| MetaExprList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| AsExpr of expression * expression
| AsSExpr of expression * statement
| EComma of string mcode
| DisjExpr of string mcode * expression list * string mcode list *
string mcode
| ConjExpr of string mcode * expression list * string mcode list *
string mcode
| NestExpr of string mcode * expression dots * string mcode *
(string mcode * string mcode * expression) option * Ast_cocci.multi
| Edots of string mcode *
(string mcode * string mcode * expression) option
| OptExp of expression
and expression = base_expression wrap
and constraints = expression Ast_cocci.generic_constraints
and listlen =
Ast0_cocci.listlen =
MetaListLen of Ast_cocci.meta_name mcode * constraints
| CstListLen of int
| AnyListLen
and base_string_fragment =
Ast0_cocci.base_string_fragment =
ConstantFragment of string mcode
| FormatFragment of string mcode * string_format
| Strdots of string mcode
| MetaFormatList of string mcode * Ast_cocci.meta_name mcode *
constraints * listlen
and string_fragment = base_string_fragment wrap
and base_string_format =
Ast0_cocci.base_string_format =
ConstantFormat of string mcode
| MetaFormat of Ast_cocci.meta_name mcode * constraints
and string_format = base_string_format wrap
and base_assignOp =
Ast0_cocci.base_assignOp =
SimpleAssign of simpleAssignOp mcode
| OpAssign of Ast_cocci.arithOp mcode
| MetaAssign of Ast_cocci.meta_name mcode * constraints * pure
and simpleAssignOp = string
and assignOp = base_assignOp wrap
and base_binaryOp =
Ast0_cocci.base_binaryOp =
Arith of Ast_cocci.arithOp mcode
| Logical of Ast_cocci.logicalOp mcode
| MetaBinary of Ast_cocci.meta_name mcode * constraints * pure
and binaryOp = base_binaryOp wrap
and base_typeC =
Ast0_cocci.base_typeC =
ConstVol of Ast_cocci.const_vol mcode * typeC
| BaseType of Ast_cocci.baseType * string mcode list
| Signed of Ast_cocci.sign mcode * typeC option
| Pointer of typeC * string mcode
| FunctionPointer of typeC * string mcode * string mcode *
string mcode * string mcode * parameter_list * string mcode
| Array of typeC * string mcode * expression option * string mcode
| Decimal of string mcode * string mcode * expression *
string mcode option * expression option * string mcode
| EnumName of string mcode * ident option
| EnumDef of typeC * string mcode * expression dots * string mcode
| StructUnionName of Ast_cocci.structUnion mcode * ident option
| StructUnionDef of typeC * string mcode * field dots * string mcode
| TypeOfExpr of string mcode * string mcode * expression * string mcode
| TypeOfType of string mcode * string mcode * typeC * string mcode
| TypeName of string mcode
| MetaType of Ast_cocci.meta_name mcode * constraints * pure
| AsType of typeC * typeC
| DisjType of string mcode * typeC list * string mcode list *
string mcode
| ConjType of string mcode * typeC list * string mcode list *
string mcode
| OptType of typeC
and typeC = base_typeC wrap
and base_declaration =
Ast0_cocci.base_declaration =
MetaDecl of Ast_cocci.meta_name mcode * constraints * pure
| AsDecl of declaration * declaration
| Init of Ast_cocci.storage mcode option * typeC * ident * attr list *
string mcode * initialiser * string mcode
| UnInit of Ast_cocci.storage mcode option * typeC * ident *
attr list * string mcode
| FunProto of fninfo list * ident * string mcode * parameter_list *
(string mcode * string mcode) option * string mcode * string mcode
| TyDecl of typeC * string mcode
| MacroDecl of Ast_cocci.storage mcode option * ident * string mcode *
expression dots * string mcode * string mcode
| MacroDeclInit of Ast_cocci.storage mcode option * ident *
string mcode * expression dots * string mcode * string mcode *
initialiser * string mcode
| Typedef of string mcode * typeC * typeC * string mcode
| DisjDecl of string mcode * declaration list * string mcode list *
string mcode
| ConjDecl of string mcode * declaration list * string mcode list *
string mcode
| OptDecl of declaration
and declaration = base_declaration wrap
and base_field =
Ast0_cocci.base_field =
MetaField of Ast_cocci.meta_name mcode * constraints * pure
| MetaFieldList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| Field of typeC * ident option * bitfield option * string mcode
| DisjField of string mcode * field list * string mcode list *
string mcode
| ConjField of string mcode * field list * string mcode list *
string mcode
| Fdots of string mcode * (string mcode * string mcode * field) option
| OptField of field
and bitfield = string mcode * expression
and field = base_field wrap
and base_initialiser =
Ast0_cocci.base_initialiser =
MetaInit of Ast_cocci.meta_name mcode * constraints * pure
| MetaInitList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| AsInit of initialiser * initialiser
| InitExpr of expression
| InitList of string mcode * initialiser_list * string mcode * bool
| InitGccExt of designator list * string mcode * initialiser
| InitGccName of ident * string mcode * initialiser
| IComma of string mcode
| Idots of string mcode *
(string mcode * string mcode * initialiser) option
| OptIni of initialiser
and designator =
Ast0_cocci.designator =
DesignatorField of string mcode * ident
| DesignatorIndex of string mcode * expression * string mcode
| DesignatorRange of string mcode * expression * string mcode *
expression * string mcode
and initialiser = base_initialiser wrap
and initialiser_list = initialiser dots
and base_parameterTypeDef =
Ast0_cocci.base_parameterTypeDef =
VoidParam of typeC
| Param of typeC * ident option
| MetaParam of Ast_cocci.meta_name mcode * constraints * pure
| MetaParamList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| AsParam of parameterTypeDef * expression
| PComma of string mcode
| Pdots of string mcode
| OptParam of parameterTypeDef
and parameterTypeDef = base_parameterTypeDef wrap
and parameter_list = parameterTypeDef dots
and base_define_param =
Ast0_cocci.base_define_param =
DParam of ident
| MetaDParamList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| DPComma of string mcode
| DPdots of string mcode
| OptDParam of define_param
and define_param = base_define_param wrap
and base_define_parameters =
Ast0_cocci.base_define_parameters =
NoParams
| DParams of string mcode * define_param dots * string mcode
and define_parameters = base_define_parameters wrap
and base_statement =
Ast0_cocci.base_statement =
Decl of (info * mcodekind) * declaration
| Seq of string mcode * statement dots * string mcode
| ExprStatement of expression option * string mcode
| IfThen of string mcode * string mcode * expression * string mcode *
statement * fake_mcode
| IfThenElse of string mcode * string mcode * expression *
string mcode * statement * string mcode * statement * fake_mcode
| While of string mcode * string mcode * expression * string mcode *
statement * fake_mcode
| Do of string mcode * statement * string mcode * string mcode *
expression * string mcode * string mcode
| For of string mcode * string mcode * forinfo * expression option *
string mcode * expression option * string mcode * statement *
fake_mcode
| Iterator of ident * string mcode * expression dots * string mcode *
statement * fake_mcode
| Switch of string mcode * string mcode * expression * string mcode *
string mcode * statement dots * case_line dots * string mcode
| Break of string mcode * string mcode
| Continue of string mcode * string mcode
| Label of ident * string mcode
| Goto of string mcode * ident * string mcode
| Return of string mcode * string mcode
| ReturnExpr of string mcode * expression * string mcode
| Exec of string mcode * string mcode * exec_code dots * string mcode
| MetaStmt of Ast_cocci.meta_name mcode * constraints * pure
| MetaStmtList of Ast_cocci.meta_name mcode * listlen * constraints *
pure
| AsStmt of statement * statement
| Exp of expression
| TopExp of expression
| Ty of typeC
| TopId of ident
| TopInit of initialiser
| Disj of string mcode * statement dots list * string mcode list *
string mcode
| Conj of string mcode * statement dots list * string mcode list *
string mcode
| Nest of string mcode * statement dots * string mcode *
(statement dots, statement) whencode list * Ast_cocci.multi
| Dots of string mcode * (statement dots, statement) whencode list
| FunDecl of (info * mcodekind) * fninfo list * ident * string mcode *
parameter_list * (string mcode * string mcode) option *
string mcode * string mcode * statement dots * string mcode *
(info * mcodekind)
| Include of string mcode * Ast_cocci.inc_file mcode
| MetaInclude of string mcode * expression
| Undef of string mcode * ident
| Define of string mcode * ident * define_parameters * statement dots
| Pragma of string mcode * ident * pragmainfo
| OptStm of statement
and base_pragmainfo =
Ast0_cocci.base_pragmainfo =
PragmaString of string mcode
| PragmaDots of string mcode
and pragmainfo = base_pragmainfo wrap
and base_forinfo =
Ast0_cocci.base_forinfo =
ForExp of expression option * string mcode
| ForDecl of (info * mcodekind) * declaration
and forinfo = base_forinfo wrap
and fninfo =
Ast0_cocci.fninfo =
FStorage of Ast_cocci.storage mcode
| FType of typeC
| FInline of string mcode
| FAttr of attr
and attr = string mcode
and ('a, 'b) whencode =
('a, 'b) Ast0_cocci.whencode =
WhenNot of string mcode * string mcode * 'a
| WhenAlways of string mcode * string mcode * 'b
| WhenModifier of string mcode * Ast_cocci.when_modifier
| WhenNotTrue of string mcode * string mcode * expression
| WhenNotFalse of string mcode * string mcode * expression
and statement = base_statement wrap
and base_case_line =
Ast0_cocci.base_case_line =
Default of string mcode * string mcode * statement dots
| Case of string mcode * expression * string mcode * statement dots
| DisjCase of string mcode * case_line list * string mcode list *
string mcode
| OptCase of case_line
and case_line = base_case_line wrap
and base_exec_code =
Ast0_cocci.base_exec_code =
ExecEval of string mcode * expression
| ExecToken of string mcode
| ExecDots of string mcode
and exec_code = base_exec_code wrap
and meta_pos =
Ast0_cocci.meta_pos =
MetaPos of Ast_cocci.meta_name mcode * constraints *
Ast_cocci.meta_collect
| MetaCom of Ast_cocci.meta_name mcode * constraints
and base_top_level =
Ast0_cocci.base_top_level =
NONDECL of statement
| TOPCODE of statement dots
| CODE of statement dots
| FILEINFO of string mcode * string mcode
| ERRORWORDS of expression list
| OTHER of statement
and top_level = base_top_level wrap
and rule = top_level list
and parsed_rule =
Ast0_cocci.parsed_rule =
CocciRule of
(rule * Ast_cocci.metavar list *
(string list * string list * Ast_cocci.dependency * string *
Ast_cocci.exists)) *
(rule * Ast_cocci.metavar list) * Ast_cocci.metavar list *
Ast_cocci.ruletype
| ScriptRule of string * string * Ast_cocci.dependency *
(Ast_cocci.script_meta_name * Ast_cocci.meta_name *
Ast_cocci.metavar * Ast_cocci.mvinit)
list * Ast_cocci.meta_name list * Ast_cocci.script_position *
string
| InitialScriptRule of string * string * Ast_cocci.dependency *
(Ast_cocci.script_meta_name * Ast_cocci.meta_name *
Ast_cocci.metavar * Ast_cocci.mvinit)
list * Ast_cocci.script_position * string
| FinalScriptRule of string * string * Ast_cocci.dependency *
(Ast_cocci.script_meta_name * Ast_cocci.meta_name *
Ast_cocci.metavar * Ast_cocci.mvinit)
list * Ast_cocci.script_position * string
and dep =
Ast0_cocci.dep =
Dep of string
| AntiDep of dep
| EverDep of string
| NeverDep of string
| AndDep of dep * dep
| OrDep of dep * dep
| FileIn of string
and dependency =
Ast0_cocci.dependency =
NoDep
| FailDep
| ExistsDep of dep
| ForallDep of dep
and anything =
Ast0_cocci.anything =
DotsExprTag of expression dots
| DotsInitTag of initialiser dots
| DotsParamTag of parameterTypeDef dots
| DotsStmtTag of statement dots
| DotsDeclTag of declaration dots
| DotsFieldTag of field dots
| DotsCaseTag of case_line dots
| DotsDefParamTag of define_param dots
| IdentTag of ident
| ExprTag of expression
| AssignOpTag of assignOp
| BinaryOpTag of binaryOp
| ArgExprTag of expression
| TestExprTag of expression
| TypeCTag of typeC
| ParamTag of parameterTypeDef
| InitTag of initialiser
| DeclTag of declaration
| FieldTag of field
| StmtTag of statement
| ForInfoTag of forinfo
| CaseLineTag of case_line
| StringFragmentTag of string_fragment
| TopTag of top_level
| IsoWhenTag of Ast_cocci.when_modifier
| IsoWhenTTag of expression
| IsoWhenFTag of expression
| MetaPosTag of meta_pos
| HiddenVarTag of anything list
| WhenTag of string mcode * string mcode option * anything
val dotsExpr : expression dots -> anything
val dotsInit : initialiser dots -> anything
val dotsParam : parameterTypeDef dots -> anything
val dotsStmt : statement dots -> anything
val dotsDecl : declaration dots -> anything
val dotsField : field dots -> anything
val dotsCase : case_line dots -> anything
val dotsDefParam : define_param dots -> anything
val ident : ident -> anything
val expr : expression -> anything
val assignOp : assignOp -> anything
val binaryOp : binaryOp -> anything
val typeC : typeC -> anything
val param : parameterTypeDef -> anything
val ini : initialiser -> anything
val decl : declaration -> anything
val field : field -> anything
val stmt : statement -> anything
val forinfo : forinfo -> anything
val case_line : case_line -> anything
val string_fragment : string_fragment -> anything
val top : top_level -> anything
val default_info : unit -> info
val default_befaft : unit -> mcodekind
val context_befaft : unit -> mcodekind
val wrap : 'a -> 'a wrap
val context_wrap : 'a -> 'a wrap
val unwrap : 'a wrap -> 'a
val unwrap_mcode : 'a mcode -> 'a
val rewrap : 'a wrap -> 'b -> 'b wrap
val rewrap_mcode : 'a mcode -> 'b -> 'b mcode
val copywrap : 'a wrap -> 'b -> 'b wrap
val get_pos : 'a mcode -> anything list
val get_pos_ref : 'a mcode -> anything list ref
val set_pos : anything list -> 'a mcode -> 'a mcode
val get_info : 'a wrap -> info
val set_info : 'a wrap -> info -> 'a wrap
val get_index : 'a wrap -> int
val set_index : 'a wrap -> int -> unit
val get_line : 'a wrap -> int
val get_mcode_line : 'a mcode -> int
val get_mcode_logline : 'a mcode -> int
val get_line_end : 'a wrap -> int
val get_mcodekind : 'a wrap -> mcodekind
val get_mcode_mcodekind : 'a mcode -> mcodekind
val get_mcodekind_ref : 'a wrap -> mcodekind ref
val set_mcodekind : 'a wrap -> mcodekind -> unit
val set_type : 'a wrap -> typeC option -> unit
val get_type : 'a wrap -> typeC option
val set_dots_bef_aft : statement -> dots_bef_aft -> statement
val get_dots_bef_aft : 'a wrap -> dots_bef_aft
val set_arg_exp : expression -> expression
val get_arg_exp : expression -> bool
val set_test_pos : expression -> expression
val get_test_pos : 'a wrap -> bool
val set_test_exp : expression -> expression
val clear_test_exp : expression -> expression
val get_test_exp : 'a wrap -> bool
val set_iso : 'a wrap -> (string * anything) list -> 'a wrap
val get_iso : 'a wrap -> (string * anything) list
val fresh_index : unit -> int
val set_mcode_data : 'a -> 'a mcode -> 'a mcode
val make_mcode : 'a -> 'a mcode
val make_mcode_info : 'a -> info -> 'a mcode
val make_minus_mcode : 'a -> 'a mcode
val get_rule_name : parsed_rule -> string
val meta_pos_name : anything -> Ast_cocci.meta_name mcode
val meta_names_of_typeC : typeC -> Ast_cocci.meta_name list
val meta_pos_constraint_names : anything -> Ast_cocci.meta_name list
val lub_pure : pure -> pure -> pure
val rule_name : string ref
val string_of_assignOp : assignOp -> string
val string_of_binaryOp : binaryOp -> string
val is_unknown_type : typeC -> bool
end
module Dumper : sig val dump : 'a -> string end
type pos = {
current_element : string;
current_element_line : int;
current_element_col : int;
current_element_line_end : int;
current_element_col_end : int;
file : string;
line : int;
col : int;
line_end : int;
col_end : int;
}
type param_type =
Pos of pos list
| Com of (string list * string list * string list) list
| AssignOp of Ast_c.assignOp
| BinaryOp of Ast_c.binaryOp
| Str of string
| Type of Ast_c.fullType
| Init of Ast_c.initialiser
| InitList of Ast_c.initialiser Ast_c.wrap2 list
| Int of int
| Param of Ast_c.parameterType
| ParamList of Ast_c.parameterType Ast_c.wrap2 list
| DParamList of string Ast_c.wrap Ast_c.wrap2 list
| Expr of Ast_c.expression
| ExprList of Ast_c.argument Ast_c.wrap2 list
| Decl of Ast_c.declaration
| Field of Ast_c.field
| FieldList of Ast_c.field list
| FragList of Ast_c.string_fragment list
| Fmt of Ast_c.string_format
| Stmt of Ast_c.statement
| StmtList of Ast_c.statement_sequencable list
val fcts :
(string, param_type list -> Ast_c.metavar_binding_kind ref list -> unit)
Hashtbl.t
val bool_fcts : (string, param_type list -> bool) Hashtbl.t
val variables_to_merge : (unit -> string array) ref
val merged_variables : string list array option ref
val no_format : string -> bool
val cstatement_of_string : string -> string -> Ast_c.statement
val cexpression_of_string : string -> string -> Ast_c.expression
val parse_failure : string -> string -> (string -> 'a) -> 'a
val make_ident : string -> Ast_c.metavar_binding_kind
val make_expr : string -> Ast_c.metavar_binding_kind
val make_expr_with_env : string -> string -> Ast_c.metavar_binding_kind
val make_stmt : string -> Ast_c.metavar_binding_kind
val make_stmt_with_env : string -> string -> Ast_c.metavar_binding_kind
val make_type : string -> Ast_c.metavar_binding_kind
val make_listlen : int -> Ast_c.metavar_binding_kind
val make_full_position :
Common.filename ->
string ->
int ->
int -> int -> int -> int -> int -> int -> int -> Ast_c.metavar_binding_kind
val make_position :
Common.filename ->
string -> int -> int -> int -> int -> Ast_c.metavar_binding_kind
val inc_match : bool ref
val include_match : bool -> unit
val exited : bool ref
val exit : unit -> unit
val dir : unit -> string
val files : unit -> string list
val cocci_version : unit -> string
val build_link : pos -> string -> string -> string
val print_todo : ?color:string -> ?msg:string -> pos -> unit
val print_link : ?color:string -> ?msg:string -> pos -> unit
val print_safe_todo : ?color:string -> ?msg:string -> pos -> unit
val print_safe_link : ?color:string -> ?msg:string -> pos -> unit
val print_main : ?color:string -> string -> pos list -> unit
val print_sec : ?color:string -> string -> pos list -> unit
val print_secs : ?color:string -> string -> pos list -> unit
val basename_pos : pos -> pos
module Ana :
sig
type result = Externalanalysis.result
type bound = Externalanalysis.bound
val show_bound : Externalanalysis.bound -> string
val show_result : Externalanalysis.result -> string
val load_results : string -> unit
val find : pos -> Externalanalysis.result list
val inter :
Externalanalysis.result ->
Externalanalysis.result -> Externalanalysis.result option
val satisfy : (Externalanalysis.result list -> bool) -> pos -> bool
val satisfy1 : (Externalanalysis.result -> bool) -> pos -> bool
val has_any : pos -> bool
val for_all : (Externalanalysis.result -> bool) -> pos -> bool
val for_all1 : (Externalanalysis.result -> bool) -> pos -> bool
val exists : (Externalanalysis.result -> bool) -> pos -> bool
val single_int : int64 -> Externalanalysis.result -> bool
val contains_int : int64 -> Externalanalysis.result -> bool
val has_only_nul : pos -> bool
val has_also_nul : pos -> bool
val has_also_int : int64 -> pos -> bool
end
|