@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.
@@ -1,5 +1,5 @@
1
1
  // CALCIT VERSION
2
- export const calcit_version = "0.5.0-a9";
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[]): CalcitList => {
113
- return new CalcitList(xs);
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[]): CalcitList => {
117
- return new CalcitList(xs);
116
+ export let _SQUO_ = (...xs: CalcitValue[]): CalcitSliceList => {
117
+ return new CalcitSliceList(xs);
118
118
  };
119
119
 
120
- export let _$n__$M_ = (...xs: CalcitValue[]): CalcitMap => {
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 CalcitMap(xs);
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: CalcitValue) {
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: CalcitList, k: number, v: CalcitValue): CalcitList {
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 CalcitList([]);
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 == "string") return xs.length == 0;
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 CalcitList(ys[0]);
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 CalcitMap(initTernaryTreeMap<CalcitValue, CalcitValue>([]));
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 CalcitList([]);
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 CalcitList([]);
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 == Math.round(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): CalcitList => {
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 CalcitList(ys.sort(f as any));
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<CalcitList> = [];
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 CalcitList([k, v]));
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<CalcitList> = [];
760
+ let arr_result: Array<CalcitSliceList> = [];
761
761
  for (let idx = 0; idx < xs.fields.length; idx++) {
762
- arr_result.push(new CalcitList([xs.fields[idx], xs.values[idx]]));
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): CalcitList => {
855
- return new CalcitList(xs.split(x));
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): CalcitList => {
858
- return new CalcitList(xs.split("\n"));
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] == c) {
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] == c) {
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): CalcitList => {
915
- return new CalcitList(x.values());
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>): CalcitList => {
1050
- return new CalcitList(xs ?? []);
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): CalcitList => {
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 CalcitList(pair));
1275
+ ys.push(new CalcitSliceList(pair));
1276
1276
  }
1277
- return new CalcitList(ys);
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): 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 CalcitList(result);
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.turnMap();
123
- for (let [k, v] of toPairs(obj.value)) {
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;" },