@calcit/procs 0.5.0-a9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/calcit-data.js +37 -18
- package/lib/calcit.procs.js +73 -73
- package/lib/custom-formatter.js +11 -11
- package/lib/js-cirru.js +20 -20
- package/lib/js-list.js +190 -117
- package/lib/js-map.js +194 -130
- package/lib/js-record.js +7 -7
- package/lib/js-set.js +5 -5
- package/lib/js-tuple.js +4 -4
- package/package.json +5 -5
- package/ts-src/calcit-data.ts +37 -18
- package/ts-src/calcit.procs.ts +95 -95
- package/ts-src/custom-formatter.ts +10 -10
- package/ts-src/js-cirru.ts +22 -22
- package/ts-src/js-list.ts +195 -121
- package/ts-src/js-map.ts +216 -135
- package/ts-src/js-primes.ts +5 -3
- package/ts-src/js-record.ts +6 -6
- package/ts-src/js-set.ts +18 -5
- package/ts-src/js-tuple.ts +4 -4
package/ts-src/calcit.procs.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// CALCIT VERSION
|
|
2
|
-
export const calcit_version = "0.5.0
|
|
2
|
+
export const calcit_version = "0.5.0";
|
|
3
3
|
|
|
4
4
|
import { overwriteComparator, initTernaryTreeMap } from "@calcit/ternary-tree";
|
|
5
5
|
import { parse, ICirruNode } from "@cirru/parser.ts";
|
|
@@ -20,8 +20,8 @@ export * from "./js-tuple";
|
|
|
20
20
|
export * from "./custom-formatter";
|
|
21
21
|
export * from "./js-cirru";
|
|
22
22
|
|
|
23
|
-
import { CalcitList, foldl } from "./js-list";
|
|
24
|
-
import { CalcitMap } from "./js-map";
|
|
23
|
+
import { CalcitList, CalcitSliceList, foldl } from "./js-list";
|
|
24
|
+
import { CalcitMap, CalcitSliceMap } from "./js-map";
|
|
25
25
|
import { CalcitSet } from "./js-set";
|
|
26
26
|
import { CalcitTuple } from "./js-tuple";
|
|
27
27
|
import { to_calcit_data, extract_cirru_edn } from "./js-cirru";
|
|
@@ -38,10 +38,10 @@ export let type_of = (x: any): CalcitKeyword => {
|
|
|
38
38
|
if (x instanceof CalcitKeyword) {
|
|
39
39
|
return kwd("keyword");
|
|
40
40
|
}
|
|
41
|
-
if (x instanceof CalcitList) {
|
|
41
|
+
if (x instanceof CalcitList || x instanceof CalcitSliceList) {
|
|
42
42
|
return kwd("list");
|
|
43
43
|
}
|
|
44
|
-
if (x instanceof CalcitMap) {
|
|
44
|
+
if (x instanceof CalcitMap || x instanceof CalcitSliceMap) {
|
|
45
45
|
return kwd("map");
|
|
46
46
|
}
|
|
47
47
|
if (x == null) {
|
|
@@ -84,7 +84,7 @@ export let print = (...xs: CalcitValue[]): void => {
|
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
export function _$n_list_$o_count(x: CalcitValue): number {
|
|
87
|
-
if (x instanceof CalcitList) return x.len();
|
|
87
|
+
if (x instanceof CalcitList || x instanceof CalcitSliceList) return x.len();
|
|
88
88
|
|
|
89
89
|
throw new Error(`expected a list ${x}`);
|
|
90
90
|
}
|
|
@@ -94,7 +94,7 @@ export function _$n_str_$o_count(x: CalcitValue): number {
|
|
|
94
94
|
throw new Error(`expected a string ${x}`);
|
|
95
95
|
}
|
|
96
96
|
export function _$n_map_$o_count(x: CalcitValue): number {
|
|
97
|
-
if (x instanceof CalcitMap) return x.len();
|
|
97
|
+
if (x instanceof CalcitMap || x instanceof CalcitSliceMap) return x.len();
|
|
98
98
|
|
|
99
99
|
throw new Error(`expected a map ${x}`);
|
|
100
100
|
}
|
|
@@ -109,19 +109,19 @@ export function _$n_set_$o_count(x: CalcitValue): number {
|
|
|
109
109
|
throw new Error(`expected a set ${x}`);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
export let _$L_ = (...xs: CalcitValue[]):
|
|
113
|
-
return new
|
|
112
|
+
export let _$L_ = (...xs: CalcitValue[]): CalcitSliceList => {
|
|
113
|
+
return new CalcitSliceList(xs);
|
|
114
114
|
};
|
|
115
115
|
// single quote as alias for list
|
|
116
|
-
export let _SQUO_ = (...xs: CalcitValue[]):
|
|
117
|
-
return new
|
|
116
|
+
export let _SQUO_ = (...xs: CalcitValue[]): CalcitSliceList => {
|
|
117
|
+
return new CalcitSliceList(xs);
|
|
118
118
|
};
|
|
119
119
|
|
|
120
|
-
export let _$n__$M_ = (...xs: CalcitValue[]):
|
|
120
|
+
export let _$n__$M_ = (...xs: CalcitValue[]): CalcitSliceMap => {
|
|
121
121
|
if (xs.length % 2 !== 0) {
|
|
122
122
|
throw new Error("&map expects even number of arguments");
|
|
123
123
|
}
|
|
124
|
-
return new
|
|
124
|
+
return new CalcitSliceMap(xs);
|
|
125
125
|
};
|
|
126
126
|
|
|
127
127
|
export let defatom = (path: string, x: CalcitValue): CalcitValue => {
|
|
@@ -170,7 +170,7 @@ export let _$n_str_$o_contains_$q_ = (xs: CalcitValue, x: CalcitValue): boolean
|
|
|
170
170
|
};
|
|
171
171
|
|
|
172
172
|
export let _$n_list_$o_contains_$q_ = (xs: CalcitValue, x: CalcitValue): boolean => {
|
|
173
|
-
if (xs instanceof CalcitList) {
|
|
173
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
174
174
|
if (typeof x != "number") {
|
|
175
175
|
throw new Error("Expected number index for detecting");
|
|
176
176
|
}
|
|
@@ -185,7 +185,7 @@ export let _$n_list_$o_contains_$q_ = (xs: CalcitValue, x: CalcitValue): boolean
|
|
|
185
185
|
};
|
|
186
186
|
|
|
187
187
|
export let _$n_map_$o_contains_$q_ = (xs: CalcitValue, x: CalcitValue): boolean => {
|
|
188
|
-
if (xs instanceof CalcitMap) return xs.contains(x);
|
|
188
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) return xs.contains(x);
|
|
189
189
|
|
|
190
190
|
throw new Error("map `contains?` expected a map");
|
|
191
191
|
};
|
|
@@ -208,7 +208,7 @@ export let _$n_str_$o_includes_$q_ = (xs: CalcitValue, x: CalcitValue): boolean
|
|
|
208
208
|
};
|
|
209
209
|
|
|
210
210
|
export let _$n_list_$o_includes_$q_ = (xs: CalcitValue, x: CalcitValue): boolean => {
|
|
211
|
-
if (xs instanceof CalcitList) {
|
|
211
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
212
212
|
let size = xs.len();
|
|
213
213
|
for (let v of xs.items()) {
|
|
214
214
|
if (_$n__$e_(v, x)) {
|
|
@@ -222,7 +222,7 @@ export let _$n_list_$o_includes_$q_ = (xs: CalcitValue, x: CalcitValue): boolean
|
|
|
222
222
|
};
|
|
223
223
|
|
|
224
224
|
export let _$n_map_$o_includes_$q_ = (xs: CalcitValue, x: CalcitValue): boolean => {
|
|
225
|
-
if (xs instanceof CalcitMap) {
|
|
225
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) {
|
|
226
226
|
for (let [k, v] of xs.pairs()) {
|
|
227
227
|
if (_$n__$e_(v, x)) {
|
|
228
228
|
return true;
|
|
@@ -255,7 +255,7 @@ export let _$n_list_$o_nth = function (xs: CalcitValue, k: CalcitValue) {
|
|
|
255
255
|
if (arguments.length !== 2) throw new Error("nth takes 2 arguments");
|
|
256
256
|
if (typeof k !== "number") throw new Error("Expected number index for a list");
|
|
257
257
|
|
|
258
|
-
if (xs instanceof CalcitList) return xs.get(k);
|
|
258
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) return xs.get(k);
|
|
259
259
|
|
|
260
260
|
throw new Error("Does not support `nth` on this type");
|
|
261
261
|
};
|
|
@@ -269,7 +269,7 @@ export let _$n_tuple_$o_nth = function (xs: CalcitValue, k: CalcitValue) {
|
|
|
269
269
|
throw new Error("Does not support `nth` on this type");
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
-
export let _$n_record_$o_get = function (xs: CalcitValue, k:
|
|
272
|
+
export let _$n_record_$o_get = function (xs: CalcitValue, k: CalcitKeyword) {
|
|
273
273
|
if (arguments.length !== 2) {
|
|
274
274
|
throw new Error("record &get takes 2 arguments");
|
|
275
275
|
}
|
|
@@ -282,7 +282,7 @@ export let _$n_record_$o_get = function (xs: CalcitValue, k: CalcitValue) {
|
|
|
282
282
|
export let _$n_list_$o_assoc = function (xs: CalcitValue, k: CalcitValue, v: CalcitValue) {
|
|
283
283
|
if (arguments.length !== 3) throw new Error("assoc takes 3 arguments");
|
|
284
284
|
|
|
285
|
-
if (xs instanceof CalcitList) {
|
|
285
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
286
286
|
if (typeof k !== "number") {
|
|
287
287
|
throw new Error("Expected number index for lists");
|
|
288
288
|
}
|
|
@@ -306,7 +306,7 @@ export let _$n_map_$o_assoc = function (xs: CalcitValue, ...args: CalcitValue[])
|
|
|
306
306
|
if (arguments.length < 3) throw new Error("assoc takes at least 3 arguments");
|
|
307
307
|
if (args.length % 2 !== 0) throw new Error("assoc expected odd arguments");
|
|
308
308
|
|
|
309
|
-
if (xs instanceof CalcitMap) return xs.assoc(...args);
|
|
309
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) return xs.assoc(...args);
|
|
310
310
|
|
|
311
311
|
throw new Error("map `assoc` expected a map");
|
|
312
312
|
};
|
|
@@ -318,11 +318,11 @@ export let _$n_record_$o_assoc = function (xs: CalcitValue, k: CalcitValue, v: C
|
|
|
318
318
|
throw new Error("record `assoc` expected a record");
|
|
319
319
|
};
|
|
320
320
|
|
|
321
|
-
export let _$n_list_$o_assoc_before = function (xs: CalcitList, k: number, v: CalcitValue): CalcitList {
|
|
321
|
+
export let _$n_list_$o_assoc_before = function (xs: CalcitList | CalcitSliceList, k: number, v: CalcitValue): CalcitList {
|
|
322
322
|
if (arguments.length !== 3) {
|
|
323
323
|
throw new Error("assoc takes 3 arguments");
|
|
324
324
|
}
|
|
325
|
-
if (xs instanceof CalcitList) {
|
|
325
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
326
326
|
if (typeof k !== "number") {
|
|
327
327
|
throw new Error("Expected number index for lists");
|
|
328
328
|
}
|
|
@@ -332,11 +332,11 @@ export let _$n_list_$o_assoc_before = function (xs: CalcitList, k: number, v: Ca
|
|
|
332
332
|
throw new Error("Does not support `assoc-before` on this type");
|
|
333
333
|
};
|
|
334
334
|
|
|
335
|
-
export let _$n_list_$o_assoc_after = function (xs:
|
|
335
|
+
export let _$n_list_$o_assoc_after = function (xs: CalcitSliceList, k: number, v: CalcitValue): CalcitList | CalcitSliceList {
|
|
336
336
|
if (arguments.length !== 3) {
|
|
337
337
|
throw new Error("assoc takes 3 arguments");
|
|
338
338
|
}
|
|
339
|
-
if (xs instanceof CalcitList) {
|
|
339
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
340
340
|
if (typeof k !== "number") {
|
|
341
341
|
throw new Error("Expected number index for lists");
|
|
342
342
|
}
|
|
@@ -346,10 +346,10 @@ export let _$n_list_$o_assoc_after = function (xs: CalcitList, k: number, v: Cal
|
|
|
346
346
|
throw new Error("Does not support `assoc-after` on this type");
|
|
347
347
|
};
|
|
348
348
|
|
|
349
|
-
export let _$n_list_$o_dissoc = function (xs: CalcitValue, k: CalcitValue) {
|
|
349
|
+
export let _$n_list_$o_dissoc = function (xs: CalcitValue | CalcitSliceList, k: CalcitValue) {
|
|
350
350
|
if (arguments.length !== 2) throw new Error("dissoc takes 2 arguments");
|
|
351
351
|
|
|
352
|
-
if (xs instanceof CalcitList) {
|
|
352
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
353
353
|
if (typeof k !== "number") throw new Error("Expected number index for lists");
|
|
354
354
|
|
|
355
355
|
return xs.dissoc(k);
|
|
@@ -360,7 +360,7 @@ export let _$n_list_$o_dissoc = function (xs: CalcitValue, k: CalcitValue) {
|
|
|
360
360
|
export let _$n_map_$o_dissoc = function (xs: CalcitValue, ...args: CalcitValue[]) {
|
|
361
361
|
if (args.length < 1) throw new Error("dissoc takes at least 2 arguments");
|
|
362
362
|
|
|
363
|
-
if (xs instanceof CalcitMap) {
|
|
363
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) {
|
|
364
364
|
return xs.dissoc(...args);
|
|
365
365
|
}
|
|
366
366
|
|
|
@@ -398,8 +398,8 @@ export let remove_watch = (a: CalcitRef, k: CalcitKeyword): null => {
|
|
|
398
398
|
return null;
|
|
399
399
|
};
|
|
400
400
|
|
|
401
|
-
export let range = (n: number, m: number, m2: number): CalcitList => {
|
|
402
|
-
var result = new
|
|
401
|
+
export let range = (n: number, m: number, m2: number): CalcitSliceList | CalcitList => {
|
|
402
|
+
var result: CalcitList | CalcitSliceList = new CalcitSliceList([]);
|
|
403
403
|
if (m2 != null) {
|
|
404
404
|
console.warn("TODO range with 3 arguments"); // TODO
|
|
405
405
|
}
|
|
@@ -420,15 +420,15 @@ export let range = (n: number, m: number, m2: number): CalcitList => {
|
|
|
420
420
|
};
|
|
421
421
|
|
|
422
422
|
export function _$n_list_$o_empty_$q_(xs: CalcitValue): boolean {
|
|
423
|
-
if (xs instanceof CalcitList) return xs.isEmpty();
|
|
423
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) return xs.isEmpty();
|
|
424
424
|
throw new Error(`expected a list ${xs}`);
|
|
425
425
|
}
|
|
426
426
|
export function _$n_str_$o_empty_$q_(xs: CalcitValue): boolean {
|
|
427
|
-
if (typeof xs
|
|
427
|
+
if (typeof xs === "string") return xs.length === 0;
|
|
428
428
|
throw new Error(`expected a string ${xs}`);
|
|
429
429
|
}
|
|
430
430
|
export function _$n_map_$o_empty_$q_(xs: CalcitValue): boolean {
|
|
431
|
-
if (xs instanceof CalcitMap) return xs.isEmpty();
|
|
431
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) return xs.isEmpty();
|
|
432
432
|
|
|
433
433
|
throw new Error(`expected a list ${xs}`);
|
|
434
434
|
}
|
|
@@ -438,7 +438,7 @@ export function _$n_set_$o_empty_$q_(xs: CalcitValue): boolean {
|
|
|
438
438
|
}
|
|
439
439
|
|
|
440
440
|
export let _$n_list_$o_first = (xs: CalcitValue): CalcitValue => {
|
|
441
|
-
if (xs instanceof CalcitList) {
|
|
441
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
442
442
|
if (xs.isEmpty()) {
|
|
443
443
|
return null;
|
|
444
444
|
}
|
|
@@ -455,11 +455,11 @@ export let _$n_str_$o_first = (xs: CalcitValue): CalcitValue => {
|
|
|
455
455
|
throw new Error("Expected a string");
|
|
456
456
|
};
|
|
457
457
|
export let _$n_map_$o_first = (xs: CalcitValue): CalcitValue => {
|
|
458
|
-
if (xs instanceof CalcitMap) {
|
|
458
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) {
|
|
459
459
|
// TODO order may not be stable enough
|
|
460
460
|
let ys = xs.pairs();
|
|
461
461
|
if (ys.length > 0) {
|
|
462
|
-
return new
|
|
462
|
+
return new CalcitSliceList(ys[0]);
|
|
463
463
|
} else {
|
|
464
464
|
return null;
|
|
465
465
|
}
|
|
@@ -488,7 +488,7 @@ export let timeout_call = (duration: number, f: CalcitFn): null => {
|
|
|
488
488
|
};
|
|
489
489
|
|
|
490
490
|
export let _$n_list_$o_rest = (xs: CalcitValue): CalcitValue => {
|
|
491
|
-
if (xs instanceof CalcitList) {
|
|
491
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
492
492
|
if (xs.len() === 0) {
|
|
493
493
|
return null;
|
|
494
494
|
}
|
|
@@ -511,12 +511,12 @@ export let _$n_set_$o_rest = (xs: CalcitValue): CalcitValue => {
|
|
|
511
511
|
throw new Error("Expect a set");
|
|
512
512
|
};
|
|
513
513
|
export let _$n_map_$o_rest = (xs: CalcitValue): CalcitValue => {
|
|
514
|
-
if (xs instanceof CalcitMap) {
|
|
514
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) {
|
|
515
515
|
if (xs.len() > 0) {
|
|
516
516
|
let k0 = xs.pairs()[0][0];
|
|
517
517
|
return xs.dissoc(k0);
|
|
518
518
|
} else {
|
|
519
|
-
return new
|
|
519
|
+
return new CalcitSliceMap([]);
|
|
520
520
|
}
|
|
521
521
|
}
|
|
522
522
|
console.error(xs);
|
|
@@ -536,21 +536,21 @@ export let not = (x: boolean): boolean => {
|
|
|
536
536
|
};
|
|
537
537
|
|
|
538
538
|
export let prepend = (xs: CalcitValue, v: CalcitValue): CalcitList => {
|
|
539
|
-
if (!(xs instanceof CalcitList)) {
|
|
539
|
+
if (!(xs instanceof CalcitList || xs instanceof CalcitSliceList)) {
|
|
540
540
|
throw new Error("Expected array");
|
|
541
541
|
}
|
|
542
542
|
return xs.prepend(v);
|
|
543
543
|
};
|
|
544
544
|
|
|
545
|
-
export let append = (xs: CalcitValue, v: CalcitValue): CalcitList => {
|
|
546
|
-
if (!(xs instanceof CalcitList)) {
|
|
545
|
+
export let append = (xs: CalcitValue, v: CalcitValue): CalcitList | CalcitSliceList => {
|
|
546
|
+
if (!(xs instanceof CalcitList || xs instanceof CalcitSliceList)) {
|
|
547
547
|
throw new Error("Expected array");
|
|
548
548
|
}
|
|
549
549
|
return xs.append(v);
|
|
550
550
|
};
|
|
551
551
|
|
|
552
552
|
export let last = (xs: CalcitValue): CalcitValue => {
|
|
553
|
-
if (xs instanceof CalcitList) {
|
|
553
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
554
554
|
if (xs.isEmpty()) {
|
|
555
555
|
return null;
|
|
556
556
|
}
|
|
@@ -564,7 +564,7 @@ export let last = (xs: CalcitValue): CalcitValue => {
|
|
|
564
564
|
};
|
|
565
565
|
|
|
566
566
|
export let butlast = (xs: CalcitValue): CalcitValue => {
|
|
567
|
-
if (xs instanceof CalcitList) {
|
|
567
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
568
568
|
if (xs.len() === 0) {
|
|
569
569
|
return null;
|
|
570
570
|
}
|
|
@@ -603,7 +603,7 @@ export let _$n_display_stack = (): null => {
|
|
|
603
603
|
return null;
|
|
604
604
|
};
|
|
605
605
|
|
|
606
|
-
export let _$n_list_$o_slice = (xs: CalcitList, from: number, to: number): CalcitList => {
|
|
606
|
+
export let _$n_list_$o_slice = (xs: CalcitList, from: number, to: number): CalcitSliceList | CalcitList => {
|
|
607
607
|
if (xs == null) {
|
|
608
608
|
return null;
|
|
609
609
|
}
|
|
@@ -611,20 +611,20 @@ export let _$n_list_$o_slice = (xs: CalcitList, from: number, to: number): Calci
|
|
|
611
611
|
if (to == null) {
|
|
612
612
|
to = size;
|
|
613
613
|
} else if (to <= from) {
|
|
614
|
-
return new
|
|
614
|
+
return new CalcitSliceList([]);
|
|
615
615
|
} else if (to > size) {
|
|
616
616
|
to = size;
|
|
617
617
|
}
|
|
618
618
|
return xs.slice(from, to);
|
|
619
619
|
};
|
|
620
620
|
|
|
621
|
-
export let _$n_list_$o_concat = (...lists: CalcitList[]): CalcitList => {
|
|
622
|
-
let result: CalcitList = new
|
|
621
|
+
export let _$n_list_$o_concat = (...lists: (CalcitList | CalcitSliceList)[]): CalcitList | CalcitSliceList => {
|
|
622
|
+
let result: CalcitSliceList | CalcitList = new CalcitSliceList([]);
|
|
623
623
|
for (let item of lists) {
|
|
624
624
|
if (item == null) {
|
|
625
625
|
continue;
|
|
626
626
|
}
|
|
627
|
-
if (item instanceof CalcitList) {
|
|
627
|
+
if (item instanceof CalcitList || item instanceof CalcitSliceList) {
|
|
628
628
|
if (result.isEmpty()) {
|
|
629
629
|
result = item;
|
|
630
630
|
} else {
|
|
@@ -665,7 +665,7 @@ export let _$n_number_$o_rem = (a: number, b: number): number => {
|
|
|
665
665
|
return a % b;
|
|
666
666
|
};
|
|
667
667
|
export let round_$q_ = (a: number) => {
|
|
668
|
-
return a
|
|
668
|
+
return a === Math.round(a);
|
|
669
669
|
};
|
|
670
670
|
export let _$n_str_$o_concat = (a: string, b: string) => {
|
|
671
671
|
let buffer = "";
|
|
@@ -677,13 +677,13 @@ export let _$n_str_$o_concat = (a: string, b: string) => {
|
|
|
677
677
|
}
|
|
678
678
|
return buffer;
|
|
679
679
|
};
|
|
680
|
-
export let sort = (xs: CalcitList, f: CalcitFn):
|
|
680
|
+
export let sort = (xs: CalcitList | CalcitSliceList, f: CalcitFn): CalcitSliceList => {
|
|
681
681
|
if (xs == null) {
|
|
682
682
|
return null;
|
|
683
683
|
}
|
|
684
|
-
if (xs instanceof CalcitList) {
|
|
684
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
685
685
|
let ys = xs.toArray();
|
|
686
|
-
return new
|
|
686
|
+
return new CalcitSliceList(ys.sort(f as any));
|
|
687
687
|
}
|
|
688
688
|
throw new Error("Expected list");
|
|
689
689
|
};
|
|
@@ -692,22 +692,22 @@ export let floor = (n: number): number => {
|
|
|
692
692
|
return Math.floor(n);
|
|
693
693
|
};
|
|
694
694
|
|
|
695
|
-
export let _$n_merge = (a: CalcitValue, b: CalcitMap): CalcitValue => {
|
|
695
|
+
export let _$n_merge = (a: CalcitValue, b: CalcitMap | CalcitSliceMap): CalcitValue => {
|
|
696
696
|
if (a == null) {
|
|
697
697
|
return b;
|
|
698
698
|
}
|
|
699
699
|
if (b == null) {
|
|
700
700
|
return a;
|
|
701
701
|
}
|
|
702
|
-
if (a instanceof CalcitMap) {
|
|
703
|
-
if (b instanceof CalcitMap) {
|
|
702
|
+
if (a instanceof CalcitMap || a instanceof CalcitSliceMap) {
|
|
703
|
+
if (b instanceof CalcitMap || b instanceof CalcitSliceMap) {
|
|
704
704
|
return a.merge(b);
|
|
705
705
|
} else {
|
|
706
706
|
throw new Error("Expected an argument of map");
|
|
707
707
|
}
|
|
708
708
|
}
|
|
709
709
|
if (a instanceof CalcitRecord) {
|
|
710
|
-
if (b instanceof CalcitMap) {
|
|
710
|
+
if (b instanceof CalcitMap || b instanceof CalcitSliceMap) {
|
|
711
711
|
let values = [];
|
|
712
712
|
for (let item of a.values) {
|
|
713
713
|
values.push(item);
|
|
@@ -732,34 +732,34 @@ export let _$n_merge = (a: CalcitValue, b: CalcitMap): CalcitValue => {
|
|
|
732
732
|
throw new Error("Expected map or record");
|
|
733
733
|
};
|
|
734
734
|
|
|
735
|
-
export let _$n_merge_non_nil = (a: CalcitMap, b: CalcitMap): CalcitMap => {
|
|
735
|
+
export let _$n_merge_non_nil = (a: CalcitMap | CalcitSliceMap, b: CalcitMap | CalcitSliceMap): CalcitMap | CalcitSliceMap => {
|
|
736
736
|
if (a == null) {
|
|
737
737
|
return b;
|
|
738
738
|
}
|
|
739
739
|
if (b == null) {
|
|
740
740
|
return a;
|
|
741
741
|
}
|
|
742
|
-
if (!(a instanceof CalcitMap)) {
|
|
742
|
+
if (!(a instanceof CalcitMap || a instanceof CalcitSliceMap)) {
|
|
743
743
|
throw new Error("Expected map");
|
|
744
744
|
}
|
|
745
|
-
if (!(b instanceof CalcitMap)) {
|
|
745
|
+
if (!(b instanceof CalcitMap || b instanceof CalcitSliceMap)) {
|
|
746
746
|
throw new Error("Expected map");
|
|
747
747
|
}
|
|
748
748
|
|
|
749
749
|
return a.mergeSkip(b, null);
|
|
750
750
|
};
|
|
751
751
|
|
|
752
|
-
export let to_pairs = (xs: CalcitValue): CalcitValue => {
|
|
753
|
-
if (xs instanceof CalcitMap) {
|
|
754
|
-
let result: Array<
|
|
752
|
+
export let to_pairs = (xs: CalcitValue): CalcitValue | CalcitSliceList => {
|
|
753
|
+
if (xs instanceof CalcitMap || xs instanceof CalcitSliceMap) {
|
|
754
|
+
let result: Array<CalcitSliceList> = [];
|
|
755
755
|
for (let [k, v] of xs.pairs()) {
|
|
756
|
-
result.push(new
|
|
756
|
+
result.push(new CalcitSliceList([k, v]));
|
|
757
757
|
}
|
|
758
758
|
return new CalcitSet(result);
|
|
759
759
|
} else if (xs instanceof CalcitRecord) {
|
|
760
|
-
let arr_result: Array<
|
|
760
|
+
let arr_result: Array<CalcitSliceList> = [];
|
|
761
761
|
for (let idx = 0; idx < xs.fields.length; idx++) {
|
|
762
|
-
arr_result.push(new
|
|
762
|
+
arr_result.push(new CalcitSliceList([xs.fields[idx], xs.values[idx]]));
|
|
763
763
|
}
|
|
764
764
|
return new CalcitSet(arr_result);
|
|
765
765
|
} else {
|
|
@@ -851,11 +851,11 @@ export let _$n_str_$o_replace = (x: string, y: string, z: string): string => {
|
|
|
851
851
|
return result;
|
|
852
852
|
};
|
|
853
853
|
|
|
854
|
-
export let split = (xs: string, x: string):
|
|
855
|
-
return new
|
|
854
|
+
export let split = (xs: string, x: string): CalcitSliceList => {
|
|
855
|
+
return new CalcitSliceList(xs.split(x));
|
|
856
856
|
};
|
|
857
|
-
export let split_lines = (xs: string):
|
|
858
|
-
return new
|
|
857
|
+
export let split_lines = (xs: string): CalcitSliceList => {
|
|
858
|
+
return new CalcitSliceList(xs.split("\n"));
|
|
859
859
|
};
|
|
860
860
|
export let _$n_str_$o_slice = (xs: string, m: number, n: number): string => {
|
|
861
861
|
if (n <= m) {
|
|
@@ -880,13 +880,13 @@ export let trim = (x: string, c: string): string => {
|
|
|
880
880
|
var buffer = x;
|
|
881
881
|
var size = buffer.length;
|
|
882
882
|
var idx = 0;
|
|
883
|
-
while (idx < size && buffer[idx]
|
|
883
|
+
while (idx < size && buffer[idx] === c) {
|
|
884
884
|
idx = idx + 1;
|
|
885
885
|
}
|
|
886
886
|
buffer = buffer.substring(idx);
|
|
887
887
|
var size = buffer.length;
|
|
888
888
|
var idx = size;
|
|
889
|
-
while (idx > 1 && buffer[idx - 1]
|
|
889
|
+
while (idx > 1 && buffer[idx - 1] === c) {
|
|
890
890
|
idx = idx - 1;
|
|
891
891
|
}
|
|
892
892
|
buffer = buffer.substring(0, idx);
|
|
@@ -911,8 +911,8 @@ export let char_from_code = (n: number): string => {
|
|
|
911
911
|
return String.fromCharCode(n);
|
|
912
912
|
};
|
|
913
913
|
|
|
914
|
-
export let _$n_set_$o_to_list = (x: CalcitSet):
|
|
915
|
-
return new
|
|
914
|
+
export let _$n_set_$o_to_list = (x: CalcitSet): CalcitSliceList => {
|
|
915
|
+
return new CalcitSliceList(x.values());
|
|
916
916
|
};
|
|
917
917
|
|
|
918
918
|
export let aget = (x: any, name: string): any => {
|
|
@@ -1046,15 +1046,15 @@ export let _$n_str_$o_compare = (x: string, y: string) => {
|
|
|
1046
1046
|
return 0;
|
|
1047
1047
|
};
|
|
1048
1048
|
|
|
1049
|
-
export let arrayToList = (xs: Array<CalcitValue>):
|
|
1050
|
-
return new
|
|
1049
|
+
export let arrayToList = (xs: Array<CalcitValue>): CalcitSliceList => {
|
|
1050
|
+
return new CalcitSliceList(xs ?? []);
|
|
1051
1051
|
};
|
|
1052
1052
|
|
|
1053
|
-
export let listToArray = (xs: CalcitList): Array<CalcitValue> => {
|
|
1053
|
+
export let listToArray = (xs: CalcitList | CalcitSliceList): Array<CalcitValue> => {
|
|
1054
1054
|
if (xs == null) {
|
|
1055
1055
|
return null;
|
|
1056
1056
|
}
|
|
1057
|
-
if (xs instanceof CalcitList) {
|
|
1057
|
+
if (xs instanceof CalcitList || xs instanceof CalcitSliceList) {
|
|
1058
1058
|
return xs.toArray();
|
|
1059
1059
|
} else {
|
|
1060
1060
|
throw new Error("Expected list");
|
|
@@ -1077,10 +1077,10 @@ export let keyword_$q_ = (x: CalcitValue): boolean => {
|
|
|
1077
1077
|
return x instanceof CalcitKeyword;
|
|
1078
1078
|
};
|
|
1079
1079
|
export let map_$q_ = (x: CalcitValue): boolean => {
|
|
1080
|
-
return x instanceof CalcitMap;
|
|
1080
|
+
return x instanceof CalcitSliceMap || x instanceof CalcitMap;
|
|
1081
1081
|
};
|
|
1082
1082
|
export let list_$q_ = (x: CalcitValue): boolean => {
|
|
1083
|
-
return x instanceof CalcitList;
|
|
1083
|
+
return x instanceof CalcitSliceList || x instanceof CalcitList;
|
|
1084
1084
|
};
|
|
1085
1085
|
export let set_$q_ = (x: CalcitValue): boolean => {
|
|
1086
1086
|
return x instanceof CalcitSet;
|
|
@@ -1136,7 +1136,7 @@ export let format_to_lisp = (x: CalcitValue): string => {
|
|
|
1136
1136
|
return "nil";
|
|
1137
1137
|
} else if (x instanceof CalcitSymbol) {
|
|
1138
1138
|
return x.value;
|
|
1139
|
-
} else if (x instanceof CalcitList) {
|
|
1139
|
+
} else if (x instanceof CalcitList || x instanceof CalcitSliceList) {
|
|
1140
1140
|
let chunk = "(";
|
|
1141
1141
|
for (let item of x.items()) {
|
|
1142
1142
|
if (chunk != "(") {
|
|
@@ -1164,7 +1164,7 @@ export let transform_code_to_cirru = (x: CalcitValue): ICirruNode => {
|
|
|
1164
1164
|
return "nil";
|
|
1165
1165
|
} else if (x instanceof CalcitSymbol) {
|
|
1166
1166
|
return x.value;
|
|
1167
|
-
} else if (x instanceof CalcitList) {
|
|
1167
|
+
} else if (x instanceof CalcitList || x instanceof CalcitSliceList) {
|
|
1168
1168
|
let xs: ICirruNode[] = [];
|
|
1169
1169
|
for (let item of x.items()) {
|
|
1170
1170
|
xs.push(transform_code_to_cirru(item));
|
|
@@ -1243,11 +1243,11 @@ export function invoke_method(p: string) {
|
|
|
1243
1243
|
klass = calcit_builtin_classes.fn;
|
|
1244
1244
|
} else if (obj instanceof CalcitSet) {
|
|
1245
1245
|
klass = calcit_builtin_classes.set;
|
|
1246
|
-
} else if (obj instanceof CalcitList) {
|
|
1246
|
+
} else if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
|
|
1247
1247
|
klass = calcit_builtin_classes.list;
|
|
1248
1248
|
} else if (obj instanceof CalcitRecord) {
|
|
1249
1249
|
klass = calcit_builtin_classes.record;
|
|
1250
|
-
} else if (obj instanceof CalcitMap) {
|
|
1250
|
+
} else if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
|
|
1251
1251
|
klass = calcit_builtin_classes.map;
|
|
1252
1252
|
} else {
|
|
1253
1253
|
if ((obj as any)[p] == null) {
|
|
@@ -1268,13 +1268,13 @@ export function invoke_method(p: string) {
|
|
|
1268
1268
|
};
|
|
1269
1269
|
}
|
|
1270
1270
|
|
|
1271
|
-
export let _$n_map_$o_to_list = (m: CalcitValue):
|
|
1272
|
-
if (m instanceof CalcitMap) {
|
|
1271
|
+
export let _$n_map_$o_to_list = (m: CalcitValue): CalcitSliceList => {
|
|
1272
|
+
if (m instanceof CalcitMap || m instanceof CalcitSliceMap) {
|
|
1273
1273
|
let ys = [];
|
|
1274
1274
|
for (let pair of m.pairs()) {
|
|
1275
|
-
ys.push(new
|
|
1275
|
+
ys.push(new CalcitSliceList(pair));
|
|
1276
1276
|
}
|
|
1277
|
-
return new
|
|
1277
|
+
return new CalcitSliceList(ys);
|
|
1278
1278
|
} else {
|
|
1279
1279
|
throw new Error("&map:to-list expected a Map");
|
|
1280
1280
|
}
|
|
@@ -1309,9 +1309,9 @@ let typeAsInt = (x: CalcitValue): number => {
|
|
|
1309
1309
|
if (x instanceof CalcitRef) return PseudoTypeIndex.ref;
|
|
1310
1310
|
if (x instanceof CalcitTuple) return PseudoTypeIndex.tuple;
|
|
1311
1311
|
if (x instanceof CalcitRecur) return PseudoTypeIndex.recur;
|
|
1312
|
-
if (x instanceof CalcitList) return PseudoTypeIndex.list;
|
|
1312
|
+
if (x instanceof CalcitList || x instanceof CalcitSliceList) return PseudoTypeIndex.list;
|
|
1313
1313
|
if (x instanceof CalcitSet) return PseudoTypeIndex.set;
|
|
1314
|
-
if (x instanceof CalcitMap) return PseudoTypeIndex.map;
|
|
1314
|
+
if (x instanceof CalcitMap || x instanceof CalcitSliceMap) return PseudoTypeIndex.map;
|
|
1315
1315
|
if (x instanceof CalcitRecord) return PseudoTypeIndex.record;
|
|
1316
1316
|
// proc, fn, macro, syntax, not distinguished
|
|
1317
1317
|
if (t === "function") return PseudoTypeIndex.fn;
|
|
@@ -1364,7 +1364,7 @@ export let _$n_compare = (a: CalcitValue, b: CalcitValue): number => {
|
|
|
1364
1364
|
};
|
|
1365
1365
|
|
|
1366
1366
|
export let _$n_map_$o_diff_new = (a: CalcitValue, b: CalcitValue): CalcitMap => {
|
|
1367
|
-
if (a instanceof CalcitMap && b instanceof CalcitMap) {
|
|
1367
|
+
if ((a instanceof CalcitMap || a instanceof CalcitSliceMap) && (b instanceof CalcitMap || b instanceof CalcitSliceMap)) {
|
|
1368
1368
|
return a.diffNew(b);
|
|
1369
1369
|
} else {
|
|
1370
1370
|
throw new Error("expected 2 maps");
|
|
@@ -1372,7 +1372,7 @@ export let _$n_map_$o_diff_new = (a: CalcitValue, b: CalcitValue): CalcitMap =>
|
|
|
1372
1372
|
};
|
|
1373
1373
|
|
|
1374
1374
|
export let _$n_map_$o_diff_keys = (a: CalcitValue, b: CalcitValue): CalcitSet => {
|
|
1375
|
-
if (a instanceof CalcitMap && b instanceof CalcitMap) {
|
|
1375
|
+
if ((a instanceof CalcitMap || a instanceof CalcitSliceMap) && (b instanceof CalcitMap || b instanceof CalcitSliceMap)) {
|
|
1376
1376
|
return a.diffKeys(b);
|
|
1377
1377
|
} else {
|
|
1378
1378
|
throw new Error("expected 2 maps");
|
|
@@ -1380,7 +1380,7 @@ export let _$n_map_$o_diff_keys = (a: CalcitValue, b: CalcitValue): CalcitSet =>
|
|
|
1380
1380
|
};
|
|
1381
1381
|
|
|
1382
1382
|
export let _$n_map_$o_common_keys = (a: CalcitValue, b: CalcitValue): CalcitSet => {
|
|
1383
|
-
if (a instanceof CalcitMap && b instanceof CalcitMap) {
|
|
1383
|
+
if ((a instanceof CalcitMap || a instanceof CalcitSliceMap) && (b instanceof CalcitMap || b instanceof CalcitSliceMap)) {
|
|
1384
1384
|
return a.commonKeys(b);
|
|
1385
1385
|
} else {
|
|
1386
1386
|
throw new Error("expected 2 maps");
|
|
@@ -1403,7 +1403,7 @@ export let _$n_list_$o_to_set = (xs: CalcitList): CalcitSet => {
|
|
|
1403
1403
|
return new CalcitSet(result);
|
|
1404
1404
|
};
|
|
1405
1405
|
|
|
1406
|
-
export let _$n_list_$o_distinct = (xs: CalcitList):
|
|
1406
|
+
export let _$n_list_$o_distinct = (xs: CalcitList): CalcitSliceList => {
|
|
1407
1407
|
var result: CalcitValue[] = [];
|
|
1408
1408
|
let data = xs.toArray();
|
|
1409
1409
|
outer: for (let idx = 0; idx < data.length; idx++) {
|
|
@@ -1414,7 +1414,7 @@ export let _$n_list_$o_distinct = (xs: CalcitList): CalcitList => {
|
|
|
1414
1414
|
}
|
|
1415
1415
|
result.push(data[idx]);
|
|
1416
1416
|
}
|
|
1417
|
-
return new
|
|
1417
|
+
return new CalcitSliceList(result);
|
|
1418
1418
|
};
|
|
1419
1419
|
|
|
1420
1420
|
export let _$n_get_os = (): CalcitKeyword => {
|
|
@@ -3,8 +3,8 @@ import { CalcitRef, CalcitSymbol, CalcitKeyword } from "./calcit-data";
|
|
|
3
3
|
import { toPairs } from "@calcit/ternary-tree";
|
|
4
4
|
|
|
5
5
|
import { CalcitRecord } from "./js-record";
|
|
6
|
-
import { CalcitMap } from "./js-map";
|
|
7
|
-
import { CalcitList } from "./js-list";
|
|
6
|
+
import { CalcitMap, CalcitSliceMap } from "./js-map";
|
|
7
|
+
import { CalcitList, CalcitSliceList } from "./js-list";
|
|
8
8
|
import { CalcitSet } from "./js-set";
|
|
9
9
|
import { CalcitTuple } from "./js-tuple";
|
|
10
10
|
|
|
@@ -41,7 +41,7 @@ export let load_console_formatter_$x_ = () => {
|
|
|
41
41
|
if (obj instanceof CalcitSymbol) {
|
|
42
42
|
return ["div", { style: "color: hsl(340, 80%, 60%)" }, obj.toString()];
|
|
43
43
|
}
|
|
44
|
-
if (obj instanceof CalcitList) {
|
|
44
|
+
if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
|
|
45
45
|
return [
|
|
46
46
|
"div",
|
|
47
47
|
{ style: "color: hsl(280, 80%, 60%, 0.4)" },
|
|
@@ -49,7 +49,7 @@ export let load_console_formatter_$x_ = () => {
|
|
|
49
49
|
["span", { style: "font-size: 80%; vertical-align: 0.7em; color: hsl(280, 80%, 60%, 0.8)" }, `${obj.len()}`],
|
|
50
50
|
];
|
|
51
51
|
}
|
|
52
|
-
if (obj instanceof CalcitMap) {
|
|
52
|
+
if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
|
|
53
53
|
return ["div", { style: "color: hsl(280, 80%, 60%, 0.4)" }, obj.toString(true)];
|
|
54
54
|
}
|
|
55
55
|
if (obj instanceof CalcitSet) {
|
|
@@ -78,10 +78,10 @@ export let load_console_formatter_$x_ = () => {
|
|
|
78
78
|
return null;
|
|
79
79
|
},
|
|
80
80
|
hasBody: (obj) => {
|
|
81
|
-
if (obj instanceof CalcitList) {
|
|
81
|
+
if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
|
|
82
82
|
return obj.len() > 0;
|
|
83
83
|
}
|
|
84
|
-
if (obj instanceof CalcitMap) {
|
|
84
|
+
if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
|
|
85
85
|
return obj.len() > 0;
|
|
86
86
|
}
|
|
87
87
|
if (obj instanceof CalcitSet) {
|
|
@@ -90,7 +90,7 @@ export let load_console_formatter_$x_ = () => {
|
|
|
90
90
|
return false;
|
|
91
91
|
},
|
|
92
92
|
body: (obj, config) => {
|
|
93
|
-
if (obj instanceof CalcitList) {
|
|
93
|
+
if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
|
|
94
94
|
return ["div", { style: "color: hsl(280, 80%, 60%)" }].concat(
|
|
95
95
|
obj.toArray().map((x, idx) => {
|
|
96
96
|
return [
|
|
@@ -117,10 +117,10 @@ export let load_console_formatter_$x_ = () => {
|
|
|
117
117
|
ret.push(["div", { style: "margin-left: 8px; display: inline-block;" }, embedObject(obj.snd)]);
|
|
118
118
|
return ret;
|
|
119
119
|
}
|
|
120
|
-
if (obj instanceof CalcitMap) {
|
|
120
|
+
if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
|
|
121
121
|
let ret: any[] = ["div", { style: "color: hsl(280, 80%, 60%)" }];
|
|
122
|
-
obj.
|
|
123
|
-
for (let [k, v] of
|
|
122
|
+
let pairs = obj.pairs();
|
|
123
|
+
for (let [k, v] of pairs) {
|
|
124
124
|
ret.push([
|
|
125
125
|
"div",
|
|
126
126
|
{ style: "margin-left: 8px; display: flex;" },
|