Using NULLLAM
02-19-2014, 09:26 PM (This post was last modified: 02-19-2014 09:26 PM by David Hayden.)
Post: #1
 David Hayden Senior Member Posts: 411 Joined: Dec 2013
Using NULLLAM
I've recently seen code like this in two different places:
Code:
    %1 %2 %3 %4 %5    NULLLAM #5 NDUPN DOBIND
I was the impression that when using DOBIND, the LAMs had to be quoted like this:
Code:
    %1 %2 %3 %4 %5    ' NULLLAM #5 NDUPN DOBIND
If you just execute NULLLAM, it appears to push a very small pointer on the stack. Also Chapter 13 of RPLMAN says "Executing an unbound temporary identifier object is
an error condition."

So everything I've seen indicates that one should quote NULLLAM when binding it, but I've run across two cases that don't, and that leads me to wonder if I'm wrong. Can anyone shed some light on this?

Thanks,
Dave
02-19-2014, 09:57 PM
Post: #2
 Raymond Del Tondo Member Posts: 289 Joined: Dec 2013
RE: Using NULLLAM
Usually the word before NULLLAM performs a quote.
This can be a combined word like DUP'

-- Ray
02-20-2014, 02:03 AM (This post was last modified: 02-20-2014 03:26 AM by DavidM.)
Post: #3
 DavidM Senior Member Posts: 910 Joined: Dec 2013
RE: Using NULLLAM
(02-19-2014 09:26 PM)David Hayden Wrote:  I've recently seen code like this in two different places:
Code:
    %1 %2 %3 %4 %5    NULLLAM #5 NDUPN DOBIND
I was the impression that when using DOBIND, the LAMs had to be quoted like this:
Code:
    %1 %2 %3 %4 %5    ' NULLLAM #5 NDUPN DOBIND
If you just execute NULLLAM, it appears to push a very small pointer on the stack. Also Chapter 13 of RPLMAN says "Executing an unbound temporary identifier object is
an error condition."

So everything I've seen indicates that one should quote NULLLAM when binding it, but I've run across two cases that don't, and that leads me to wonder if I'm wrong. Can anyone shed some light on this?

Thanks,
Dave

Interesting.

The construct you quoted above without the tick is the way I normally do it when I've got more than a couple LAMs to bind. This method is taken directly from page 115 in the Kalinowski/Dominik SysRPL documentation. In that document, the reference info for the NULLLAM object simply shows it putting NULLLAM on the stack, and not attempting to execute anything. Furthermore, the documentation states that BIND will actually work with any ROM-pointer on the stack (ie. not just NULLLAM). Though I've never tried anything other than NULLLAM, I have no reason to doubt their assertion.

I've got quite a few SysRPL code objects that use this method, and I've never had any problems binding LAMs that way. I've never seen any evidence that the tick is needed.

Edit: I just took a look at chapter 13 of RPLMAN and noticed (at the bottom of page 60) the following construct:

NULLLAM TWENTYFOUR NDUPN
{}N BIND

Although it uses {}N BIND instead of DOBIND, the preceding commands use the "unticked" NULLLAM as well. This would seem to confirm that no tick is needed.
02-20-2014, 08:40 AM
Post: #4
 Raymond Del Tondo Member Posts: 289 Joined: Dec 2013
RE: Using NULLLAM
(02-20-2014 02:03 AM)DavidM Wrote:  NULLLAM TWENTYFOUR NDUPN DOBIND
This works because the pointer to the "nullnamed name" object will never be used. It's just a dummy pointer, which will be stored in the appriorate TEMPENV slots associated to the LAMs.

-- Ray
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)