summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/js/htdocs/util.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-cpp/trunk/modules/js/htdocs/util.js27
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();
+}
+