[Sisc-users] line numbers in error messages, etc.
Brought to you by:
mradestock,
scgmille
From: Michael B. <mik...@gm...> - 2006-03-25 00:57:51
|
I've been playing with SISC for a couple of days, and it's great, but I have an issue. Why can't I get a reasonable error message? $ cat my-test.scm (define a b c) $ sisc -x my-test.scm Error in load. Caused by Error: invalid syntax (define a b c) file:init2.scm:929:30: <from call to cons> ?:?:?: <indeterminate call> The file and line numbers given are useless to me. Contrast this with, for instance, Python: $ cat my-test.py def a b c(): pass $ python my-test.py File "my-test.py", line 1 def a b c(): ^ SyntaxError: invalid syntax Here's another couple of examples where not only are the file and line numbers garbage, but the error message is misleading: $ cat my-test.scm (module m (q)) $ sisc -x my-test.scm Error in load. Caused by Error: missing definition for export(s) (q) file:init2.scm:929:30: <from call to cons> ?:?:?: <indeterminate call> $ cat my-test.scm (import* oo q) $ sisc -x my-test.scm Error in load. Caused by Error: missing definition for export(s) (q) file:init2.scm:929:30: <from call to cons> ?:?:?: <indeterminate call> 2 different problems - same error message. At runtime... same deal. $ cat my-test.scm (define (a) (+ 'a 10)) (define (b) (a)) (define (c) (b)) (c) $ sisc -x my-test.scm Error in load. Caused by Error in +: <java.lang.RuntimeException>: expected type number, got 'a'. file:my-test.scm:3:17: <from call to load> OK, well, it actually refers to my file and gives me a line number that is *sort of* relevant, but that line number indicates code a couple function calls away from where the problem actually occurred. Contrast with Python: $ cat my-test.py def a(): return "a" + 10 def b(): return a() def c(): return b() c() $ python my-test.py Traceback (most recent call last): File "my-test.py", line 4, in ? c() File "my-test.py", line 3, in c def c(): return b() File "my-test.py", line 2, in b def b(): return a() File "my-test.py", line 1, in a def a(): return "a" + 10 TypeError: cannot concatenate 'str' and 'int' objects Python gives me the exact line where the problem occurred and a nice stack trace telling me where the previous function calls were. The other Scheme implementations I've used have given garbage error messages as well. Is there something about Scheme that makes it impossible to give a decent error message? I know TCO doesn't help, but is that really such an obstacle? Surely it wouldn't be difficult to keep on hand a record of the last several function calls, and include them when an error is thrown? From another perspective... does anybody have any tips for dealing with this? Several months ago I gave up on Scheme in disgust primarily over this issue, despite really liking the language overall. I'm giving it another try. When I get an error message telling me that + has been applied to a symbol (or whatever other random error has happened), but the error message tells me almost nothing about where to look... What should I do? I can obviously fumble my way around in the dark until I get an idea where I'm headed, but that can be very time consuming. Thanks, Mike Benfield |