rem: var t = typeof o[i]; 
add: try { t = typeof o[i]; } catch (ex) { t = "ERROR"; }  
context: function dumpObjectTree (o, recurse, compress, level){    var s = "";    var pfx = "";    if (typeof recurse == "undefined")        recurse = 0;    if (typeof level == "undefined")        level = 0;    if (typeof compress == "undefined")        compress = true;        for (var i = 0; i < level; i++)        pfx += (compress) ? "| " : "|  ";    var tee = (compress) ? "+ " : "+- ";    for (i in o)    {                var t = typeof o[i];        switch (t)        {            case "function":                var sfunc = String(o[i]).split("\n");                if (sfunc[2] == "    [native code]")                    sfunc = "[native code]";                else                    if (sfunc.length == 1)                        sfunc = String(sfunc);                    else                        sfunc = sfunc.length + " lines";                s += pfx + tee + i + " (function) " + sfunc + "\n";                break;            case "object":                s += pfx + tee + i + " (object)\n";                if (!compress)                    s += pfx + "|\n";                if ((i != "parent") && (recurse))                    s += dumpObjectTree (o[i], recurse - 1,                                         compress, level + 1);                break;            case "string":                if (o[i].length > 200)                    s += pfx + tee + i + " (" + t + ") " +                         o[i].length + " chars\n";                else                    s += pfx + tee + i + " (" + t + ") '" + o[i] + "'\n";                break;            default:                s += pfx + tee + i + " (" + t + ") " + o[i] + "\n";                        }        if (!compress)            s += pfx + "|\n";    }    s += pfx + "*\n";        return s;    }
meta: 3298	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/3298/59e843d40ffead32f06104da312454ce9bc5bf5a/utils.js/buggy/js/lib/utils.js