The R Project SVN R

Rev

Rev 65019 | Rev 66495 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 65019 Rev 66289
Line 1499... Line 1499...
1499
	    for (i = 0; i < nans; i++)
1499
	    for (i = 0; i < nans; i++)
1500
		SET_STRING_ELT(ans, i, STRING_ELT(vals, i % lendat));
1500
		SET_STRING_ELT(ans, i, STRING_ELT(vals, i % lendat));
1501
	break;
1501
	break;
1502
    case VECSXP:
1502
    case VECSXP:
1503
    case EXPRSXP:
1503
    case EXPRSXP:
-
 
1504
#ifdef SWITCH_TO_REFCNT
1504
	if (nans && lendat)
1505
	if (nans && lendat)
1505
	    for (i = 0; i < nans; i++)
1506
	    for (i = 0; i < nans; i++)
1506
		SET_VECTOR_ELT(ans, i, VECTOR_ELT(vals, i % lendat));
1507
		SET_VECTOR_ELT(ans, i, VECTOR_ELT(vals, i % lendat));
-
 
1508
#else
-
 
1509
	if (nans && lendat) {
-
 
1510
	    /* Need to guard against possible sharing of values under
-
 
1511
	       NAMED.  This is not needed with reference
-
 
1512
	       coutning. (PR#15919) */
-
 
1513
	    Rboolean needsmark = (lendat < nans || MAYBE_REFERENCED(vals));
-
 
1514
	    for (i = 0; i < nans; i++) {
-
 
1515
		SEXP elt = VECTOR_ELT(vals, i % lendat);
-
 
1516
		if (needsmark || MAYBE_REFERENCED(elt))
-
 
1517
		    MARK_NOT_MUTABLE(elt);
-
 
1518
		SET_VECTOR_ELT(ans, i, elt);
-
 
1519
	    }
-
 
1520
	}
-
 
1521
#endif
1507
	break;
1522
	break;
1508
    default:
1523
    default:
1509
	// excluded above
1524
	// excluded above
1510
	break;
1525
	break;
1511
    }
1526
    }