From m|t @end|ng |rom gmx@u@  Fri Apr  5 08:14:40 2019
From: m|t @end|ng |rom gmx@u@ (Mikhail Titov)
Date: Fri, 05 Apr 2019 01:14:40 -0500
Subject: [Rd] Parsing code with newlines
In-Reply-To: <alpine.LFD.1.10.0808041402500.17316@gannet.stats.ox.ac.uk>
 (Brian Ripley's message of "Mon, 4 Aug 2008 14:18:52 +0100 (BST)")
References: <a564fafa0808040550j13fd5097q804fc9549cd4ad55@mail.gmail.com>
 <alpine.LFD.1.10.0808041402500.17316@gannet.stats.ox.ac.uk>
Message-ID: <9q0r2ahx9kf.fsf@gmx.us>

Hello!

This is my first post here. I came across the very same problem.
It can be reproduced within modified tests/Embedding/RParseEval.c

Actually this example has another issue, namely it doesn't wrap
everything in R_ToplevelExec . This is a major show stopper for
newcomers as that function is barely mentioned anywhere and longjmp into
terminated setuploop function followed by R_suicide look like a mystery.

Error: bad value
Fatal error: unable to initialize the JIT


That aside, here is the code with newlines that fails to parse. I hope
it will paste alright here.


#include "embeddedRCall.h"
#include <R_ext/Parse.h>

int
main(int argc, char *argv[])
{
    SEXP e, tmp;
    int hadError;
    ParseStatus status;

    init_R(argc, argv);

    PROTECT(tmp = mkString("\n\r ls()"));
    PROTECT(e = R_ParseVector(tmp, 1, &status, R_NilValue));
    if (status != PARSE_OK)
    {
        printf("boo boo\n");
    }
    else
    {
        PrintValue(e);
        R_tryEval(VECTOR_ELT(e,0), R_GlobalEnv, &hadError);
    }
    UNPROTECT(2);

    end_R();
    return(0);
}


--
Mikhail



[Rd] Parsing code with newlines
Mikhail Titov