if (s.charAt(1) == '$') { b.append(s.substring(2));
int j = s.indexOf('$'); if (j >= 0) { b.append(s.substring(j+1));
String trace() {    String f = this.tfmt();			// trace format    StringBuffer b = new StringBuffer();	// output buffer    for (int i = 0; i < f.length(); i++) {	// scan format        char c = f.charAt(i);        if (c == '$') {				// if $x            c = f.charAt(++i);			// get x                if (c == '0') {			// $0: proc/func name                String s = this.getClass().getName();                if (s.charAt(1) == '$') {	// should be [pf]$xxxxx format                    b.append(s.substring(2));                } else {			// no, use full class name                    b.append(s);                }                } else if (c > '0' && c <= '9') {	// $n: one arg                b.append(getarg((int)c - '1'));                } else if (c == '*') {		// $*: all ags, comma-separated                if (arguments != null && arguments.length > 0) {                    b.append(getarg(0));                    for (int j = 1; j < arguments.length; j++) {                        b.append(',').append(getarg(j));                    }                }                } else {                b.append(c);			// $<unknown>: just copy            }            } else {            b.append(c);			// not $; use as is        }    }    if (parent != null && parent.file != null) {        b.append(" from line " + parent.line + " in " + parent.file);    }    return b.toString();}