Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 011b18c

Browse files
committedOct 31, 2014
[snapshot]
1 parent 59ada98 commit 011b18c

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed
 

‎Rakefile

-3
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ task :mspec_node do
4141

4242
if pattern
4343
custom = Dir[pattern]
44-
p custom.size
45-
p rubyspecs.grep /hash/
4644
custom &= rubyspecs if whitelist_pattern
47-
p whitelist_pattern, custom.size
4845
specs = add_specs.(:custom, custom)
4946
else
5047
specs = add_specs.(:shared, shared)

‎opal/corelib/hash.rb

+41-13
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,22 @@ def ==(other)
3535
return true;
3636
}
3737
38-
if (!other.keys || !other.smap || !other.smap) {
38+
if (!other.keys || !other.smap || !other.map) {
3939
return false;
4040
}
4141
4242
if (self.keys.length !== other.keys.length) {
4343
return false;
4444
}
4545
46-
var _map = self.map,
47-
_map2 = other.map,
46+
var _map = self.map,
4847
smap = self.smap,
48+
_map2 = other.map,
4949
smap2 = other.smap,
5050
map, map2, key, khash, value, value2;
5151
5252
for (var i = 0, length = self.keys.length; i < length; i++) {
53-
key = self.keys[i];
53+
key = self.keys[i];
5454
5555
if (key.$$is_string) {
5656
khash = key;
@@ -63,6 +63,7 @@ def ==(other)
6363
}
6464
6565
value = map[khash];
66+
if (value === undefined) console.log('==', key, self);
6667
value2 = map2[khash];
6768
6869
if (value2 === undefined || #{not(`value` == `value2`)}) {
@@ -387,7 +388,17 @@ def empty?
387388

388389
def fetch(key, defaults = undefined, &block)
389390
%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];
391402
392403
if (value != null) {
393404
return value;
@@ -520,13 +531,22 @@ def index(object)
520531
def indexes(*keys)
521532
%x{
522533
var result = [],
523-
map = self.map,
524-
key, hash, value;
534+
_map = self.map,
535+
smap = self.smap,
536+
map, key, khash, value;
525537
526538
for (var i = 0, length = keys.length; i < length; i++) {
527539
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];
530550
531551
if (value != null) {
532552
result.push(value);
@@ -589,22 +609,30 @@ def invert
589609
keys2 = result.keys,
590610
_map2 = result.map,
591611
smap2 = result.smap,
592-
map, map2, key, khash;
612+
map, map2, key, khash, value;
593613
594614
for (var i = 0, length = keys.length; i < length; i++) {
595615
key = keys[i];
596616
597617
if (key.$$is_string) {
598618
map = smap;
599-
map2 = smap2;
600619
khash = key;
601620
} else {
602621
map = _map;
603-
map2 = _map2;
604622
khash = key.$hash();
605623
}
606624
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+
608636
map2[khash] = key;
609637
}
610638

0 commit comments

Comments
 (0)
Please sign in to comment.