From unknown Sat Jun 21 10:36:48 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#36392 <36392@debbugs.gnu.org> To: bug#36392 <36392@debbugs.gnu.org> Subject: Status: (info "(elisp)Writing Emacs Primitives") might need some clarifications Reply-To: bug#36392 <36392@debbugs.gnu.org> Date: Sat, 21 Jun 2025 17:36:48 +0000 retitle 36392 (info "(elisp)Writing Emacs Primitives") might need some clar= ifications reassign 36392 emacs submitter 36392 Stefan Kangas severity 36392 minor tag 36392 fixed patch thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 07:31:28 2019 Received: (at submit) by debbugs.gnu.org; 26 Jun 2019 11:31:28 +0000 Received: from localhost ([127.0.0.1]:34391 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg699-0000wm-3C for submit@debbugs.gnu.org; Wed, 26 Jun 2019 07:31:27 -0400 Received: from lists.gnu.org ([209.51.188.17]:55528) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg698-0000vv-6m for submit@debbugs.gnu.org; Wed, 26 Jun 2019 07:31:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40215) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hg696-0003i5-7R for bug-gnu-emacs@gnu.org; Wed, 26 Jun 2019 07:31:26 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hg694-0005RA-8e for bug-gnu-emacs@gnu.org; Wed, 26 Jun 2019 07:31:24 -0400 Received: from mail-wm1-f53.google.com ([209.85.128.53]:36061) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hg692-0005L7-8h for bug-gnu-emacs@gnu.org; Wed, 26 Jun 2019 07:31:21 -0400 Received: by mail-wm1-f53.google.com with SMTP id u8so1730465wmm.1 for ; Wed, 26 Jun 2019 04:31:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=6hJCYxqd8bV0XhYVysw33vSH8GnrY9oOC0sVsKApF6E=; b=Jn8E29uqToX730SBvqFz9E862ge3aLLse2mD96IbRdEoZgcP64L2Xn8yYKCXR+ijz1 EJmFu6ZRQBpYRlC1NPyW15RB1ONmTh3qVM9DT6s4nCWeAXexF5XO6rRKQtDByWVeAdW3 eBgADQLT9MA+g8MYDJJj5YQf4zorUuF3jV0Xxekhbhcu1YU1WU6Z4y4KpjeL+EUHyDee XUIe1YKlTMgV1z3wpuw2rxoLsfjEsIfEpxjdvsqZLfSPMrn/xyn7YvMWLM0iW55ZUW8L /EpI4mT3fR064ehY1oNxDTYdlx3z9LqS0nbS0ugtNUbyxVb9Rtiil3dJxYkZaajiI8QA cLLA== X-Gm-Message-State: APjAAAV+0hBru4iNvwkh+4kNb4gfzeKRWXGyVi3VQv6vFJitXRsCIg20 LJ8ZldvW+2oj0Bc9tAs4hKe+xIixRX7pc1RUZvhnCxWX X-Google-Smtp-Source: APXvYqyulTDd7LaIXsozR7d4V7V/5MvmslWQNiqaOyHXszZ4v82+xJiCZrD+ffu+GFs1fCJ7XK2cDq3f6g5wFzZ2XBY= X-Received: by 2002:a1c:9696:: with SMTP id y144mr2440195wmd.73.1561548678336; Wed, 26 Jun 2019 04:31:18 -0700 (PDT) MIME-Version: 1.0 From: Stefan Kangas Date: Wed, 26 Jun 2019 13:31:06 +0200 Message-ID: Subject: (info "(elisp)Writing Emacs Primitives") might need some clarifications To: bug-gnu-emacs@gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.128.53 X-Spam-Score: -0.8 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.8 (-) As a beginner on Emacs Internals, I've been reading: (info "(elisp)Writing Emacs Primitives") I hope that you find the following observations useful: 1. "If the primitive accepts a fixed maximum number of Lisp arguments, there must be one C argument for each Lisp argument, and each argument must be of type =E2=80=98Lisp_Object=E2=80=99. ... = If the primitive has no upper limit on the number of Lisp arguments, it must have exactly two C arguments: the first is the number of Lisp arguments, and the second is the address of a block containing their values." The example given is DEFUN( "or", ...) This function has no upper limit on the number of Lisp arguments, but still has only ONE argument. Unless I'm missing something, this contradicts the statement above that "it must have exactly TWO C arguments" (my emphasis). 2. "Although the garbage collector does not reclaim objects reachable from C =E2=80=98Lisp_Object=E2=80=99 stack variables, it may move non-o= bject components of an object, such as string contents; so functions that access non-object components must take care to refetch their addresses after performing Lisp evaluation." I don't think this is very clear. What is non-object components? How would I refetch their addresses? How is this relevant to the topic at hand? I suggest that the above two points are clarified in the manual somehow. Thanks, Stefan Kangas From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 09:09:14 2019 Received: (at 36392) by debbugs.gnu.org; 26 Jun 2019 13:09:14 +0000 Received: from localhost ([127.0.0.1]:34492 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg7fl-0004Cs-W1 for submit@debbugs.gnu.org; Wed, 26 Jun 2019 09:09:14 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:35132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg7fj-0004CX-Ng for 36392@debbugs.gnu.org; Wed, 26 Jun 2019 09:09:12 -0400 Received: by mail-ed1-f68.google.com with SMTP id w20so3307708edd.2 for <36392@debbugs.gnu.org>; Wed, 26 Jun 2019 06:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YBlvCdr9R6JPn+QJMsAZCPwXSXvtLfMvxwI/EyfWg3Q=; b=A6a6vjHL8XtUy/bUKyMTwDW35a7pQk1TvXTvPAr5F2rXyhAtHHzmLwJJPmY3cj4xZD 17i8XikxaHQmFIbZfrVlRP90wAWcMMDdMGNmQf94pJ2stUE1ZkW5Ue8iXhHpJwp5XHQf lRidCETf9PRCzlI1ABpdFuAlQx0dn1OLpRPRMDsOOspdZjVJdZqTyKpTS1C0KxL3gYoV TKp2wzt+qfhkltGWehzFN5RnwSqKAxLRv9Mkdqzc+3DO5X8HOK2LcFFITnedvRE66Dgp xUw2F7mYSRPkkNuWTe3g6YtBy87FVMoyKPWhqP/a0dKoPCP4mV7e4DaQ4DqMpFbA0nFI YEfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YBlvCdr9R6JPn+QJMsAZCPwXSXvtLfMvxwI/EyfWg3Q=; b=kvXHzNCnvAM9mxnTHjq00SEWb8XSAVRnFz7Ye75CntVvp4HgKBqvdHql51Vde8D/rW 72+JuLuGCjMHcdTsfvqF8KBKgEmuV5t+dbFxtma8aj/vRrBNzfOoWz+dYqPNX7rKKQ5I +7P+UflaTZXSjHKwTDy0O+YkWspcfMzBRcUrtVWoLuwsdRHJ406vsmaAoKdn2DmgaZ/e lWQ1K41VatuZvDkRcx/rtdPyrBHOPRXDOMhQKjS3FsvgaY/kmI04/y89SzM1r65ONv5i gGKEw1UNlj/1WdtjO7N5aMFzgmeXxia6IUV3DIQcU8QPbR/7XJ3wdxBMoKSoWrcGoWZv iY6A== X-Gm-Message-State: APjAAAWATn6Wea9EwgRnP8YoWz3r+wFQ0uG2+CZUjSuXzeJfXJX7Pjfk RnO/K2huz0wX9UobzX0OV/uMIVjaYA1YRw== X-Google-Smtp-Source: APXvYqyTBtf10zaPADdvf83K8FLdJ0FE7OqXi0hDG3zp0Gb/caBqiQgYTMgAh+Hk44uJ1FHXRhL4uQ== X-Received: by 2002:a17:906:6c19:: with SMTP id j25mr3888695ejr.21.1561554545920; Wed, 26 Jun 2019 06:09:05 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id y21sm2908057ejm.60.2019.06.26.06.09.04 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 26 Jun 2019 06:09:04 -0700 (PDT) From: "Basil L. Contovounesios" To: Stefan Kangas Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications References: Date: Wed, 26 Jun 2019 14:09:03 +0100 In-Reply-To: (Stefan Kangas's message of "Wed, 26 Jun 2019 13:31:06 +0200") Message-ID: <87v9ws8pe8.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 36392 Cc: 36392@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain tags 36392 + patch severity 36392 minor quit --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Clarify-update-elisp-Writing-Emacs-Primitives.patch >From 3d85d73858fe0c126277d04db8b99eeb9f09d672 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Wed, 26 Jun 2019 13:05:51 +0100 Subject: [PATCH] Clarify & update (elisp) Writing Emacs Primitives * doc/lispref/internals.texi (Writing Emacs Primitives): Replace outdated For listing with current Fwhile, so that the subsequent paragraph on maybe_quit still applies. Reconcile other code listings with their current source. Fix indentation of sample DEFUN argument lists. Replace ... with @dots{}. Fix argument list of Ffoo example. Describe UNEVALLED special forms as taking a single argument. (bug#36392) --- doc/lispref/internals.texi | 112 ++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 57 deletions(-) diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi index cfeb492af4..34dfb3924e 100644 --- a/doc/lispref/internals.texi +++ b/doc/lispref/internals.texi @@ -695,38 +695,36 @@ Writing Emacs Primitives C macros. The only way to really understand how to write new C code is to read the source, but we can explain some things here. - An example of a special form is the definition of @code{or}, from + An example of a special form is the definition of @code{while}, from @file{eval.c}. (An ordinary function would have the same general appearance.) @smallexample @group -DEFUN ("or", For, Sor, 0, UNEVALLED, 0, - doc: /* Eval args until one of them yields non-nil, then return -that value. -The remaining args are not evalled at all. -If all args return nil, return nil. +DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0, + doc: /* If TEST yields non-nil, eval BODY... and repeat. +The order of execution is thus TEST, BODY, TEST, BODY and so on +until TEST returns nil. @end group @group -usage: (or CONDITIONS...) */) +usage: (while TEST BODY...) */) (Lisp_Object args) @{ - Lisp_Object val = Qnil; + Lisp_Object test, body; @end group @group - while (CONSP (args)) + test = XCAR (args); + body = XCDR (args); + while (!NILP (eval_sub (test))) @{ - val = eval_sub (XCAR (args)); - if (!NILP (val)) - break; - args = XCDR (args); maybe_quit (); + prog_ignore (body); @} @end group @group - return val; + return Qnil; @} @end group @end smallexample @@ -742,14 +740,14 @@ Writing Emacs Primitives @table @var @item lname This is the name of the Lisp symbol to define as the function name; in -the example above, it is @code{or}. +the example above, it is @code{while}. @item fname This is the C function name for this function. This is the name that is used in C code for calling the function. The name is, by convention, @samp{F} prepended to the Lisp name, with all dashes (@samp{-}) in the Lisp name changed to underscores. Thus, to call -this function from C code, call @code{For}. +this function from C code, call @code{Fwhile}. @item sname This is a C variable name to use for a structure that holds the data for @@ -761,7 +759,7 @@ Writing Emacs Primitives @item min This is the minimum number of arguments that the function requires. The -function @code{or} allows a minimum of zero arguments. +function @code{while} allows a minimum of one argument. @item max This is the maximum number of arguments that the function accepts, if @@ -775,21 +773,20 @@ Writing Emacs Primitives @cindex interactive specification in primitives @item interactive This is an interactive specification, a string such as might be used -as the argument of @code{interactive} in a Lisp function -(@pxref{Using Interactive}). In the case -of @code{or}, it is 0 (a null pointer), indicating that @code{or} -cannot be called interactively. A value of @code{""} indicates a -function that should receive no arguments when called interactively. -If the value begins with a @samp{"(}, the string is evaluated as a -Lisp form. For example: +as the argument of @code{interactive} in a Lisp function (@pxref{Using +Interactive}). In the case of @code{while}, it is @code{0} (a null +pointer), indicating that @code{while} cannot be called interactively. +A value of @code{""} indicates a function that should receive no +arguments when called interactively. If the value begins with a +@samp{"(}, the string is evaluated as a Lisp form. For example: @example @group -DEFUN ("foo", Ffoo, Sfoo, 0, UNEVALLED, 0 +DEFUN ("foo", Ffoo, Sfoo, 0, 3, "(list (read-char-by-name \"Insert character: \")\ (prefix-numeric-value current-prefix-arg)\ - t))", - doc: /* @dots{} */) + t)", + doc: /* @dots{} */) @end group @end example @@ -826,8 +823,8 @@ Writing Emacs Primitives @example @group DEFUN ("bar", Fbar, Sbar, 0, UNEVALLED, 0 - doc: /* @dots{} */ - attributes: @var{attr1} @var{attr2} @dots{}) + doc: /* @dots{} */ + attributes: @var{attr1} @var{attr2} @dots{}) @end group @end example @@ -863,20 +860,23 @@ Writing Emacs Primitives arguments, there must be one C argument for each Lisp argument, and each argument must be of type @code{Lisp_Object}. (Various macros and functions for creating values of type @code{Lisp_Object} are declared -in the file @file{lisp.h}.) If the primitive has no upper limit on -the number of Lisp arguments, it must have exactly two C arguments: -the first is the number of Lisp arguments, and the second is the -address of a block containing their values. These have types -@code{int} and @w{@code{Lisp_Object *}} respectively. Since -@code{Lisp_Object} can hold any Lisp object of any data type, you -can determine the actual data type only at run time; so if you want -a primitive to accept only a certain type of argument, you must check -the type explicitly using a suitable predicate (@pxref{Type Predicates}). +in the file @file{lisp.h}.) If the primitive is a special form, it +must accept a Lisp list containing its unevaluated Lisp arguments as a +single argument of type @code{Lisp_Object}. If the primitive has no +upper limit on the number of evaluated Lisp arguments, it must have +exactly two C arguments: the first is the number of Lisp arguments, +and the second is the address of a block containing their values. +These have types @code{ptrdiff_t} and @w{@code{Lisp_Object *}}, +respectively. Since @code{Lisp_Object} can hold any Lisp object of +any data type, you can determine the actual data type only at run +time; so if you want a primitive to accept only a certain type of +argument, you must check the type explicitly using a suitable +predicate (@pxref{Type Predicates}). @cindex type checking internals @cindex garbage collection protection @cindex protect C variables from garbage collection - Within the function @code{For} itself, the local variable + Within the function @code{Fwhile} itself, the local variable @code{args} refers to objects controlled by Emacs's stack-marking garbage collector. Although the garbage collector does not reclaim objects reachable from C @code{Lisp_Object} stack variables, it may @@ -890,9 +890,8 @@ Writing Emacs Primitives Note the call to @code{maybe_quit} inside the loop: this function checks whether the user pressed @kbd{C-g}, and if so, aborts the processing. You should do that in any loop that can potentially -require a large number of iterations; in this case, the list of -arguments could be very long. This increases Emacs responsiveness and -improves user experience. +require a large number of iterations. This increases Emacs +responsiveness and improves user experience. You must not use C initializers for static or global variables unless the variables are never written once Emacs is dumped. These variables @@ -957,9 +956,9 @@ Writing Emacs Primitives @smallexample @group DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p, - Scoordinates_in_window_p, 2, 2, 0, - doc: /* Return non-nil if COORDINATES are in WINDOW. - ... + Scoordinates_in_window_p, 2, 2, 0, + doc: /* Return non-nil if COORDINATES are in WINDOW. + @dots{} @end group @group or `right-margin' is returned. */) @@ -972,43 +971,42 @@ Writing Emacs Primitives @end group @group - CHECK_LIVE_WINDOW (window); - w = XWINDOW (window); + w = decode_live_window (window); f = XFRAME (w->frame); CHECK_CONS (coordinates); lx = Fcar (coordinates); ly = Fcdr (coordinates); - CHECK_NUMBER_OR_FLOAT (lx); - CHECK_NUMBER_OR_FLOAT (ly); - x = FRAME_PIXEL_X_FROM_CANON_X (f, lx) + FRAME_INTERNAL_BORDER_WIDTH(f); - y = FRAME_PIXEL_Y_FROM_CANON_Y (f, ly) + FRAME_INTERNAL_BORDER_WIDTH(f); + CHECK_NUMBER (lx); + CHECK_NUMBER (ly); + x = FRAME_PIXEL_X_FROM_CANON_X (f, lx) + FRAME_INTERNAL_BORDER_WIDTH (f); + y = FRAME_PIXEL_Y_FROM_CANON_Y (f, ly) + FRAME_INTERNAL_BORDER_WIDTH (f); @end group @group switch (coordinates_in_window (w, x, y)) @{ - case ON_NOTHING: /* NOT in window at all. */ + case ON_NOTHING: return Qnil; @end group - ... + @dots{} @group - case ON_MODE_LINE: /* In mode line of window. */ + case ON_MODE_LINE: return Qmode_line; @end group - ... + @dots{} @group - case ON_SCROLL_BAR: /* On scroll-bar of window. */ + case ON_VERTICAL_SCROLL_BAR: /* Historically we are supposed to return nil in this case. */ return Qnil; @end group @group default: - abort (); + emacs_abort (); @} @} @end group -- 2.20.1 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Stefan Kangas writes: > As a beginner on Emacs Internals, I've been reading: > > (info "(elisp)Writing Emacs Primitives") > > I hope that you find the following observations useful: > > 1. "If the primitive accepts a fixed maximum number of Lisp > arguments, there must be one C argument for each Lisp argument, > and each argument must be of type =E2=80=98Lisp_Object=E2=80=99. ...= If the > primitive has no upper limit on the number of Lisp arguments, it > must have exactly two C arguments: the first is the number of Lisp > arguments, and the second is the address of a block containing > their values." > > The example given is DEFUN( "or", ...) > > This function has no upper limit on the number of Lisp arguments, but > still has only ONE argument. Unless I'm missing something, this > contradicts the statement above that "it must have exactly TWO C > arguments" (my emphasis). Indeed, this is because For is a special form (with UNEVALLED args). Compare it with the definition for Fapply (with MANY args) in the same file, and see the macros DEFUN_ARGS_UNEVALLED and DEFUN_ARGS_MANY in lisp.h. Does the attached patch, suitable for either master or emacs-26, help clarify this? > 2. "Although the garbage collector does not reclaim objects reachable > from C =E2=80=98Lisp_Object=E2=80=99 stack variables, it may move non= -object > components of an object, such as string contents; so functions > that access non-object components must take care to refetch their > addresses after performing Lisp evaluation." > > I don't think this is very clear. What is non-object components? How > would I refetch their addresses? How is this relevant to the topic at > hand? I don't know about this. Thanks, --=20 Basil --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 11:14:59 2019 Received: (at 36392) by debbugs.gnu.org; 26 Jun 2019 15:14:59 +0000 Received: from localhost ([127.0.0.1]:36804 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg9dQ-0004Be-4u for submit@debbugs.gnu.org; Wed, 26 Jun 2019 11:14:59 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34236) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hg9dK-0004BN-V4 for 36392@debbugs.gnu.org; Wed, 26 Jun 2019 11:14:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53939) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hg9dA-0003bv-87; Wed, 26 Jun 2019 11:14:42 -0400 Received: from [176.228.60.248] (port=2534 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1hg9d7-0000DL-VJ; Wed, 26 Jun 2019 11:14:39 -0400 Date: Wed, 26 Jun 2019 18:14:20 +0300 Message-Id: <831rzgl6pf.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" In-reply-to: <87v9ws8pe8.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications References: <87v9ws8pe8.fsf@tcd.ie> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 36392 Cc: 36392@debbugs.gnu.org, stefan@marxist.se X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "Basil L. Contovounesios" > Date: Wed, 26 Jun 2019 14:09:03 +0100 > Cc: 36392@debbugs.gnu.org > > >From 3d85d73858fe0c126277d04db8b99eeb9f09d672 Mon Sep 17 00:00:00 2001 > From: "Basil L. Contovounesios" > Date: Wed, 26 Jun 2019 13:05:51 +0100 > Subject: [PATCH] Clarify & update (elisp) Writing Emacs Primitives > > * doc/lispref/internals.texi (Writing Emacs Primitives): Replace > outdated For listing with current Fwhile, so that the subsequent > paragraph on maybe_quit still applies. Reconcile other code > listings with their current source. Fix indentation of sample DEFUN > argument lists. Replace ... with @dots{}. Fix argument list of > Ffoo example. Describe UNEVALLED special forms as taking a single > argument. (bug#36392) Hmm... I admit that I don't understand the rationale for these changes. Why replace the example? It's a useful example, and I see nothing wrong with it per se. The actual code doesn't have maybe_quit anymore, but so what? I don't think we should chace every change in the sources with our examples in the manual. > @@ -863,20 +860,23 @@ Writing Emacs Primitives > arguments, there must be one C argument for each Lisp argument, and > each argument must be of type @code{Lisp_Object}. (Various macros and > functions for creating values of type @code{Lisp_Object} are declared > -in the file @file{lisp.h}.) If the primitive has no upper limit on > -the number of Lisp arguments, it must have exactly two C arguments: > -the first is the number of Lisp arguments, and the second is the > -address of a block containing their values. These have types > -@code{int} and @w{@code{Lisp_Object *}} respectively. Since > -@code{Lisp_Object} can hold any Lisp object of any data type, you > -can determine the actual data type only at run time; so if you want > -a primitive to accept only a certain type of argument, you must check > -the type explicitly using a suitable predicate (@pxref{Type Predicates}). > +in the file @file{lisp.h}.) If the primitive is a special form, it > +must accept a Lisp list containing its unevaluated Lisp arguments as a > +single argument of type @code{Lisp_Object}. If the primitive has no > +upper limit on the number of evaluated Lisp arguments, it must have > +exactly two C arguments: the first is the number of Lisp arguments, > +and the second is the address of a block containing their values. > +These have types @code{ptrdiff_t} and @w{@code{Lisp_Object *}}, > +respectively. Since @code{Lisp_Object} can hold any Lisp object of > +any data type, you can determine the actual data type only at run > +time; so if you want a primitive to accept only a certain type of > +argument, you must check the type explicitly using a suitable > +predicate (@pxref{Type Predicates}). > @cindex type checking internals This part sounds OK to me, and is probably more than enough to fix the issue at hand. > - case ON_NOTHING: /* NOT in window at all. */ > + case ON_NOTHING: This seems a change for the worst? > > 2. "Although the garbage collector does not reclaim objects reachable > > from C ‘Lisp_Object’ stack variables, it may move non-object > > components of an object, such as string contents; so functions > > that access non-object components must take care to refetch their > > addresses after performing Lisp evaluation." > > > > I don't think this is very clear. What is non-object components? How > > would I refetch their addresses? How is this relevant to the topic at > > hand? > > I don't know about this. I clarified that. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 14:20:40 2019 Received: (at 36392) by debbugs.gnu.org; 26 Jun 2019 18:20:40 +0000 Received: from localhost ([127.0.0.1]:37027 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgCX9-0005B5-Tb for submit@debbugs.gnu.org; Wed, 26 Jun 2019 14:20:40 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:46353) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgCX4-0005Ap-0a for 36392@debbugs.gnu.org; Wed, 26 Jun 2019 14:20:35 -0400 Received: by mail-ed1-f65.google.com with SMTP id d4so4468336edr.13 for <36392@debbugs.gnu.org>; Wed, 26 Jun 2019 11:20:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=DM+jMhmbWGHac2qR43XxfSxnnt74svyjUywfXqSBq84=; b=X65oBBdHgB7vyeLC4d8IMobI1jzvm5+OUpvkvkkoexsWLDsV9qfRwlp44EX/dL4dDI P8PVcBvb/y8r0ic5H8P0meVHny1O6mJRl5W93sMBCzksNkOCWOT7MeBjUHT7Z4GeCk8k K4smjv5NqeYvs6bznyL14qmJLJs/T+UvHLj65XYvaY3r31UAj7OoEAkkXM3AI8gLdEWo 9fRR3y3ayx5w/8SpQPDyRkQNt+LFPbnjF/exBYQi2eHXA19jLPTwfvRd/qCi1HfRqCxc dkHfTqNCcg5TYHRzp67JkfYOyMMwEQfL5nBAvrOsr6pU5sseZRVcGRGu6NvO+Uet+FPO euQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=DM+jMhmbWGHac2qR43XxfSxnnt74svyjUywfXqSBq84=; b=ex3XK68lSUD2Uws5ajFuceMTL2ghFGLJYI5tPeamgEDTloDyLLp+PyqkPg4Up/1kMd kLXHnaRFn4DEnJGyTOSl+Ny/p38giO43aae151XVLLtsotcu2Ns9XOMIYFcDiBwBzULJ 07WSwghYDizz9ZJXPk2V3P0Wh8Mlfh9S4H/IbSFmJAigBlm2CGGSzIewVSYnrCmAzufW tF3oYz4Uh4DjCdeu3lu06OIAAS0788Ufhmh2hl2R3LBfJQirpiSTs2DCkU3s8Lvdp/l/ 6F/+ZXIXcEgEoBxY0uMCiN9IHCibDFES14l5Ng7s6WpEJOaaMYStzZac1LhPHoI+NoBN qr0w== X-Gm-Message-State: APjAAAUkNyunLBy5W1kncLdxY6ln53B7ewCr9JZTOxZS6Wb/cYGO3ubQ 90os4b6h/okpziTOgg6phVdJXg== X-Google-Smtp-Source: APXvYqwpV8hTxnbGVXvY2S7wMmljf+tSUT2qk6Q1axjhHaM5JIynTm5La2RYqrN0MCOYeAWSHRB19w== X-Received: by 2002:a17:906:5255:: with SMTP id y21mr5552339ejm.253.1561573227872; Wed, 26 Jun 2019 11:20:27 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id d28sm6159377edn.31.2019.06.26.11.20.26 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 26 Jun 2019 11:20:27 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications References: <87v9ws8pe8.fsf@tcd.ie> <831rzgl6pf.fsf@gnu.org> Date: Wed, 26 Jun 2019 19:20:25 +0100 In-Reply-To: <831rzgl6pf.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 26 Jun 2019 18:14:20 +0300") Message-ID: <87o92kus2e.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 36392 Cc: 36392@debbugs.gnu.org, stefan@marxist.se X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: "Basil L. Contovounesios" >> Date: Wed, 26 Jun 2019 14:09:03 +0100 >> Cc: 36392@debbugs.gnu.org >>=20 >> >From 3d85d73858fe0c126277d04db8b99eeb9f09d672 Mon Sep 17 00:00:00 2001 >> From: "Basil L. Contovounesios" >> Date: Wed, 26 Jun 2019 13:05:51 +0100 >> Subject: [PATCH] Clarify & update (elisp) Writing Emacs Primitives >>=20 >> * doc/lispref/internals.texi (Writing Emacs Primitives): Replace >> outdated For listing with current Fwhile, so that the subsequent >> paragraph on maybe_quit still applies. Reconcile other code >> listings with their current source. Fix indentation of sample DEFUN >> argument lists. Replace ... with @dots{}. Fix argument list of >> Ffoo example. Describe UNEVALLED special forms as taking a single >> argument. (bug#36392) > > Hmm... I admit that I don't understand the rationale for these > changes. > > Why replace the example? It's a useful example, and I see nothing > wrong with it per se. The actual code doesn't have maybe_quit > anymore, but so what? I don't think we should chace every change in > the sources with our examples in the manual. Indeed there's nothing wrong with the current example, and I don't feel too strongly about the change. Fwhile just happens to be a conveniently similar special form that is better represented by the paragraph on maybe_quit (not just because Fwhile currently calls maybe_quit, but also because it epitomises the need for maybe_quit). Do you prefer not to switch the example to Fwhile? >> @@ -863,20 +860,23 @@ Writing Emacs Primitives >> arguments, there must be one C argument for each Lisp argument, and >> each argument must be of type @code{Lisp_Object}. (Various macros and >> functions for creating values of type @code{Lisp_Object} are declared >> -in the file @file{lisp.h}.) If the primitive has no upper limit on >> -the number of Lisp arguments, it must have exactly two C arguments: >> -the first is the number of Lisp arguments, and the second is the >> -address of a block containing their values. These have types >> -@code{int} and @w{@code{Lisp_Object *}} respectively. Since >> -@code{Lisp_Object} can hold any Lisp object of any data type, you >> -can determine the actual data type only at run time; so if you want >> -a primitive to accept only a certain type of argument, you must check >> -the type explicitly using a suitable predicate (@pxref{Type Predicates}= ). >> +in the file @file{lisp.h}.) If the primitive is a special form, it >> +must accept a Lisp list containing its unevaluated Lisp arguments as a >> +single argument of type @code{Lisp_Object}. If the primitive has no >> +upper limit on the number of evaluated Lisp arguments, it must have >> +exactly two C arguments: the first is the number of Lisp arguments, >> +and the second is the address of a block containing their values. >> +These have types @code{ptrdiff_t} and @w{@code{Lisp_Object *}}, >> +respectively. Since @code{Lisp_Object} can hold any Lisp object of >> +any data type, you can determine the actual data type only at run >> +time; so if you want a primitive to accept only a certain type of >> +argument, you must check the type explicitly using a suitable >> +predicate (@pxref{Type Predicates}). >> @cindex type checking internals > > This part sounds OK to me, and is probably more than enough to fix the > issue at hand. Indeed, thanks. >> - case ON_NOTHING: /* NOT in window at all. */ >> + case ON_NOTHING: > > This seems a change for the worst? I'll bring back the comments. >> > 2. "Although the garbage collector does not reclaim objects reachable >> > from C =E2=80=98Lisp_Object=E2=80=99 stack variables, it may move = non-object >> > components of an object, such as string contents; so functions >> > that access non-object components must take care to refetch their >> > addresses after performing Lisp evaluation." >> > >> > I don't think this is very clear. What is non-object components? How >> > would I refetch their addresses? How is this relevant to the topic at >> > hand? >>=20 >> I don't know about this. > > I clarified that. Thanks, --=20 Basil From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 14:34:50 2019 Received: (at 36392) by debbugs.gnu.org; 26 Jun 2019 18:34:50 +0000 Received: from localhost ([127.0.0.1]:37044 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgCks-0005cD-9e for submit@debbugs.gnu.org; Wed, 26 Jun 2019 14:34:50 -0400 Received: from eggs.gnu.org ([209.51.188.92]:39469) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgCkq-0005bv-Eb for 36392@debbugs.gnu.org; Wed, 26 Jun 2019 14:34:49 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:58440) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hgCkk-0004au-Td; Wed, 26 Jun 2019 14:34:42 -0400 Received: from [176.228.60.248] (port=3221 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1hgCkg-0002xJ-Jt; Wed, 26 Jun 2019 14:34:42 -0400 Date: Wed, 26 Jun 2019 21:34:12 +0300 Message-Id: <83d0j0jivv.fsf@gnu.org> From: Eli Zaretskii To: "Basil L. Contovounesios" In-reply-to: <87o92kus2e.fsf@tcd.ie> (contovob@tcd.ie) Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications References: <87v9ws8pe8.fsf@tcd.ie> <831rzgl6pf.fsf@gnu.org> <87o92kus2e.fsf@tcd.ie> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 36392 Cc: 36392@debbugs.gnu.org, stefan@marxist.se X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: "Basil L. Contovounesios" > Cc: stefan@marxist.se, 36392@debbugs.gnu.org > Date: Wed, 26 Jun 2019 19:20:25 +0100 > > Do you prefer not to switch the example to Fwhile? Yes, I think we should just describe UNEVAL, so that the example doesn't confuse. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 17:29:28 2019 Received: (at control) by debbugs.gnu.org; 26 Jun 2019 21:29:28 +0000 Received: from localhost ([127.0.0.1]:37114 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgFTs-00034B-9q for submit@debbugs.gnu.org; Wed, 26 Jun 2019 17:29:28 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:45657) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgFTr-00033o-7T for control@debbugs.gnu.org; Wed, 26 Jun 2019 17:29:27 -0400 Received: by mail-ed1-f66.google.com with SMTP id a14so5007234edv.12 for ; Wed, 26 Jun 2019 14:29:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=qSWLSdoIjotaeG6h9YPbCDEgt2fNTiOD+yhQjGuNLko=; b=KAvkVCF3KPjlu9sM3EyU9WDcFB1vJYDUS9+yxwwjQFlObZujtsOpOZcgLfoqLVQGFO uXRb6mCksUfsVapqYeA7WlRWUT6TFqufqFHIiJwxhsN6krtPi3k9XSfoUeHNRMSDJ5tn B3cwYZ78U75psBqUCRE3fm6NL/6jXzV2O7J/hLI0zqMPTVIHRtNi7mQq41f2ZnWoJ4px I0LjyPv70LZSl6lbHOiPuYgAHkvNGb6RTZRXMs8Nq4p48AB3Lg82OOdbO4FlLNUJ3lck XRgWs0pQ/dSFJbeltYXessYrTYIkFVAybGaX2FGk3TnlkRASgtjTEGMzVw50T/Rg+XIB j8Tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=qSWLSdoIjotaeG6h9YPbCDEgt2fNTiOD+yhQjGuNLko=; b=GLcEAmqdoNlExwh7yz8zP07lwmxhAc3QPczZiviiOuSqs1DVcwdOTrChm4M4hU3p4N AwiMgw52R3BY5YDrwIAyyRi6Yf5Z2zEL0LjwvfrYxrAU2dr12siwXiBxk/SOUhzlTEzJ y+Nb53VztkwLeFuUhB/4QoiNHp7I7NACRpJH7Z6nJN3oEDwp+8n84Tg/bcjf5G3XomsU xOIxQyaJRTdjHGXe9IIFw4tcNGNBzARAAU0XEU1nGv6Doqgi3mS1Swp4xNzFjqIl5Yzh 1cNP2ymbS9BAzfo/HuZeZu8cgFQcq1qPXio9Py3akJugccKAPk1ozsOnjaulkRon/4EU piCA== X-Gm-Message-State: APjAAAWDdytIzfkLvDv4glPGLQ/C0rUThelaZlVSirTaTOu/vgkTjGud ltXJPrRZsXxIg5ciez6yanSCiA== X-Google-Smtp-Source: APXvYqwr/I5FSP9vW+VPrulRu9+muyGNbVq8ZbMEF+qYMDdwOhx81XaEuh04jEBfX9cBwrcJ3dRQNQ== X-Received: by 2002:a50:b617:: with SMTP id b23mr7830432ede.135.1561584561326; Wed, 26 Jun 2019 14:29:21 -0700 (PDT) Received: from localhost ([2a02:8084:20e2:c380:92bd:1bfd:38fc:fae2]) by smtp.gmail.com with ESMTPSA id z2sm35912ejp.73.2019.06.26.14.29.20 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 26 Jun 2019 14:29:20 -0700 (PDT) From: "Basil L. Contovounesios" To: Eli Zaretskii Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications References: <87v9ws8pe8.fsf@tcd.ie> <831rzgl6pf.fsf@gnu.org> <87o92kus2e.fsf@tcd.ie> <83d0j0jivv.fsf@gnu.org> Date: Wed, 26 Jun 2019 22:29:13 +0100 In-Reply-To: <83d0j0jivv.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 26 Jun 2019 21:34:12 +0300") Message-ID: <87tvcct4ra.fsf@tcd.ie> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control Cc: 36392-done@debbugs.gnu.org, stefan@marxist.se X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 36392 fixed close 36392 26.3 quit Eli Zaretskii writes: >> From: "Basil L. Contovounesios" >> Cc: stefan@marxist.se, 36392@debbugs.gnu.org >> Date: Wed, 26 Jun 2019 19:20:25 +0100 >> >> Do you prefer not to switch the example to Fwhile? > > Yes, I think we should just describe UNEVAL, so that the example > doesn't confuse. Okay, I pushed a more measured patch to emacs-26[1]. Stefan, do these patches address your concerns, or do you think further clarification is required? [1: 8b775c30ad]: Clarify & update (elisp) Writing Emacs Primitives 2019-06-26 22:16:52 +0100 https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=8b775c30adaad63a4838e911d6c02e55a4269c4e Thanks, -- Basil From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 26 21:02:19 2019 Received: (at 36392) by debbugs.gnu.org; 27 Jun 2019 01:02:19 +0000 Received: from localhost ([127.0.0.1]:37211 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgInr-0004sI-3A for submit@debbugs.gnu.org; Wed, 26 Jun 2019 21:02:19 -0400 Received: from mail-wr1-f42.google.com ([209.85.221.42]:44825) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hgIno-0004s2-KJ for 36392@debbugs.gnu.org; Wed, 26 Jun 2019 21:02:17 -0400 Received: by mail-wr1-f42.google.com with SMTP id r16so389872wrl.11 for <36392@debbugs.gnu.org>; Wed, 26 Jun 2019 18:02:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uOEIMg3sncO/H3zECsn3t1E/dMfp0Iyo3MfZMeY8lYQ=; b=sU4U5a2cTfR3QdqnUhf4uIqQUoqbqLFsD5JlsFUwY01LmAKTNBd8s+rCFwORV6Zd12 s5dV0B+5T+rplB6WDBJBzUbAHqsEXfmLJYBwhAWaUYB789nAQ+HFFx1oNS8kHxs1Vmh+ U/HVHxdFwvl+rX+KXWnXPRXIi2z6OnfGG4TQW4aEPcJ7YsvCXU1fp0MavX0DklcYa9fS OT3N8r4dKJbubO/1HNdj9HpMTCmgOuO6CxROr7uEIZ2TQ7zX/Ha/JQM2kDsNpFrIBmB3 18+jVIk5QDnkehac2bhEqFb0ahd0/tXB7rtYWOPvsWAje2XI6TQHs95dhWafJFU8w/OA yKXQ== X-Gm-Message-State: APjAAAWPAKK+0I8KbqEmQ3ba4QSPb802Lcs0sH0QMfA0qkEpQwCWy0EV nyqAu4iBuFEEJF93GdoAwkfySFPRJSPdLGT1LTA= X-Google-Smtp-Source: APXvYqwD32hpTnt2BwlrDyU5ij/Yawm1J888GWaYtmQD4CSU+6A5dHfMelBv2edm/17VILEsadoHPCVxSPNdO52sTt8= X-Received: by 2002:adf:f948:: with SMTP id q8mr460529wrr.196.1561597330786; Wed, 26 Jun 2019 18:02:10 -0700 (PDT) MIME-Version: 1.0 References: <87v9ws8pe8.fsf@tcd.ie> <831rzgl6pf.fsf@gnu.org> <87o92kus2e.fsf@tcd.ie> <83d0j0jivv.fsf@gnu.org> <87tvcct4ra.fsf@tcd.ie> In-Reply-To: <87tvcct4ra.fsf@tcd.ie> From: Stefan Kangas Date: Thu, 27 Jun 2019 03:01:59 +0200 Message-ID: Subject: Re: bug#36392: (info "(elisp)Writing Emacs Primitives") might need some clarifications To: "Basil L. Contovounesios" Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.5 (/) X-Debbugs-Envelope-To: 36392 Cc: Eli Zaretskii , 36392@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.5 (/) Basil L. Contovounesios writes: > [...] Stefan, do these > patches address your concerns, or do you think further clarification is > required? Absolutely, these changes makes things much clearer. Thank you both for fixing this so promptly. Best regards, Stefan Kangas From unknown Sat Jun 21 10:36:48 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 25 Jul 2019 11:24:12 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator