LIST    *nt = (*parse->left->func)( parse->left, frame ); LIST    *ns = (*parse->third->func)( parse->third, frame ); LIST    *targets = (*parse->right->func)( parse->right, frame );
LIST    *nt = parse_evaluate( parse->left, frame ); LIST    *ns = parse_evaluate( parse->third, frame ); LIST    *targets = parse_evaluate( parse->right, frame );
compile_settings(    PARSE   *parse,    FRAME *frame ){    LIST    *nt = (*parse->left->func)( parse->left, frame );    LIST    *ns = (*parse->third->func)( parse->third, frame );    LIST    *targets = (*parse->right->func)( parse->right, frame );    LIST    *ts;    int append = parse->num == ASSIGN_APPEND;    if( DEBUG_COMPILE )    {        debug_compile( 0, "set" );        list_print( nt );        printf( "on " );        list_print( targets );        printf( " %s ", append ? "+=" : "=" );        list_print( ns );        printf( "\n" );    }    /* Call addsettings to save variable setting */    /* addsettings keeps ns, so need to copy it */    /* Pass append flag to addsettings() */    for( ts = targets; ts; ts = list_next( ts ) )    {        TARGET  *t = bindtarget( ts->string );        LIST    *l;        for( l = nt; l; l = list_next( l ) )        t->settings = addsettings( t->settings, append,                 l->string, list_copy( (LIST*)0, ns ) );    }    list_free( nt );    list_free( targets );    return ns;}