diff options
author | Gerd Moellmann <gerd@gnu.org> | 1999-11-04 20:52:05 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 1999-11-04 20:52:05 +0000 |
commit | a09754e6c6ca945105c1cbfc91d246dab551f501 (patch) | |
tree | d16972bc7c27a55399e2840c2c5a47ac880814e8 /lisp/gud.el | |
parent | b7b66466a9e0ec45cd655ee3616716485304fe7c (diff) | |
download | emacs-a09754e6c6ca945105c1cbfc91d246dab551f501.tar.gz emacs-a09754e6c6ca945105c1cbfc91d246dab551f501.tar.bz2 emacs-a09754e6c6ca945105c1cbfc91d246dab551f501.zip |
(gud-perldb-massage-args): Handle the case "perl -e 0"
the default when invoking perldb in a non-Perl buffer) and other
cases involving -e or --.
Diffstat (limited to 'lisp/gud.el')
-rw-r--r-- | lisp/gud.el | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/lisp/gud.el b/lisp/gud.el index 036515176ae..2cddf1a3f53 100644 --- a/lisp/gud.el +++ b/lisp/gud.el @@ -1184,27 +1184,48 @@ directories if your program contains sources from more than one directory." ;;; History of argument lists passed to perldb. (defvar gud-perldb-history nil) +;; Convert a command line as would be typed normally to run a script +;; into one that invokes an Emacs-enabled debugging session. +;; "-d" in inserted as the first switch, and "-emacs" is inserted where +;; it will be $ARGV[0] (see perl5db.pl). (defun gud-perldb-massage-args (file args) - (let (new-args) + (let* ((new-args '("-d")) + (seen-e nil) + (shift (lambda () + (setq new-args (cons (car args) new-args)) + (setq args (cdr args))))) + ;; Pass all switches and -e scripts through. (while (and args - (string-match "^-[^-]" (car args))) - (setq new-args (cons (car args) new-args)) - (setq args (cdr args))) - - (if args - (progn - (setq new-args (cons (car args) new-args)) - (setq args (cdr args))) - (setq new-args (cons "--" new-args))) + (string-match "^-" (car args)) + (not (equal "-" (car args))) + (not (equal "--" (car args)))) + (when (equal "-e" (car args)) + ;; -e goes with the next arg, so shift one extra. + (or (funcall shift) + ;; -e as the last arg is an error in Perl. + (error "No code specified for -e.")) + (setq seen-e t)) + (funcall shift)) + + (when (not seen-e) + (if (or (not args) + (string-match "^-" (car args))) + (error "Can't use stdin as the script to debug.")) + ;; This is the program name. + (funcall shift)) + + ;; If -e specified, make sure there is a -- so -emacs is not taken + ;; as -e macs. + (if (and args (equal "--" (car args))) + (funcall shift) + (and seen-e (setq new-args (cons "--" new-args)))) (setq new-args (cons "-emacs" new-args)) - (while args - (setq new-args (cons (car args) new-args)) - (setq args (cdr args))) + (funcall shift)) - (cons "-d" (nreverse new-args)))) + (nreverse new-args))) ;; There's no guarantee that Emacs will hand the filter the entire ;; marker at once; it could be broken up across several strings. We |