Revision: 472 http://rpy.svn.sourceforge.net/rpy/?rev=472&view=rev Author: lgautier Date: 2008-03-28 14:00:07 -0700 (Fri, 28 Mar 2008)
Log Message: ----------- Fix __setitem__ for STRSXP vectors. Modified Paths: -------------- branches/rpy_nextgen/rpy/rinterface/rinterface.c branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py Modified: branches/rpy_nextgen/rpy/rinterface/rinterface.c =================================================================== --- branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-28 20:35:53 UTC (rev 471) +++ branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-28 21:00:07 UTC (rev 472) @@ -790,6 +790,7 @@ return -1; } + SEXP sexp_copy; i_R = (R_len_t)i; switch (TYPEOF(*sexp)) { case REALSXP: @@ -805,10 +806,12 @@ (COMPLEX_POINTER(*sexp))[i_R] = (COMPLEX_POINTER(*sexp_val))[0]; break; case STRSXP: - SET_STRING_ELT(*sexp, i_R, *sexp_val); + SET_STRING_ELT(*sexp, i_R, STRING_ELT(*sexp_val, 0)); break; case VECSXP: - SET_VECTOR_ELT(*sexp, i_R, *sexp_val); + PROTECT(sexp_copy = Rf_duplicate(*sexp_val)); + SET_VECTOR_ELT(*sexp, i_R, sexp_copy); + UNPROTECT(1); break; default: PyErr_Format(PyExc_ValueError, "cannot handle type %d", Modified: branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py =================================================================== --- branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py 2008-03-28 20:35:53 UTC (rev 471) +++ branches/rpy_nextgen/rpy/rinterface/tests/test_SexpVector.py 2008-03-28 21:00:07 UTC (rev 472) @@ -168,8 +168,10 @@ self.assertTrue(myVec[2][0][0] == "a") def testAssignItemString(self): - letters_R = rinterface.globalEnv.get("letters") - #letters_R[0] = rinterface.SexpVector(["z", ], rinterface.STRSXP) + letters_R = rinterface.SexpVector("abcdefghij", rinterface.STRSXP) + self.assertRaises(ValueError, letters_R.__setitem__, 0, rinterface.SexpVector([1, ], rinterface.INTSXP)) + + letters_R[0] = rinterface.SexpVector(["z", ], rinterface.STRSXP) #import pdb; pdb.set_trace() self.assertTrue(letters_R[0] == "z") #FIXME: segfault when assigning value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ rpy-list mailing list rpy-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rpy-list