Kevin_Crowston@XV.MIT.EDU (02/09/88)
I'm trying to convert a Koto application to Lyric and in the processing, trying to compile a function with a PROG and a bunch of GO's (so much for GOTOless programming). The function compiles fine under Koto, and I think it also works with the old compiler. With the new compiler, however (that is, CL:COMPILE-FILE), I get an incomprehensible error message (paraphrased): Assert failed: uncertainty size went negative. I'm pretty sure the error has something to do with the PROG, since I took nearly everything else out of the functions, but maybe I'm just getting hung up on gotos... Anyway, does anyone know what the error message means? Alternately, am I doing something wrong with the PROG? I'm using the InterLisp package, if there's a difference between CL:PROG and IL:PROG, but I don't think there is... The functions used follow: (Outgoing.Do.Command Command ExpectedReply ErrorMessage) Sends the command and waits for the given reply; if it gets it, it returns NIL; if it gets anything else or nothing at all, it prints the given error message, sets Status to T and returns T. Uses InStream, OutStream, Status and Dialogue as SPECVARS. (SMTP.Handle.Reply InStream ExpectedReply ErrorMessage) Waits for the given reply on InStream. If it gets it, it returns NIL; if it gets anything else or nothing at all, it prints the given error message, sets Status to T and returns T. Uses Status and Dialogue as SPECVARS. The function that won't compile: (LAMBDA (InStream OutStream Host From Receivers Parse) (DECLARE (SPECVARS Service Dialogue)) (* ; Edited 5-Feb-88 18:08 by kgc) (PROG ((Count 0) Status) (* * Wait for the server's opening message) (if (SMTP.Handle.Reply InStream "2" (CONCAT "No server on recipient's host " Host)) then (GO FINISH)) (* * say hello) (if (Outgoing.Do.Command (CONCAT "HELO " SMTP.SiteName) "2" (CONCAT "No response from server on recipient's host" Host)) then (GO FINISH)) (* * Send the From line) (if (Outgoing.Do.Command (CONCAT "MAIL FROM:<" (SMTP.ARPA.Address From) ">") "2" "From line rejected") then (GO DONE)) (* * Send the destinations) (if (ZEROP (for Person in Receivers count (NOT (Outgoing.Do.Command (CONCAT "RCPT TO:<" (SMTP.ARPA.Address Person) ">") "2" (CONCAT "To line rejected by " Host))))) then (printout Dialogue "None of the recipients were accepted by the host" T) (GO DONE)) (* * Send the message itself) (if (Outgoing.Do.Command "DATA" "3" "Error sending message body") then (GO DONE)) (SMTP.Header Parse OutStream Host) (SMTP.Body Parse OutStream) (SMTP.Send OutStream " .") (if (SMTP.Handle.Reply InStream "2" "Error sending message") then (GO DONE)) (* * That's it) DONE (Outgoing.Do.Command "QUIT" "2" "QUIT command rejected") FINISH (* * Close the connection) (NLSETQ (PROGN (CLOSEF? InStream) (CLOSEF? OutStream))) (* * Tell the world) (Monitor.Print Service (if Status then "Error in delivery" else "Delivery okay")) (RETURN (NOT Status)))) Kevin Crowston MIT Sloan School