From seth at userprimary.net  Thu Oct 29 18:56:09 2009
From: seth at userprimary.net (Seth Falcon)
Date: Thu, 29 Oct 2009 10:56:09 -0700
Subject: [Rd] Help with lang4
In-Reply-To: <fc212e850910290738y1a6b901dk611f49b47e0893fa@mail.gmail.com>
References: <fc212e850910290700u4cb2be67n53d7efbfa787e7b6@mail.gmail.com>	
	<4AE9A328.5050305@userprimary.net>
	<fc212e850910290738y1a6b901dk611f49b47e0893fa@mail.gmail.com>
Message-ID: <4AE9D739.2060804@userprimary.net>

On 10/29/09 7:38 AM, Abhijit Bera wrote:
> Can't find the source to Rf_lang* series of functions. :|
>
> But I'm thinking it should be like this correct me if I'm wrong:
>
> PROTECT(e=lang4(install("myfunction"),arg1,arg2,arg3);
> PROTECT(SETCAR(CDR(e),portConstraints));
> PROTECT(portVal=R_tryEval(e,R_GlobalEnv, NULL));

Perhaps I'm misunderstanding your goal, but I do not think this is correct.

After this call:

     > PROTECT(e=lang4(install("myfunction"),arg1,arg2,arg3);

e can be visualized as:

            (myfunction (arg1 (arg2 (arg3 nil))))

If you want to end up with:

            (myfunction (arg1 (arg2 (arg3 (arg4 nil)))))

Then you either will want to build up the pair list from scratch or you 
could use some of the helpers, e.g. (all untested),

            SEXP last = lastElt(e);
            SEXP arg4Elt = lang1(arg4);
            SETCDR(last, arg4Elt);

Reading Rinlinedfuns.h should help some.

+ seth



[Rd] Help with lang4
Seth Falcon