Opened 13 years ago
Closed 13 years ago
#294 closed defect (fixed)
program-errors and invalid functions
Reported by: | gb | Owned by: | gz |
---|---|---|---|
Priority: | blocker | Milestone: | |
Component: | Compiler | Version: | working-0711 |
Keywords: | Cc: |
Description
in the working-0711 branch, the compiler traps certain kinds of compile-time PROGRAM-ERRORs (at least), WARNs about them, and produces a function that, when executed, complains about whatever errors were detected at compile-time.
? (defun bogus (x y) (eq x) y) ; misplaced paren ;Compiler warnings : ; In BOGUS: Required arguments in (EQ X) don't match lambda list (FORM1 FORM2). BOGUS
Unfortunately, the function that's created in this case takes 0 arguments; unless it's called with 0 arguments, one won't see the compile-time error reported.
When this happens when something is defined interactively, any previous (more) correct version of the function is quietly replaced with the 0-arg error-signaling version. Under the old behavior (where an error was signaled at compile-time), the old (presumably working) definition would have remained in place. With the new behavior, it may be necessary to reload code (if possible) and repeat a number of development steps to get back to the point where one has the opportunity to correct a simple syntax error. (I noticed this while working on the compiler, and find this aspect of the new behavior to be a big impediment to productivity.)
If this happens during COMPILE-FILE, I assume that the same sort of unfortunate side-effects occur (unless one is lucky enough to press C before the binary is loaded.)
I think that I understand some of the motivations for this change and hope that we can think of ways of satisfying the needs of all concerned parties.
Change History (4)
comment:1 Changed 13 years ago by gz
- Status changed from new to assigned
comment:2 Changed 13 years ago by gb
- Priority changed from major to blocker
- Version changed from working-0711 to unspecific
comment:3 Changed 13 years ago by gz
- Version changed from unspecific to working-0711
comment:4 Changed 13 years ago by gz
- Resolution set to fixed
- Status changed from assigned to closed
Now fixed in 0711 as well, by r9861.
This - the general behavior of handling compile-time errors by creating invalid functions - affects the trunk and 1.2 branches as well as working-0711, even though there have been changes so that the invalid function accepts an indefinite number of arguments.
I believe that this behavior is totally wrong: