diff options
Diffstat (limited to 'sca-cpp/trunk/modules/js/htdocs/util.js')
-rw-r--r-- | sca-cpp/trunk/modules/js/htdocs/util.js | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/sca-cpp/trunk/modules/js/htdocs/util.js b/sca-cpp/trunk/modules/js/htdocs/util.js index 0f966b180e..b90c96db2d 100644 --- a/sca-cpp/trunk/modules/js/htdocs/util.js +++ b/sca-cpp/trunk/modules/js/htdocs/util.js @@ -65,14 +65,8 @@ function reverse(l) { } function isNil(v) { - if (v == null) + if (v == null || typeof v == 'undefined' || (v.constructor == Array && v.length == 0)) return true; - if ('' + v == 'undefined') - return true; - try { - if (isList(v) && v.length == 0) - return true; - } catch (e) {} return false; } @@ -89,10 +83,8 @@ function isString(v) { } function isList(v) { - try { - if (v.constructor == Array) - return true; - } catch (e) {} + if (v != null && typeof v != 'undefined' && v.constructor == Array) + return true; return false; } @@ -102,7 +94,11 @@ function isTaggedList(v, t) { return false; } +var emptylist = new Array(); + function mklist() { + if (arguments.length == 0) + return emptylist; var a = new Array(); for (i = 0; i < arguments.length; i++) a[i] = arguments[i]; @@ -206,3 +202,12 @@ function writeValue(v) { return '(' + writeValue(car(v)) + writeList(cdr(v)) + ')'; } +/** + * Apply a function and memoize its result. + */ +function memo(obj, key, f) { + if (obj[key]) + return obj[key]; + return obj[key] = f(); +} + |