From 867ca49f233d8978cb1010de913051c8fb4cfb41 Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Sun, 21 Jun 2015 13:55:54 -0700 Subject: [PATCH] For code coverage, point to the report at coveralls.io (Refs #1066) --- demo/autocomplete.html | 2 +- demo/collector.html | 2 +- demo/functiontrace.html | 2 +- demo/highlight.html | 2 +- demo/index.html | 2 +- demo/minify.html | 2 +- demo/parse.html | 2 +- demo/precedence.html | 2 +- demo/rename.html | 2 +- demo/rewrite.html | 2 +- demo/validate.html | 2 +- doc/changes.html | 2 +- doc/es6.html | 2 +- doc/index.html | 2 +- index.html | 2 +- test/benchmarks.html | 2 +- test/compare.html | 2 +- test/coverage.html | 11 +- test/esprima.js.html | 11787 -------------------------------------- test/index.html | 2 +- test/module.html | 2 +- 21 files changed, 23 insertions(+), 11813 deletions(-) delete mode 100644 test/esprima.js.html diff --git a/demo/autocomplete.html b/demo/autocomplete.html index 59538739b..1663f435a 100644 --- a/demo/autocomplete.html +++ b/demo/autocomplete.html @@ -57,7 +57,7 @@

Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/collector.html b/demo/collector.html index 33e796f14..e856f59c2 100644 --- a/demo/collector.html +++ b/demo/collector.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/functiontrace.html b/demo/functiontrace.html index 3f23d5911..74eb5a88a 100644 --- a/demo/functiontrace.html +++ b/demo/functiontrace.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/highlight.html b/demo/highlight.html index 48762ba0e..c66cc60a1 100644 --- a/demo/highlight.html +++ b/demo/highlight.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/index.html b/demo/index.html index 65b1d0e64..e96af2812 100644 --- a/demo/index.html +++ b/demo/index.html @@ -56,7 +56,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/minify.html b/demo/minify.html index a47b21caf..56c77c281 100644 --- a/demo/minify.html +++ b/demo/minify.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/parse.html b/demo/parse.html index ab3b56283..68f5170a7 100644 --- a/demo/parse.html +++ b/demo/parse.html @@ -70,7 +70,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/precedence.html b/demo/precedence.html index a7966465c..0883bd134 100644 --- a/demo/precedence.html +++ b/demo/precedence.html @@ -95,7 +95,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/rename.html b/demo/rename.html index 4ab070a4e..3c66b6b7e 100644 --- a/demo/rename.html +++ b/demo/rename.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/rewrite.html b/demo/rewrite.html index 47f8fd812..0c626a12e 100644 --- a/demo/rewrite.html +++ b/demo/rewrite.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/demo/validate.html b/demo/validate.html index ae95e27ac..6b6de0349 100644 --- a/demo/validate.html +++ b/demo/validate.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/doc/changes.html b/doc/changes.html index 9920adbc2..2e7e1da2f 100644 --- a/doc/changes.html +++ b/doc/changes.html @@ -69,7 +69,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/doc/es6.html b/doc/es6.html index 3d5c9d94a..58b65d5bc 100644 --- a/doc/es6.html +++ b/doc/es6.html @@ -69,7 +69,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/doc/index.html b/doc/index.html index 43dee5cfc..e2e311de2 100644 --- a/doc/index.html +++ b/doc/index.html @@ -69,7 +69,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/index.html b/index.html index df389ad10..5ff787dd2 100644 --- a/index.html +++ b/index.html @@ -56,7 +56,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/test/benchmarks.html b/test/benchmarks.html index 6ecb82bed..9eceb3097 100644 --- a/test/benchmarks.html +++ b/test/benchmarks.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/test/compare.html b/test/compare.html index 14448d437..3da4e3925 100644 --- a/test/compare.html +++ b/test/compare.html @@ -67,7 +67,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/test/coverage.html b/test/coverage.html index ae86b727b..cf00cb6f6 100644 --- a/test/coverage.html +++ b/test/coverage.html @@ -4,7 +4,8 @@ - Esprima: Unit Tests + Esprima: Code Coverage + @@ -57,7 +58,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • @@ -77,11 +78,7 @@

    Coverage Analysis ensures systematic exer
    -

    Note: This is not a live (in-browser) code coverage report. -The analysis is offline -(using Istanbul).

    - - +

    The complete code coverage report is available at: coveralls.io/r/jquery/esprima.

    diff --git a/test/esprima.js.html b/test/esprima.js.html deleted file mode 100644 index a09c1752a..000000000 --- a/test/esprima.js.html +++ /dev/null @@ -1,11787 +0,0 @@ - - - - Code coverage report for esprima/esprima.js - - - - - - - -
    -

    Code coverage report for esprima/esprima.js

    -

    - - Statements: 100% (1724 / 1724)      - - - Branches: 100% (1137 / 1137)      - - - Functions: 100% (152 / 152)      - - - Lines: 100% (1724 / 1724)      - - Ignored: 4 statements, 13 branches      -

    -
    -
    -
    
    -
    -
    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 -3782 -3783 -3784 -3785 -3786 -3787 -3788 -3789 -3790 -3791 -3792 -3793 -3794 -3795 -3796 -3797 -3798 -3799 -3800 -3801 -3802 -3803 -3804 -3805 -3806 -3807 -3808 -3809 -3810 -3811 -3812 -3813 -3814 -3815 -3816 -3817 -3818 -3819 -3820 -3821 -3822 -3823  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -1 -1 -1 -  -1 -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -  -  -  -  -  -  -  -  -  -1 -  -2527 -1 -  -  -  -1 -11243 -  -  -1 -412 -  -  -1 -464 -  -  -  -  -  -1 -89255 -  -  -  -  -  -1 -85434 -  -  -  -  -1 -16483 -  -  -  -  -  -  -1 -26363 -  -  -  -  -  -  -  -  -  -1 -94 -  -  -  -  -  -  -4 -  -90 -  -  -  -1 -803 -  -  -  -  -  -  -  -  -  -120 -  -683 -  -  -  -1 -803 -  -  -  -  -1 -4668 -50 -  -  -  -  -  -  -4618 -  -324 -  -1074 -  -  -681 -  -  -930 -  -  -  -270 -  -  -186 -  -828 -  -24 -  -301 -  -  -  -  -  -1 -206 -  -206 -  -  -  -  -  -206 -75 -  -131 -  -131 -  -  -  -131 -92 -  -131 -68 -  -131 -  -131 -60 -  -  -  -  -  -60 -  -  -  -1 -222 -  -222 -222 -  -  -  -  -  -  -222 -2037 -2037 -2037 -147 -39 -39 -  -  -  -39 -  -147 -4 -  -147 -147 -147 -  -  -  -75 -39 -39 -  -  -  -39 -  -  -  -1 -367 -  -367 -140 -140 -  -  -  -  -  -  -  -367 -4041 -4041 -158 -10 -  -158 -158 -158 -158 -4 -  -3883 -  -379 -343 -343 -343 -128 -128 -  -  -  -128 -  -343 -  -36 -  -3504 -  -  -  -20 -  -  -1 -76432 -  -76432 -76432 -89255 -  -89255 -16746 -72509 -294 -294 -4 -  -294 -294 -294 -72215 -1510 -1510 -174 -174 -174 -174 -1336 -367 -367 -367 -  -969 -  -70705 -  -293 -  -24 -24 -  -269 -  -70412 -120 -24 -24 -24 -24 -24 -  -96 -  -  -70292 -  -  -  -  -1 -103 -  -103 -103 -308 -276 -276 -  -32 -  -  -71 -  -  -1 -64 -  -64 -64 -  -  -64 -42 -8 -  -34 -34 -34 -12 -  -22 -  -  -44 -72 -72 -10 -  -62 -62 -  -  -62 -22 -22 -4 -  -18 -18 -18 -12 -  -6 -  -  -  -28 -  -  -1 -7224 -  -7224 -7224 -26213 -26213 -  -22 -22 -  -26191 -19583 -  -6608 -  -  -  -7202 -  -  -1 -7266 -  -7266 -  -  -7266 -  -  -  -7230 -2562 -4668 -  -2369 -2365 -  -4 -  -2299 -40 -2259 -251 -  -2008 -  -  -7230 -  -  -  -  -  -  -  -  -  -  -  -1 -11128 -  -  -  -  -  -  -  -11128 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -9282 -9282 -38 -8 -30 -6 -  -  -9282 -  -  -  -  -  -  -  -  -1846 -  -  -1846 -100 -  -  -  -  -  -  -  -  -  -  -66 -66 -  -  -  -  -  -  -  -  -  -30 -  -  -30 -12 -  -30 -  -  -  -  -  -  -  -4 -  -  -1750 -  -  -  -  -1750 -1750 -1750 -  -  -  -1750 -18 -6 -6 -  -  -  -  -  -  -  -  -  -  -  -1744 -12 -12 -  -  -  -  -  -  -  -  -1732 -6 -6 -  -  -  -  -  -  -  -  -1726 -6 -6 -  -  -  -  -  -  -  -  -  -  -1720 -312 -312 -  -  -  -  -  -  -  -  -1408 -1392 -1392 -  -  -  -  -  -  -  -  -16 -  -  -  -  -1 -56 -  -56 -116 -10 -  -106 -  -  -56 -4 -  -  -52 -4 -  -  -48 -  -  -  -  -  -  -  -  -1 -44 -44 -62 -26 -  -36 -  -  -44 -8 -  -  -36 -  -  -  -  -  -  -  -  -  -1 -1162 -  -1162 -1162 -  -  -1162 -1162 -1162 -1156 -1156 -  -  -  -1156 -204 -56 -56 -  -148 -44 -  -  -  -104 -4 -  -  -  -1052 -594 -  -1052 -  -  -1058 -24 -24 -144 -  -24 -  -  -1058 -40 -  -40 -40 -32 -  -40 -24 -60 -  -  -16 -  -  -  -1042 -16 -  -  -1026 -  -  -  -  -  -  -  -  -  -  -1 -674 -  -674 -674 -  -  -674 -674 -  -674 -6930 -  -6930 -658 -658 -6272 -220 -220 -208 -  -18 -18 -  -6 -6 -  -6 -6 -  -  -34 -34 -34 -18 -  -16 -16 -  -34 -  -6 -6 -  -6 -6 -  -6 -6 -  -  -126 -98 -  -  -98 -68 -  -  -98 -42 -42 -  -  -  -42 -  -  -24 -  -  -98 -  -28 -  -126 -  -  -12 -12 -6 -  -12 -  -6052 -8 -  -6044 -  -  -  -674 -16 -  -  -658 -  -  -  -  -  -  -  -  -  -1 -115 -  -115 -115 -  -115 -115 -115 -115 -  -115 -579 -579 -579 -22 -  -22 -4 -  -18 -557 -12 -545 -251 -59 -  -  -294 -82 -82 -212 -63 -  -  -  -  -99 -17 -  -  -  -82 -  -82 -82 -90 -90 -8 -  -  -82 -82 -36 -36 -17 -17 -17 -17 -9 -9 -36 -  -  -8 -8 -8 -  -17 -  -19 -  -  -46 -46 -  -  -  -70 -70 -  -4 -  -  -  -  -66 -7 -  -  -  -  -  -  -  -59 -  -  -  -  -  -  -1 -40 -  -40 -  -40 -40 -  -  -  -  -  -  -40 -31 -  -  -  -  -  -31 -  -24 -24 -24 -24 -24 -  -  -  -  -24 -  -  -  -  -  -  -  -31 -  -  -1 -142 -  -  -  -  -  -1 -22 -  -  -  -22 -22 -  -5 -  -17 -15 -1 -  -14 -2 -2 -  -  -  -  -  -1 -  -1 -  -12 -  -  -5 -  -  -2 -2 -1 -  -3 -  -  -2 -2 -1 -  -  -1 -  -  -  -2 -  -1 -  -  -1 -  -7 -  -2 -1 -  -1 -  -  -1 -23076 -  -23076 -  -23076 -2830 -  -  -  -  -  -  -  -20246 -  -  -20246 -4295 -  -  -  -15951 -674 -  -  -15277 -7266 -  -  -  -  -8011 -156 -6 -  -150 -  -  -7855 -1156 -  -  -  -6699 -22 -  -  -6677 -  -  -1 -299 -  -299 -299 -299 -  -  -  -  -  -  -299 -290 -  -  -  -  -290 -221 -221 -221 -  -  -  -  -  -  -  -290 -  -  -1 -19442 -  -19442 -19442 -19442 -19442 -  -19442 -  -19429 -19429 -19429 -  -19429 -  -  -1 -3634 -  -3634 -3634 -3634 -3634 -3518 -3518 -3518 -  -  -1 -  -  -  -  -44123 -44099 -17223 -17223 -  -44099 -17497 -  -  -  -  -432 -  -432 -150 -  -  -  -282 -  -282 -267 -267 -147 -147 -102 -102 -102 -75 -  -  -45 -  -  -267 -27 -27 -6 -6 -  -6 -6 -  -  -21 -  -  -  -  -  -  -27977 -9446 -  -27977 -9304 -  -  -  -  -  -  -  -  -  -9304 -  -27977 -402 -  -27977 -  -  -  -18525 -10714 -7919 -7919 -  -10714 -8051 -  -  -7811 -  -18525 -  -  -  -9847 -44 -  -9847 -  -  -  -89 -  -  -  -  -  -  -480 -  -  -  -  -  -  -  -  -650 -  -650 -  -  -  -  -  -  -  -  -928 -  -  -  -  -  -  -72 -  -  -  -  -  -  -311 -  -  -  -  -  -  -  -46 -  -  -  -  -  -  -  -18 -  -  -  -  -  -  -  -  -48 -  -  -  -  -  -  -6 -  -  -  -  -  -24 -  -  -  -  -  -  -  -129 -  -  -  -  -  -2478 -  -  -  -  -  -  -60 -  -  -  -  -  -  -  -  -  -47 -  -  -  -  -  -  -  -  -  -107 -  -  -  -  -  -  -  -  -  -  -  -  -322 -  -  -  -  -  -  -  -  -  -  -  -  -4635 -  -  -  -  -  -  -54 -  -  -  -  -  -  -  -  -54 -  -  -  -  -  -  -  -1962 -  -  -  -  -  -  -  -162 -  -  -  -  -  -  -  -  -70 -  -  -  -  -  -  -  -219 -  -  -  -  -  -  -99 -  -  -  -  -  -  -  -  -2403 -  -  -  -  -  -  -339 -  -  -  -  -  -  -  -  -65 -  -  -  -  -  -  -12 -  -  -  -  -  -  -38 -  -  -  -  -  -  -  -30 -  -  -  -  -  -  -  -18 -  -  -  -  -  -36 -  -  -  -  -  -  -52 -  -  -  -  -  -  -  -  -  -122 -63 -  -  -  -  -  -  -59 -  -  -  -  -  -  -  -  -297 -  -  -  -  -  -  -  -395 -  -  -  -  -  -  -  -120 -  -  -  -  -  -  -  -35 -  -  -  -  -  -  -  -  -  -1 -366 -  -366 -366 -366 -366 -366 -366 -366 -366 -  -366 -  -  -  -  -1 -1098 -  -  -  -  -370 -370 -  -  -  -1098 -588 -588 -588 -588 -  -510 -510 -510 -510 -  -  -1098 -1098 -  -  -1 -501 -501 -  -501 -205 -  -296 -  -  -  -  -  -  -  -1 -334 -80 -  -  -254 -20 -  -  -234 -4 -  -  -230 -8 -  -  -222 -94 -4 -90 -50 -10 -  -40 -  -  -  -128 -  -  -  -  -  -1 -7590 -7590 -64 -  -  -  -  -  -  -1 -1997 -1997 -4 -  -  -  -  -  -1 -56107 -  -  -  -  -1 -10625 -  -  -  -  -1 -4567 -  -4567 -1760 -  -2807 -2807 -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -2912 -  -  -2912 -891 -891 -  -  -2021 -2021 -2021 -84 -  -  -1937 -6 -6 -  -  -1931 -32 -  -  -  -  -  -1 -717 -  -  -  -  -1 -97 -  -97 -  -97 -84 -22 -22 -  -62 -  -54 -42 -  -  -  -  -89 -  -89 -  -  -  -  -1 -176 -  -176 -176 -176 -176 -13 -  -168 -168 -  -  -1 -559 -  -559 -559 -  -  -  -  -559 -49 -13 -  -41 -  -  -510 -  -  -1 -383 -  -383 -383 -  -383 -  -326 -  -  -  -326 -89 -89 -89 -89 -89 -  -237 -95 -95 -95 -95 -13 -9 -5 -  -82 -82 -82 -  -79 -  -142 -142 -130 -  -57 -8 -  -49 -41 -41 -41 -  -  -  -1 -319 -  -319 -  -319 -383 -  -339 -298 -  -41 -  -339 -  -339 -339 -72 -36 -17 -19 -13 -  -  -36 -17 -19 -13 -  -  -32 -  -267 -  -  -299 -  -299 -96 -  -  -  -219 -  -219 -  -  -  -  -1 -345 -  -345 -  -345 -  -201 -  -201 -  -  -  -  -  -1 -5749 -  -5749 -345 -  -  -5404 -5404 -  -5404 -2695 -2709 -1685 -17 -  -1673 -1024 -252 -18 -18 -234 -222 -  -772 -182 -182 -182 -590 -7 -7 -7 -583 -97 -486 -319 -167 -99 -24 -  -75 -  -59 -  -  -5172 -5092 -  -  -80 -  -  -  -  -1 -343 -  -343 -  -343 -125 -147 -143 -121 -  -22 -  -  -  -339 -  -339 -  -  -1 -142 -  -142 -142 -  -142 -4 -  -  -138 -  -  -1 -142 -  -142 -  -  -1 -24 -  -24 -  -24 -  -24 -  -24 -  -  -1 -70 -  -70 -70 -70 -70 -  -70 -  -  -1 -5749 -  -5749 -  -5749 -5749 -5749 -5293 -  -5293 -469 -315 -311 -154 -18 -18 -  -136 -132 -  -461 -306 -  -  -  -5285 -  -  -1 -70 -  -70 -  -70 -70 -70 -  -70 -12 -6 -6 -  -6 -6 -  -12 -8 -  -  -  -70 -  -  -  -  -1 -5749 -  -5749 -5749 -  -5285 -3548 -  -123 -26 -  -  -107 -13 -  -  -99 -99 -  -  -  -5261 -  -  -  -  -1 -5895 -  -5895 -  -5895 -4527 -1368 -87 -87 -  -87 -26 -  -  -71 -13 -  -  -63 -1281 -32 -32 -32 -1249 -27 -27 -27 -27 -9 -  -  -1222 -  -  -5379 -  -  -1 -5233 -  -5233 -1687 -  -  -3546 -  -36 -36 -  -  -36 -36 -  -  -42 -42 -  -  -36 -36 -  -  -36 -36 -  -  -  -  -  -30 -30 -  -  -  -  -  -  -96 -96 -  -  -69 -69 -  -  -  -  -42 -42 -  -  -  -176 -176 -  -  -  -  -114 -114 -  -  -2833 -  -  -3546 -  -  -  -  -  -  -  -  -  -  -1 -5083 -  -5083 -5083 -  -4583 -4583 -4583 -4133 -  -450 -450 -  -450 -450 -  -434 -  -434 -  -  -216 -120 -120 -120 -120 -120 -120 -120 -80 -  -120 -120 -  -  -  -216 -216 -216 -216 -216 -216 -  -  -  -434 -434 -434 -434 -530 -530 -530 -530 -340 -  -  -  -434 -  -  -  -  -  -1 -5083 -  -5083 -5083 -  -4567 -18 -18 -18 -18 -18 -18 -18 -  -18 -  -4549 -  -  -4567 -  -  -  -  -1 -5083 -  -5083 -5083 -5083 -  -4567 -  -516 -30 -  -  -  -496 -18 -  -  -488 -488 -480 -  -  -4531 -  -  -  -  -1 -3850 -  -3850 -3850 -  -3354 -12 -  -12 -18 -6 -  -12 -12 -  -  -  -3354 -  -  -  -  -1 -447 -  -  -447 -835 -399 -  -436 -400 -4 -  -396 -  -  -411 -  -  -1 -447 -  -447 -447 -  -447 -  -411 -  -399 -  -  -  -  -1 -1400 -  -1400 -1400 -  -1400 -114 -  -  -1296 -  -  -1 -503 -  -503 -503 -  -  -443 -18 -  -  -435 -46 -34 -389 -275 -271 -  -  -395 -  -  -1 -405 -  -405 -503 -395 -297 -  -98 -  -  -297 -  -  -1 -285 -  -285 -  -285 -  -197 -  -197 -  -  -  -  -  -  -1 -62 -  -62 -  -62 -  -62 -  -42 -  -42 -  -  -  -  -1 -129 -129 -  -  -  -  -1 -297 -153 -153 -  -  -  -  -1 -74 -  -74 -  -74 -  -70 -  -70 -  -70 -  -58 -10 -10 -  -48 -  -  -54 -  -  -  -  -1 -32 -  -32 -  -32 -32 -  -32 -  -28 -  -28 -  -24 -  -24 -  -24 -  -24 -6 -  -  -24 -  -  -1 -152 -  -152 -  -152 -  -152 -  -152 -  -152 -152 -  -152 -  -120 -  -120 -  -  -1 -58 -  -58 -58 -58 -  -58 -  -  -1 -131 -  -131 -  -131 -  -131 -  -131 -22 -  -109 -58 -58 -58 -  -58 -36 -36 -36 -36 -  -  -51 -51 -51 -  -51 -  -23 -17 -  -  -11 -11 -11 -11 -  -  -  -97 -50 -  -  -  -111 -  -64 -18 -  -64 -  -64 -12 -  -  -  -111 -  -111 -111 -  -111 -  -107 -  -107 -  -  -  -  -  -  -1 -76 -  -76 -  -  -76 -14 -  -14 -8 -  -  -6 -  -  -62 -22 -4 -  -  -18 -  -  -40 -26 -  -26 -26 -8 -  -  -  -32 -  -28 -4 -  -  -24 -  -  -  -  -1 -96 -  -96 -  -  -96 -16 -  -16 -4 -  -  -12 -  -  -80 -22 -4 -  -  -18 -  -  -58 -38 -  -38 -38 -8 -  -  -  -50 -  -46 -4 -  -  -42 -  -  -  -  -1 -69 -  -69 -  -69 -9 -  -  -  -65 -42 -24 -24 -24 -  -  -  -41 -18 -  -  -23 -17 -6 -  -  -  -23 -  -23 -  -  -  -  -1 -43 -  -43 -9 -  -  -39 -  -39 -  -39 -  -39 -  -39 -  -35 -  -  -  -  -1 -42 -  -  -  -42 -42 -18 -18 -  -24 -24 -  -42 -  -42 -84 -38 -  -46 -42 -  -  -38 -  -  -1 -38 -  -38 -  -38 -  -38 -  -38 -  -38 -  -38 -  -38 -6 -6 -  -  -32 -32 -32 -  -32 -66 -24 -  -42 -38 -14 -4 -  -10 -  -34 -  -  -24 -  -24 -  -24 -  -  -  -  -1 -48 -  -48 -  -48 -4 -  -  -44 -  -36 -  -36 -  -  -  -  -1 -70 -  -70 -70 -  -70 -70 -4 -  -  -66 -  -58 -18 -  -  -50 -46 -46 -  -  -1 -80 -  -80 -  -80 -  -80 -70 -  -  -56 -12 -12 -  -  -56 -4 -  -  -52 -  -  -  -  -1 -6 -  -6 -  -6 -  -  -  -  -1 -4530 -  -  -  -  -4530 -24 -  -  -4506 -  -4506 -922 -  -129 -  -309 -  -297 -  -187 -  -  -  -3771 -1229 -  -96 -  -76 -  -6 -  -32 -  -131 -  -6 -  -74 -  -69 -  -38 -  -48 -  -80 -  -285 -  -152 -  -43 -  -93 -  -  -  -2635 -  -  -2435 -86 -  -86 -86 -8 -  -  -78 -78 -54 -54 -  -  -2349 -  -2325 -  -  -  -  -1 -737 -  -  -737 -737 -  -737 -1031 -715 -  -316 -  -316 -308 -308 -  -6 -  -302 -302 -273 -273 -13 -  -  -29 -13 -  -  -  -  -721 -721 -721 -721 -  -721 -721 -721 -721 -  -721 -937 -529 -  -408 -220 -4 -  -216 -  -  -533 -  -529 -529 -529 -529 -  -529 -  -  -1 -577 -577 -  -577 -144 -144 -192 -192 -176 -176 -76 -32 -32 -  -76 -22 -22 -  -100 -92 -16 -16 -76 -12 -12 -64 -20 -20 -  -  -176 -176 -176 -128 -  -48 -  -  -  -561 -  -561 -  -  -  -  -  -  -  -1 -395 -  -395 -  -395 -395 -395 -375 -58 -18 -  -  -317 -34 -34 -283 -4 -4 -  -  -  -367 -351 -351 -351 -351 -61 -  -  -351 -351 -167 -44 -  -123 -31 -  -107 -  -107 -  -  -1 -222 -  -222 -222 -  -222 -98 -98 -98 -50 -22 -  -  -48 -20 -20 -28 -4 -4 -  -  -  -  -210 -210 -210 -210 -210 -41 -  -  -210 -210 -186 -24 -  -162 -23 -  -154 -  -154 -  -  -  -  -1 -4451 -1558 -  -  -62 -  -389 -  -1107 -  -  -  -2893 -2885 -  -  -  -1 -3151 -  -3151 -3255 -3255 -2956 -  -  -299 -299 -299 -  -6 -  -293 -293 -170 -170 -9 -  -  -123 -57 -  -  -  -  -3147 -2992 -  -2248 -1 -  -2248 -  -2403 -  -  -1 -3287 -  -3287 -3263 -3263 -3151 -2403 -  -  -1 -54 -  -54 -60 -60 -60 -60 -45 -42 -  -45 -  -60 -60 -  -21 -21 -  -21 -  -  -54 -  -  -1 -69 -  -69 -213 -213 -  -  -  -213 -149 -  -213 -149 -  -213 -  -  -69 -  -  -1 -6392 -6392 -6392 -  -  -1 -  -  -  -734 -553 -  -734 -543 -  -  -  -  -  -  -  -  -  -543 -  -734 -30 -  -  -  -  -1 -11568 -5176 -  -  -6392 -  -6392 -  -  -1 -30 -  -  -  -30 -30 -7 -  -  -30 -30 -30 -30 -30 -30 -30 -30 -  -  -  -  -  -  -  -  -30 -  -  -30 -  -  -30 -30 -30 -  -30 -30 -  -30 -30 -  -30 -18 -  -30 -14 -  -  -30 -30 -26 -1 -  -  -25 -25 -58 -58 -  -5 -5 -1 -  -  -1 -  -4 -  -  -  -  -21 -21 -21 -13 -  -21 -13 -  -  -8 -  -30 -  -21 -  -  -1 -3287 -  -3287 -3287 -7 -  -  -3287 -3287 -3287 -3287 -3287 -3287 -3287 -3287 -  -  -  -  -  -  -  -  -  -3287 -3287 -3279 -3279 -3279 -  -3279 -4 -  -  -3279 -48 -  -3279 -541 -  -3279 -205 -  -3279 -54 -54 -54 -  -  -  -3287 -3287 -2403 -99 -  -2403 -48 -48 -  -2403 -205 -  -2403 -54 -  -  -884 -  -3287 -  -  -2403 -  -  -  -1 -  -1 -  -1 -  -  -  -1 -1 -  -1 -1 -  -  -1 -40 -40 -  -  -  -1 -1 -  -  -1 -  -  -  -  - 
    /*
    -  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>
    -  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
    -  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>
    -  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
    -  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>
    -  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
    -  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>
    -  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
    -  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>
    -  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
    - 
    -  Redistribution and use in source and binary forms, with or without
    -  modification, are permitted provided that the following conditions are met:
    - 
    -    * Redistributions of source code must retain the above copyright
    -      notice, this list of conditions and the following disclaimer.
    -    * Redistributions in binary form must reproduce the above copyright
    -      notice, this list of conditions and the following disclaimer in the
    -      documentation and/or other materials provided with the distribution.
    - 
    -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    -  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    -  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    -  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
    -  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    -  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    -  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    -  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    -  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    -  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    -*/
    - 
    -/*jslint bitwise:true plusplus:true */
    -/*global esprima:true, define:true, exports:true, window: true,
    -createLocationMarker: true, throwErrorTolerant: true,
    -throwError: true, generateStatement: true, peek: true,
    -parseAssignmentExpression: true, parseBlock: true, parseExpression: true,
    -parseFunctionDeclaration: true, parseFunctionExpression: true,
    -parseFunctionSourceElements: true, parseVariableIdentifier: true,
    -parseLeftHandSideExpression: true,
    -parseUnaryExpression: true,
    -parseStatement: true, parseSourceElement: true */
    - 
    -(function (root, factory) {
    -    'use strict';
    - 
    -    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
    -    // Rhino, and plain browser loading.
    - 
    -    /* istanbul ignore next */
    -    Iif (typeof define === 'function' && define.amd) {
    -        define(['exports'], factory);
    -    } else Eif (typeof exports !== 'undefined') {
    -        factory(exports);
    -    } else {
    -        factory((root.esprima = {}));
    -    }
    -}(this, function (exports) {
    -    'use strict';
    - 
    -    var Token,
    -        TokenName,
    -        FnExprTokens,
    -        Syntax,
    -        PropertyKind,
    -        Messages,
    -        Regex,
    -        SyntaxTreeDelegate,
    -        source,
    -        strict,
    -        index,
    -        lineNumber,
    -        lineStart,
    -        length,
    -        delegate,
    -        lookahead,
    -        state,
    -        extra;
    - 
    -    Token = {
    -        BooleanLiteral: 1,
    -        EOF: 2,
    -        Identifier: 3,
    -        Keyword: 4,
    -        NullLiteral: 5,
    -        NumericLiteral: 6,
    -        Punctuator: 7,
    -        StringLiteral: 8,
    -        RegularExpression: 9
    -    };
    - 
    -    TokenName = {};
    -    TokenName[Token.BooleanLiteral] = 'Boolean';
    -    TokenName[Token.EOF] = '<end>';
    -    TokenName[Token.Identifier] = 'Identifier';
    -    TokenName[Token.Keyword] = 'Keyword';
    -    TokenName[Token.NullLiteral] = 'Null';
    -    TokenName[Token.NumericLiteral] = 'Numeric';
    -    TokenName[Token.Punctuator] = 'Punctuator';
    -    TokenName[Token.StringLiteral] = 'String';
    -    TokenName[Token.RegularExpression] = 'RegularExpression';
    - 
    -    // A function following one of those tokens is an expression.
    -    FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',
    -                    'return', 'case', 'delete', 'throw', 'void',
    -                    // assignment operators
    -                    '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',
    -                    '&=', '|=', '^=', ',',
    -                    // binary/unary operators
    -                    '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',
    -                    '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',
    -                    '<=', '<', '>', '!=', '!=='];
    - 
    -    Syntax = {
    -        AssignmentExpression: 'AssignmentExpression',
    -        ArrayExpression: 'ArrayExpression',
    -        BlockStatement: 'BlockStatement',
    -        BinaryExpression: 'BinaryExpression',
    -        BreakStatement: 'BreakStatement',
    -        CallExpression: 'CallExpression',
    -        CatchClause: 'CatchClause',
    -        ConditionalExpression: 'ConditionalExpression',
    -        ContinueStatement: 'ContinueStatement',
    -        DoWhileStatement: 'DoWhileStatement',
    -        DebuggerStatement: 'DebuggerStatement',
    -        EmptyStatement: 'EmptyStatement',
    -        ExpressionStatement: 'ExpressionStatement',
    -        ForStatement: 'ForStatement',
    -        ForInStatement: 'ForInStatement',
    -        FunctionDeclaration: 'FunctionDeclaration',
    -        FunctionExpression: 'FunctionExpression',
    -        Identifier: 'Identifier',
    -        IfStatement: 'IfStatement',
    -        Literal: 'Literal',
    -        LabeledStatement: 'LabeledStatement',
    -        LogicalExpression: 'LogicalExpression',
    -        MemberExpression: 'MemberExpression',
    -        NewExpression: 'NewExpression',
    -        ObjectExpression: 'ObjectExpression',
    -        Program: 'Program',
    -        Property: 'Property',
    -        ReturnStatement: 'ReturnStatement',
    -        SequenceExpression: 'SequenceExpression',
    -        SwitchStatement: 'SwitchStatement',
    -        SwitchCase: 'SwitchCase',
    -        ThisExpression: 'ThisExpression',
    -        ThrowStatement: 'ThrowStatement',
    -        TryStatement: 'TryStatement',
    -        UnaryExpression: 'UnaryExpression',
    -        UpdateExpression: 'UpdateExpression',
    -        VariableDeclaration: 'VariableDeclaration',
    -        VariableDeclarator: 'VariableDeclarator',
    -        WhileStatement: 'WhileStatement',
    -        WithStatement: 'WithStatement'
    -    };
    - 
    -    PropertyKind = {
    -        Data: 1,
    -        Get: 2,
    -        Set: 4
    -    };
    - 
    -    // Error messages should be identical to V8.
    -    Messages = {
    -        UnexpectedToken:  'Unexpected token %0',
    -        UnexpectedNumber:  'Unexpected number',
    -        UnexpectedString:  'Unexpected string',
    -        UnexpectedIdentifier:  'Unexpected identifier',
    -        UnexpectedReserved:  'Unexpected reserved word',
    -        UnexpectedEOS:  'Unexpected end of input',
    -        NewlineAfterThrow:  'Illegal newline after throw',
    -        InvalidRegExp: 'Invalid regular expression',
    -        UnterminatedRegExp:  'Invalid regular expression: missing /',
    -        InvalidLHSInAssignment:  'Invalid left-hand side in assignment',
    -        InvalidLHSInForIn:  'Invalid left-hand side in for-in',
    -        MultipleDefaultsInSwitch: 'More than one default clause in switch statement',
    -        NoCatchOrFinally:  'Missing catch or finally after try',
    -        UnknownLabel: 'Undefined label \'%0\'',
    -        Redeclaration: '%0 \'%1\' has already been declared',
    -        IllegalContinue: 'Illegal continue statement',
    -        IllegalBreak: 'Illegal break statement',
    -        IllegalReturn: 'Illegal return statement',
    -        StrictModeWith:  'Strict mode code may not include a with statement',
    -        StrictCatchVariable:  'Catch variable may not be eval or arguments in strict mode',
    -        StrictVarName:  'Variable name may not be eval or arguments in strict mode',
    -        StrictParamName:  'Parameter name eval or arguments is not allowed in strict mode',
    -        StrictParamDupe: 'Strict mode function may not have duplicate parameter names',
    -        StrictFunctionName:  'Function name may not be eval or arguments in strict mode',
    -        StrictOctalLiteral:  'Octal literals are not allowed in strict mode.',
    -        StrictDelete:  'Delete of an unqualified identifier in strict mode.',
    -        StrictDuplicateProperty:  'Duplicate data property in object literal not allowed in strict mode',
    -        AccessorDataProperty:  'Object literal may not have data and accessor property with the same name',
    -        AccessorGetSet:  'Object literal may not have multiple get/set accessors with the same name',
    -        StrictLHSAssignment:  'Assignment to eval or arguments is not allowed in strict mode',
    -        StrictLHSPostfix:  'Postfix increment/decrement may not have eval or arguments operand in strict mode',
    -        StrictLHSPrefix:  'Prefix increment/decrement may not have eval or arguments operand in strict mode',
    -        StrictReservedWord:  'Use of future reserved word in strict mode'
    -    };
    - 
    -    // See also tools/generate-unicode-regex.py.
    -    Regex = {
    -        NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'),
    -        NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]')
    -    };
    - 
    -    // Ensure the condition is true, otherwise throw an error.
    -    // This is only to have a better contract semantic, i.e. another safety net
    -    // to catch a logic error. The condition shall be fulfilled in normal case.
    -    // Do NOT use this to enforce a certain condition on any user input.
    - 
    -    function assert(condition, message) {
    -        /* istanbul ignore if */
    -        Iif (!condition) {
    -            throw new Error('ASSERT: ' + message);
    -        }
    -    }
    - 
    -    function isDecimalDigit(ch) {
    -        return (ch >= 48 && ch <= 57);   // 0..9
    -    }
    - 
    -    function isHexDigit(ch) {
    -        return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;
    -    }
    - 
    -    function isOctalDigit(ch) {
    -        return '01234567'.indexOf(ch) >= 0;
    -    }
    - 
    - 
    -    // 7.2 White Space
    - 
    -    function isWhiteSpace(ch) {
    -        return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||
    -            (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);
    -    }
    - 
    -    // 7.3 Line Terminators
    - 
    -    function isLineTerminator(ch) {
    -        return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);
    -    }
    - 
    -    // 7.6 Identifier Names and Identifiers
    - 
    -    function isIdentifierStart(ch) {
    -        return (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
    -            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
    -            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
    -            (ch === 0x5C) ||                      // \ (backslash)
    -            ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));
    -    }
    - 
    -    function isIdentifierPart(ch) {
    -        return (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
    -            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
    -            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
    -            (ch >= 0x30 && ch <= 0x39) ||         // 0..9
    -            (ch === 0x5C) ||                      // \ (backslash)
    -            ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
    -    }
    - 
    -    // 7.6.1.2 Future Reserved Words
    - 
    -    function isFutureReservedWord(id) {
    -        switch (id) {
    -        case 'class':
    -        case 'enum':
    -        case 'export':
    -        case 'extends':
    -        case 'import':
    -        case 'super':
    -            return true;
    -        default:
    -            return false;
    -        }
    -    }
    - 
    -    function isStrictModeReservedWord(id) {
    -        switch (id) {
    -        case 'implements':
    -        case 'interface':
    -        case 'package':
    -        case 'private':
    -        case 'protected':
    -        case 'public':
    -        case 'static':
    -        case 'yield':
    -        case 'let':
    -            return true;
    -        default:
    -            return false;
    -        }
    -    }
    - 
    -    function isRestrictedWord(id) {
    -        return id === 'eval' || id === 'arguments';
    -    }
    - 
    -    // 7.6.1.1 Keywords
    - 
    -    function isKeyword(id) {
    -        if (strict && isStrictModeReservedWord(id)) {
    -            return true;
    -        }
    - 
    -        // 'const' is specialized as Keyword in V8.
    -        // 'yield' and 'let' are for compatibility with SpiderMonkey and ES.next.
    -        // Some others are from future reserved words.
    - 
    -        switch (id.length) {
    -        case 2:
    -            return (id === 'if') || (id === 'in') || (id === 'do');
    -        case 3:
    -            return (id === 'var') || (id === 'for') || (id === 'new') ||
    -                (id === 'try') || (id === 'let');
    -        case 4:
    -            return (id === 'this') || (id === 'else') || (id === 'case') ||
    -                (id === 'void') || (id === 'with') || (id === 'enum');
    -        case 5:
    -            return (id === 'while') || (id === 'break') || (id === 'catch') ||
    -                (id === 'throw') || (id === 'const') || (id === 'yield') ||
    -                (id === 'class') || (id === 'super');
    -        case 6:
    -            return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
    -                (id === 'switch') || (id === 'export') || (id === 'import');
    -        case 7:
    -            return (id === 'default') || (id === 'finally') || (id === 'extends');
    -        case 8:
    -            return (id === 'function') || (id === 'continue') || (id === 'debugger');
    -        case 10:
    -            return (id === 'instanceof');
    -        default:
    -            return false;
    -        }
    -    }
    - 
    -    // 7.4 Comments
    - 
    -    function addComment(type, value, start, end, loc) {
    -        var comment, attacher;
    - 
    -        assert(typeof start === 'number', 'Comment must have valid position');
    - 
    -        // Because the way the actual token is scanned, often the comments
    -        // (if any) are skipped twice during the lexical analysis.
    -        // Thus, we need to skip adding a comment if the comment array already
    -        // handled it.
    -        if (state.lastCommentStart >= start) {
    -            return;
    -        }
    -        state.lastCommentStart = start;
    - 
    -        comment = {
    -            type: type,
    -            value: value
    -        };
    -        if (extra.range) {
    -            comment.range = [start, end];
    -        }
    -        if (extra.loc) {
    -            comment.loc = loc;
    -        }
    -        extra.comments.push(comment);
    - 
    -        if (extra.attachComment) {
    -            attacher = {
    -                comment: comment,
    -                leading: null,
    -                trailing: null,
    -                range: [start, end]
    -            };
    -            extra.pendingComments.push(attacher);
    -        }
    -    }
    - 
    -    function skipSingleLineComment(offset) {
    -        var start, loc, ch, comment;
    - 
    -        start = index - offset;
    -        loc = {
    -            start: {
    -                line: lineNumber,
    -                column: index - lineStart - offset
    -            }
    -        };
    - 
    -        while (index < length) {
    -            ch = source.charCodeAt(index);
    -            ++index;
    -            if (isLineTerminator(ch)) {
    -                if (extra.comments) {
    -                    comment = source.slice(start + offset, index - 1);
    -                    loc.end = {
    -                        line: lineNumber,
    -                        column: index - lineStart - 1
    -                    };
    -                    addComment('Line', comment, start, index - 1, loc);
    -                }
    -                if (ch === 13 && source.charCodeAt(index) === 10) {
    -                    ++index;
    -                }
    -                ++lineNumber;
    -                lineStart = index;
    -                return;
    -            }
    -        }
    - 
    -        if (extra.comments) {
    -            comment = source.slice(start + offset, index);
    -            loc.end = {
    -                line: lineNumber,
    -                column: index - lineStart
    -            };
    -            addComment('Line', comment, start, index, loc);
    -        }
    -    }
    - 
    -    function skipMultiLineComment() {
    -        var start, loc, ch, comment;
    - 
    -        if (extra.comments) {
    -            start = index - 2;
    -            loc = {
    -                start: {
    -                    line: lineNumber,
    -                    column: index - lineStart - 2
    -                }
    -            };
    -        }
    - 
    -        while (index < length) {
    -            ch = source.charCodeAt(index);
    -            if (isLineTerminator(ch)) {
    -                if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {
    -                    ++index;
    -                }
    -                ++lineNumber;
    -                ++index;
    -                lineStart = index;
    -                if (index >= length) {
    -                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -                }
    -            } else if (ch === 0x2A) {
    -                // Block comment ends with '*/'.
    -                if (source.charCodeAt(index + 1) === 0x2F) {
    -                    ++index;
    -                    ++index;
    -                    if (extra.comments) {
    -                        comment = source.slice(start + 2, index - 2);
    -                        loc.end = {
    -                            line: lineNumber,
    -                            column: index - lineStart
    -                        };
    -                        addComment('Block', comment, start, index, loc);
    -                    }
    -                    return;
    -                }
    -                ++index;
    -            } else {
    -                ++index;
    -            }
    -        }
    - 
    -        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -    }
    - 
    -    function skipComment() {
    -        var ch, start;
    - 
    -        start = (index === 0);
    -        while (index < length) {
    -            ch = source.charCodeAt(index);
    - 
    -            if (isWhiteSpace(ch)) {
    -                ++index;
    -            } else if (isLineTerminator(ch)) {
    -                ++index;
    -                if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {
    -                    ++index;
    -                }
    -                ++lineNumber;
    -                lineStart = index;
    -                start = true;
    -            } else if (ch === 0x2F) { // U+002F is '/'
    -                ch = source.charCodeAt(index + 1);
    -                if (ch === 0x2F) {
    -                    ++index;
    -                    ++index;
    -                    skipSingleLineComment(2);
    -                    start = true;
    -                } else if (ch === 0x2A) {  // U+002A is '*'
    -                    ++index;
    -                    ++index;
    -                    skipMultiLineComment();
    -                } else {
    -                    break;
    -                }
    -            } else if (start && ch === 0x2D) { // U+002D is '-'
    -                // U+003E is '>'
    -                if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {
    -                    // '-->' is a single-line comment
    -                    index += 3;
    -                    skipSingleLineComment(3);
    -                } else {
    -                    break;
    -                }
    -            } else if (ch === 0x3C) { // U+003C is '<'
    -                if (source.slice(index + 1, index + 4) === '!--') {
    -                    ++index; // `<`
    -                    ++index; // `!`
    -                    ++index; // `-`
    -                    ++index; // `-`
    -                    skipSingleLineComment(4);
    -                } else {
    -                    break;
    -                }
    -            } else {
    -                break;
    -            }
    -        }
    -    }
    - 
    -    function scanHexEscape(prefix) {
    -        var i, len, ch, code = 0;
    - 
    -        len = (prefix === 'u') ? 4 : 2;
    -        for (i = 0; i < len; ++i) {
    -            if (index < length && isHexDigit(source[index])) {
    -                ch = source[index++];
    -                code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());
    -            } else {
    -                return '';
    -            }
    -        }
    -        return String.fromCharCode(code);
    -    }
    - 
    -    function getEscapedIdentifier() {
    -        var ch, id;
    - 
    -        ch = source.charCodeAt(index++);
    -        id = String.fromCharCode(ch);
    - 
    -        // '\u' (U+005C, U+0075) denotes an escaped character.
    -        if (ch === 0x5C) {
    -            if (source.charCodeAt(index) !== 0x75) {
    -                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -            }
    -            ++index;
    -            ch = scanHexEscape('u');
    -            if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) {
    -                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -            }
    -            id = ch;
    -        }
    - 
    -        while (index < length) {
    -            ch = source.charCodeAt(index);
    -            if (!isIdentifierPart(ch)) {
    -                break;
    -            }
    -            ++index;
    -            id += String.fromCharCode(ch);
    - 
    -            // '\u' (U+005C, U+0075) denotes an escaped character.
    -            if (ch === 0x5C) {
    -                id = id.substr(0, id.length - 1);
    -                if (source.charCodeAt(index) !== 0x75) {
    -                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -                }
    -                ++index;
    -                ch = scanHexEscape('u');
    -                if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) {
    -                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -                }
    -                id += ch;
    -            }
    -        }
    - 
    -        return id;
    -    }
    - 
    -    function getIdentifier() {
    -        var start, ch;
    - 
    -        start = index++;
    -        while (index < length) {
    -            ch = source.charCodeAt(index);
    -            if (ch === 0x5C) {
    -                // Blackslash (U+005C) marks Unicode escape sequence.
    -                index = start;
    -                return getEscapedIdentifier();
    -            }
    -            if (isIdentifierPart(ch)) {
    -                ++index;
    -            } else {
    -                break;
    -            }
    -        }
    - 
    -        return source.slice(start, index);
    -    }
    - 
    -    function scanIdentifier() {
    -        var start, id, type;
    - 
    -        start = index;
    - 
    -        // Backslash (U+005C) starts an escaped character.
    -        id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();
    - 
    -        // There is no keyword or literal with only one character.
    -        // Thus, it must be an identifier.
    -        if (id.length === 1) {
    -            type = Token.Identifier;
    -        } else if (isKeyword(id)) {
    -            // A keyword can not contained escaped characters.
    -            if (index - start === id.length) {
    -                type = Token.Keyword;
    -            } else {
    -                type = Token.Identifier;
    -            }
    -        } else if (id === 'null') {
    -            type = Token.NullLiteral;
    -        } else if (id === 'true' || id === 'false') {
    -            type = Token.BooleanLiteral;
    -        } else {
    -            type = Token.Identifier;
    -        }
    - 
    -        return {
    -            type: type,
    -            value: id,
    -            lineNumber: lineNumber,
    -            lineStart: lineStart,
    -            range: [start, index]
    -        };
    -    }
    - 
    - 
    -    // 7.7 Punctuators
    - 
    -    function scanPunctuator() {
    -        var start = index,
    -            code = source.charCodeAt(index),
    -            code2,
    -            ch1 = source[index],
    -            ch2,
    -            ch3,
    -            ch4;
    - 
    -        switch (code) {
    - 
    -        // Check for most common single-character punctuators.
    -        case 0x2E:  // . dot
    -        case 0x28:  // ( open bracket
    -        case 0x29:  // ) close bracket
    -        case 0x3B:  // ; semicolon
    -        case 0x2C:  // , comma
    -        case 0x7B:  // { open curly brace
    -        case 0x7D:  // } close curly brace
    -        case 0x5B:  // [
    -        case 0x5D:  // ]
    -        case 0x3A:  // :
    -        case 0x3F:  // ?
    -        case 0x7E:  // ~
    -            ++index;
    -            if (extra.tokenize) {
    -                if (code === 0x28) {
    -                    extra.openParenToken = extra.tokens.length;
    -                } else if (code === 0x7B) {
    -                    extra.openCurlyToken = extra.tokens.length;
    -                }
    -            }
    -            return {
    -                type: Token.Punctuator,
    -                value: String.fromCharCode(code),
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    - 
    -        default:
    -            code2 = source.charCodeAt(index + 1);
    - 
    -            // '=' (U+003D) marks an assignment or comparison operator.
    -            if (code2 === 0x3D) {
    -                switch (code) {
    -                case 0x25:  // %
    -                case 0x26:  // &
    -                case 0x2A:  // *:
    -                case 0x2B:  // +
    -                case 0x2D:  // -
    -                case 0x2F:  // /
    -                case 0x3C:  // <
    -                case 0x3E:  // >
    -                case 0x5E:  // ^
    -                case 0x7C:  // |
    -                    index += 2;
    -                    return {
    -                        type: Token.Punctuator,
    -                        value: String.fromCharCode(code) + String.fromCharCode(code2),
    -                        lineNumber: lineNumber,
    -                        lineStart: lineStart,
    -                        range: [start, index]
    -                    };
    - 
    -                case 0x21: // !
    -                case 0x3D: // =
    -                    index += 2;
    - 
    -                    // !== and ===
    -                    if (source.charCodeAt(index) === 0x3D) {
    -                        ++index;
    -                    }
    -                    return {
    -                        type: Token.Punctuator,
    -                        value: source.slice(start, index),
    -                        lineNumber: lineNumber,
    -                        lineStart: lineStart,
    -                        range: [start, index]
    -                    };
    -                default:
    -                    break;
    -                }
    -            }
    -            break;
    -        }
    - 
    -        // Peek more characters.
    - 
    -        ch2 = source[index + 1];
    -        ch3 = source[index + 2];
    -        ch4 = source[index + 3];
    - 
    -        // 4-character punctuator: >>>=
    - 
    -        if (ch1 === '>' && ch2 === '>' && ch3 === '>') {
    -            if (ch4 === '=') {
    -                index += 4;
    -                return {
    -                    type: Token.Punctuator,
    -                    value: '>>>=',
    -                    lineNumber: lineNumber,
    -                    lineStart: lineStart,
    -                    range: [start, index]
    -                };
    -            }
    -        }
    - 
    -        // 3-character punctuators: === !== >>> <<= >>=
    - 
    -        if (ch1 === '>' && ch2 === '>' && ch3 === '>') {
    -            index += 3;
    -            return {
    -                type: Token.Punctuator,
    -                value: '>>>',
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    - 
    -        if (ch1 === '<' && ch2 === '<' && ch3 === '=') {
    -            index += 3;
    -            return {
    -                type: Token.Punctuator,
    -                value: '<<=',
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    - 
    -        if (ch1 === '>' && ch2 === '>' && ch3 === '=') {
    -            index += 3;
    -            return {
    -                type: Token.Punctuator,
    -                value: '>>=',
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    - 
    -        // Other 2-character punctuators: ++ -- << >> && ||
    - 
    -        if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0)) {
    -            index += 2;
    -            return {
    -                type: Token.Punctuator,
    -                value: ch1 + ch2,
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    - 
    -        if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {
    -            ++index;
    -            return {
    -                type: Token.Punctuator,
    -                value: ch1,
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    - 
    -        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -    }
    - 
    -    // 7.8.3 Numeric Literals
    - 
    -    function scanHexLiteral(start) {
    -        var number = '';
    - 
    -        while (index < length) {
    -            if (!isHexDigit(source[index])) {
    -                break;
    -            }
    -            number += source[index++];
    -        }
    - 
    -        if (number.length === 0) {
    -            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -        }
    - 
    -        if (isIdentifierStart(source.charCodeAt(index))) {
    -            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -        }
    - 
    -        return {
    -            type: Token.NumericLiteral,
    -            value: parseInt('0x' + number, 16),
    -            lineNumber: lineNumber,
    -            lineStart: lineStart,
    -            range: [start, index]
    -        };
    -    }
    - 
    -    function scanOctalLiteral(start) {
    -        var number = '0' + source[index++];
    -        while (index < length) {
    -            if (!isOctalDigit(source[index])) {
    -                break;
    -            }
    -            number += source[index++];
    -        }
    - 
    -        if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {
    -            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -        }
    - 
    -        return {
    -            type: Token.NumericLiteral,
    -            value: parseInt(number, 8),
    -            octal: true,
    -            lineNumber: lineNumber,
    -            lineStart: lineStart,
    -            range: [start, index]
    -        };
    -    }
    - 
    -    function scanNumericLiteral() {
    -        var number, start, ch;
    - 
    -        ch = source[index];
    -        assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),
    -            'Numeric literal must start with a decimal digit or a decimal point');
    - 
    -        start = index;
    -        number = '';
    -        if (ch !== '.') {
    -            number = source[index++];
    -            ch = source[index];
    - 
    -            // Hex number starts with '0x'.
    -            // Octal number starts with '0'.
    -            if (number === '0') {
    -                if (ch === 'x' || ch === 'X') {
    -                    ++index;
    -                    return scanHexLiteral(start);
    -                }
    -                if (isOctalDigit(ch)) {
    -                    return scanOctalLiteral(start);
    -                }
    - 
    -                // decimal number starts with '0' such as '09' is illegal.
    -                if (ch && isDecimalDigit(ch.charCodeAt(0))) {
    -                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -                }
    -            }
    - 
    -            while (isDecimalDigit(source.charCodeAt(index))) {
    -                number += source[index++];
    -            }
    -            ch = source[index];
    -        }
    - 
    -        if (ch === '.') {
    -            number += source[index++];
    -            while (isDecimalDigit(source.charCodeAt(index))) {
    -                number += source[index++];
    -            }
    -            ch = source[index];
    -        }
    - 
    -        if (ch === 'e' || ch === 'E') {
    -            number += source[index++];
    - 
    -            ch = source[index];
    -            if (ch === '+' || ch === '-') {
    -                number += source[index++];
    -            }
    -            if (isDecimalDigit(source.charCodeAt(index))) {
    -                while (isDecimalDigit(source.charCodeAt(index))) {
    -                    number += source[index++];
    -                }
    -            } else {
    -                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -            }
    -        }
    - 
    -        if (isIdentifierStart(source.charCodeAt(index))) {
    -            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -        }
    - 
    -        return {
    -            type: Token.NumericLiteral,
    -            value: parseFloat(number),
    -            lineNumber: lineNumber,
    -            lineStart: lineStart,
    -            range: [start, index]
    -        };
    -    }
    - 
    -    // 7.8.4 String Literals
    - 
    -    function scanStringLiteral() {
    -        var str = '', quote, start, ch, code, unescaped, restore, octal = false;
    - 
    -        quote = source[index];
    -        assert((quote === '\'' || quote === '"'),
    -            'String literal must starts with a quote');
    - 
    -        start = index;
    -        ++index;
    - 
    -        while (index < length) {
    -            ch = source[index++];
    - 
    -            if (ch === quote) {
    -                quote = '';
    -                break;
    -            } else if (ch === '\\') {
    -                ch = source[index++];
    -                if (!ch || !isLineTerminator(ch.charCodeAt(0))) {
    -                    switch (ch) {
    -                    case 'n':
    -                        str += '\n';
    -                        break;
    -                    case 'r':
    -                        str += '\r';
    -                        break;
    -                    case 't':
    -                        str += '\t';
    -                        break;
    -                    case 'u':
    -                    case 'x':
    -                        restore = index;
    -                        unescaped = scanHexEscape(ch);
    -                        if (unescaped) {
    -                            str += unescaped;
    -                        } else {
    -                            index = restore;
    -                            str += ch;
    -                        }
    -                        break;
    -                    case 'b':
    -                        str += '\b';
    -                        break;
    -                    case 'f':
    -                        str += '\f';
    -                        break;
    -                    case 'v':
    -                        str += '\x0B';
    -                        break;
    - 
    -                    default:
    -                        if (isOctalDigit(ch)) {
    -                            code = '01234567'.indexOf(ch);
    - 
    -                            // \0 is not octal escape sequence
    -                            if (code !== 0) {
    -                                octal = true;
    -                            }
    - 
    -                            if (index < length && isOctalDigit(source[index])) {
    -                                octal = true;
    -                                code = code * 8 + '01234567'.indexOf(source[index++]);
    - 
    -                                // 3 digits are only allowed when string starts
    -                                // with 0, 1, 2, 3
    -                                if ('0123'.indexOf(ch) >= 0 &&
    -                                        index < length &&
    -                                        isOctalDigit(source[index])) {
    -                                    code = code * 8 + '01234567'.indexOf(source[index++]);
    -                                }
    -                            }
    -                            str += String.fromCharCode(code);
    -                        } else {
    -                            str += ch;
    -                        }
    -                        break;
    -                    }
    -                } else {
    -                    ++lineNumber;
    -                    if (ch ===  '\r' && source[index] === '\n') {
    -                        ++index;
    -                    }
    -                    lineStart = index;
    -                }
    -            } else if (isLineTerminator(ch.charCodeAt(0))) {
    -                break;
    -            } else {
    -                str += ch;
    -            }
    -        }
    - 
    -        if (quote !== '') {
    -            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
    -        }
    - 
    -        return {
    -            type: Token.StringLiteral,
    -            value: str,
    -            octal: octal,
    -            lineNumber: lineNumber,
    -            lineStart: lineStart,
    -            range: [start, index]
    -        };
    -    }
    - 
    -    function scanRegExp() {
    -        var str, ch, start, pattern, flags, value, classMarker = false, restore, terminated = false;
    - 
    -        lookahead = null;
    -        skipComment();
    - 
    -        start = index;
    -        ch = source[index];
    -        assert(ch === '/', 'Regular expression literal must start with a slash');
    -        str = source[index++];
    - 
    -        while (index < length) {
    -            ch = source[index++];
    -            str += ch;
    -            if (ch === '\\') {
    -                ch = source[index++];
    -                // ECMA-262 7.8.5
    -                if (isLineTerminator(ch.charCodeAt(0))) {
    -                    throwError({}, Messages.UnterminatedRegExp);
    -                }
    -                str += ch;
    -            } else if (isLineTerminator(ch.charCodeAt(0))) {
    -                throwError({}, Messages.UnterminatedRegExp);
    -            } else if (classMarker) {
    -                if (ch === ']') {
    -                    classMarker = false;
    -                }
    -            } else {
    -                if (ch === '/') {
    -                    terminated = true;
    -                    break;
    -                } else if (ch === '[') {
    -                    classMarker = true;
    -                }
    -            }
    -        }
    - 
    -        if (!terminated) {
    -            throwError({}, Messages.UnterminatedRegExp);
    -        }
    - 
    -        // Exclude leading and trailing slash.
    -        pattern = str.substr(1, str.length - 2);
    - 
    -        flags = '';
    -        while (index < length) {
    -            ch = source[index];
    -            if (!isIdentifierPart(ch.charCodeAt(0))) {
    -                break;
    -            }
    - 
    -            ++index;
    -            if (ch === '\\' && index < length) {
    -                ch = source[index];
    -                if (ch === 'u') {
    -                    ++index;
    -                    restore = index;
    -                    ch = scanHexEscape('u');
    -                    if (ch) {
    -                        flags += ch;
    -                        for (str += '\\u'; restore < index; ++restore) {
    -                            str += source[restore];
    -                        }
    -                    } else {
    -                        index = restore;
    -                        flags += 'u';
    -                        str += '\\u';
    -                    }
    -                    throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
    -                } else {
    -                    str += '\\';
    -                }
    -            } else {
    -                flags += ch;
    -                str += ch;
    -            }
    -        }
    - 
    -        try {
    -            value = new RegExp(pattern, flags);
    -        } catch (e) {
    -            throwError({}, Messages.InvalidRegExp);
    -        }
    - 
    - 
    - 
    -        if (extra.tokenize) {
    -            return {
    -                type: Token.RegularExpression,
    -                value: value,
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [start, index]
    -            };
    -        }
    -        return {
    -            literal: str,
    -            value: value,
    -            range: [start, index]
    -        };
    -    }
    - 
    -    function collectRegex() {
    -        var pos, loc, regex, token;
    - 
    -        skipComment();
    - 
    -        pos = index;
    -        loc = {
    -            start: {
    -                line: lineNumber,
    -                column: index - lineStart
    -            }
    -        };
    - 
    -        regex = scanRegExp();
    -        loc.end = {
    -            line: lineNumber,
    -            column: index - lineStart
    -        };
    - 
    -        /* istanbul ignore next */
    -        if (!extra.tokenize) {
    -            // Pop the previous token, which is likely '/' or '/='
    -            Eif (extra.tokens.length > 0) {
    -                token = extra.tokens[extra.tokens.length - 1];
    -                Eif (token.range[0] === pos && token.type === 'Punctuator') {
    -                    Eif (token.value === '/' || token.value === '/=') {
    -                        extra.tokens.pop();
    -                    }
    -                }
    -            }
    - 
    -            extra.tokens.push({
    -                type: 'RegularExpression',
    -                value: regex.literal,
    -                range: [pos, index],
    -                loc: loc
    -            });
    -        }
    - 
    -        return regex;
    -    }
    - 
    -    function isIdentifierName(token) {
    -        return token.type === Token.Identifier ||
    -            token.type === Token.Keyword ||
    -            token.type === Token.BooleanLiteral ||
    -            token.type === Token.NullLiteral;
    -    }
    - 
    -    function advanceSlash() {
    -        var prevToken,
    -            checkToken;
    -        // Using the following algorithm:
    -        // https://github.com/mozilla/sweet.js/wiki/design
    -        prevToken = extra.tokens[extra.tokens.length - 1];
    -        if (!prevToken) {
    -            // Nothing before that: it cannot be a division.
    -            return collectRegex();
    -        }
    -        if (prevToken.type === 'Punctuator') {
    -            if (prevToken.value === ']') {
    -                return scanPunctuator();
    -            }
    -            if (prevToken.value === ')') {
    -                checkToken = extra.tokens[extra.openParenToken - 1];
    -                if (checkToken &&
    -                        checkToken.type === 'Keyword' &&
    -                        (checkToken.value === 'if' ||
    -                         checkToken.value === 'while' ||
    -                         checkToken.value === 'for' ||
    -                         checkToken.value === 'with')) {
    -                    return collectRegex();
    -                }
    -                return scanPunctuator();
    -            }
    -            if (prevToken.value === '}') {
    -                // Dividing a function by anything makes little sense,
    -                // but we have to check for that.
    -                if (extra.tokens[extra.openCurlyToken - 3] &&
    -                        extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {
    -                    // Anonymous function.
    -                    checkToken = extra.tokens[extra.openCurlyToken - 4];
    -                    if (!checkToken) {
    -                        return scanPunctuator();
    -                    }
    -                } else if (extra.tokens[extra.openCurlyToken - 4] &&
    -                        extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {
    -                    // Named function.
    -                    checkToken = extra.tokens[extra.openCurlyToken - 5];
    -                    if (!checkToken) {
    -                        return collectRegex();
    -                    }
    -                } else {
    -                    return scanPunctuator();
    -                }
    -                // checkToken determines whether the function is
    -                // a declaration or an expression.
    -                if (FnExprTokens.indexOf(checkToken.value) >= 0) {
    -                    // It is an expression.
    -                    return scanPunctuator();
    -                }
    -                // It is a declaration.
    -                return collectRegex();
    -            }
    -            return collectRegex();
    -        }
    -        if (prevToken.type === 'Keyword') {
    -            return collectRegex();
    -        }
    -        return scanPunctuator();
    -    }
    - 
    -    function advance() {
    -        var ch;
    - 
    -        skipComment();
    - 
    -        if (index >= length) {
    -            return {
    -                type: Token.EOF,
    -                lineNumber: lineNumber,
    -                lineStart: lineStart,
    -                range: [index, index]
    -            };
    -        }
    - 
    -        ch = source.charCodeAt(index);
    - 
    -        // Very common: ( and ) and ;
    -        if (ch === 0x28 || ch === 0x29 || ch === 0x3A) {
    -            return scanPunctuator();
    -        }
    - 
    -        // String literal starts with single quote (U+0027) or double quote (U+0022).
    -        if (ch === 0x27 || ch === 0x22) {
    -            return scanStringLiteral();
    -        }
    - 
    -        if (isIdentifierStart(ch)) {
    -            return scanIdentifier();
    -        }
    - 
    -        // Dot (.) U+002E can also start a floating-point number, hence the need
    -        // to check the next character.
    -        if (ch === 0x2E) {
    -            if (isDecimalDigit(source.charCodeAt(index + 1))) {
    -                return scanNumericLiteral();
    -            }
    -            return scanPunctuator();
    -        }
    - 
    -        if (isDecimalDigit(ch)) {
    -            return scanNumericLiteral();
    -        }
    - 
    -        // Slash (/) U+002F can also start a regex.
    -        if (extra.tokenize && ch === 0x2F) {
    -            return advanceSlash();
    -        }
    - 
    -        return scanPunctuator();
    -    }
    - 
    -    function collectToken() {
    -        var start, loc, token, range, value;
    - 
    -        skipComment();
    -        start = index;
    -        loc = {
    -            start: {
    -                line: lineNumber,
    -                column: index - lineStart
    -            }
    -        };
    - 
    -        token = advance();
    -        loc.end = {
    -            line: lineNumber,
    -            column: index - lineStart
    -        };
    - 
    -        if (token.type !== Token.EOF) {
    -            range = [token.range[0], token.range[1]];
    -            value = source.slice(token.range[0], token.range[1]);
    -            extra.tokens.push({
    -                type: TokenName[token.type],
    -                value: value,
    -                range: range,
    -                loc: loc
    -            });
    -        }
    - 
    -        return token;
    -    }
    - 
    -    function lex() {
    -        var token;
    - 
    -        token = lookahead;
    -        index = token.range[1];
    -        lineNumber = token.lineNumber;
    -        lineStart = token.lineStart;
    - 
    -        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
    - 
    -        index = token.range[1];
    -        lineNumber = token.lineNumber;
    -        lineStart = token.lineStart;
    - 
    -        return token;
    -    }
    - 
    -    function peek() {
    -        var pos, line, start;
    - 
    -        pos = index;
    -        line = lineNumber;
    -        start = lineStart;
    -        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
    -        index = pos;
    -        lineNumber = line;
    -        lineStart = start;
    -    }
    - 
    -    SyntaxTreeDelegate = {
    - 
    -        name: 'SyntaxTree',
    - 
    -        markStart: function () {
    -            skipComment();
    -            if (extra.loc) {
    -                state.markerStack.push(index - lineStart);
    -                state.markerStack.push(lineNumber);
    -            }
    -            if (extra.range) {
    -                state.markerStack.push(index);
    -            }
    -        },
    - 
    -        processComment: function (node) {
    -            var i, attacher, pos, len, candidate;
    - 
    -            if (typeof node.type === 'undefined' || node.type === Syntax.Program) {
    -                return;
    -            }
    - 
    -            // Check for possible additional trailing comments.
    -            peek();
    - 
    -            for (i = 0; i < extra.pendingComments.length; ++i) {
    -                attacher = extra.pendingComments[i];
    -                if (node.range[0] >= attacher.comment.range[1]) {
    -                    candidate = attacher.leading;
    -                    if (candidate) {
    -                        pos = candidate.range[0];
    -                        len = candidate.range[1] - pos;
    -                        if (node.range[0] <= pos && (node.range[1] - node.range[0] >= len)) {
    -                            attacher.leading = node;
    -                        }
    -                    } else {
    -                        attacher.leading = node;
    -                    }
    -                }
    -                if (node.range[1] <= attacher.comment.range[0]) {
    -                    candidate = attacher.trailing;
    -                    if (candidate) {
    -                        pos = candidate.range[0];
    -                        len = candidate.range[1] - pos;
    -                        /* istanbul ignore else */
    -                        Eif (node.range[0] <= pos && (node.range[1] - node.range[0] >= len)) {
    -                            attacher.trailing = node;
    -                        }
    -                    } else {
    -                        attacher.trailing = node;
    -                    }
    -                }
    -            }
    -        },
    - 
    -        markEnd: function (node) {
    -            if (extra.range) {
    -                node.range = [state.markerStack.pop(), index];
    -            }
    -            if (extra.loc) {
    -                node.loc = {
    -                    start: {
    -                        line: state.markerStack.pop(),
    -                        column: state.markerStack.pop()
    -                    },
    -                    end: {
    -                        line: lineNumber,
    -                        column: index - lineStart
    -                    }
    -                };
    -                this.postProcess(node);
    -            }
    -            if (extra.attachComment) {
    -                this.processComment(node);
    -            }
    -            return node;
    -        },
    - 
    -        markEndIf: function (node) {
    -            if (node.range || node.loc) {
    -                if (extra.loc) {
    -                    state.markerStack.pop();
    -                    state.markerStack.pop();
    -                }
    -                if (extra.range) {
    -                    state.markerStack.pop();
    -                }
    -            } else {
    -                this.markEnd(node);
    -            }
    -            return node;
    -        },
    - 
    -        postProcess: function (node) {
    -            if (extra.source) {
    -                node.loc.source = extra.source;
    -            }
    -            return node;
    -        },
    - 
    -        createArrayExpression: function (elements) {
    -            return {
    -                type: Syntax.ArrayExpression,
    -                elements: elements
    -            };
    -        },
    - 
    -        createAssignmentExpression: function (operator, left, right) {
    -            return {
    -                type: Syntax.AssignmentExpression,
    -                operator: operator,
    -                left: left,
    -                right: right
    -            };
    -        },
    - 
    -        createBinaryExpression: function (operator, left, right) {
    -            var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :
    -                        Syntax.BinaryExpression;
    -            return {
    -                type: type,
    -                operator: operator,
    -                left: left,
    -                right: right
    -            };
    -        },
    - 
    -        createBlockStatement: function (body) {
    -            return {
    -                type: Syntax.BlockStatement,
    -                body: body
    -            };
    -        },
    - 
    -        createBreakStatement: function (label) {
    -            return {
    -                type: Syntax.BreakStatement,
    -                label: label
    -            };
    -        },
    - 
    -        createCallExpression: function (callee, args) {
    -            return {
    -                type: Syntax.CallExpression,
    -                callee: callee,
    -                'arguments': args
    -            };
    -        },
    - 
    -        createCatchClause: function (param, body) {
    -            return {
    -                type: Syntax.CatchClause,
    -                param: param,
    -                body: body
    -            };
    -        },
    - 
    -        createConditionalExpression: function (test, consequent, alternate) {
    -            return {
    -                type: Syntax.ConditionalExpression,
    -                test: test,
    -                consequent: consequent,
    -                alternate: alternate
    -            };
    -        },
    - 
    -        createContinueStatement: function (label) {
    -            return {
    -                type: Syntax.ContinueStatement,
    -                label: label
    -            };
    -        },
    - 
    -        createDebuggerStatement: function () {
    -            return {
    -                type: Syntax.DebuggerStatement
    -            };
    -        },
    - 
    -        createDoWhileStatement: function (body, test) {
    -            return {
    -                type: Syntax.DoWhileStatement,
    -                body: body,
    -                test: test
    -            };
    -        },
    - 
    -        createEmptyStatement: function () {
    -            return {
    -                type: Syntax.EmptyStatement
    -            };
    -        },
    - 
    -        createExpressionStatement: function (expression) {
    -            return {
    -                type: Syntax.ExpressionStatement,
    -                expression: expression
    -            };
    -        },
    - 
    -        createForStatement: function (init, test, update, body) {
    -            return {
    -                type: Syntax.ForStatement,
    -                init: init,
    -                test: test,
    -                update: update,
    -                body: body
    -            };
    -        },
    - 
    -        createForInStatement: function (left, right, body) {
    -            return {
    -                type: Syntax.ForInStatement,
    -                left: left,
    -                right: right,
    -                body: body,
    -                each: false
    -            };
    -        },
    - 
    -        createFunctionDeclaration: function (id, params, defaults, body) {
    -            return {
    -                type: Syntax.FunctionDeclaration,
    -                id: id,
    -                params: params,
    -                defaults: defaults,
    -                body: body,
    -                rest: null,
    -                generator: false,
    -                expression: false
    -            };
    -        },
    - 
    -        createFunctionExpression: function (id, params, defaults, body) {
    -            return {
    -                type: Syntax.FunctionExpression,
    -                id: id,
    -                params: params,
    -                defaults: defaults,
    -                body: body,
    -                rest: null,
    -                generator: false,
    -                expression: false
    -            };
    -        },
    - 
    -        createIdentifier: function (name) {
    -            return {
    -                type: Syntax.Identifier,
    -                name: name
    -            };
    -        },
    - 
    -        createIfStatement: function (test, consequent, alternate) {
    -            return {
    -                type: Syntax.IfStatement,
    -                test: test,
    -                consequent: consequent,
    -                alternate: alternate
    -            };
    -        },
    - 
    -        createLabeledStatement: function (label, body) {
    -            return {
    -                type: Syntax.LabeledStatement,
    -                label: label,
    -                body: body
    -            };
    -        },
    - 
    -        createLiteral: function (token) {
    -            return {
    -                type: Syntax.Literal,
    -                value: token.value,
    -                raw: source.slice(token.range[0], token.range[1])
    -            };
    -        },
    - 
    -        createMemberExpression: function (accessor, object, property) {
    -            return {
    -                type: Syntax.MemberExpression,
    -                computed: accessor === '[',
    -                object: object,
    -                property: property
    -            };
    -        },
    - 
    -        createNewExpression: function (callee, args) {
    -            return {
    -                type: Syntax.NewExpression,
    -                callee: callee,
    -                'arguments': args
    -            };
    -        },
    - 
    -        createObjectExpression: function (properties) {
    -            return {
    -                type: Syntax.ObjectExpression,
    -                properties: properties
    -            };
    -        },
    - 
    -        createPostfixExpression: function (operator, argument) {
    -            return {
    -                type: Syntax.UpdateExpression,
    -                operator: operator,
    -                argument: argument,
    -                prefix: false
    -            };
    -        },
    - 
    -        createProgram: function (body) {
    -            return {
    -                type: Syntax.Program,
    -                body: body
    -            };
    -        },
    - 
    -        createProperty: function (kind, key, value) {
    -            return {
    -                type: Syntax.Property,
    -                key: key,
    -                value: value,
    -                kind: kind
    -            };
    -        },
    - 
    -        createReturnStatement: function (argument) {
    -            return {
    -                type: Syntax.ReturnStatement,
    -                argument: argument
    -            };
    -        },
    - 
    -        createSequenceExpression: function (expressions) {
    -            return {
    -                type: Syntax.SequenceExpression,
    -                expressions: expressions
    -            };
    -        },
    - 
    -        createSwitchCase: function (test, consequent) {
    -            return {
    -                type: Syntax.SwitchCase,
    -                test: test,
    -                consequent: consequent
    -            };
    -        },
    - 
    -        createSwitchStatement: function (discriminant, cases) {
    -            return {
    -                type: Syntax.SwitchStatement,
    -                discriminant: discriminant,
    -                cases: cases
    -            };
    -        },
    - 
    -        createThisExpression: function () {
    -            return {
    -                type: Syntax.ThisExpression
    -            };
    -        },
    - 
    -        createThrowStatement: function (argument) {
    -            return {
    -                type: Syntax.ThrowStatement,
    -                argument: argument
    -            };
    -        },
    - 
    -        createTryStatement: function (block, guardedHandlers, handlers, finalizer) {
    -            return {
    -                type: Syntax.TryStatement,
    -                block: block,
    -                guardedHandlers: guardedHandlers,
    -                handlers: handlers,
    -                finalizer: finalizer
    -            };
    -        },
    - 
    -        createUnaryExpression: function (operator, argument) {
    -            if (operator === '++' || operator === '--') {
    -                return {
    -                    type: Syntax.UpdateExpression,
    -                    operator: operator,
    -                    argument: argument,
    -                    prefix: true
    -                };
    -            }
    -            return {
    -                type: Syntax.UnaryExpression,
    -                operator: operator,
    -                argument: argument,
    -                prefix: true
    -            };
    -        },
    - 
    -        createVariableDeclaration: function (declarations, kind) {
    -            return {
    -                type: Syntax.VariableDeclaration,
    -                declarations: declarations,
    -                kind: kind
    -            };
    -        },
    - 
    -        createVariableDeclarator: function (id, init) {
    -            return {
    -                type: Syntax.VariableDeclarator,
    -                id: id,
    -                init: init
    -            };
    -        },
    - 
    -        createWhileStatement: function (test, body) {
    -            return {
    -                type: Syntax.WhileStatement,
    -                test: test,
    -                body: body
    -            };
    -        },
    - 
    -        createWithStatement: function (object, body) {
    -            return {
    -                type: Syntax.WithStatement,
    -                object: object,
    -                body: body
    -            };
    -        }
    -    };
    - 
    -    // Return true if there is a line terminator before the next token.
    - 
    -    function peekLineTerminator() {
    -        var pos, line, start, found;
    - 
    -        pos = index;
    -        line = lineNumber;
    -        start = lineStart;
    -        skipComment();
    -        found = lineNumber !== line;
    -        index = pos;
    -        lineNumber = line;
    -        lineStart = start;
    - 
    -        return found;
    -    }
    - 
    -    // Throw an exception
    - 
    -    function throwError(token, messageFormat) {
    -        var error,
    -            args = Array.prototype.slice.call(arguments, 2),
    -            msg = messageFormat.replace(
    -                /%(\d)/g,
    -                function (whole, index) {
    -                    assert(index < args.length, 'Message reference must be in range');
    -                    return args[index];
    -                }
    -            );
    - 
    -        if (typeof token.lineNumber === 'number') {
    -            error = new Error('Line ' + token.lineNumber + ': ' + msg);
    -            error.index = token.range[0];
    -            error.lineNumber = token.lineNumber;
    -            error.column = token.range[0] - lineStart + 1;
    -        } else {
    -            error = new Error('Line ' + lineNumber + ': ' + msg);
    -            error.index = index;
    -            error.lineNumber = lineNumber;
    -            error.column = index - lineStart + 1;
    -        }
    - 
    -        error.description = msg;
    -        throw error;
    -    }
    - 
    -    function throwErrorTolerant() {
    -        try {
    -            throwError.apply(null, arguments);
    -        } catch (e) {
    -            if (extra.errors) {
    -                extra.errors.push(e);
    -            } else {
    -                throw e;
    -            }
    -        }
    -    }
    - 
    - 
    -    // Throw an exception because of the token.
    - 
    -    function throwUnexpected(token) {
    -        if (token.type === Token.EOF) {
    -            throwError(token, Messages.UnexpectedEOS);
    -        }
    - 
    -        if (token.type === Token.NumericLiteral) {
    -            throwError(token, Messages.UnexpectedNumber);
    -        }
    - 
    -        if (token.type === Token.StringLiteral) {
    -            throwError(token, Messages.UnexpectedString);
    -        }
    - 
    -        if (token.type === Token.Identifier) {
    -            throwError(token, Messages.UnexpectedIdentifier);
    -        }
    - 
    -        if (token.type === Token.Keyword) {
    -            if (isFutureReservedWord(token.value)) {
    -                throwError(token, Messages.UnexpectedReserved);
    -            } else if (strict && isStrictModeReservedWord(token.value)) {
    -                throwErrorTolerant(token, Messages.StrictReservedWord);
    -                return;
    -            }
    -            throwError(token, Messages.UnexpectedToken, token.value);
    -        }
    - 
    -        // BooleanLiteral, NullLiteral, or Punctuator.
    -        throwError(token, Messages.UnexpectedToken, token.value);
    -    }
    - 
    -    // Expect the next token to match the specified punctuator.
    -    // If not, an exception will be thrown.
    - 
    -    function expect(value) {
    -        var token = lex();
    -        if (token.type !== Token.Punctuator || token.value !== value) {
    -            throwUnexpected(token);
    -        }
    -    }
    - 
    -    // Expect the next token to match the specified keyword.
    -    // If not, an exception will be thrown.
    - 
    -    function expectKeyword(keyword) {
    -        var token = lex();
    -        if (token.type !== Token.Keyword || token.value !== keyword) {
    -            throwUnexpected(token);
    -        }
    -    }
    - 
    -    // Return true if the next token matches the specified punctuator.
    - 
    -    function match(value) {
    -        return lookahead.type === Token.Punctuator && lookahead.value === value;
    -    }
    - 
    -    // Return true if the next token matches the specified keyword
    - 
    -    function matchKeyword(keyword) {
    -        return lookahead.type === Token.Keyword && lookahead.value === keyword;
    -    }
    - 
    -    // Return true if the next token is an assignment operator
    - 
    -    function matchAssign() {
    -        var op;
    - 
    -        if (lookahead.type !== Token.Punctuator) {
    -            return false;
    -        }
    -        op = lookahead.value;
    -        return op === '=' ||
    -            op === '*=' ||
    -            op === '/=' ||
    -            op === '%=' ||
    -            op === '+=' ||
    -            op === '-=' ||
    -            op === '<<=' ||
    -            op === '>>=' ||
    -            op === '>>>=' ||
    -            op === '&=' ||
    -            op === '^=' ||
    -            op === '|=';
    -    }
    - 
    -    function consumeSemicolon() {
    -        var line;
    - 
    -        // Catch the very common case first: immediately a semicolon (U+003B).
    -        if (source.charCodeAt(index) === 0x3B) {
    -            lex();
    -            return;
    -        }
    - 
    -        line = lineNumber;
    -        skipComment();
    -        if (lineNumber !== line) {
    -            return;
    -        }
    - 
    -        if (match(';')) {
    -            lex();
    -            return;
    -        }
    - 
    -        if (lookahead.type !== Token.EOF && !match('}')) {
    -            throwUnexpected(lookahead);
    -        }
    -    }
    - 
    -    // Return true if provided expression is LeftHandSideExpression
    - 
    -    function isLeftHandSide(expr) {
    -        return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
    -    }
    - 
    -    // 11.1.4 Array Initialiser
    - 
    -    function parseArrayInitialiser() {
    -        var elements = [];
    - 
    -        expect('[');
    - 
    -        while (!match(']')) {
    -            if (match(',')) {
    -                lex();
    -                elements.push(null);
    -            } else {
    -                elements.push(parseAssignmentExpression());
    - 
    -                if (!match(']')) {
    -                    expect(',');
    -                }
    -            }
    -        }
    - 
    -        expect(']');
    - 
    -        return delegate.createArrayExpression(elements);
    -    }
    - 
    -    // 11.1.5 Object Initialiser
    - 
    -    function parsePropertyFunction(param, first) {
    -        var previousStrict, body;
    - 
    -        previousStrict = strict;
    -        delegate.markStart();
    -        body = parseFunctionSourceElements();
    -        if (first && strict && isRestrictedWord(param[0].name)) {
    -            throwErrorTolerant(first, Messages.StrictParamName);
    -        }
    -        strict = previousStrict;
    -        return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body));
    -    }
    - 
    -    function parseObjectPropertyKey() {
    -        var token;
    - 
    -        delegate.markStart();
    -        token = lex();
    - 
    -        // Note: This function is called only from parseObjectProperty(), where
    -        // EOF and Punctuator tokens are already filtered out.
    - 
    -        if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
    -            if (strict && token.octal) {
    -                throwErrorTolerant(token, Messages.StrictOctalLiteral);
    -            }
    -            return delegate.markEnd(delegate.createLiteral(token));
    -        }
    - 
    -        return delegate.markEnd(delegate.createIdentifier(token.value));
    -    }
    - 
    -    function parseObjectProperty() {
    -        var token, key, id, value, param;
    - 
    -        token = lookahead;
    -        delegate.markStart();
    - 
    -        if (token.type === Token.Identifier) {
    - 
    -            id = parseObjectPropertyKey();
    - 
    -            // Property Assignment: Getter and Setter.
    - 
    -            if (token.value === 'get' && !match(':')) {
    -                key = parseObjectPropertyKey();
    -                expect('(');
    -                expect(')');
    -                value = parsePropertyFunction([]);
    -                return delegate.markEnd(delegate.createProperty('get', key, value));
    -            }
    -            if (token.value === 'set' && !match(':')) {
    -                key = parseObjectPropertyKey();
    -                expect('(');
    -                token = lookahead;
    -                if (token.type !== Token.Identifier) {
    -                    expect(')');
    -                    throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
    -                    value = parsePropertyFunction([]);
    -                } else {
    -                    param = [ parseVariableIdentifier() ];
    -                    expect(')');
    -                    value = parsePropertyFunction(param, token);
    -                }
    -                return delegate.markEnd(delegate.createProperty('set', key, value));
    -            }
    -            expect(':');
    -            value = parseAssignmentExpression();
    -            return delegate.markEnd(delegate.createProperty('init', id, value));
    -        }
    -        if (token.type === Token.EOF || token.type === Token.Punctuator) {
    -            throwUnexpected(token);
    -        } else {
    -            key = parseObjectPropertyKey();
    -            expect(':');
    -            value = parseAssignmentExpression();
    -            return delegate.markEnd(delegate.createProperty('init', key, value));
    -        }
    -    }
    - 
    -    function parseObjectInitialiser() {
    -        var properties = [], property, name, key, kind, map = {}, toString = String;
    - 
    -        expect('{');
    - 
    -        while (!match('}')) {
    -            property = parseObjectProperty();
    - 
    -            if (property.key.type === Syntax.Identifier) {
    -                name = property.key.name;
    -            } else {
    -                name = toString(property.key.value);
    -            }
    -            kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;
    - 
    -            key = '$' + name;
    -            if (Object.prototype.hasOwnProperty.call(map, key)) {
    -                if (map[key] === PropertyKind.Data) {
    -                    if (strict && kind === PropertyKind.Data) {
    -                        throwErrorTolerant({}, Messages.StrictDuplicateProperty);
    -                    } else if (kind !== PropertyKind.Data) {
    -                        throwErrorTolerant({}, Messages.AccessorDataProperty);
    -                    }
    -                } else {
    -                    if (kind === PropertyKind.Data) {
    -                        throwErrorTolerant({}, Messages.AccessorDataProperty);
    -                    } else if (map[key] & kind) {
    -                        throwErrorTolerant({}, Messages.AccessorGetSet);
    -                    }
    -                }
    -                map[key] |= kind;
    -            } else {
    -                map[key] = kind;
    -            }
    - 
    -            properties.push(property);
    - 
    -            if (!match('}')) {
    -                expect(',');
    -            }
    -        }
    - 
    -        expect('}');
    - 
    -        return delegate.createObjectExpression(properties);
    -    }
    - 
    -    // 11.1.6 The Grouping Operator
    - 
    -    function parseGroupExpression() {
    -        var expr;
    - 
    -        expect('(');
    - 
    -        expr = parseExpression();
    - 
    -        expect(')');
    - 
    -        return expr;
    -    }
    - 
    - 
    -    // 11.1 Primary Expressions
    - 
    -    function parsePrimaryExpression() {
    -        var type, token, expr;
    - 
    -        if (match('(')) {
    -            return parseGroupExpression();
    -        }
    - 
    -        type = lookahead.type;
    -        delegate.markStart();
    - 
    -        if (type === Token.Identifier) {
    -            expr =  delegate.createIdentifier(lex().value);
    -        } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
    -            if (strict && lookahead.octal) {
    -                throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
    -            }
    -            expr = delegate.createLiteral(lex());
    -        } else if (type === Token.Keyword) {
    -            if (matchKeyword('this')) {
    -                lex();
    -                expr = delegate.createThisExpression();
    -            } else if (matchKeyword('function')) {
    -                expr = parseFunctionExpression();
    -            }
    -        } else if (type === Token.BooleanLiteral) {
    -            token = lex();
    -            token.value = (token.value === 'true');
    -            expr = delegate.createLiteral(token);
    -        } else if (type === Token.NullLiteral) {
    -            token = lex();
    -            token.value = null;
    -            expr = delegate.createLiteral(token);
    -        } else if (match('[')) {
    -            expr = parseArrayInitialiser();
    -        } else if (match('{')) {
    -            expr = parseObjectInitialiser();
    -        } else if (match('/') || match('/=')) {
    -            if (typeof extra.tokens !== 'undefined') {
    -                expr = delegate.createLiteral(collectRegex());
    -            } else {
    -                expr = delegate.createLiteral(scanRegExp());
    -            }
    -            peek();
    -        }
    - 
    -        if (expr) {
    -            return delegate.markEnd(expr);
    -        }
    - 
    -        throwUnexpected(lex());
    -    }
    - 
    -    // 11.2 Left-Hand-Side Expressions
    - 
    -    function parseArguments() {
    -        var args = [];
    - 
    -        expect('(');
    - 
    -        if (!match(')')) {
    -            while (index < length) {
    -                args.push(parseAssignmentExpression());
    -                if (match(')')) {
    -                    break;
    -                }
    -                expect(',');
    -            }
    -        }
    - 
    -        expect(')');
    - 
    -        return args;
    -    }
    - 
    -    function parseNonComputedProperty() {
    -        var token;
    - 
    -        delegate.markStart();
    -        token = lex();
    - 
    -        if (!isIdentifierName(token)) {
    -            throwUnexpected(token);
    -        }
    - 
    -        return delegate.markEnd(delegate.createIdentifier(token.value));
    -    }
    - 
    -    function parseNonComputedMember() {
    -        expect('.');
    - 
    -        return parseNonComputedProperty();
    -    }
    - 
    -    function parseComputedMember() {
    -        var expr;
    - 
    -        expect('[');
    - 
    -        expr = parseExpression();
    - 
    -        expect(']');
    - 
    -        return expr;
    -    }
    - 
    -    function parseNewExpression() {
    -        var callee, args;
    - 
    -        delegate.markStart();
    -        expectKeyword('new');
    -        callee = parseLeftHandSideExpression();
    -        args = match('(') ? parseArguments() : [];
    - 
    -        return delegate.markEnd(delegate.createNewExpression(callee, args));
    -    }
    - 
    -    function parseLeftHandSideExpressionAllowCall() {
    -        var marker, previousAllowIn, expr, args, property;
    - 
    -        marker = createLocationMarker();
    - 
    -        previousAllowIn = state.allowIn;
    -        state.allowIn = true;
    -        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
    -        state.allowIn = previousAllowIn;
    - 
    -        while (match('.') || match('[') || match('(')) {
    -            if (match('(')) {
    -                args = parseArguments();
    -                expr = delegate.createCallExpression(expr, args);
    -            } else if (match('[')) {
    -                property = parseComputedMember();
    -                expr = delegate.createMemberExpression('[', expr, property);
    -            } else {
    -                property = parseNonComputedMember();
    -                expr = delegate.createMemberExpression('.', expr, property);
    -            }
    -            if (marker) {
    -                marker.apply(expr);
    -            }
    -        }
    - 
    -        return expr;
    -    }
    - 
    -    function parseLeftHandSideExpression() {
    -        var marker, previousAllowIn, expr, property;
    - 
    -        marker = createLocationMarker();
    - 
    -        previousAllowIn = state.allowIn;
    -        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
    -        state.allowIn = previousAllowIn;
    - 
    -        while (match('.') || match('[')) {
    -            if (match('[')) {
    -                property = parseComputedMember();
    -                expr = delegate.createMemberExpression('[', expr, property);
    -            } else {
    -                property = parseNonComputedMember();
    -                expr = delegate.createMemberExpression('.', expr, property);
    -            }
    -            if (marker) {
    -                marker.apply(expr);
    -            }
    -        }
    - 
    -        return expr;
    -    }
    - 
    -    // 11.3 Postfix Expressions
    - 
    -    function parsePostfixExpression() {
    -        var expr, token;
    - 
    -        delegate.markStart();
    -        expr = parseLeftHandSideExpressionAllowCall();
    - 
    -        if (lookahead.type === Token.Punctuator) {
    -            if ((match('++') || match('--')) && !peekLineTerminator()) {
    -                // 11.3.1, 11.3.2
    -                if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
    -                    throwErrorTolerant({}, Messages.StrictLHSPostfix);
    -                }
    - 
    -                if (!isLeftHandSide(expr)) {
    -                    throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
    -                }
    - 
    -                token = lex();
    -                expr = delegate.createPostfixExpression(token.value, expr);
    -            }
    -        }
    - 
    -        return delegate.markEndIf(expr);
    -    }
    - 
    -    // 11.4 Unary Operators
    - 
    -    function parseUnaryExpression() {
    -        var token, expr;
    - 
    -        delegate.markStart();
    - 
    -        if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
    -            expr = parsePostfixExpression();
    -        } else if (match('++') || match('--')) {
    -            token = lex();
    -            expr = parseUnaryExpression();
    -            // 11.4.4, 11.4.5
    -            if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
    -                throwErrorTolerant({}, Messages.StrictLHSPrefix);
    -            }
    - 
    -            if (!isLeftHandSide(expr)) {
    -                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
    -            }
    - 
    -            expr = delegate.createUnaryExpression(token.value, expr);
    -        } else if (match('+') || match('-') || match('~') || match('!')) {
    -            token = lex();
    -            expr = parseUnaryExpression();
    -            expr = delegate.createUnaryExpression(token.value, expr);
    -        } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
    -            token = lex();
    -            expr = parseUnaryExpression();
    -            expr = delegate.createUnaryExpression(token.value, expr);
    -            if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
    -                throwErrorTolerant({}, Messages.StrictDelete);
    -            }
    -        } else {
    -            expr = parsePostfixExpression();
    -        }
    - 
    -        return delegate.markEndIf(expr);
    -    }
    - 
    -    function binaryPrecedence(token, allowIn) {
    -        var prec = 0;
    - 
    -        if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {
    -            return 0;
    -        }
    - 
    -        switch (token.value) {
    -        case '||':
    -            prec = 1;
    -            break;
    - 
    -        case '&&':
    -            prec = 2;
    -            break;
    - 
    -        case '|':
    -            prec = 3;
    -            break;
    - 
    -        case '^':
    -            prec = 4;
    -            break;
    - 
    -        case '&':
    -            prec = 5;
    -            break;
    - 
    -        case '==':
    -        case '!=':
    -        case '===':
    -        case '!==':
    -            prec = 6;
    -            break;
    - 
    -        case '<':
    -        case '>':
    -        case '<=':
    -        case '>=':
    -        case 'instanceof':
    -            prec = 7;
    -            break;
    - 
    -        case 'in':
    -            prec = allowIn ? 7 : 0;
    -            break;
    - 
    -        case '<<':
    -        case '>>':
    -        case '>>>':
    -            prec = 8;
    -            break;
    - 
    -        case '+':
    -        case '-':
    -            prec = 9;
    -            break;
    - 
    -        case '*':
    -        case '/':
    -        case '%':
    -            prec = 11;
    -            break;
    - 
    -        default:
    -            break;
    -        }
    - 
    -        return prec;
    -    }
    - 
    -    // 11.5 Multiplicative Operators
    -    // 11.6 Additive Operators
    -    // 11.7 Bitwise Shift Operators
    -    // 11.8 Relational Operators
    -    // 11.9 Equality Operators
    -    // 11.10 Binary Bitwise Operators
    -    // 11.11 Binary Logical Operators
    - 
    -    function parseBinaryExpression() {
    -        var marker, markers, expr, token, prec, stack, right, operator, left, i;
    - 
    -        marker = createLocationMarker();
    -        left = parseUnaryExpression();
    - 
    -        token = lookahead;
    -        prec = binaryPrecedence(token, state.allowIn);
    -        if (prec === 0) {
    -            return left;
    -        }
    -        token.prec = prec;
    -        lex();
    - 
    -        markers = [marker, createLocationMarker()];
    -        right = parseUnaryExpression();
    - 
    -        stack = [left, token, right];
    - 
    -        while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
    - 
    -            // Reduce: make a binary expression from the three topmost entries.
    -            while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
    -                right = stack.pop();
    -                operator = stack.pop().value;
    -                left = stack.pop();
    -                expr = delegate.createBinaryExpression(operator, left, right);
    -                markers.pop();
    -                marker = markers.pop();
    -                if (marker) {
    -                    marker.apply(expr);
    -                }
    -                stack.push(expr);
    -                markers.push(marker);
    -            }
    - 
    -            // Shift.
    -            token = lex();
    -            token.prec = prec;
    -            stack.push(token);
    -            markers.push(createLocationMarker());
    -            expr = parseUnaryExpression();
    -            stack.push(expr);
    -        }
    - 
    -        // Final reduce to clean-up the stack.
    -        i = stack.length - 1;
    -        expr = stack[i];
    -        markers.pop();
    -        while (i > 1) {
    -            expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
    -            i -= 2;
    -            marker = markers.pop();
    -            if (marker) {
    -                marker.apply(expr);
    -            }
    -        }
    - 
    -        return expr;
    -    }
    - 
    - 
    -    // 11.12 Conditional Operator
    - 
    -    function parseConditionalExpression() {
    -        var expr, previousAllowIn, consequent, alternate;
    - 
    -        delegate.markStart();
    -        expr = parseBinaryExpression();
    - 
    -        if (match('?')) {
    -            lex();
    -            previousAllowIn = state.allowIn;
    -            state.allowIn = true;
    -            consequent = parseAssignmentExpression();
    -            state.allowIn = previousAllowIn;
    -            expect(':');
    -            alternate = parseAssignmentExpression();
    - 
    -            expr = delegate.markEnd(delegate.createConditionalExpression(expr, consequent, alternate));
    -        } else {
    -            delegate.markEnd({});
    -        }
    - 
    -        return expr;
    -    }
    - 
    -    // 11.13 Assignment Operators
    - 
    -    function parseAssignmentExpression() {
    -        var token, left, right, node;
    - 
    -        token = lookahead;
    -        delegate.markStart();
    -        node = left = parseConditionalExpression();
    - 
    -        if (matchAssign()) {
    -            // LeftHandSideExpression
    -            if (!isLeftHandSide(left)) {
    -                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
    -            }
    - 
    -            // 11.13.1
    -            if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {
    -                throwErrorTolerant(token, Messages.StrictLHSAssignment);
    -            }
    - 
    -            token = lex();
    -            right = parseAssignmentExpression();
    -            node = delegate.createAssignmentExpression(token.value, left, right);
    -        }
    - 
    -        return delegate.markEndIf(node);
    -    }
    - 
    -    // 11.14 Comma Operator
    - 
    -    function parseExpression() {
    -        var expr;
    - 
    -        delegate.markStart();
    -        expr = parseAssignmentExpression();
    - 
    -        if (match(',')) {
    -            expr = delegate.createSequenceExpression([ expr ]);
    - 
    -            while (index < length) {
    -                if (!match(',')) {
    -                    break;
    -                }
    -                lex();
    -                expr.expressions.push(parseAssignmentExpression());
    -            }
    -        }
    - 
    -        return delegate.markEndIf(expr);
    -    }
    - 
    -    // 12.1 Block
    - 
    -    function parseStatementList() {
    -        var list = [],
    -            statement;
    - 
    -        while (index < length) {
    -            if (match('}')) {
    -                break;
    -            }
    -            statement = parseSourceElement();
    -            if (typeof statement === 'undefined') {
    -                break;
    -            }
    -            list.push(statement);
    -        }
    - 
    -        return list;
    -    }
    - 
    -    function parseBlock() {
    -        var block;
    - 
    -        delegate.markStart();
    -        expect('{');
    - 
    -        block = parseStatementList();
    - 
    -        expect('}');
    - 
    -        return delegate.markEnd(delegate.createBlockStatement(block));
    -    }
    - 
    -    // 12.2 Variable Statement
    - 
    -    function parseVariableIdentifier() {
    -        var token;
    - 
    -        delegate.markStart();
    -        token = lex();
    - 
    -        if (token.type !== Token.Identifier) {
    -            throwUnexpected(token);
    -        }
    - 
    -        return delegate.markEnd(delegate.createIdentifier(token.value));
    -    }
    - 
    -    function parseVariableDeclaration(kind) {
    -        var init = null, id;
    - 
    -        delegate.markStart();
    -        id = parseVariableIdentifier();
    - 
    -        // 12.2.1
    -        if (strict && isRestrictedWord(id.name)) {
    -            throwErrorTolerant({}, Messages.StrictVarName);
    -        }
    - 
    -        if (kind === 'const') {
    -            expect('=');
    -            init = parseAssignmentExpression();
    -        } else if (match('=')) {
    -            lex();
    -            init = parseAssignmentExpression();
    -        }
    - 
    -        return delegate.markEnd(delegate.createVariableDeclarator(id, init));
    -    }
    - 
    -    function parseVariableDeclarationList(kind) {
    -        var list = [];
    - 
    -        do {
    -            list.push(parseVariableDeclaration(kind));
    -            if (!match(',')) {
    -                break;
    -            }
    -            lex();
    -        } while (index < length);
    - 
    -        return list;
    -    }
    - 
    -    function parseVariableStatement() {
    -        var declarations;
    - 
    -        expectKeyword('var');
    - 
    -        declarations = parseVariableDeclarationList();
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.createVariableDeclaration(declarations, 'var');
    -    }
    - 
    -    // kind may be `const` or `let`
    -    // Both are experimental and not in the specification yet.
    -    // see http://wiki.ecmascript.org/doku.php?id=harmony:const
    -    // and http://wiki.ecmascript.org/doku.php?id=harmony:let
    -    function parseConstLetDeclaration(kind) {
    -        var declarations;
    - 
    -        delegate.markStart();
    - 
    -        expectKeyword(kind);
    - 
    -        declarations = parseVariableDeclarationList(kind);
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind));
    -    }
    - 
    -    // 12.3 Empty Statement
    - 
    -    function parseEmptyStatement() {
    -        expect(';');
    -        return delegate.createEmptyStatement();
    -    }
    - 
    -    // 12.4 Expression Statement
    - 
    -    function parseExpressionStatement() {
    -        var expr = parseExpression();
    -        consumeSemicolon();
    -        return delegate.createExpressionStatement(expr);
    -    }
    - 
    -    // 12.5 If statement
    - 
    -    function parseIfStatement() {
    -        var test, consequent, alternate;
    - 
    -        expectKeyword('if');
    - 
    -        expect('(');
    - 
    -        test = parseExpression();
    - 
    -        expect(')');
    - 
    -        consequent = parseStatement();
    - 
    -        if (matchKeyword('else')) {
    -            lex();
    -            alternate = parseStatement();
    -        } else {
    -            alternate = null;
    -        }
    - 
    -        return delegate.createIfStatement(test, consequent, alternate);
    -    }
    - 
    -    // 12.6 Iteration Statements
    - 
    -    function parseDoWhileStatement() {
    -        var body, test, oldInIteration;
    - 
    -        expectKeyword('do');
    - 
    -        oldInIteration = state.inIteration;
    -        state.inIteration = true;
    - 
    -        body = parseStatement();
    - 
    -        state.inIteration = oldInIteration;
    - 
    -        expectKeyword('while');
    - 
    -        expect('(');
    - 
    -        test = parseExpression();
    - 
    -        expect(')');
    - 
    -        if (match(';')) {
    -            lex();
    -        }
    - 
    -        return delegate.createDoWhileStatement(body, test);
    -    }
    - 
    -    function parseWhileStatement() {
    -        var test, body, oldInIteration;
    - 
    -        expectKeyword('while');
    - 
    -        expect('(');
    - 
    -        test = parseExpression();
    - 
    -        expect(')');
    - 
    -        oldInIteration = state.inIteration;
    -        state.inIteration = true;
    - 
    -        body = parseStatement();
    - 
    -        state.inIteration = oldInIteration;
    - 
    -        return delegate.createWhileStatement(test, body);
    -    }
    - 
    -    function parseForVariableDeclaration() {
    -        var token, declarations;
    - 
    -        delegate.markStart();
    -        token = lex();
    -        declarations = parseVariableDeclarationList();
    - 
    -        return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value));
    -    }
    - 
    -    function parseForStatement() {
    -        var init, test, update, left, right, body, oldInIteration;
    - 
    -        init = test = update = null;
    - 
    -        expectKeyword('for');
    - 
    -        expect('(');
    - 
    -        if (match(';')) {
    -            lex();
    -        } else {
    -            if (matchKeyword('var') || matchKeyword('let')) {
    -                state.allowIn = false;
    -                init = parseForVariableDeclaration();
    -                state.allowIn = true;
    - 
    -                if (init.declarations.length === 1 && matchKeyword('in')) {
    -                    lex();
    -                    left = init;
    -                    right = parseExpression();
    -                    init = null;
    -                }
    -            } else {
    -                state.allowIn = false;
    -                init = parseExpression();
    -                state.allowIn = true;
    - 
    -                if (matchKeyword('in')) {
    -                    // LeftHandSideExpression
    -                    if (!isLeftHandSide(init)) {
    -                        throwErrorTolerant({}, Messages.InvalidLHSInForIn);
    -                    }
    - 
    -                    lex();
    -                    left = init;
    -                    right = parseExpression();
    -                    init = null;
    -                }
    -            }
    - 
    -            if (typeof left === 'undefined') {
    -                expect(';');
    -            }
    -        }
    - 
    -        if (typeof left === 'undefined') {
    - 
    -            if (!match(';')) {
    -                test = parseExpression();
    -            }
    -            expect(';');
    - 
    -            if (!match(')')) {
    -                update = parseExpression();
    -            }
    -        }
    - 
    -        expect(')');
    - 
    -        oldInIteration = state.inIteration;
    -        state.inIteration = true;
    - 
    -        body = parseStatement();
    - 
    -        state.inIteration = oldInIteration;
    - 
    -        return (typeof left === 'undefined') ?
    -                delegate.createForStatement(init, test, update, body) :
    -                delegate.createForInStatement(left, right, body);
    -    }
    - 
    -    // 12.7 The continue statement
    - 
    -    function parseContinueStatement() {
    -        var label = null, key;
    - 
    -        expectKeyword('continue');
    - 
    -        // Optimize the most common form: 'continue;'.
    -        if (source.charCodeAt(index) === 0x3B) {
    -            lex();
    - 
    -            if (!state.inIteration) {
    -                throwError({}, Messages.IllegalContinue);
    -            }
    - 
    -            return delegate.createContinueStatement(null);
    -        }
    - 
    -        if (peekLineTerminator()) {
    -            if (!state.inIteration) {
    -                throwError({}, Messages.IllegalContinue);
    -            }
    - 
    -            return delegate.createContinueStatement(null);
    -        }
    - 
    -        if (lookahead.type === Token.Identifier) {
    -            label = parseVariableIdentifier();
    - 
    -            key = '$' + label.name;
    -            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
    -                throwError({}, Messages.UnknownLabel, label.name);
    -            }
    -        }
    - 
    -        consumeSemicolon();
    - 
    -        if (label === null && !state.inIteration) {
    -            throwError({}, Messages.IllegalContinue);
    -        }
    - 
    -        return delegate.createContinueStatement(label);
    -    }
    - 
    -    // 12.8 The break statement
    - 
    -    function parseBreakStatement() {
    -        var label = null, key;
    - 
    -        expectKeyword('break');
    - 
    -        // Catch the very common case first: immediately a semicolon (U+003B).
    -        if (source.charCodeAt(index) === 0x3B) {
    -            lex();
    - 
    -            if (!(state.inIteration || state.inSwitch)) {
    -                throwError({}, Messages.IllegalBreak);
    -            }
    - 
    -            return delegate.createBreakStatement(null);
    -        }
    - 
    -        if (peekLineTerminator()) {
    -            if (!(state.inIteration || state.inSwitch)) {
    -                throwError({}, Messages.IllegalBreak);
    -            }
    - 
    -            return delegate.createBreakStatement(null);
    -        }
    - 
    -        if (lookahead.type === Token.Identifier) {
    -            label = parseVariableIdentifier();
    - 
    -            key = '$' + label.name;
    -            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
    -                throwError({}, Messages.UnknownLabel, label.name);
    -            }
    -        }
    - 
    -        consumeSemicolon();
    - 
    -        if (label === null && !(state.inIteration || state.inSwitch)) {
    -            throwError({}, Messages.IllegalBreak);
    -        }
    - 
    -        return delegate.createBreakStatement(label);
    -    }
    - 
    -    // 12.9 The return statement
    - 
    -    function parseReturnStatement() {
    -        var argument = null;
    - 
    -        expectKeyword('return');
    - 
    -        if (!state.inFunctionBody) {
    -            throwErrorTolerant({}, Messages.IllegalReturn);
    -        }
    - 
    -        // 'return' followed by a space and an identifier is very common.
    -        if (source.charCodeAt(index) === 0x20) {
    -            if (isIdentifierStart(source.charCodeAt(index + 1))) {
    -                argument = parseExpression();
    -                consumeSemicolon();
    -                return delegate.createReturnStatement(argument);
    -            }
    -        }
    - 
    -        if (peekLineTerminator()) {
    -            return delegate.createReturnStatement(null);
    -        }
    - 
    -        if (!match(';')) {
    -            if (!match('}') && lookahead.type !== Token.EOF) {
    -                argument = parseExpression();
    -            }
    -        }
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.createReturnStatement(argument);
    -    }
    - 
    -    // 12.10 The with statement
    - 
    -    function parseWithStatement() {
    -        var object, body;
    - 
    -        if (strict) {
    -            throwErrorTolerant({}, Messages.StrictModeWith);
    -        }
    - 
    -        expectKeyword('with');
    - 
    -        expect('(');
    - 
    -        object = parseExpression();
    - 
    -        expect(')');
    - 
    -        body = parseStatement();
    - 
    -        return delegate.createWithStatement(object, body);
    -    }
    - 
    -    // 12.10 The swith statement
    - 
    -    function parseSwitchCase() {
    -        var test,
    -            consequent = [],
    -            statement;
    - 
    -        delegate.markStart();
    -        if (matchKeyword('default')) {
    -            lex();
    -            test = null;
    -        } else {
    -            expectKeyword('case');
    -            test = parseExpression();
    -        }
    -        expect(':');
    - 
    -        while (index < length) {
    -            if (match('}') || matchKeyword('default') || matchKeyword('case')) {
    -                break;
    -            }
    -            statement = parseStatement();
    -            consequent.push(statement);
    -        }
    - 
    -        return delegate.markEnd(delegate.createSwitchCase(test, consequent));
    -    }
    - 
    -    function parseSwitchStatement() {
    -        var discriminant, cases, clause, oldInSwitch, defaultFound;
    - 
    -        expectKeyword('switch');
    - 
    -        expect('(');
    - 
    -        discriminant = parseExpression();
    - 
    -        expect(')');
    - 
    -        expect('{');
    - 
    -        cases = [];
    - 
    -        if (match('}')) {
    -            lex();
    -            return delegate.createSwitchStatement(discriminant, cases);
    -        }
    - 
    -        oldInSwitch = state.inSwitch;
    -        state.inSwitch = true;
    -        defaultFound = false;
    - 
    -        while (index < length) {
    -            if (match('}')) {
    -                break;
    -            }
    -            clause = parseSwitchCase();
    -            if (clause.test === null) {
    -                if (defaultFound) {
    -                    throwError({}, Messages.MultipleDefaultsInSwitch);
    -                }
    -                defaultFound = true;
    -            }
    -            cases.push(clause);
    -        }
    - 
    -        state.inSwitch = oldInSwitch;
    - 
    -        expect('}');
    - 
    -        return delegate.createSwitchStatement(discriminant, cases);
    -    }
    - 
    -    // 12.13 The throw statement
    - 
    -    function parseThrowStatement() {
    -        var argument;
    - 
    -        expectKeyword('throw');
    - 
    -        if (peekLineTerminator()) {
    -            throwError({}, Messages.NewlineAfterThrow);
    -        }
    - 
    -        argument = parseExpression();
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.createThrowStatement(argument);
    -    }
    - 
    -    // 12.14 The try statement
    - 
    -    function parseCatchClause() {
    -        var param, body;
    - 
    -        delegate.markStart();
    -        expectKeyword('catch');
    - 
    -        expect('(');
    -        if (match(')')) {
    -            throwUnexpected(lookahead);
    -        }
    - 
    -        param = parseVariableIdentifier();
    -        // 12.14.1
    -        if (strict && isRestrictedWord(param.name)) {
    -            throwErrorTolerant({}, Messages.StrictCatchVariable);
    -        }
    - 
    -        expect(')');
    -        body = parseBlock();
    -        return delegate.markEnd(delegate.createCatchClause(param, body));
    -    }
    - 
    -    function parseTryStatement() {
    -        var block, handlers = [], finalizer = null;
    - 
    -        expectKeyword('try');
    - 
    -        block = parseBlock();
    - 
    -        if (matchKeyword('catch')) {
    -            handlers.push(parseCatchClause());
    -        }
    - 
    -        if (matchKeyword('finally')) {
    -            lex();
    -            finalizer = parseBlock();
    -        }
    - 
    -        if (handlers.length === 0 && !finalizer) {
    -            throwError({}, Messages.NoCatchOrFinally);
    -        }
    - 
    -        return delegate.createTryStatement(block, [], handlers, finalizer);
    -    }
    - 
    -    // 12.15 The debugger statement
    - 
    -    function parseDebuggerStatement() {
    -        expectKeyword('debugger');
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.createDebuggerStatement();
    -    }
    - 
    -    // 12 Statements
    - 
    -    function parseStatement() {
    -        var type = lookahead.type,
    -            expr,
    -            labeledBody,
    -            key;
    - 
    -        if (type === Token.EOF) {
    -            throwUnexpected(lookahead);
    -        }
    - 
    -        delegate.markStart();
    - 
    -        if (type === Token.Punctuator) {
    -            switch (lookahead.value) {
    -            case ';':
    -                return delegate.markEnd(parseEmptyStatement());
    -            case '{':
    -                return delegate.markEnd(parseBlock());
    -            case '(':
    -                return delegate.markEnd(parseExpressionStatement());
    -            default:
    -                break;
    -            }
    -        }
    - 
    -        if (type === Token.Keyword) {
    -            switch (lookahead.value) {
    -            case 'break':
    -                return delegate.markEnd(parseBreakStatement());
    -            case 'continue':
    -                return delegate.markEnd(parseContinueStatement());
    -            case 'debugger':
    -                return delegate.markEnd(parseDebuggerStatement());
    -            case 'do':
    -                return delegate.markEnd(parseDoWhileStatement());
    -            case 'for':
    -                return delegate.markEnd(parseForStatement());
    -            case 'function':
    -                return delegate.markEnd(parseFunctionDeclaration());
    -            case 'if':
    -                return delegate.markEnd(parseIfStatement());
    -            case 'return':
    -                return delegate.markEnd(parseReturnStatement());
    -            case 'switch':
    -                return delegate.markEnd(parseSwitchStatement());
    -            case 'throw':
    -                return delegate.markEnd(parseThrowStatement());
    -            case 'try':
    -                return delegate.markEnd(parseTryStatement());
    -            case 'var':
    -                return delegate.markEnd(parseVariableStatement());
    -            case 'while':
    -                return delegate.markEnd(parseWhileStatement());
    -            case 'with':
    -                return delegate.markEnd(parseWithStatement());
    -            default:
    -                break;
    -            }
    -        }
    - 
    -        expr = parseExpression();
    - 
    -        // 12.12 Labelled Statements
    -        if ((expr.type === Syntax.Identifier) && match(':')) {
    -            lex();
    - 
    -            key = '$' + expr.name;
    -            if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
    -                throwError({}, Messages.Redeclaration, 'Label', expr.name);
    -            }
    - 
    -            state.labelSet[key] = true;
    -            labeledBody = parseStatement();
    -            delete state.labelSet[key];
    -            return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody));
    -        }
    - 
    -        consumeSemicolon();
    - 
    -        return delegate.markEnd(delegate.createExpressionStatement(expr));
    -    }
    - 
    -    // 13 Function Definition
    - 
    -    function parseFunctionSourceElements() {
    -        var sourceElement, sourceElements = [], token, directive, firstRestricted,
    -            oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody;
    - 
    -        delegate.markStart();
    -        expect('{');
    - 
    -        while (index < length) {
    -            if (lookahead.type !== Token.StringLiteral) {
    -                break;
    -            }
    -            token = lookahead;
    - 
    -            sourceElement = parseSourceElement();
    -            sourceElements.push(sourceElement);
    -            if (sourceElement.expression.type !== Syntax.Literal) {
    -                // this is not directive
    -                break;
    -            }
    -            directive = source.slice(token.range[0] + 1, token.range[1] - 1);
    -            if (directive === 'use strict') {
    -                strict = true;
    -                if (firstRestricted) {
    -                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
    -                }
    -            } else {
    -                if (!firstRestricted && token.octal) {
    -                    firstRestricted = token;
    -                }
    -            }
    -        }
    - 
    -        oldLabelSet = state.labelSet;
    -        oldInIteration = state.inIteration;
    -        oldInSwitch = state.inSwitch;
    -        oldInFunctionBody = state.inFunctionBody;
    - 
    -        state.labelSet = {};
    -        state.inIteration = false;
    -        state.inSwitch = false;
    -        state.inFunctionBody = true;
    - 
    -        while (index < length) {
    -            if (match('}')) {
    -                break;
    -            }
    -            sourceElement = parseSourceElement();
    -            if (typeof sourceElement === 'undefined') {
    -                break;
    -            }
    -            sourceElements.push(sourceElement);
    -        }
    - 
    -        expect('}');
    - 
    -        state.labelSet = oldLabelSet;
    -        state.inIteration = oldInIteration;
    -        state.inSwitch = oldInSwitch;
    -        state.inFunctionBody = oldInFunctionBody;
    - 
    -        return delegate.markEnd(delegate.createBlockStatement(sourceElements));
    -    }
    - 
    -    function parseParams(firstRestricted) {
    -        var param, params = [], token, stricted, paramSet, key, message;
    -        expect('(');
    - 
    -        if (!match(')')) {
    -            paramSet = {};
    -            while (index < length) {
    -                token = lookahead;
    -                param = parseVariableIdentifier();
    -                key = '$' + token.value;
    -                if (strict) {
    -                    if (isRestrictedWord(token.value)) {
    -                        stricted = token;
    -                        message = Messages.StrictParamName;
    -                    }
    -                    if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
    -                        stricted = token;
    -                        message = Messages.StrictParamDupe;
    -                    }
    -                } else if (!firstRestricted) {
    -                    if (isRestrictedWord(token.value)) {
    -                        firstRestricted = token;
    -                        message = Messages.StrictParamName;
    -                    } else if (isStrictModeReservedWord(token.value)) {
    -                        firstRestricted = token;
    -                        message = Messages.StrictReservedWord;
    -                    } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
    -                        firstRestricted = token;
    -                        message = Messages.StrictParamDupe;
    -                    }
    -                }
    -                params.push(param);
    -                paramSet[key] = true;
    -                if (match(')')) {
    -                    break;
    -                }
    -                expect(',');
    -            }
    -        }
    - 
    -        expect(')');
    - 
    -        return {
    -            params: params,
    -            stricted: stricted,
    -            firstRestricted: firstRestricted,
    -            message: message
    -        };
    -    }
    - 
    -    function parseFunctionDeclaration() {
    -        var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict;
    - 
    -        delegate.markStart();
    - 
    -        expectKeyword('function');
    -        token = lookahead;
    -        id = parseVariableIdentifier();
    -        if (strict) {
    -            if (isRestrictedWord(token.value)) {
    -                throwErrorTolerant(token, Messages.StrictFunctionName);
    -            }
    -        } else {
    -            if (isRestrictedWord(token.value)) {
    -                firstRestricted = token;
    -                message = Messages.StrictFunctionName;
    -            } else if (isStrictModeReservedWord(token.value)) {
    -                firstRestricted = token;
    -                message = Messages.StrictReservedWord;
    -            }
    -        }
    - 
    -        tmp = parseParams(firstRestricted);
    -        params = tmp.params;
    -        stricted = tmp.stricted;
    -        firstRestricted = tmp.firstRestricted;
    -        if (tmp.message) {
    -            message = tmp.message;
    -        }
    - 
    -        previousStrict = strict;
    -        body = parseFunctionSourceElements();
    -        if (strict && firstRestricted) {
    -            throwError(firstRestricted, message);
    -        }
    -        if (strict && stricted) {
    -            throwErrorTolerant(stricted, message);
    -        }
    -        strict = previousStrict;
    - 
    -        return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body));
    -    }
    - 
    -    function parseFunctionExpression() {
    -        var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict;
    - 
    -        delegate.markStart();
    -        expectKeyword('function');
    - 
    -        if (!match('(')) {
    -            token = lookahead;
    -            id = parseVariableIdentifier();
    -            if (strict) {
    -                if (isRestrictedWord(token.value)) {
    -                    throwErrorTolerant(token, Messages.StrictFunctionName);
    -                }
    -            } else {
    -                if (isRestrictedWord(token.value)) {
    -                    firstRestricted = token;
    -                    message = Messages.StrictFunctionName;
    -                } else if (isStrictModeReservedWord(token.value)) {
    -                    firstRestricted = token;
    -                    message = Messages.StrictReservedWord;
    -                }
    -            }
    -        }
    - 
    -        tmp = parseParams(firstRestricted);
    -        params = tmp.params;
    -        stricted = tmp.stricted;
    -        firstRestricted = tmp.firstRestricted;
    -        if (tmp.message) {
    -            message = tmp.message;
    -        }
    - 
    -        previousStrict = strict;
    -        body = parseFunctionSourceElements();
    -        if (strict && firstRestricted) {
    -            throwError(firstRestricted, message);
    -        }
    -        if (strict && stricted) {
    -            throwErrorTolerant(stricted, message);
    -        }
    -        strict = previousStrict;
    - 
    -        return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body));
    -    }
    - 
    -    // 14 Program
    - 
    -    function parseSourceElement() {
    -        if (lookahead.type === Token.Keyword) {
    -            switch (lookahead.value) {
    -            case 'const':
    -            case 'let':
    -                return parseConstLetDeclaration(lookahead.value);
    -            case 'function':
    -                return parseFunctionDeclaration();
    -            default:
    -                return parseStatement();
    -            }
    -        }
    - 
    -        if (lookahead.type !== Token.EOF) {
    -            return parseStatement();
    -        }
    -    }
    - 
    -    function parseSourceElements() {
    -        var sourceElement, sourceElements = [], token, directive, firstRestricted;
    - 
    -        while (index < length) {
    -            token = lookahead;
    -            if (token.type !== Token.StringLiteral) {
    -                break;
    -            }
    - 
    -            sourceElement = parseSourceElement();
    -            sourceElements.push(sourceElement);
    -            if (sourceElement.expression.type !== Syntax.Literal) {
    -                // this is not directive
    -                break;
    -            }
    -            directive = source.slice(token.range[0] + 1, token.range[1] - 1);
    -            if (directive === 'use strict') {
    -                strict = true;
    -                if (firstRestricted) {
    -                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
    -                }
    -            } else {
    -                if (!firstRestricted && token.octal) {
    -                    firstRestricted = token;
    -                }
    -            }
    -        }
    - 
    -        while (index < length) {
    -            sourceElement = parseSourceElement();
    -            /* istanbul ignore if */
    -            Iif (typeof sourceElement === 'undefined') {
    -                break;
    -            }
    -            sourceElements.push(sourceElement);
    -        }
    -        return sourceElements;
    -    }
    - 
    -    function parseProgram() {
    -        var body;
    - 
    -        delegate.markStart();
    -        strict = false;
    -        peek();
    -        body = parseSourceElements();
    -        return delegate.markEnd(delegate.createProgram(body));
    -    }
    - 
    -    function attachComments() {
    -        var i, attacher, comment, leading, trailing;
    - 
    -        for (i = 0; i < extra.pendingComments.length; ++i) {
    -            attacher = extra.pendingComments[i];
    -            comment = attacher.comment;
    -            leading = attacher.leading;
    -            if (leading) {
    -                if (typeof leading.leadingComments === 'undefined') {
    -                    leading.leadingComments = [];
    -                }
    -                leading.leadingComments.push(attacher.comment);
    -            }
    -            trailing = attacher.trailing;
    -            if (trailing) {
    -                /* istanbul ignore else */
    -                Eif (typeof trailing.trailingComments === 'undefined') {
    -                    trailing.trailingComments = [];
    -                }
    -                trailing.trailingComments.push(attacher.comment);
    -            }
    -        }
    -        extra.pendingComments = [];
    -    }
    - 
    -    function filterTokenLocation() {
    -        var i, entry, token, tokens = [];
    - 
    -        for (i = 0; i < extra.tokens.length; ++i) {
    -            entry = extra.tokens[i];
    -            token = {
    -                type: entry.type,
    -                value: entry.value
    -            };
    -            if (extra.range) {
    -                token.range = entry.range;
    -            }
    -            if (extra.loc) {
    -                token.loc = entry.loc;
    -            }
    -            tokens.push(token);
    -        }
    - 
    -        extra.tokens = tokens;
    -    }
    - 
    -    function LocationMarker() {
    -        this.startIndex = index;
    -        this.startLine = lineNumber;
    -        this.startColumn = index - lineStart;
    -    }
    - 
    -    LocationMarker.prototype = {
    -        constructor: LocationMarker,
    - 
    -        apply: function (node) {
    -            if (extra.range) {
    -                node.range = [this.startIndex, index];
    -            }
    -            if (extra.loc) {
    -                node.loc = {
    -                    start: {
    -                        line: this.startLine,
    -                        column: this.startColumn
    -                    },
    -                    end: {
    -                        line: lineNumber,
    -                        column: index - lineStart
    -                    }
    -                };
    -                node = delegate.postProcess(node);
    -            }
    -            if (extra.attachComment) {
    -                delegate.processComment(node);
    -            }
    -        }
    -    };
    - 
    -    function createLocationMarker() {
    -        if (!extra.loc && !extra.range) {
    -            return null;
    -        }
    - 
    -        skipComment();
    - 
    -        return new LocationMarker();
    -    }
    - 
    -    function tokenize(code, options) {
    -        var toString,
    -            token,
    -            tokens;
    - 
    -        toString = String;
    -        if (typeof code !== 'string' && !(code instanceof String)) {
    -            code = toString(code);
    -        }
    - 
    -        delegate = SyntaxTreeDelegate;
    -        source = code;
    -        index = 0;
    -        lineNumber = (source.length > 0) ? 1 : 0;
    -        lineStart = 0;
    -        length = source.length;
    -        lookahead = null;
    -        state = {
    -            allowIn: true,
    -            labelSet: {},
    -            inFunctionBody: false,
    -            inIteration: false,
    -            inSwitch: false,
    -            lastCommentStart: -1
    -        };
    - 
    -        extra = {};
    - 
    -        // Options matching.
    -        options = options || {};
    - 
    -        // Of course we collect tokens here.
    -        options.tokens = true;
    -        extra.tokens = [];
    -        extra.tokenize = true;
    -        // The following two fields are necessary to compute the Regex tokens.
    -        extra.openParenToken = -1;
    -        extra.openCurlyToken = -1;
    - 
    -        extra.range = (typeof options.range === 'boolean') && options.range;
    -        extra.loc = (typeof options.loc === 'boolean') && options.loc;
    - 
    -        if (typeof options.comment === 'boolean' && options.comment) {
    -            extra.comments = [];
    -        }
    -        if (typeof options.tolerant === 'boolean' && options.tolerant) {
    -            extra.errors = [];
    -        }
    - 
    -        try {
    -            peek();
    -            if (lookahead.type === Token.EOF) {
    -                return extra.tokens;
    -            }
    - 
    -            token = lex();
    -            while (lookahead.type !== Token.EOF) {
    -                try {
    -                    token = lex();
    -                } catch (lexError) {
    -                    token = lookahead;
    -                    if (extra.errors) {
    -                        extra.errors.push(lexError);
    -                        // We have to break on the first error
    -                        // to avoid infinite loops.
    -                        break;
    -                    } else {
    -                        throw lexError;
    -                    }
    -                }
    -            }
    - 
    -            filterTokenLocation();
    -            tokens = extra.tokens;
    -            if (typeof extra.comments !== 'undefined') {
    -                tokens.comments = extra.comments;
    -            }
    -            if (typeof extra.errors !== 'undefined') {
    -                tokens.errors = extra.errors;
    -            }
    -        } catch (e) {
    -            throw e;
    -        } finally {
    -            extra = {};
    -        }
    -        return tokens;
    -    }
    - 
    -    function parse(code, options) {
    -        var program, toString;
    - 
    -        toString = String;
    -        if (typeof code !== 'string' && !(code instanceof String)) {
    -            code = toString(code);
    -        }
    - 
    -        delegate = SyntaxTreeDelegate;
    -        source = code;
    -        index = 0;
    -        lineNumber = (source.length > 0) ? 1 : 0;
    -        lineStart = 0;
    -        length = source.length;
    -        lookahead = null;
    -        state = {
    -            allowIn: true,
    -            labelSet: {},
    -            inFunctionBody: false,
    -            inIteration: false,
    -            inSwitch: false,
    -            lastCommentStart: -1,
    -            markerStack: []
    -        };
    - 
    -        extra = {};
    -        if (typeof options !== 'undefined') {
    -            extra.range = (typeof options.range === 'boolean') && options.range;
    -            extra.loc = (typeof options.loc === 'boolean') && options.loc;
    -            extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
    - 
    -            if (extra.loc && options.source !== null && options.source !== undefined) {
    -                extra.source = toString(options.source);
    -            }
    - 
    -            if (typeof options.tokens === 'boolean' && options.tokens) {
    -                extra.tokens = [];
    -            }
    -            if (typeof options.comment === 'boolean' && options.comment) {
    -                extra.comments = [];
    -            }
    -            if (typeof options.tolerant === 'boolean' && options.tolerant) {
    -                extra.errors = [];
    -            }
    -            if (extra.attachComment) {
    -                extra.range = true;
    -                extra.pendingComments = [];
    -                extra.comments = [];
    -            }
    -        }
    - 
    -        try {
    -            program = parseProgram();
    -            if (typeof extra.comments !== 'undefined') {
    -                program.comments = extra.comments;
    -            }
    -            if (typeof extra.tokens !== 'undefined') {
    -                filterTokenLocation();
    -                program.tokens = extra.tokens;
    -            }
    -            if (typeof extra.errors !== 'undefined') {
    -                program.errors = extra.errors;
    -            }
    -            if (extra.attachComment) {
    -                attachComments();
    -            }
    -        } catch (e) {
    -            throw e;
    -        } finally {
    -            extra = {};
    -        }
    - 
    -        return program;
    -    }
    - 
    -    // Sync with *.json manifests.
    -    exports.version = '2.0.0-dev';
    - 
    -    exports.tokenize = tokenize;
    - 
    -    exports.parse = parse;
    - 
    -    // Deep copy.
    -   /* istanbul ignore next */
    -    exports.Syntax = (function () {
    -        var name, types = {};
    - 
    -        Eif (typeof Object.create === 'function') {
    -            types = Object.create(null);
    -        }
    - 
    -        for (name in Syntax) {
    -            Eif (Syntax.hasOwnProperty(name)) {
    -                types[name] = Syntax[name];
    -            }
    -        }
    - 
    -        Eif (typeof Object.freeze === 'function') {
    -            Object.freeze(types);
    -        }
    - 
    -        return types;
    -    }());
    - 
    -}));
    -/* vim: set sw=4 ts=4 et tw=80 : */
    - 
    - -
    - - - - - - - - diff --git a/test/index.html b/test/index.html index 93a337e78..211c1ec51 100644 --- a/test/index.html +++ b/test/index.html @@ -57,7 +57,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation
  • diff --git a/test/module.html b/test/module.html index 8d8f04452..dd64de061 100644 --- a/test/module.html +++ b/test/module.html @@ -56,7 +56,7 @@

    Esprima

  • Benchmarks Suite
  • Speed Comparison
  • Module Loading
  • -
  • Coverage Analysis
  • +
  • Coverage Analysis
  • Documentation