On Thu, 22 May 2008, Bill Dunlap wrote:

> Also, if your input starts with certain errors, parse returns
> the stuff after the error:
>    > parse()
>    ?err//one
>    expression(one)
>
>
> After the attached change we get
>
>    > parse()
>    ?one
>    expression(one)
>    > parse(n=2)
>    ?one;two;three
>    expression(one, two)
>    > parse()
>    ?err//one
>    Error in parse() : unexpected '/' in "err//"
>
> Index: gram.y
> ===================================================================
> --- gram.y    (revision 45762)
> +++ gram.y    (working copy)
> @@ -1389,8 +1389,6 @@
>           if (c == ';' || c == '\n') break;
>       }
>
> -     rval = R_Parse1Buffer(buffer, 1, status);
> -
>       /* Was a call to R_Parse1Buffer, but we don't want to reset xxlineno 
> and xxcolno */
>       ParseInit();
>       ParseContextInit();

The bug arose 2008-02-14, revision 44472, src/main/gram.y,
where it looks like it was intended that the call to
R_Parse1Buffer be replaced by most of the contents of
R_Parse1Buffer, but the the call itself was not removed
(the comment says it was).  My change makes the comment
true.

@@ -1400,6 +1406,12 @@

        rval = R_Parse1Buffer(buffer, 1, status);

+       /* Was a call to R_Parse1Buffer, but we don't want to reset xxlineno 
and x
xcolno */
+       ParseInit();
+       ParseContextInit();
+       R_Parse1(status);
+        rval = R_CurrentExpr;
+
        switch(*status) {

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to