(* 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 "." (where 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.