What the heck does this backtrace mean?
Asfand Yar Qazi
ayqazi at gmail.com
Sun Feb 25 04:57:16 EST 2007
On 2/25/07, Stephen J. Turnbull <stephen at xemacs.org> wrote:
> Asfand Yar Qazi writes:
> > Hi,
> >
> > I'm the emacs-lisp n00b who's audaciously decided to take over
> > maintenance of ruby-modes.
> >
> > I'm having a great deal of difficulty figuring out what the dickens
> > the backtrace means. I can't even see where it's telling me the line
> > number or method name it failed on.
>
> It doesn't tell you that. Lisp is s-expression-oriented, ie all it
> really knows about are balanced parentheses. Because of the pervasive
> use of macros (many standard control structures are implemented as
> macros), it is very difficult to keep track of the position in the
> original file. The Lisp byte-compiler doesn't even try.
>
> > While compiling ruby-electric-mode in file
> > /home/ayqazi/src/packages/xemacs/cvs/packages/xemacs-packages/ruby-modes/ruby-electric.el:
> > ** reference to free variable ruby-electric-mode-hook
> > ** reference to free variable ruby-electric-mode-on-hook
> > ** reference to free variable ruby-electric-mode-off-hook
> > While compiling toplevel forms:
> > !! End of file or stream ((#<buffer " *Compiler Input*">))
>
> This means that the compiler expected more input. This almost always
> means unbalanced parentheses, more rarely a typo of the wrong kind of
> parenthesis. Finding the error generally requires the programmer to
> look at the code. Consider
>
> (when (emacs-version >= 21 5)
> (setq debug-on-error t)
>
> (defun newfunction () (message "that's not my job mon!"))
>
> Is the defun subject to the when, or not? How is the poor compiler
> supposed to guess?
>
> To diagnose, go to the beginning of the file, and type
>
> M-: (while t (set-mark) (forward-sexp 1)) RET
>
> When the error occurs you can then use C-x C-x to find the beginning
> of the unterminated sexp. At that point, enter that sexp, and you can
> start stepping forward with C-M-f (forward-sexp), and when you go
> farther than you expect, that's the sexp with a problem. Recurse
> until the problem is obvious. ;-)
>
> Another technique is to step through a function typing TAB. When a
> line unexpectedly reindents, you've found a place where the programmer
> and Emacs disagree about sexp structure.
>
>
It was strange to me that I'd leave just a single new-line in the
file, and xemacs would bomb out when compiling it.
But I figured it out - I saw 'Raw:T' in the modeline for the file, and
after googling for it, realised that the file was NOT encoded in unix
end-of-line conventions or something. I got it via a patch from
someone, so that must be why it ended up like that. That's why xemacs
was bombing out. Oh well, my xemacs experience grows daily... :-)
More information about the XEmacs-Beta
mailing list