| 926 | Module.print (pre + '^'); |
| 927 | } |
| 928 | function parseNested() { |
| 929 | i++; |
| 930 | if (func[i] === 'K') i++; // ignore const |
| 931 | var parts = []; |
| 932 | while (func[i] !== 'E') { |
| 933 | if (func[i] === 'S') { // substitution |
| 934 | i++; |
| 935 | var next = func.indexOf('_', i); |
| 936 | var num = func.substring(i, next) || 0; |
| 937 | parts.push(subs[num] || '?'); |
| 938 | i = next+1; |
| 939 | continue; |
| 940 | } |
| 941 | if (func[i] === 'C') { // constructor |
| 942 | parts.push(parts[parts.length-1]); |
| 943 | i += 2; |
| 944 | continue; |
| 945 | } |
| 946 | var size = parseInt(func.substr(i)); |
| 947 | var pre = size.toString().length; |
| 948 | if (!size || !pre) { i--; break; } // counter i++ below us |
| 949 | var curr = func.substr(i + pre, size); |
| 950 | parts.push(curr); |
| 951 | subs.push(curr); |
| 952 | i += pre + size; |
| 953 | } |
| 954 | i++; // skip E |
| 955 | return parts; |
| 956 | } |
| 957 | function parse(rawList, limit, allowVoid) { // main parser |
| 958 | limit = limit || Infinity; |
| 959 | var ret = '', list = []; |