@calcit/procs 0.8.47 → 0.8.49

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.
@@ -258,7 +258,8 @@ export let hashFunction = (x) => {
258
258
  let pairs = x.pairs();
259
259
  pairs.sort((a, b) => _$n_compare(a[0], b[0]));
260
260
  for (let idx = 0; idx < pairs.length; idx++) {
261
- let [k, v] = pairs[idx];
261
+ let k = pairs[idx][0];
262
+ let v = pairs[idx][1];
262
263
  base = mergeValueHash(base, hashFunction(k));
263
264
  base = mergeValueHash(base, hashFunction(v));
264
265
  }
@@ -270,7 +271,8 @@ export let hashFunction = (x) => {
270
271
  let pairs = x.pairs();
271
272
  pairs.sort((a, b) => _$n_compare(a[0], b[0]));
272
273
  for (let idx = 0; idx < pairs.length; idx++) {
273
- let [k, v] = pairs[idx];
274
+ let k = pairs[idx][0];
275
+ let v = pairs[idx][1];
274
276
  base = mergeValueHash(base, hashFunction(k));
275
277
  base = mergeValueHash(base, hashFunction(v));
276
278
  }
@@ -421,7 +423,8 @@ export let to_js_data = (x, addColon = false) => {
421
423
  let result = {};
422
424
  let pairs = x.pairs();
423
425
  for (let idx = 0; idx < pairs.length; idx++) {
424
- let [k, v] = pairs[idx];
426
+ let k = pairs[idx][0];
427
+ let v = pairs[idx][1];
425
428
  var key = to_js_data(k, addColon);
426
429
  result[key] = to_js_data(v, addColon);
427
430
  }
@@ -473,22 +476,24 @@ export let _$n__$e_ = (x, y) => {
473
476
  return false;
474
477
  }
475
478
  if (tx === "string") {
476
- return x === y;
479
+ // already checked above
480
+ return false;
477
481
  }
478
482
  if (tx === "boolean") {
479
- return x === y;
483
+ // already checked above
484
+ return false;
480
485
  }
481
486
  if (tx === "number") {
482
- return x === y;
487
+ // already checked above
488
+ return false;
483
489
  }
484
490
  if (tx === "function") {
485
491
  // comparing functions by reference
486
492
  return x === y;
487
493
  }
488
494
  if (x instanceof CalcitTag) {
489
- if (y instanceof CalcitTag) {
490
- return x === y;
491
- }
495
+ // comparing tags by reference
496
+ // already checked above
492
497
  return false;
493
498
  }
494
499
  if (x instanceof CalcitSymbol) {
@@ -527,7 +532,8 @@ export let _$n__$e_ = (x, y) => {
527
532
  }
528
533
  let pairs = x.pairs();
529
534
  for (let idx = 0; idx < pairs.length; idx++) {
530
- let [k, v] = pairs[idx];
535
+ let k = pairs[idx][0];
536
+ let v = pairs[idx][1];
531
537
  if (!y.contains(k)) {
532
538
  return false;
533
539
  }
@@ -383,9 +383,9 @@ export let reset_$x_ = (a, v) => {
383
383
  }
384
384
  let prev = a.value;
385
385
  a.value = v;
386
- for (let [k, f] of a.listeners) {
386
+ a.listeners.forEach((f) => {
387
387
  f(v, prev);
388
- }
388
+ });
389
389
  return null;
390
390
  };
391
391
  export let add_watch = (a, k, f) => {
@@ -687,7 +687,8 @@ export let _$n_merge = (a, b) => {
687
687
  }
688
688
  let pairs = b.pairs();
689
689
  for (let idx = 0; idx < pairs.length; idx++) {
690
- let [k, v] = pairs[idx];
690
+ let k = pairs[idx][0];
691
+ let v = pairs[idx][1];
691
692
  let field;
692
693
  if (k instanceof CalcitTag) {
693
694
  field = k;
@@ -1223,28 +1224,40 @@ export function invoke_method_closure(p) {
1223
1224
  function lookup_class(obj) {
1224
1225
  let klass;
1225
1226
  let tag;
1226
- if (obj == null) {
1227
- tag = "&core-nil-class";
1228
- klass = calcit_builtin_classes.nil;
1227
+ if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
1228
+ tag = "&core-list-class";
1229
+ klass = calcit_builtin_classes.list;
1229
1230
  }
1230
- else if (obj instanceof CalcitTuple) {
1231
+ else if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
1232
+ tag = "&core-map-class";
1233
+ klass = calcit_builtin_classes.map;
1234
+ }
1235
+ else if (obj instanceof CalcitRecord) {
1231
1236
  if (obj.klass instanceof CalcitRecord) {
1232
- tag = obj.tag.toString();
1237
+ tag = obj.name.toString();
1233
1238
  klass = obj.klass;
1234
1239
  }
1235
1240
  else {
1236
1241
  throw new Error("Method invoking expected a record as class");
1237
1242
  }
1238
1243
  }
1239
- else if (obj instanceof CalcitRecord) {
1244
+ else if (obj instanceof CalcitTuple) {
1240
1245
  if (obj.klass instanceof CalcitRecord) {
1241
- tag = obj.name.toString();
1246
+ tag = obj.tag.toString();
1242
1247
  klass = obj.klass;
1243
1248
  }
1244
1249
  else {
1245
1250
  throw new Error("Method invoking expected a record as class");
1246
1251
  }
1247
1252
  }
1253
+ else if (obj instanceof CalcitSet) {
1254
+ tag = "&core-set-class";
1255
+ klass = calcit_builtin_classes.set;
1256
+ }
1257
+ else if (obj == null) {
1258
+ tag = "&core-nil-class";
1259
+ klass = calcit_builtin_classes.nil;
1260
+ }
1248
1261
  else if (typeof obj === "number") {
1249
1262
  tag = "&core-number-class";
1250
1263
  klass = calcit_builtin_classes.number;
@@ -1257,18 +1270,6 @@ function lookup_class(obj) {
1257
1270
  tag = "&core-fn-class";
1258
1271
  klass = calcit_builtin_classes.fn;
1259
1272
  }
1260
- else if (obj instanceof CalcitSet) {
1261
- tag = "&core-set-class";
1262
- klass = calcit_builtin_classes.set;
1263
- }
1264
- else if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
1265
- tag = "&core-list-class";
1266
- klass = calcit_builtin_classes.list;
1267
- }
1268
- else if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
1269
- tag = "&core-map-class";
1270
- klass = calcit_builtin_classes.map;
1271
- }
1272
1273
  else {
1273
1274
  return null;
1274
1275
  }
@@ -1279,7 +1280,8 @@ export function invoke_method(p, obj, ...args) {
1279
1280
  if (pair == null) {
1280
1281
  throw new Error(`No class for ${obj?.toString() || JSON.stringify(obj)} to lookup .${p}`);
1281
1282
  }
1282
- let [klass, tag] = pair;
1283
+ let klass = pair[0];
1284
+ let tag = pair[1];
1283
1285
  let method = klass.getOrNil(p);
1284
1286
  if (method == null) {
1285
1287
  throw new Error(`No method '.${p}' for '${tag}' object '${obj}'.\navailable fields are: ${klass.fields.map((fd) => fd.value).join(" ")}`);
@@ -116,7 +116,10 @@ export let load_console_formatter_$x_ = () => {
116
116
  if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
117
117
  let preview = "";
118
118
  let hasCollection = false;
119
- for (let [k, v] of obj.pairs()) {
119
+ let pairs = obj.pairs();
120
+ for (let idx = 0; idx < pairs.length; idx++) {
121
+ let k = pairs[idx][0];
122
+ let v = pairs[idx][1];
120
123
  preview += " ";
121
124
  if (isLiteral(k) && isLiteral(v)) {
122
125
  preview += `(${saveString(k)} ${saveString(v)})`;
@@ -243,7 +246,8 @@ export let load_console_formatter_$x_ = () => {
243
246
  }
244
247
  });
245
248
  for (let idx = 0; idx < pairs.length; idx++) {
246
- let [k, v] = pairs[idx];
249
+ let k = pairs[idx][0];
250
+ let v = pairs[idx][1];
247
251
  ret.push(tr({}, td({ paddingLeft: "8px", verticalAlign: "top", whiteSpace: "nowrap", minWidth: "40px" }, embedObject(k)), td({ paddingLeft: "8px" }, embedObject(v))));
248
252
  }
249
253
  return ret;
package/lib/js-cirru.mjs CHANGED
@@ -124,7 +124,8 @@ export let to_cirru_edn = (x) => {
124
124
  }
125
125
  });
126
126
  for (let idx = 0; idx < pairs_buffer.length; idx++) {
127
- let [k, v] = pairs_buffer[idx];
127
+ let k = pairs_buffer[idx][0];
128
+ let v = pairs_buffer[idx][1];
128
129
  buffer.push([to_cirru_edn(k), to_cirru_edn(v)]);
129
130
  }
130
131
  return buffer;
package/lib/js-map.mjs CHANGED
@@ -50,7 +50,8 @@ export class CalcitMap {
50
50
  let itemsCode = "";
51
51
  let pairs = this.pairs();
52
52
  for (let idx = 0; idx < pairs.length; idx++) {
53
- let [k, v] = pairs[idx];
53
+ let k = pairs[idx][0];
54
+ let v = pairs[idx][1];
54
55
  if (shorter) {
55
56
  let keyPart = isNestedCalcitData(k) ? tipNestedCalcitData(k) : toString(k, true, disableJsDataWarning);
56
57
  let valuePart = isNestedCalcitData(v) ? tipNestedCalcitData(v) : toString(v, true, disableJsDataWarning);
@@ -155,7 +156,10 @@ export class CalcitMap {
155
156
  }
156
157
  /** detecthing in custom formatter */
157
158
  nestedDataInChildren() {
158
- for (let [k, v] of this.pairs()) {
159
+ let pairs = this.pairs();
160
+ for (let idx = 0; idx < pairs.length; idx++) {
161
+ let k = pairs[idx][0];
162
+ let v = pairs[idx][1];
159
163
  if (!isLiteral(k) || !isLiteral(v)) {
160
164
  return true;
161
165
  }
@@ -247,7 +251,8 @@ export class CalcitSliceMap {
247
251
  let itemsCode = "";
248
252
  let pairs = this.pairs();
249
253
  for (let idx = 0; idx < pairs.length; idx++) {
250
- let [k, v] = pairs[idx];
254
+ let k = pairs[idx][0];
255
+ let v = pairs[idx][1];
251
256
  if (shorter) {
252
257
  let keyPart = isNestedCalcitData(k) ? tipNestedCalcitData(k) : toString(k, true, disableJsDataWarning);
253
258
  let valuePart = isNestedCalcitData(v) ? tipNestedCalcitData(v) : toString(v, true, disableJsDataWarning);
@@ -356,7 +361,10 @@ export class CalcitSliceMap {
356
361
  }
357
362
  /** detecthing in custom formatter */
358
363
  nestedDataInChildren() {
359
- for (let [k, v] of this.pairs()) {
364
+ let pairs = this.pairs();
365
+ for (let idx = 0; idx < pairs.length; idx++) {
366
+ let k = pairs[idx][0];
367
+ let v = pairs[idx][1];
360
368
  if (!isLiteral(k) || !isLiteral(v)) {
361
369
  return true;
362
370
  }
package/lib/js-record.mjs CHANGED
@@ -182,7 +182,8 @@ export let _$n_record_$o_from_map = (proto, data) => {
182
182
  let pairs_buffer = [];
183
183
  let pairs = data.pairs();
184
184
  for (let i = 0; i < pairs.length; i++) {
185
- let [k, v] = pairs[i];
185
+ let k = pairs[i][0];
186
+ let v = pairs[i][1];
186
187
  pairs_buffer.push([castTag(k), v]);
187
188
  }
188
189
  // mutable sort
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calcit/procs",
3
- "version": "0.8.47",
3
+ "version": "0.8.49",
4
4
  "main": "./lib/calcit.procs.mjs",
5
5
  "devDependencies": {
6
6
  "@types/node": "^20.11.28",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calcit/procs",
3
- "version": "0.8.47",
3
+ "version": "0.8.49",
4
4
  "main": "./lib/calcit.procs.mjs",
5
5
  "devDependencies": {
6
6
  "@types/node": "^20.11.28",
@@ -290,7 +290,8 @@ export let hashFunction = (x: CalcitValue): Hash => {
290
290
  let pairs = x.pairs();
291
291
  pairs.sort((a, b) => _$n_compare(a[0], b[0]));
292
292
  for (let idx = 0; idx < pairs.length; idx++) {
293
- let [k, v] = pairs[idx];
293
+ let k = pairs[idx][0];
294
+ let v = pairs[idx][1];
294
295
  base = mergeValueHash(base, hashFunction(k));
295
296
  base = mergeValueHash(base, hashFunction(v));
296
297
  }
@@ -303,7 +304,8 @@ export let hashFunction = (x: CalcitValue): Hash => {
303
304
  let pairs = x.pairs();
304
305
  pairs.sort((a, b) => _$n_compare(a[0], b[0]));
305
306
  for (let idx = 0; idx < pairs.length; idx++) {
306
- let [k, v] = pairs[idx];
307
+ let k = pairs[idx][0];
308
+ let v = pairs[idx][1];
307
309
  base = mergeValueHash(base, hashFunction(k));
308
310
  base = mergeValueHash(base, hashFunction(v));
309
311
  }
@@ -456,7 +458,8 @@ export let to_js_data = (x: CalcitValue, addColon: boolean = false): any => {
456
458
  let result: Record<string, CalcitValue> = {};
457
459
  let pairs = x.pairs();
458
460
  for (let idx = 0; idx < pairs.length; idx++) {
459
- let [k, v] = pairs[idx];
461
+ let k = pairs[idx][0];
462
+ let v = pairs[idx][1];
460
463
  var key = to_js_data(k, addColon);
461
464
  result[key] = to_js_data(v, addColon);
462
465
  }
@@ -515,22 +518,24 @@ export let _$n__$e_ = (x: CalcitValue, y: CalcitValue): boolean => {
515
518
  }
516
519
 
517
520
  if (tx === "string") {
518
- return (x as string) === (y as string);
521
+ // already checked above
522
+ return false;
519
523
  }
520
524
  if (tx === "boolean") {
521
- return (x as boolean) === (y as boolean);
525
+ // already checked above
526
+ return false;
522
527
  }
523
528
  if (tx === "number") {
524
- return x === y;
529
+ // already checked above
530
+ return false;
525
531
  }
526
532
  if (tx === "function") {
527
533
  // comparing functions by reference
528
534
  return x === y;
529
535
  }
530
536
  if (x instanceof CalcitTag) {
531
- if (y instanceof CalcitTag) {
532
- return x === y;
533
- }
537
+ // comparing tags by reference
538
+ // already checked above
534
539
  return false;
535
540
  }
536
541
  if (x instanceof CalcitSymbol) {
@@ -569,7 +574,8 @@ export let _$n__$e_ = (x: CalcitValue, y: CalcitValue): boolean => {
569
574
  }
570
575
  let pairs = x.pairs();
571
576
  for (let idx = 0; idx < pairs.length; idx++) {
572
- let [k, v] = pairs[idx];
577
+ let k = pairs[idx][0];
578
+ let v = pairs[idx][1];
573
579
  if (!y.contains(k)) {
574
580
  return false;
575
581
  }
@@ -437,9 +437,9 @@ export let reset_$x_ = (a: CalcitRef, v: CalcitValue): null => {
437
437
  }
438
438
  let prev = a.value;
439
439
  a.value = v;
440
- for (let [k, f] of a.listeners) {
440
+ a.listeners.forEach((f) => {
441
441
  f(v, prev);
442
- }
442
+ });
443
443
  return null;
444
444
  };
445
445
 
@@ -760,7 +760,8 @@ export let _$n_merge = (a: CalcitValue, b: CalcitMap | CalcitSliceMap): CalcitVa
760
760
  }
761
761
  let pairs = b.pairs();
762
762
  for (let idx = 0; idx < pairs.length; idx++) {
763
- let [k, v] = pairs[idx];
763
+ let k = pairs[idx][0];
764
+ let v = pairs[idx][1];
764
765
  let field: CalcitTag;
765
766
  if (k instanceof CalcitTag) {
766
767
  field = k;
@@ -1326,23 +1327,32 @@ export function invoke_method_closure(p: string) {
1326
1327
  function lookup_class(obj: CalcitValue): [CalcitRecord, string] {
1327
1328
  let klass: CalcitRecord;
1328
1329
  let tag: string;
1329
- if (obj == null) {
1330
- tag = "&core-nil-class";
1331
- klass = calcit_builtin_classes.nil;
1332
- } else if (obj instanceof CalcitTuple) {
1330
+ if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
1331
+ tag = "&core-list-class";
1332
+ klass = calcit_builtin_classes.list;
1333
+ } else if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
1334
+ tag = "&core-map-class";
1335
+ klass = calcit_builtin_classes.map;
1336
+ } else if (obj instanceof CalcitRecord) {
1333
1337
  if (obj.klass instanceof CalcitRecord) {
1334
- tag = obj.tag.toString();
1338
+ tag = obj.name.toString();
1335
1339
  klass = obj.klass;
1336
1340
  } else {
1337
1341
  throw new Error("Method invoking expected a record as class");
1338
1342
  }
1339
- } else if (obj instanceof CalcitRecord) {
1343
+ } else if (obj instanceof CalcitTuple) {
1340
1344
  if (obj.klass instanceof CalcitRecord) {
1341
- tag = obj.name.toString();
1345
+ tag = obj.tag.toString();
1342
1346
  klass = obj.klass;
1343
1347
  } else {
1344
1348
  throw new Error("Method invoking expected a record as class");
1345
1349
  }
1350
+ } else if (obj instanceof CalcitSet) {
1351
+ tag = "&core-set-class";
1352
+ klass = calcit_builtin_classes.set;
1353
+ } else if (obj == null) {
1354
+ tag = "&core-nil-class";
1355
+ klass = calcit_builtin_classes.nil;
1346
1356
  } else if (typeof obj === "number") {
1347
1357
  tag = "&core-number-class";
1348
1358
  klass = calcit_builtin_classes.number;
@@ -1352,15 +1362,6 @@ function lookup_class(obj: CalcitValue): [CalcitRecord, string] {
1352
1362
  } else if (typeof obj === "function") {
1353
1363
  tag = "&core-fn-class";
1354
1364
  klass = calcit_builtin_classes.fn;
1355
- } else if (obj instanceof CalcitSet) {
1356
- tag = "&core-set-class";
1357
- klass = calcit_builtin_classes.set;
1358
- } else if (obj instanceof CalcitList || obj instanceof CalcitSliceList) {
1359
- tag = "&core-list-class";
1360
- klass = calcit_builtin_classes.list;
1361
- } else if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
1362
- tag = "&core-map-class";
1363
- klass = calcit_builtin_classes.map;
1364
1365
  } else {
1365
1366
  return null;
1366
1367
  }
@@ -1372,7 +1373,8 @@ export function invoke_method(p: string, obj: CalcitValue, ...args: CalcitValue[
1372
1373
  if (pair == null) {
1373
1374
  throw new Error(`No class for ${obj?.toString() || JSON.stringify(obj)} to lookup .${p}`);
1374
1375
  }
1375
- let [klass, tag] = pair;
1376
+ let klass = pair[0];
1377
+ let tag = pair[1];
1376
1378
  let method = klass.getOrNil(p);
1377
1379
  if (method == null) {
1378
1380
  throw new Error(`No method '.${p}' for '${tag}' object '${obj}'.\navailable fields are: ${klass.fields.map((fd: CalcitTag) => fd.value).join(" ")}`);
@@ -137,7 +137,10 @@ export let load_console_formatter_$x_ = () => {
137
137
  if (obj instanceof CalcitMap || obj instanceof CalcitSliceMap) {
138
138
  let preview = "";
139
139
  let hasCollection = false;
140
- for (let [k, v] of obj.pairs()) {
140
+ let pairs = obj.pairs();
141
+ for (let idx = 0; idx < pairs.length; idx++) {
142
+ let k = pairs[idx][0];
143
+ let v = pairs[idx][1];
141
144
  preview += " ";
142
145
  if (isLiteral(k) && isLiteral(v)) {
143
146
  preview += `(${saveString(k)} ${saveString(v)})`;
@@ -306,7 +309,8 @@ export let load_console_formatter_$x_ = () => {
306
309
  }
307
310
  });
308
311
  for (let idx = 0; idx < pairs.length; idx++) {
309
- let [k, v] = pairs[idx];
312
+ let k = pairs[idx][0];
313
+ let v = pairs[idx][1];
310
314
  ret.push(
311
315
  tr(
312
316
  {},
@@ -124,7 +124,8 @@ export let to_cirru_edn = (x: CalcitValue): CirruEdnFormat => {
124
124
  }
125
125
  });
126
126
  for (let idx = 0; idx < pairs_buffer.length; idx++) {
127
- let [k, v] = pairs_buffer[idx];
127
+ let k = pairs_buffer[idx][0];
128
+ let v = pairs_buffer[idx][1];
128
129
  buffer.push([to_cirru_edn(k), to_cirru_edn(v)]);
129
130
  }
130
131
  return buffer;
package/ts-src/js-map.mts CHANGED
@@ -70,7 +70,8 @@ export class CalcitMap {
70
70
  let itemsCode = "";
71
71
  let pairs = this.pairs();
72
72
  for (let idx = 0; idx < pairs.length; idx++) {
73
- let [k, v] = pairs[idx];
73
+ let k = pairs[idx][0];
74
+ let v = pairs[idx][1];
74
75
  if (shorter) {
75
76
  let keyPart = isNestedCalcitData(k) ? tipNestedCalcitData(k) : toString(k, true, disableJsDataWarning);
76
77
  let valuePart = isNestedCalcitData(v) ? tipNestedCalcitData(v) : toString(v, true, disableJsDataWarning);
@@ -177,7 +178,10 @@ export class CalcitMap {
177
178
 
178
179
  /** detecthing in custom formatter */
179
180
  nestedDataInChildren() {
180
- for (let [k, v] of this.pairs()) {
181
+ let pairs = this.pairs();
182
+ for (let idx = 0; idx < pairs.length; idx++) {
183
+ let k = pairs[idx][0];
184
+ let v = pairs[idx][1];
181
185
  if (!isLiteral(k) || !isLiteral(v)) {
182
186
  return true;
183
187
  }
@@ -267,7 +271,8 @@ export class CalcitSliceMap {
267
271
  let itemsCode = "";
268
272
  let pairs = this.pairs();
269
273
  for (let idx = 0; idx < pairs.length; idx++) {
270
- let [k, v] = pairs[idx];
274
+ let k = pairs[idx][0];
275
+ let v = pairs[idx][1];
271
276
  if (shorter) {
272
277
  let keyPart = isNestedCalcitData(k) ? tipNestedCalcitData(k) : toString(k, true, disableJsDataWarning);
273
278
  let valuePart = isNestedCalcitData(v) ? tipNestedCalcitData(v) : toString(v, true, disableJsDataWarning);
@@ -381,7 +386,10 @@ export class CalcitSliceMap {
381
386
 
382
387
  /** detecthing in custom formatter */
383
388
  nestedDataInChildren() {
384
- for (let [k, v] of this.pairs()) {
389
+ let pairs = this.pairs();
390
+ for (let idx = 0; idx < pairs.length; idx++) {
391
+ let k = pairs[idx][0];
392
+ let v = pairs[idx][1];
385
393
  if (!isLiteral(k) || !isLiteral(v)) {
386
394
  return true;
387
395
  }
@@ -188,7 +188,8 @@ export let _$n_record_$o_from_map = (proto: CalcitValue, data: CalcitValue): Cal
188
188
  let pairs_buffer: Array<[CalcitTag, CalcitValue]> = [];
189
189
  let pairs = data.pairs();
190
190
  for (let i = 0; i < pairs.length; i++) {
191
- let [k, v] = pairs[i];
191
+ let k = pairs[i][0];
192
+ let v = pairs[i][1];
192
193
  pairs_buffer.push([castTag(k), v]);
193
194
  }
194
195
  // mutable sort