GNU bug report logs -
#22630
[PATCH] Let assv/assoc shortcircuit to assq where feasible
Previous Next
Reported by: David Kastrup <dak <at> gnu.org>
Date: Thu, 11 Feb 2016 11:33:02 UTC
Severity: normal
Tags: patch
Done: Andy Wingo <wingo <at> pobox.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#22630: [PATCH] Let assv/assoc shortcircuit to assq where feasible
which was filed against the guile package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 22630 <at> debbugs.gnu.org.
--
22630: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22630
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
On Thu 11 Feb 2016 12:31, David Kastrup <dak <at> gnu.org> writes:
> * libguile/alist.c (scm_sloppy_assv, scm_sloppy_assoc):
> Shortcircuit to scm_sloppy_assq where feasible
> (scm_assv, scm_assoc): Shortcircuit to scm_assq where feasible
Applied to master, will backport when I get a chance. Thanks :)
Andy
[Message part 3 (message/rfc822, inline)]
* libguile/alist.c (scm_sloppy_assv, scm_sloppy_assoc):
Shortcircuit to scm_sloppy_assq where feasible
(scm_assv, scm_assoc): Shortcircuit to scm_assq where feasible
---
libguile/alist.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/libguile/alist.c b/libguile/alist.c
index f33aa41..e9bb80e 100644
--- a/libguile/alist.c
+++ b/libguile/alist.c
@@ -28,6 +28,7 @@
#include "libguile/validate.h"
#include "libguile/pairs.h"
+#include "libguile/numbers.h"
#include "libguile/alist.h"
@@ -72,6 +73,12 @@ SCM_DEFINE (scm_sloppy_assv, "sloppy-assv", 2, 0, 0,
"Recommended only for use in Guile internals.")
#define FUNC_NAME s_scm_sloppy_assv
{
+ /* Non-immediate numbers are the only keys we need to check
+ * other than with eq
+ */
+ if (!SCM_NUMP (key))
+ return scm_sloppy_assq (key, alist);
+
for (; scm_is_pair (alist); alist = SCM_CDR (alist))
{
SCM tmp = SCM_CAR (alist);
@@ -90,6 +97,10 @@ SCM_DEFINE (scm_sloppy_assoc, "sloppy-assoc", 2, 0, 0,
"Recommended only for use in Guile internals.")
#define FUNC_NAME s_scm_sloppy_assoc
{
+ /* Immediate values can be checked using eq */
+ if (SCM_IMP (key))
+ return scm_sloppy_assq (key, alist);
+
for (; scm_is_pair (alist); alist = SCM_CDR (alist))
{
SCM tmp = SCM_CAR (alist);
@@ -139,6 +150,13 @@ SCM_DEFINE (scm_assv, "assv", 2, 0, 0,
#define FUNC_NAME s_scm_assv
{
SCM ls = alist;
+
+ /* Non-immediate numbers are the only keys we need to check
+ * other than with eq
+ */
+ if (!SCM_NUMP (key))
+ return scm_assq (key, alist);
+
for(; scm_is_pair (ls); ls = SCM_CDR (ls))
{
SCM tmp = SCM_CAR (ls);
@@ -160,6 +178,11 @@ SCM_DEFINE (scm_assoc, "assoc", 2, 0, 0,
#define FUNC_NAME s_scm_assoc
{
SCM ls = alist;
+
+ /* Immediate values can be checked using eq */
+ if (SCM_IMP (key))
+ return scm_assq (key, alist);
+
for(; scm_is_pair (ls); ls = SCM_CDR (ls))
{
SCM tmp = SCM_CAR (ls);
--
2.5.0
This bug report was last modified 8 years and 286 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.