From 39cb4f1cd28706df3ec38b7cfe45ae32ad3e15ef Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Wed, 20 Mar 2013 00:05:58 +0800 Subject: [PATCH] make deepEq work in strict js. --- lib/ast.js | 2 +- src/ast.ls | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ast.js b/lib/ast.js index 23a4bc144..6de9ae86d 100644 --- a/lib/ast.js +++ b/lib/ast.js @@ -4225,7 +4225,7 @@ UTILS = { flip: 'function(f){\n return curry$(function (x, y) { return f(y, x); });\n}', partialize: 'function(f, args, where){\n var context = this;\n return function(){\n var params = slice$.call(arguments), i,\n len = params.length, wlen = where.length,\n ta = args ? args.concat() : [], tw = where ? where.concat() : [];\n for(i = 0; i < len; ++i) { ta[tw[0]] = params[i]; tw.shift(); }\n return len < wlen && len ?\n partialize$.apply(context, [f, ta, tw]) : f.apply(context, ta);\n };\n}', not: 'function(x){ return !x; }', - deepEq: 'function(x, y, type){\n var toString = {}.toString, hasOwnProperty = {}.hasOwnProperty,\n has = function (obj, key) { return hasOwnProperty.call(obj, key); };\n first = true;\n return eq(x, y, []);\n function eq(a, b, stack) {\n var className, length, size, result, alength, blength, r, key, ref, sizeB;\n if (a == null || b == null) { return a === b; }\n if (a.__placeholder__ || b.__placeholder__) { return true; }\n if (a === b) { return a !== 0 || 1 / a == 1 / b; }\n className = toString.call(a);\n if (toString.call(b) != className) { return false; }\n switch (className) {\n case \'[object String]\': return a == String(b);\n case \'[object Number]\':\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case \'[object Date]\':\n case \'[object Boolean]\':\n return +a == +b;\n case \'[object RegExp]\':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != \'object\' || typeof b != \'object\') { return false; }\n length = stack.length;\n while (length--) { if (stack[length] == a) { return true; } }\n stack.push(a);\n size = 0;\n result = true;\n if (className == \'[object Array]\') {\n alength = a.length;\n blength = b.length;\n if (first) { \n switch (type) {\n case \'===\': result = alength === blength; break;\n case \'<==\': result = alength <= blength; break;\n case \'<<=\': result = alength < blength; break;\n }\n size = alength;\n first = false;\n } else {\n result = alength === blength;\n size = alength;\n }\n if (result) {\n while (size--) {\n if (!(result = size in a == size in b && eq(a[size], b[size], stack))){ break; }\n }\n }\n } else {\n if (\'constructor\' in a != \'constructor\' in b || a.constructor != b.constructor) {\n return false;\n }\n for (key in a) {\n if (has(a, key)) {\n size++;\n if (!(result = has(b, key) && eq(a[key], b[key], stack))) { break; }\n }\n }\n if (result) {\n sizeB = 0;\n for (key in b) {\n if (has(b, key)) { ++sizeB; }\n }\n if (first) {\n if (type === \'<<=\') {\n result = size < sizeB;\n } else if (type === \'<==\') {\n result = size <= sizeB\n } else {\n result = size === sizeB;\n }\n } else {\n first = false;\n result = size === sizeB;\n }\n }\n }\n stack.pop();\n return result;\n }\n}', + deepEq: 'function(x, y, type){\n var toString = {}.toString, hasOwnProperty = {}.hasOwnProperty,\n has = function (obj, key) { return hasOwnProperty.call(obj, key); };\n var first = true;\n return eq(x, y, []);\n function eq(a, b, stack) {\n var className, length, size, result, alength, blength, r, key, ref, sizeB;\n if (a == null || b == null) { return a === b; }\n if (a.__placeholder__ || b.__placeholder__) { return true; }\n if (a === b) { return a !== 0 || 1 / a == 1 / b; }\n className = toString.call(a);\n if (toString.call(b) != className) { return false; }\n switch (className) {\n case \'[object String]\': return a == String(b);\n case \'[object Number]\':\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case \'[object Date]\':\n case \'[object Boolean]\':\n return +a == +b;\n case \'[object RegExp]\':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != \'object\' || typeof b != \'object\') { return false; }\n length = stack.length;\n while (length--) { if (stack[length] == a) { return true; } }\n stack.push(a);\n size = 0;\n result = true;\n if (className == \'[object Array]\') {\n alength = a.length;\n blength = b.length;\n if (first) { \n switch (type) {\n case \'===\': result = alength === blength; break;\n case \'<==\': result = alength <= blength; break;\n case \'<<=\': result = alength < blength; break;\n }\n size = alength;\n first = false;\n } else {\n result = alength === blength;\n size = alength;\n }\n if (result) {\n while (size--) {\n if (!(result = size in a == size in b && eq(a[size], b[size], stack))){ break; }\n }\n }\n } else {\n if (\'constructor\' in a != \'constructor\' in b || a.constructor != b.constructor) {\n return false;\n }\n for (key in a) {\n if (has(a, key)) {\n size++;\n if (!(result = has(b, key) && eq(a[key], b[key], stack))) { break; }\n }\n }\n if (result) {\n sizeB = 0;\n for (key in b) {\n if (has(b, key)) { ++sizeB; }\n }\n if (first) {\n if (type === \'<<=\') {\n result = size < sizeB;\n } else if (type === \'<==\') {\n result = size <= sizeB\n } else {\n result = size === sizeB;\n }\n } else {\n first = false;\n result = size === sizeB;\n }\n }\n }\n stack.pop();\n return result;\n }\n}', split: "''.split", replace: "''.replace", toString: '{}.toString', diff --git a/src/ast.ls b/src/ast.ls index 1c16077be..c77f02ea0 100644 --- a/src/ast.ls +++ b/src/ast.ls @@ -2702,7 +2702,7 @@ UTILS = deepEq: '''function(x, y, type){ var toString = {}.toString, hasOwnProperty = {}.hasOwnProperty, has = function (obj, key) { return hasOwnProperty.call(obj, key); }; - first = true; + var first = true; return eq(x, y, []); function eq(a, b, stack) { var className, length, size, result, alength, blength, r, key, ref, sizeB;