if (OP_NOP(gn->type) && Lst_IsEmpty(gn->commands) &&
if (OP_NOP(gn->type) && Lst_IsEmpty(&gn->commands) &&
Job_CheckCommands(gn, abortProc)    GNode          *gn;	    	    /* The target whose commands need				     * verifying */    void    	 (*abortProc) __P((char *, ...));			/* Function to abort with message */{    if (OP_NOP(gn->type) && Lst_IsEmpty(gn->commands) &&	(gn->type & OP_LIB) == 0) {	/*	 * No commands. Look for .DEFAULT rule from which we might infer	 * commands	 */	if ((DEFAULT != NULL) && !Lst_IsEmpty(DEFAULT->commands)) {	    /*	     * Make only looks for a .DEFAULT if the node was never the	     * target of an operator, so that's what we do too. If	     * a .DEFAULT was given, we substitute its commands for gn's	     * commands and set the IMPSRC variable to be the target's name	     * The DEFAULT node acts like a transformation rule, in that	     * gn also inherits any attributes or sources attached to	     * .DEFAULT itself.	     */	    Make_HandleUse(DEFAULT, gn);	    Var_Set(IMPSRC, Var_Value(TARGET, gn), gn);	} else if (Dir_MTime(gn) == 0) {	    /*	     * The node wasn't the target of an operator we have no .DEFAULT	     * rule to go on and the target doesn't already exist. There's	     * nothing more we can do for this branch. If the -k flag wasn't	     * given, we stop in our tracks, otherwise we just don't update	     * this node's parents so they never get examined.	     */	    static const char msg[] = "make: don't know how to make";	    if (gn->type & OP_OPTIONAL) {		(void) fprintf(stdout, "%s %s(ignored)\n", msg, gn->name);		(void) fflush(stdout);	    } else if (keepgoing) {		(void) fprintf(stdout, "%s %s(continuing)\n", msg, gn->name);		(void) fflush(stdout);  		return FALSE;	    } else {		(*abortProc)("%s %s. Stop", msg, gn->name);		return FALSE;	    }	}    }    return TRUE;}