[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: c-forward-sws: Is the code right?
From: |
Alan Mackenzie |
Subject: |
Re: c-forward-sws: Is the code right? |
Date: |
Tue, 27 Mar 2018 16:41:56 +0000 |
User-agent: |
Mutt/1.7.2 (2016-11-26) |
Hello, zhang.
On Tue, Mar 27, 2018 at 14:44:43 +0000, zhang cc wrote:
> In functon c-forward-sws:
> ((and c-opt-cpp-prefix
> (looking-at c-noise-macro-name-re))
> ;; Skip over a noise macro.
> (goto-char (match-end 1))
> (not (eobp)))))
> c-noise-macro-name-re’ value is "\\<\\>”, which doesn’t have a group. Then
> (match-end 1) should always return nil. And (goto-char nil) will signal an
> error.
The intention is that "\\<\\>" will never match at all, hence that
match-end will never be executed. "\\<" means "beginning of word" and
"\\>" means "end of word". Could there be something in your environment
whereby an end of word might be at the same position as the beginning of
a word? If this is the case, then I will need to come up with an actual
regexp which can never match anything.
Possibly, the bug could lie somewhere else in c-forward-sws.
Is the bug reproducible? If so, could you possibly patch that bit of
code to add (not (equal c-opt-cpp-prefix "\\<\\>")) before the
(looking-at ...) form, and see if that stops the error.
> Debugger entered--Lisp error: (wrong-type-argument integer-or-marker-p nil)
> c-forward-sws() c-unfind-coalesced-tokens(87 92) c-before-change(87 92)
> delete-region(87 #<marker at 92 in c.cpp>) (if (= (progn (or (and (memq
> (type-of field) cl-struct-yas--field-tags) t) (signal 'wrong-type-argument
> (list 'yas--field field))) (aref field 2)) (progn (or (and (memq (type-of
> field) cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list
> 'yas--field field))) (aref field 3))) nil (delete-region (or from (progn (or
> (and (memq (type-of field) cl-struct-yas--field-tags) t) (signal
> 'wrong-type-argument (list 'yas--field field))) (aref field 2))) (progn (or
> (and (memq (type-of field) cl-struct-yas--field-tags) t) (signal
> 'wrong-type-argument (list 'yas--field field))) (aref field 3))))
> yas--skip-and-clear(#s(yas--field :number 1 :start #<marker at 86 in c.cpp>
> :end #<marker at 92 in c.cpp> :parent-field nil :mirrors nil :transform nil
> :modified-p t :next nil) 87) (progn (yas--skip-and-clear field end)) (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet))() funcall((lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet))) (let nil (funcall '(lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) eval((let nil (funcall '(lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet))))) (let* ((syms (mapcar (function car)
> envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr v-f)))))
> envvar)) (body (function (lambda nil (if (yas--skip-and-clear-field-p field
> beg end length) (progn (yas--skip-and-clear field end))) (progn (or (and
> (memq (type-of field) cl-struct-yas--field-tags) t) (signal
> 'wrong-type-argument (list 'yas--field field))) (let* ((v field)) (aset v 7
> t))) (yas--advance-end-maybe field (overlay-end overlay)) (save-excursion
> (yas--field-update-display field)) (yas--update-mirrors snippet)))) (binds
> nil)) (while syms (setq binds (cons (list (car-safe (prog1 syms (setq syms
> (cdr syms)))) (list 'quote (car-safe (prog1 vals (setq vals (cdr vals))))))
> binds))) (eval (list 'let binds (list 'funcall (list 'quote body))))) (progn
> (let* ((syms (mapcar (function car) envvar)) (vals (mapcar (function (lambda
> (v-f) (eval (car (cdr v-f))))) envvar)) (body (function (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))) (let ((envvar (progn (or (and (memq (type-of
> snippet) cl-struct-yas--snippet-tags) t) (signal 'wrong-type-argument (list
> 'yas--snippet snippet))) (aref snippet 1)))) (progn (let* ((syms (mapcar
> (function car) envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr
> v-f))))) envvar)) (body (function (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body))))))) (progn (let ((envvar (progn (or (and (memq
> (type-of snippet) cl-struct-yas--snippet-tags) t) (signal
> 'wrong-type-argument (list 'yas--snippet snippet))) (aref snippet 1))))
> (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar (function
> (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (function (lambda nil
> (if (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (unwind-protect (progn (let ((envvar
> (progn (or (and (memq (type-of snippet) cl-struct-yas--snippet-tags) t)
> (signal 'wrong-type-argument (list 'yas--snippet snippet))) (aref snippet
> 1)))) (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar
> (function (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (function
> (lambda nil (if (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (set-match-data save-match-data-internal
> 'evaporate)) (let ((save-match-data-internal (match-data))) (unwind-protect
> (progn (let ((envvar (progn (or (and (memq (type-of snippet)
> cl-struct-yas--snippet-tags) t) (signal 'wrong-type-argument (list
> 'yas--snippet snippet))) (aref snippet 1)))) (progn (let* ((syms (mapcar
> (function car) envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr
> v-f))))) envvar)) (body (function (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (set-match-data save-match-data-internal
> 'evaporate))) (if (yas--snippet-live-p snippet) (let
> ((save-match-data-internal (match-data))) (unwind-protect (progn (let
> ((envvar (progn (or (and (memq (type-of snippet) cl-struct-yas--snippet-tags)
> t) (signal 'wrong-type-argument (list 'yas--snippet snippet))) (aref snippet
> 1)))) (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar
> (function (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (function
> (lambda nil (if (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (set-match-data save-match-data-internal
> 'evaporate))) (lwarn '(yasnippet zombie) :warning "Killing zombie snippet!")
> (delete-overlay overlay)) (let* ((inhibit-modification-hooks nil)
> (yas--inhibit-overlay-hooks t) (field (overlay-get overlay 'yas--field))
> (snippet (overlay-get yas--active-field-overlay 'yas--snippet))) (if
> (yas--snippet-live-p snippet) (let ((save-match-data-internal (match-data)))
> (unwind-protect (progn (let ((envvar (progn (or (and (memq (type-of snippet)
> cl-struct-yas--snippet-tags) t) (signal 'wrong-type-argument (list
> 'yas--snippet snippet))) (aref snippet 1)))) (progn (let* ((syms (mapcar
> (function car) envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr
> v-f))))) envvar)) (body (function (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (set-match-data save-match-data-internal
> 'evaporate))) (lwarn '(yasnippet zombie) :warning "Killing zombie snippet!")
> (delete-overlay overlay))) (if (or (not after\?) yas--inhibit-overlay-hooks
> (not (overlayp yas--active-field-overlay)) (not (overlay-buffer overlay))
> (yas--undo-in-progress)) nil (let* ((inhibit-modification-hooks nil)
> (yas--inhibit-overlay-hooks t) (field (overlay-get overlay 'yas--field))
> (snippet (overlay-get yas--active-field-overlay 'yas--snippet))) (if
> (yas--snippet-live-p snippet) (let ((save-match-data-internal (match-data)))
> (unwind-protect (progn (let ((envvar (progn (or (and (memq (type-of snippet)
> cl-struct-yas--snippet-tags) t) (signal 'wrong-type-argument (list
> 'yas--snippet snippet))) (aref snippet 1)))) (progn (let* ((syms (mapcar
> (function car) envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr
> v-f))))) envvar)) (body (function (lambda nil (if
> (yas--skip-and-clear-field-p field beg end length) (progn
> (yas--skip-and-clear field end))) (progn (or (and (memq (type-of field)
> cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field
> field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field
> (overlay-end overlay)) (save-excursion (yas--field-update-display field))
> (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds (cons
> (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (car-safe
> (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let binds (list
> 'funcall (list 'quote body)))))))) (set-match-data save-match-data-internal
> 'evaporate))) (lwarn '(yasnippet zombie) :warning "Killing zombie snippet!")
> (delete-overlay overlay)))) yas--on-field-overlay-modification(#<overlay from
> 86 to 92 in c.cpp> t 86 87 0) self-insert-command(1)
> funcall-interactively(self-insert-command 1)
> call-interactively(self-insert-command nil nil)
> command-execute(self-insert-command)
--
Alan Mackenzie (Nuremberg, Germany).