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;

  Closure = JunoRT.ExternalCode BRANDED "ExternalProc.Closure" OBJECT
    rt: View.Root
  (* 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.

interface View is in: