CLISP_UNICODE is always defined in modules, so use #if, not #ifdef.
regexp: Compute character string index based on the current O(misc_encoding).
Quite on the contrary, my current thoughts are strongly influenced by "how can we immediately bind with the correct values (not wasting time for other initializations)?" I'll write down my proposal ASAP, but have no time now. But the original bug report, unlike bug #375 is about FINALLY, not initialisation. In clisp, currently both are mixed up, because the order of FOR clauses currently influences the stepping in weird and unforeseen ways.
I can't remember any LISP (even predating Common Lisp) where assoc was implemented as the paper describes. In papers, one often ignores \bottom and that some functions are partial. At the implementation level, one wants to distinguish the case "not found" -> NIL from the case "found key, value NIL". For decades, the obvious solution has been for ASSOC to return the CONS whose CAR is the found key. Decades later (i.e. in Java times), people would devise the API to signal an error when the key is not...
Reverting was TRT. The old clisp code already has all the pieces to evaluate initialisation forms in an outer environment. It just needs to assemble the pieces differently, in some (yet unknown exactly) circumstances. The difference can be seen in (macroexpand-1'(loop for x across X for y across Y)) and (macroexpand-1'(loop repeat (random 2) repeat (random 5))) The first clause nicely uses LET, the second introduces SETQ and completely changes the scope.
Regarding for-as-equals-then and section 6.1.1.4, I'm more and more convinced that there should be an amendment to ANSI-CL. It should distinguish for-as-equals-then from for-as-equals! for-as-equals Clearly, the environment must encompass all variables, as the code ("form1") can refer to values from a previous iteration (depending on the order of for-clauses). for-as-equals-then Here the change to ANSI-CL wording should be that only form2 is required to be evaluated in a lexical environment encompassing...
The best I've come up with so far is (multiple-value-bind (run args) (cmd-args) (let ((se (socket:socket-server))) ;; Sleep between socket-connect and close prevents (:APPEND "foo" :APPEND T ...) most of the time (on MacOS) (ext:run-program run :arguments (append args (list "-q" "-q" "-x" (format nil "(close (progn (socket:socket-connect ~D) (sleep .01s0)))" (socket:socket-server-port se)))) :wait nil :input nil :output nil) (unwind-protect (with-open-stream (so (socket:socket-accept se)) (list (check-os-error...
Fix --without-unicode tests.