} else if (arg->tn_op == AMPER && arg->tn_left->tn_op == STRING && arg->tn_left->tn_strg->st_tspec == CHAR) {  outchar('s'); outint(n); outfstrg(arg->tn_left->tn_strg);
} else { if (arg->tn_op == CVT && !arg->tn_cast) arg = arg->tn_left; if (arg->tn_op == AMPER && arg->tn_left->tn_op == STRING && arg->tn_left->tn_strg->st_tspec == CHAR) {  outchar('s'); outint(n); outfstrg(arg->tn_left->tn_strg); }
outcall(tn, rvused, rvdisc)	tnode_t	*tn;	int	rvused, rvdisc;{	tnode_t	*args, *arg;	int	narg, n, i;	quad_t	q;	tspec_t	t;	/* reset buffer */	outclr();	/*	 * line number of .c source, 'c' for function call, Id of current	 * source (.c or .h), and line in current source	 */	outint(csrc_pos.p_line);	outchar('c');	outint(getfnid(curr_pos.p_file));	outchar('.');	outint(curr_pos.p_line);	/*	 * flags; 'u' and 'i' must be last to make sure a letter	 * is between the numeric argument of a flag and the name of	 * the function	 */	narg = 0;	args = tn->tn_right;	for (arg = args; arg != NULL; arg = arg->tn_right)		narg++;	/* informations about arguments */	for (n = 1; n <= narg; n++) {		/* the last argument is the top one in the tree */		for (i = narg, arg = args; i > n; i--, arg = arg->tn_right) ;		arg = arg->tn_left;		if (arg->tn_op == CON) {			if (isityp(t = arg->tn_type->t_tspec)) {				/*				 * XXX it would probably be better to				 * explizitly test the sign				 */				if ((q = arg->tn_val->v_quad) == 0) {					/* zero constant */					outchar('z');				} else if (msb(q, t, 0) == 0) {					/* positive if casted to signed */					outchar('p');				} else {					/* negative if casted to signed */					outchar('n');				}				outint(n);			}		} else if (arg->tn_op == AMPER &&			   arg->tn_left->tn_op == STRING &&			   arg->tn_left->tn_strg->st_tspec == CHAR) {			/* constant string, write all format specifiers */			outchar('s');			outint(n);			outfstrg(arg->tn_left->tn_strg);		}	}	/* return value discarded/used/ignored */	outchar(rvdisc ? 'd' : (rvused ? 'u' : 'i'));	/* name of the called function */	outname(tn->tn_left->tn_left->tn_sym->s_name);	/* types of arguments */	outchar('f');	outint(narg);	for (n = 1; n <= narg; n++) {		/* the last argument is the top one in the tree */		for (i = narg, arg = args; i > n; i--, arg = arg->tn_right) ;		outtype(arg->tn_left->tn_type);	}	/* expected type of return value */	outtype(tn->tn_type);}