@@ -35,22 +35,22 @@ def ==(other)
35
35
return true;
36
36
}
37
37
38
- if (!other.keys || !other.smap || !other.smap ) {
38
+ if (!other.keys || !other.smap || !other.map ) {
39
39
return false;
40
40
}
41
41
42
42
if (self.keys.length !== other.keys.length) {
43
43
return false;
44
44
}
45
45
46
- var _map = self.map,
47
- _map2 = other.map,
46
+ var _map = self.map,
48
47
smap = self.smap,
48
+ _map2 = other.map,
49
49
smap2 = other.smap,
50
50
map, map2, key, khash, value, value2;
51
51
52
52
for (var i = 0, length = self.keys.length; i < length; i++) {
53
- key = self.keys[i];
53
+ key = self.keys[i];
54
54
55
55
if (key.$$is_string) {
56
56
khash = key;
@@ -63,6 +63,7 @@ def ==(other)
63
63
}
64
64
65
65
value = map[khash];
66
+ if (value === undefined) console.log('==', key, self);
66
67
value2 = map2[khash];
67
68
68
69
if (value2 === undefined || #{ not( `value` == `value2` ) } ) {
@@ -387,7 +388,17 @@ def empty?
387
388
388
389
def fetch ( key , defaults = undefined , &block )
389
390
%x{
390
- var hash = key.$hash(), value = self.map[hash];
391
+ var map, khash, value;
392
+
393
+ if (key.$$is_string) {
394
+ khash = key;
395
+ map = self.smap;
396
+ } else {
397
+ khash = key.$hash();
398
+ map = self.map;
399
+ }
400
+
401
+ value = map[khash];
391
402
392
403
if (value != null) {
393
404
return value;
@@ -520,13 +531,22 @@ def index(object)
520
531
def indexes ( *keys )
521
532
%x{
522
533
var result = [],
523
- map = self.map,
524
- key, hash, value;
534
+ _map = self.map,
535
+ smap = self.smap,
536
+ map, key, khash, value;
525
537
526
538
for (var i = 0, length = keys.length; i < length; i++) {
527
539
key = keys[i];
528
- hash = key.$hash();
529
- value = map[hash];
540
+
541
+ if (key.$$is_string) {
542
+ khash = key;
543
+ map = smap;
544
+ } else {
545
+ khash = key.$hash();
546
+ map = _map;
547
+ }
548
+
549
+ value = map[khash];
530
550
531
551
if (value != null) {
532
552
result.push(value);
@@ -589,22 +609,30 @@ def invert
589
609
keys2 = result.keys,
590
610
_map2 = result.map,
591
611
smap2 = result.smap,
592
- map, map2, key, khash;
612
+ map, map2, key, khash, value ;
593
613
594
614
for (var i = 0, length = keys.length; i < length; i++) {
595
615
key = keys[i];
596
616
597
617
if (key.$$is_string) {
598
618
map = smap;
599
- map2 = smap2;
600
619
khash = key;
601
620
} else {
602
621
map = _map;
603
- map2 = _map2;
604
622
khash = key.$hash();
605
623
}
606
624
607
- keys2.push(map[khash]);
625
+ value = map[khash];
626
+ keys2.push(value);
627
+
628
+ if (value.$$is_string) {
629
+ map2 = smap2;
630
+ khash = value;
631
+ } else {
632
+ map2 = _map2;
633
+ khash = value.$hash();
634
+ }
635
+
608
636
map2[khash] = key;
609
637
}
610
638
0 commit comments