Skip to content

Commit fbf5763

Browse files
author
Tkachuk Ilya
committed
fix some bugs on operating with funcs
1 parent e02fbd2 commit fbf5763

File tree

3 files changed

+83
-70
lines changed

3 files changed

+83
-70
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ And some simple boolean functions
3636
WARNING
3737
-------
3838

39-
Avoid cyclic references!!!
39+
Cyclic references always gives stack overflow!!!

imuta.coffee

+21-25
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,32 @@ window.Imuta = {
66
when "[object Boolean]" then some
77
when "[object Number]" then some
88
when "[object String]" then some
9-
when "[object Function]" then some.bind({})
9+
when "[object Function]" then new () -> some
1010
when "[object Null]" then null
1111
when "[object Array]" then some.map (el) -> Imuta.clone(el)
1212
when "[object Object]" then Object.keys(some).reduce ((acc, k) -> acc[Imuta.clone(k)] = Imuta.clone(some[k]); acc), {}
1313
equal: (a, b) ->
14-
[type_a, type_b] = [Object.prototype.toString.call(a), Object.prototype.toString.call(b)]
15-
if type_a == type_b
16-
switch type_a
17-
when "[object Undefined]" then a == b
18-
when "[object Boolean]" then a == b
19-
when "[object Number]" then a == b
20-
when "[object String]" then a == b
21-
when "[object Function]" then a.toString() == b.toString()
22-
when "[object Null]" then a == b
23-
when "[object Array]"
24-
len_a = a.length
25-
len_b = b.length
26-
if len_a == len_b
27-
[0..len_a].every (n) -> Imuta.equal(a[n], b[n])
28-
else
29-
false
30-
when "[object Object]"
31-
keys_a = Object.keys(a).sort()
32-
keys_b = Object.keys(b).sort()
33-
if Imuta.equal(keys_a, keys_b)
34-
keys_a.every (k) -> Imuta.equal(a[k], b[k])
35-
else
36-
false
14+
if a == b
15+
true
3716
else
38-
false
17+
[type_a, type_b] = [Object.prototype.toString.call(a), Object.prototype.toString.call(b)]
18+
if type_a == type_b
19+
switch type_a
20+
when "[object Undefined]" then true
21+
when "[object Boolean]" then a == b
22+
when "[object Number]" then a == b
23+
when "[object String]" then a == b
24+
when "[object Function]" then false
25+
when "[object Null]" then true
26+
when "[object Array]"
27+
len_a = a.reduce(((acc, _) -> acc+1), 0)
28+
len_b = b.reduce(((acc, _) -> acc+1), 0)
29+
if (len_a == len_b) then [0..len_a].every (n) -> Imuta.equal(a[n], b[n]) else false
30+
when "[object Object]"
31+
[keys_a, keys_b] = [a,b].map((obj) -> lst = []; lst.push(k) for k, _ of obj; lst.sort() )
32+
if Imuta.equal(keys_a, keys_b) then keys_a.every (k) -> Imuta.equal(a[k], b[k]) else false
33+
else
34+
false
3935
is_undefined: (some) -> Object.prototype.toString.call(some) == "[object Undefined]"
4036
is_boolean: (some) -> Object.prototype.toString.call(some) == "[object Boolean]"
4137
is_number: (some) -> Object.prototype.toString.call(some) == "[object Number]"

imuta.js

+61-44
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)