@@ empty !errors 0 !counter root\ "Errors" seek* { % % stack: errors-node % dup !\ Tree._First { % % stack: first-err-node % % descendants of the errors node are err nodes % each err node has a a cite node with a possible address node % normally a following pre node will show the location in the code % { % % stack: err-node % dup !\ "reason" \_ unescape !reason "address" seek* { !\ "text" _\ Tree.OfLast unescape *globaddr !address "text" _\ Mep._Next Tree._ValueOf unescape !error Mep._Next dup negative { empty } { "text" second Tree.OfLast unescape } ifelse !errpre empty !predef false !ignore _reason "jspherrs" look { % % stack: err-node err-child after-ident err-directive % < |predefine _error "'" 1 1 1 parse !predef |ignore true !ignore > pop } if % % stack: err-node err-child err-target % _ignore not { _errors _address quo&spc & _reason quo&spc & _predef quo&spc & _error quo&spc & _errpre quoter &&; !errors +:counter } if } { } ifelse dup negative ? Mep._Next neg( ? } loop pop % % stack: % } { % % no error nodes % } ifelse } { % % no error branch % } ifelse _errors &_counter &; !errors % % stack: %