From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: c-forward-sws: Is the code right? Date: Tue, 27 Mar 2018 16:41:56 +0000 Message-ID: <20180327164156.GA4105@ACM> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1522169982 18028 195.159.176.226 (27 Mar 2018 16:59:42 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 27 Mar 2018 16:59:42 +0000 (UTC) User-Agent: Mutt/1.7.2 (2016-11-26) Cc: Emacs developers To: zhang cc Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Mar 27 18:59:38 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f0rwf-0004bP-Nc for ged-emacs-devel@m.gmane.org; Tue, 27 Mar 2018 18:59:37 +0200 Original-Received: from localhost ([::1]:35331 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f0ryh-0008TQ-Gd for ged-emacs-devel@m.gmane.org; Tue, 27 Mar 2018 13:01:43 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57564) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f0ryV-0008SW-76 for emacs-devel@gnu.org; Tue, 27 Mar 2018 13:01:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f0ryQ-0003Us-PI for emacs-devel@gnu.org; Tue, 27 Mar 2018 13:01:31 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:61541 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1f0ryQ-0003TJ-Cn for emacs-devel@gnu.org; Tue, 27 Mar 2018 13:01:26 -0400 Original-Received: (qmail 40795 invoked by uid 3782); 27 Mar 2018 17:01:24 -0000 Original-Received: from acm.muc.de (p5B14757F.dip0.t-ipconnect.de [91.20.117.127]) by colin.muc.de (tmda-ofmipd) with ESMTP; Tue, 27 Mar 2018 19:01:22 +0200 Original-Received: (qmail 4146 invoked by uid 1000); 27 Mar 2018 16:41:56 -0000 Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) X-Primary-Address: acm@muc.de X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 193.149.48.1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:224099 Archived-At: 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=E2=80=99 value is "\\<\\>=E2=80=9D, which doesn=E2= =80=99t have a group. Then (match-end 1) should always return nil. And (got= o-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 ni= l) c-forward-sws() c-unfind-coalesced-tokens(87 92) c-before-change(87 92) = delete-region(87 #) (if (=3D (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 fi= eld) cl-struct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas-= -field field))) (aref field 3))) nil (delete-region (or from (progn (or (an= d (memq (type-of field) cl-struct-yas--field-tags) t) (signal 'wrong-type-a= rgument (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--fie= ld :number 1 :start # :end # = :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 fi= eld beg end length) (progn (yas--skip-and-clear field end))) (lambda nil (i= f (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--fie= ld-tags) t) (signal 'wrong-type-argument (list 'yas--field field))) (let* (= (v field)) (aset v 7 t))) (yas--advance-end-maybe field (overlay-end overla= y)) (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-d= isplay field)) (yas--update-mirrors snippet))) (let nil (funcall '(lambda n= il (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))) (l= et* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field (overlay-end o= verlay)) (save-excursion (yas--field-update-display field)) (yas--update-mi= rrors snippet)))) eval((let nil (funcall '(lambda nil (if (yas--skip-and-cl= ear-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 fi= eld 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)) (sav= e-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 (cd= r vals)))))) binds))) (eval (list 'let binds (list 'funcall (list 'quote bo= dy))))) (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar (= function (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (function (l= ambda nil (if (yas--skip-and-clear-field-p field beg end length) (progn (ya= s--skip-and-clear field end))) (progn (or (and (memq (type-of field) cl-str= uct-yas--field-tags) t) (signal 'wrong-type-argument (list 'yas--field fiel= d))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe field (overla= y-end overlay)) (save-excursion (yas--field-update-display field)) (yas--up= date-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 'fun= call (list 'quote body)))))) (let ((envvar (progn (or (and (memq (type-of s= nippet) cl-struct-yas--snippet-tags) t) (signal 'wrong-type-argument (list = 'yas--snippet snippet))) (aref snippet 1)))) (progn (let* ((syms (mapcar (f= unction car) envvar)) (vals (mapcar (function (lambda (v-f) (eval (car (cdr= v-f))))) envvar)) (body (function (lambda nil (if (yas--skip-and-clear-fie= ld-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 s= yms)))) (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 (m= apcar (function (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (func= tion (lambda nil (if (yas--skip-and-clear-field-p field beg end length) (pr= ogn (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--fie= ld 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 (li= st 'funcall (list 'quote body)))))))) (unwind-protect (progn (let ((envvar = (progn (or (and (memq (type-of snippet) cl-struct-yas--snippet-tags) t) (si= gnal 'wrong-type-argument (list 'yas--snippet snippet))) (aref snippet 1)))= ) (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar (functi= on (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--ski= p-and-clear field end))) (progn (or (and (memq (type-of field) cl-struct-ya= s--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-m= irrors snippet)))) (binds nil)) (while syms (setq binds (cons (list (car-sa= fe (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 'evaporat= e)) (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 (m= apcar (function (lambda (v-f) (eval (car (cdr v-f))))) envvar)) (body (func= tion (lambda nil (if (yas--skip-and-clear-field-p field beg end length) (pr= ogn (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--fie= ld 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 (li= st 'funcall (list 'quote body)))))))) (set-match-data save-match-data-inter= nal 'evaporate))) (if (yas--snippet-live-p snippet) (let ((save-match-data-= internal (match-data))) (unwind-protect (progn (let ((envvar (progn (or (an= d (memq (type-of snippet) cl-struct-yas--snippet-tags) t) (signal 'wrong-ty= pe-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 fi= eld 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)) (sav= e-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 (cd= r vals)))))) binds))) (eval (list 'let binds (list 'funcall (list 'quote bo= dy)))))))) (set-match-data save-match-data-internal 'evaporate))) (lwarn '(= yasnippet zombie) :warning "Killing zombie snippet!") (delete-overlay overl= ay)) (let* ((inhibit-modification-hooks nil) (yas--inhibit-overlay-hooks t)= (field (overlay-get overlay 'yas--field)) (snippet (overlay-get yas--activ= e-field-overlay 'yas--snippet))) (if (yas--snippet-live-p snippet) (let ((s= ave-match-data-internal (match-data))) (unwind-protect (progn (let ((envvar= (progn (or (and (memq (type-of snippet) cl-struct-yas--snippet-tags) t) (s= ignal 'wrong-type-argument (list 'yas--snippet snippet))) (aref snippet 1))= )) (progn (let* ((syms (mapcar (function car) envvar)) (vals (mapcar (funct= ion (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--sk= ip-and-clear field end))) (progn (or (and (memq (type-of field) cl-struct-y= as--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-s= afe (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 'evapora= te))) (lwarn '(yasnippet zombie) :warning "Killing zombie snippet!") (delet= e-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--inhibi= t-overlay-hooks t) (field (overlay-get overlay 'yas--field)) (snippet (over= lay-get yas--active-field-overlay 'yas--snippet))) (if (yas--snippet-live-p= snippet) (let ((save-match-data-internal (match-data))) (unwind-protect (p= rogn (let ((envvar (progn (or (and (memq (type-of snippet) cl-struct-yas--s= nippet-tags) t) (signal 'wrong-type-argument (list 'yas--snippet snippet)))= (aref snippet 1)))) (progn (let* ((syms (mapcar (function car) envvar)) (v= als (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 lengt= h) (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 'ya= s--field field))) (let* ((v field)) (aset v 7 t))) (yas--advance-end-maybe = field (overlay-end overlay)) (save-excursion (yas--field-update-display fie= ld)) (yas--update-mirrors snippet)))) (binds nil)) (while syms (setq binds = (cons (list (car-safe (prog1 syms (setq syms (cdr syms)))) (list 'quote (ca= r-safe (prog1 vals (setq vals (cdr vals)))))) binds))) (eval (list 'let bin= ds (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(= # t 86 87 0) self-insert-command(1) funcall= -interactively(self-insert-command 1) call-interactively(self-insert-comman= d nil nil) command-execute(self-insert-command) --=20 Alan Mackenzie (Nuremberg, Germany).