<> <> <> <<>> DIRECTORY Imager, ImagerCompile, ImagerMemory; <<>> ImagerCompileImpl: CEDAR PROGRAM IMPORTS Imager, ImagerMemory EXPORTS ImagerCompile ~ BEGIN Context: TYPE ~ Imager.Context; CompiledImage: TYPE ~ REF CompiledImageRep; CompiledImageRep: PUBLIC TYPE ~ RECORD [ memory: Context ]; <> <> <<. . .>> <<];>> <<>> MakeCompiledImage: PUBLIC PROC [action: PROC [Context]] RETURNS [CompiledImage] ~ { context: Context ~ ImagerMemory.NewMemoryContext[]; action[context]; RETURN [NEW[CompiledImageRep _ [memory: context]]] }; Execute: PUBLIC PROC [context: Imager.Context, compiledImage: CompiledImage] ~ { IF compiledImage.memory = NIL THEN ERROR Imager.Error[[$ClientBug, "Attempt to execute compiled image that has been destroyed"]]; ImagerMemory.Replay[c: compiledImage.memory, into: context]; }; Destroy: PUBLIC PROC [compiledImage: CompiledImage] ~ { compiledImage.memory _ NIL; }; END.