From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Newsgroups: gmane.emacs.devel Subject: How and when to use GCPRO? Date: Mon, 27 Dec 2010 09:21:54 +0000 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: dough.gmane.org 1293441748 17629 80.91.229.12 (27 Dec 2010 09:22:28 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 27 Dec 2010 09:22:28 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Dec 27 10:22:24 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PX9Hc-000167-JY for ged-emacs-devel@m.gmane.org; Mon, 27 Dec 2010 10:22:24 +0100 Original-Received: from localhost ([127.0.0.1]:33869 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PX9Hb-0003Ik-SU for ged-emacs-devel@m.gmane.org; Mon, 27 Dec 2010 04:22:24 -0500 Original-Received: from [140.186.70.92] (port=34060 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PX9HL-0003Hd-Dc for emacs-devel@gnu.org; Mon, 27 Dec 2010 04:22:08 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PX9HK-0002Gm-8J for emacs-devel@gnu.org; Mon, 27 Dec 2010 04:22:07 -0500 Original-Received: from lo.gmane.org ([80.91.229.12]:46618) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PX9HJ-0002GI-Sh for emacs-devel@gnu.org; Mon, 27 Dec 2010 04:22:06 -0500 Original-Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1PX9HH-0000vI-RX for emacs-devel@gnu.org; Mon, 27 Dec 2010 10:22:03 +0100 Original-Received: from cpc1-cmbg13-0-0-cust596.5-4.cable.virginmedia.com ([86.9.122.85]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 27 Dec 2010 10:22:03 +0100 Original-Received: from sdl.web by cpc1-cmbg13-0-0-cust596.5-4.cable.virginmedia.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 27 Dec 2010 10:22:03 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 75 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: cpc1-cmbg13-0-0-cust596.5-4.cable.virginmedia.com Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUKDAg1NjRWV1V9fnyg op/DxcLk5uP8/voi63ReAAAACXBIWXMAAAWJAAAFiQFtaJ36AAAAB3RJTUUH1goZAgAz00bgXgAA AeVJREFUKM9lk0Fz2jAQhQXJD3CCO70CmcC1YMtcWyTZ14Bl69xats4N9r6/3zWQBlodNKNPu/s0 b1cCQFuZGpfVVh3vAvBJolIXRkapSuoRUtIdFyo1Y5xSdlAj7OtvD1XnXxmWRi+eWgcxyCed1lVV B1CrKyujMoi+eLA5kU1SsjoHlW+nQjTtFxk4MXgrOxvIqzoTZR8XgPaLl419zgsMaSGFPiUOZCIh thsx5Xy9NsK8Kwf/JoQgMxcVJ301HKkcSWaT0O7FY056J4U9xcYfnmVXG4801lW6lqwu2nKFZoHC HuzvaTVndZ+LaRQgZdthXw1cpynEkLEwyFHXk/aIxNQ6QeooJuzPMB+wn+D7JJNsiCcVA13/A3h/ xE9J+WidpAwoYNmRFwyvSRhNVtsdaAewzZZP5uw82QL9+tyNfocyP0McAzICUr5Mk9RdIjWasUNx aIIt6NK4ZtXIMdfMQt3nuMAyWbLI4DqZ4xPq/ag8jPond4XU/cLuOgw6XCFX/YCUfcDAMMH58fD4 G9kDchwfqVefkBwup2uZM+Q4WhJt5jN3AxXCsaS2yXEDuWgS8VOzW0gFjhEPmLyFMKBFaLb1HRwc DiaKwx0EeTMRYnYPQRW3PP4HApvlMv0PttX5v/D6Aws3IOSEwzmLAAAAAElFTkSuQmCC User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2.91 (Mac OS X 10.6.5) Cancel-Lock: sha1:eoz7jexBCTP8A8/bHWa5Ov9MCQQ= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:133978 Archived-At: Hello, I wonder if anyone can point me to a more detailed explanation of how and when to use GCPRO other than what's in the elisp manual. Is there any symptom in a gdb session that one should suspect a GCPRO is missing? For example, Could someone comment on the following function I just wrote, which tries to add support for feature expressions like in common lisp? static Lisp_Object eval_feature_expression (form) Lisp_Object form; { Lisp_Object val, exp; struct gcpro gcpro1; if (! NILP(Fatom(form))) return NILP(Fmemq(form, Vfeatures)) ? Qnil:Qt; if (EQ (Fcar(form), Qnot)) { if (XINT(Flength(form)) != 2) error ("Invalid feature expression"); val = eval_feature_expression (Fcar(Fcdr(form))); return NILP(val) ? Qt:Qnil; } if (EQ (Fcar(form), Qand)) { if (NILP (Fcdr (form))) error ("Invalid feature expression"); val = eval_feature_expression (Fcar (Fcdr (form))); if (NILP (Fcdr (Fcdr (form)))) return val; else if (NILP(val)) return Qnil; else { GCPRO1(exp); exp = Fcons (Qand, (Fcdr(Fcdr(form)))); val = eval_feature_expression (exp); UNGCPRO; return val; } } if (EQ (Fcar(form), Qor)) { if (NILP (Fcdr (form))) error ("Invalid feature expression"); val = eval_feature_expression (Fcar (Fcdr (form))); if (NILP (Fcdr (Fcdr (form)))) return val; else if (NILP (val)) { GCPRO1(exp); exp = Fcons (Qor, (Fcdr(Fcdr(form)))); UNGCPRO; return eval_feature_expression (exp); } else return Qt; } error ("Invalid feature expression"); } I am also reading the XEmacs internals manual on GCPROing but I have little idea what is still true for GNU Emacs. Thanks in advance and happy holidays. Leo