4__IDRRT__.Type = function(type) {
8__IDRRT__.Int = new __IDRRT__.Type('Int');
9__IDRRT__.Char = new __IDRRT__.Type('Char');
10__IDRRT__.String = new __IDRRT__.Type('String');
11__IDRRT__.Integer = new __IDRRT__.Type('Integer');
12__IDRRT__.Float = new __IDRRT__.Type('Float');
13__IDRRT__.Ptr = new __IDRRT__.Type('Pointer')
14__IDRRT__.Forgot = new __IDRRT__.Type('Forgot');
18__IDRRT__.Tailcall = function(f) { this.f = f };
21__IDRRT__.Con = function(i,vars) {
26__IDRRT__.tailcall = function(f) {
34 if (ret instanceof __IDRRT__.Tailcall) {
43 BigInteger Javascript code taken from:
44 https://github.com/peterolson
46__IDRRT__.bigInt = (function () {
47 var base = 10000000, logBase = 7;
53 var normalize = function (first, second) {
54 var a = first.value, b = second.value;
55 var length = a.length > b.length ? a.length : b.length;
56 for (var i = 0; i < length; i++) {
60 for (var i = length - 1; i >= 0; i--) {
61 if (a[i] === 0 && b[i] === 0) {
66 if (!a.length) a = [0], b = [0];
71 var parse = function (text, first) {
72 if (typeof text === "object") return text;
74 var s = sign.positive, value = [];
75 if (text[0] === "-") {
79 var text = text.split("e");
80 if (text.length > 2) throw new Error("Invalid integer");
83 if (exp[0] === "+") exp = exp.slice(1);
85 if (exp.lesser(0)) throw new Error("Cannot include negative exponent part for integers");
86 while (exp.notEquals(0)) {
92 if (text === "-0") text = "0";
93 var isValid = /^([0-9][0-9]*)$/.test(text);
94 if (!isValid) throw new Error("Invalid integer");
96 var divider = text.length > logBase ? text.length - logBase : 0;
97 value.push(+text.slice(divider));
98 text = text.slice(0, divider);
100 var val = bigInt(value, s);
101 if (first) normalize(first, val);
105 var goesInto = function (a, b) {
106 var a = bigInt(a, sign.positive), b = bigInt(b, sign.positive);
107 if (a.equals(0)) throw new Error("Cannot divide by 0");
111 var c = bigInt(a.value, sign.positive), t = c.times(10);
112 while (t.lesser(b)) {
117 while (c.lesserOrEquals(b)) {
121 } while (a.lesserOrEquals(b));
129 var bigInt = function (value, s) {
137 negate: function (m) {
138 var first = m || self;
139 return bigInt(first.value, !first.sign);
142 var first = m || self;
143 return bigInt(first.value, sign.positive);
145 add: function (n, m) {
146 var s, first = self, second;
147 if (m) (first = parse(n)) && (second = parse(m));
148 else second = parse(n, first);
150 if (first.sign !== second.sign) {
151 first = bigInt(first.value, sign.positive);
152 second = bigInt(second.value, sign.positive);
153 return s === sign.positive ?
154 o.subtract(first, second) :
155 o.subtract(second, first);
157 normalize(first, second);
158 var a = first.value, b = second.value;
161 for (var i = 0; i < a.length || carry > 0; i++) {
162 var sum = (a[i] || 0) + (b[i] || 0) + carry;
163 carry = sum >= base ? 1 : 0;
167 return bigInt(result, s);
169 plus: function (n, m) {
172 subtract: function (n, m) {
173 var first = self, second;
174 if (m) (first = parse(n)) && (second = parse(m));
175 else second = parse(n, first);
176 if (first.sign !== second.sign) return o.add(first, o.negate(second));
177 if (first.sign === sign.negative) return o.subtract(o.negate(second), o.negate(first));
178 if (o.compare(first, second) === -1) return o.negate(o.subtract(second, first));
179 var a = first.value, b = second.value;
182 for (var i = 0; i < a.length; i++) {
184 borrow = a[i] < b[i] ? 1 : 0;
185 var minuend = (borrow * base) + a[i] - b[i];
186 result.push(minuend);
188 return bigInt(result, sign.positive);
190 minus: function (n, m) {
191 return o.subtract(n, m);
193 multiply: function (n, m) {
194 var s, first = self, second;
195 if (m) (first = parse(n)) && (second = parse(m));
196 else second = parse(n, first);
197 s = first.sign !== second.sign;
198 var a = first.value, b = second.value;
200 for (var i = 0; i < a.length; i++) {
204 resultSum[i].push(0);
208 for (var i = 0; i < a.length; i++) {
210 for (var j = 0; j < b.length || carry > 0; j++) {
212 var product = y ? (x * y) + carry : carry;
213 carry = product > base ? Math.floor(product / base) : 0;
214 product -= carry * base;
215 resultSum[i].push(product);
219 for (var i = 0; i < resultSum.length; i++) {
220 var len = resultSum[i].length;
221 if (len > max) max = len;
223 var result = [], carry = 0;
224 for (var i = 0; i < max || carry > 0; i++) {
226 for (var j = 0; j < resultSum.length; j++) {
227 sum += resultSum[j][i] || 0;
229 carry = sum > base ? Math.floor(sum / base) : 0;
233 return bigInt(result, s);
235 times: function (n, m) {
236 return o.multiply(n, m);
238 divmod: function (n, m) {
239 var s, first = self, second;
240 if (m) (first = parse(n)) && (second = parse(m));
241 else second = parse(n, first);
242 s = first.sign !== second.sign;
243 if (bigInt(first.value, first.sign).equals(0)) return {
244 quotient: bigInt([0], sign.positive),
245 remainder: bigInt([0], sign.positive)
247 if (second.equals(0)) throw new Error("Cannot divide by zero");
248 var a = first.value, b = second.value;
249 var result = [], remainder = [];
250 for (var i = a.length - 1; i >= 0; i--) {
251 var n = [a[i]].concat(remainder);
252 var quotient = goesInto(b, n);
253 result.push(quotient.result);
254 remainder = quotient.remainder;
258 quotient: bigInt(result, s),
259 remainder: bigInt(remainder, first.sign)
262 divide: function (n, m) {
263 return o.divmod(n, m).quotient;
265 over: function (n, m) {
266 return o.divide(n, m);
268 mod: function (n, m) {
269 return o.divmod(n, m).remainder;
271 pow: function (n, m) {
272 var first = self, second;
273 if (m) (first = parse(n)) && (second = parse(m));
274 else second = parse(n, first);
275 var a = first, b = second;
276 if (b.lesser(0)) return ZERO;
277 if (b.equals(0)) return ONE;
278 var result = bigInt(a.value, a.sign);
280 if (b.mod(2).equals(0)) {
281 var c = result.pow(b.over(2));
284 return result.times(result.pow(b.minus(1)));
288 var first = m || self;
289 return o.add(first, 1);
292 var first = m || self;
293 return o.subtract(first, 1);
295 compare: function (n, m) {
296 var first = self, second;
297 if (m) (first = parse(n)) && (second = parse(m, first));
298 else second = parse(n, first);
299 normalize(first, second);
300 if (first.value.length === 1 && second.value.length === 1 && first.value[0] === 0 && second.value[0] === 0) return 0;
301 if (second.sign !== first.sign) return first.sign === sign.positive ? 1 : -1;
302 var multiplier = first.sign === sign.positive ? 1 : -1;
303 var a = first.value, b = second.value;
304 for (var i = a.length - 1; i >= 0; i--) {
305 if (a[i] > b[i]) return 1 * multiplier;
306 if (b[i] > a[i]) return -1 * multiplier;
310 compareAbs: function (n, m) {
311 var first = self, second;
312 if (m) (first = parse(n)) && (second = parse(m, first));
313 else second = parse(n, first);
314 first.sign = second.sign = sign.positive;
315 return o.compare(first, second);
317 equals: function (n, m) {
318 return o.compare(n, m) === 0;
320 notEquals: function (n, m) {
321 return !o.equals(n, m);
323 lesser: function (n, m) {
324 return o.compare(n, m) < 0;
326 greater: function (n, m) {
327 return o.compare(n, m) > 0;
329 greaterOrEquals: function (n, m) {
330 return o.compare(n, m) >= 0;
332 lesserOrEquals: function (n, m) {
333 return o.compare(n, m) <= 0;
335 isPositive: function (m) {
336 var first = m || self;
337 return first.sign === sign.positive;
339 isNegative: function (m) {
340 var first = m || self;
341 return first.sign === sign.negative;
343 isEven: function (m) {
344 var first = m || self;
345 return first.value[0] % 2 === 0;
347 isOdd: function (m) {
348 var first = m || self;
349 return first.value[0] % 2 === 1;
351 toString: function (m) {
352 var first = m || self;
353 var str = "", len = first.value.length;
355 str += (base.toString() + first.value[len]).slice(-logBase);
357 while (str[0] === "0") {
360 if (!str.length) str = "0";
361 var s = first.sign === sign.positive ? "" : "-";
364 toJSNumber: function (m) {
365 return +o.toString(m);
367 valueOf: function (m) {
368 return o.toJSNumber(m);
374 var ZERO = bigInt([0], sign.positive);
375 var ONE = bigInt([1], sign.positive);
376 var MINUS_ONE = bigInt([1], sign.negative);
378 var fnReturn = function (a) {
379 if (typeof a === "undefined") return ZERO;
382 fnReturn.zero = ZERO;
384 fnReturn.minusOne = MINUS_ONE;
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list