From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Calling Lisp in C functions Date: Thu, 23 Sep 2021 09:59:33 +0300 Message-ID: <83r1dfvktm.fsf@gnu.org> References: <83y27pw4c3.fsf@gnu.org> <87357FA2-4AF8-4E7E-BD26-1852D9C8CE6F@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="7477"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Yuan Fu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Sep 23 09:02:21 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mTIkO-0001hO-ML for ged-emacs-devel@m.gmane-mx.org; Thu, 23 Sep 2021 09:02:20 +0200 Original-Received: from localhost ([::1]:49946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mTIkJ-0007Ca-RB for ged-emacs-devel@m.gmane-mx.org; Thu, 23 Sep 2021 03:02:15 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mTIi0-0006Lv-O3 for emacs-devel@gnu.org; Thu, 23 Sep 2021 02:59:53 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:34962) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mTIi0-00016H-Gp; Thu, 23 Sep 2021 02:59:52 -0400 Original-Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:3660 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mTIhj-0003DB-96; Thu, 23 Sep 2021 02:59:52 -0400 In-Reply-To: <87357FA2-4AF8-4E7E-BD26-1852D9C8CE6F@gmail.com> (message from Yuan Fu on Wed, 22 Sep 2021 20:59:00 -0700) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:275353 Archived-At: > From: Yuan Fu > Date: Wed, 22 Sep 2021 20:59:00 -0700 > Cc: Emacs developers > > I tried to write > > ptrdiff_t count = SPECPDL_INDEX (); > record_unwind_protect_ptr (ts_delete_cursor, cursor); > ... > return unbind_to (count, xxx); > > But it give a type error, because ts_delete_cursor doesn’t take a void*. I guess I need to define a wrapper function to avoid that error? Yes, see for example directory_files_internal_unwind and its usage in dired.c. > Can I use record_unwind_protect_ptr more than once? Yes. > What does that count mean? It tells unbind_to how much of the unwind-protect stack to unwind. See the definition of unbind_to in eval.c. > What is specpdl? It's an array used for manually managed stack for tracking unwinds and other stuff by the Emacs Lisp machine. See the comments for 'union specbinding', starting at line 3135 of lisp.h.