Copyright (C) 1992, Digital Equipment Corporation                         
 All rights reserved.                                                      
 See the file COPYRIGHT for a full description.                            
                                                                           
 Last modified on Wed Jun 21 17:40:54 PDT 1995 by heydon                   
INTERFACE ExternalProc;
 Types and procedures for defining Juno modules implemented by external
   procedures. 
IMPORT View, JunoAST, JunoScope, JunoRT;
TYPE
  Closure = JunoRT.ExternalCode BRANDED "ExternalProc.Closure" OBJECT
    rt: View.Root
  END;
  (* A closure is the object passed to external procedures. *)
PROCEDURE SetupBind(mod: JunoAST.Id; scp: JunoScope.T; rt: View.Root := NIL);
 This module maintains a current root, a current module name, and a current
   scope to be used by the Bind procedure below. Set the current root to
   rt, the current module name to mod, and the current scope to scp. 
PROCEDURE Bind(name: JunoAST.Id; cl: Closure; in, out := 0);
 Allocate a slot in the external code table for the procedure named
   <mod>.<name> (where <mod> is the current module); set cl.rt to the
   current root; and bind name to a procedure entity with in IN
   parameters, 0 INOUT parameters, and out OUT parameters in the current
   scope. 
END ExternalProc.