The issue here is that the current expression is still there and protected if there is a parse problem. So you need one more unprotect.
This does not give a problem in source() (the only internal use) as it throws an error in those cases. (It also uses a different branch of the code with n < 0.) Since this seems to be worrying no one else, I am going to add the unprotect in the source code for R-devel. On Thu, 13 Jul 2006, Martin Morgan wrote: > [this is from R-help, at the end of June] > > Jim Lemon asked about parsing syntactically incorrect versus > incomplete lines, generating a couple of responses. > > Philippe's suggestion isn't robust (e.g., "\nls)". Prof. Ripley's > comment lead me to R_ParseVector (the only exposed parse > routine). Unfortunately, this returns from parsing incomplete or > syntactically incorrect text with a PROTECT stack imbalance, so there > is no natural way to return from a .Call. > > What I'd like is to have access to multiline console input after > parsing but before evaluation, or to return from a .Call like that > below with either the parsed expression or information about the > reason for failure. Any suggestions? > > Thanks in advance, > > Martin > > SEXP parses(SEXP cmd) { > ParseStatus status; > SEXP res; > res = R_ParseVector(cmd, 1, &status); > return res; > } > > /* > .Call("parses", "ls(") */ > /* 25 SEXP res = R_ParseVector(cmd, 1, &status); */ > /* (gdb) p R_PPStackTop */ > /* $1 = 3 */ > /* (gdb) next */ > /* 26 return res; */ > /* (gdb) p R_PPStackTop */ > /* $2 = 5 */ > > R version 2.4.0 Under development (unstable) (2006-07-11 r38560) > x86_64-unknown-linux-gnu > > Philippe Grosjean <[EMAIL PROTECTED]> writes: > > > Well, you haven't used the search engines with the right key: the magic > > words are: > > > > > RSiteSearch("incomplete line") > > > > With the first document being my query (almost two years ago), and the > > second one being Peter Dalgaard answer. You must adapt it to cope with > > internationalization, but basically, you could use something like: > > > > > grep("\n2:",try(parse(textConnection("ls)")), silent = TRUE)) > > numeric(0) > > > grep("\n2:",try(parse(textConnection("ls(")), silent = TRUE)) > > [1] 1 > > From: Prof Brian Ripley <ripley> > Date: Wed, 28 Jun 2006 13:44:49 +0100 (BST) > > On Wed, 28 Jun 2006, Jim Lemon wrote: > > > Hi gurus, > > > > After an unsuccessful scrabble through the documentation and Jon's > > excellent search facility, I am no wiser as to how R recognizes an > > incomplete command line and politely raises its hand for more. The help > > page for parse gives no indication that it does anything more than spit > > the dummy when fed an incomplete command line, but something in there > > must recognize such ellipsis. Any hints? > > It's internal. Look in src/main/main.c, in particular the R_Repl* > functions. In short, R_Parse1Buffer can return PARSE_INCOMPLETE. > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel