rem: if (s.length != 0) 
add: if( s.length != 0 ) 
context: function CallStack(depth){	/** 	 * @@attrib Array<String>	 * The array with the stack. 	 */	this.mStack = new Array();	/** @@method Function	 *  Retrieve the caller of a function.	 *  @return The caller as Function.	 **/	function getCaller( fn )	{		if( fn.caller !== undefined )			return fn.caller;		if( fn.arguments !== undefined && fn.arguments.caller !== undefined )			return fn.arguments.caller;					return undefined;	}	/**	 * @@method String     * Retrieve call stack as string.	 * @return The call stack as string.	 **/	function toString()	{		var s = new String();		for( var i = 1; i <= this.mStack.length; ++i )		{			if (s.length != 0)				s += "\n";			s += i.toString() + ": " + this.mStack[i-1];		}		return s;	}	this.getCaller = getCaller;	this.toString = toString;	// set stack depth to default	if( depth == null )		depth = 10;	var fn = this.getCaller( CallStack );	if( fn === undefined )	{		this.mStack[this.mStack.length] = 			"[CallStack information not supported]";	}	else	{		while( fn != null && depth > 0 )		{			s = new String( fn );			--depth;				// Extract function name and argument list			var r = /function (\w+)([^\{\}]*\))/;			r.exec( s );			var f = new String( RegExp.$1 );			var args = new String( RegExp.$2 );			this.mStack[this.mStack.length] = f + args;				// Retrieve caller function			if( fn == this.getCaller( fn ))			{				this.mStack[this.mStack.length] = "[JavaScript recursion]";				break;			}			else				fn = this.getCaller( fn );		}			if( fn == null )		{			this.mStack[this.mStack.length] = "[JavaScript engine]";		}	}}
meta: 8928	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/8928/768c9d05d44318954f6a9ac3ebfad030ccd6c207/JsUtil.js/buggy/trunk/jsunit/lib/JsUtil.js