-- JunoBind.mesa
-- June 6, 1983 1:23 pm Greg Nelson

DIRECTORY Lisp, JunoSyntax;

JunoBind: DEFINITIONS =
BEGIN OPEN JS: JunoSyntax;

Alist: TYPE = Lisp.Value;  
 -- An Alist is a list each element of which is either a variable-value pair, or NIL.
 -- The NILs mark contexts that were Pushed; they are ignored by Lookup and used
 -- by Pop. 

Lookup: PUBLIC PROC [v: JS.Variable, al: Alist] 
          RETURNS [Lisp.Value];

Bind: PUBLIC PROC[al: Alist, v: JS.Variable, u: Lisp.Value] 
       RETURNS [newal: Alist];

BindLoop: PUBLIC PROC[al: Alist, al2: Alist] RETURNS [newal: Alist];

Push: PUBLIC PROC [al: Alist] RETURNS [Alist];

Pop: PUBLIC PROC [al: Alist] RETURNS [Alist];

EmptyBinding: PUBLIC PROC RETURNS [Alist];

NewBind: PUBLIC PROC [al: Alist, v: JS.Variable, u: Lisp.Value] 
            RETURNS [newal: Alist];

Extend: PUBLIC PROC [al2, al: Alist] RETURNS [newal: Alist];

InDomain: PUBLIC PROC[arg: JS.Variable, al: Alist] RETURNS [BOOL];

END.