-- JunoError.mesa
-- Last Edited by: Gnelson, November 30, 1983 12:49 am

DIRECTORY JunoBind, Rope;

JunoError: DEFINITIONS = {

Frame: TYPE = RECORD [big, medium, little: REF, env: JunoBind.Alist];
-- big, medium, and little are all parse trees, and little occurs in medium which
-- occurs in big.  A frame is displayed by unparsing big and highlighting little.
-- The only purpose of medium is if little is an atom, in which case it may have
-- more than one occurrence in big.  In this case what is highlighted will be the
-- first occurrence of little in medium.
-- (Note that two non-atomic trees that are EQUAL in the lisp sense are not EQ, so if 
-- little is non-atomic, medium is unnecessary, and can be set = to little or big or anything
-- in between.

Error: PROC [backtrace: LIST OF Frame, ErrorMessage: Rope.ROPE];
-- backtrace.first.little is the error form; it is highlighted within backtrace.first.big,
-- which is unparsed.  The error message is displayed, and a read/eval/print loop
-- is created with the binding backtrace.first.alist.  The user can "walkstack" to the contexts
-- from which this one was reached; these earlier contexts are assumed to be represented
-- by the other frames on backtrace. 

}.