debug_compile( 0, "set" );
debug_compile( 0, "set", frame);
compile_set(    PARSE   *parse,    FRAME *frame ){    LIST    *nt = (*parse->left->func)( parse->left, frame );    LIST    *ns = (*parse->right->func)( parse->right, frame );    LIST    *l;    int setflag;    char    *trace;    switch( parse->num )    {    case ASSIGN_SET:    setflag = VAR_SET; trace = "="; break;    case ASSIGN_APPEND: setflag = VAR_APPEND; trace = "+="; break;    case ASSIGN_DEFAULT:    setflag = VAR_DEFAULT; trace = "?="; break;    default:        setflag = VAR_SET; trace = ""; break;    }    if( DEBUG_COMPILE )    {        debug_compile( 0, "set" );        list_print( nt );        printf( " %s ", trace );        list_print( ns );        printf( "\n" );    }    /* Call var_set to set variable */    /* var_set keeps ns, so need to copy it */    for( l = nt; l; l = list_next( l ) )        var_set( l->string, list_copy( L0, ns ), setflag );    list_free( nt );    return ns;}