unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Neil Jerram <neil@ossau.uklinux.net>
Cc: guile-devel <guile-devel@gnu.org>
Subject: Re: Commercial development
Date: Mon, 18 Jul 2005 21:53:22 +0100	[thread overview]
Message-ID: <42DC16C2.70203@ossau.uklinux.net> (raw)
In-Reply-To: <42AC02AD.1030405@ossau.uklinux.net>

[-- Attachment #1: Type: text/plain, Size: 320 bytes --]

Neil Jerram wrote:
> How about the attached?  The scm_reverse_x is annoying, but removing it
> would require [...] constructing the list backwards in eval_letrec_inits - but I can't
> see a way of doing that.

I worked the list construction out at last, so I think the attached is
good to go now.  OK to commit?

	Neil


[-- Attachment #2: eval-letrec-inits.diff --]
[-- Type: text/x-patch, Size: 4918 bytes --]

cvs server: Diffing libguile
Index: libguile/ChangeLog
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/ChangeLog,v
retrieving revision 1.2293
diff -u -u -r1.2293 ChangeLog
--- libguile/ChangeLog	18 Jul 2005 13:55:44 -0000	1.2293
+++ libguile/ChangeLog	18 Jul 2005 20:49:06 -0000
@@ -1,3 +1,8 @@
+2005-07-18  Neil Jerram  <neil@ossau.uklinux.net>
+
+	* eval.c (eval_letrec_inits): New.
+	(CEVAL): Eval letrec initializer forms using eval_letrec_inits.
+
 2005-07-18  Mikael Djurfeldt  <mdj@d14n36.pdc.kth.se>
 
 	Some changes towards making it possible to run Guile on the EM64T
Index: libguile/eval.c
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/eval.c,v
retrieving revision 1.398
diff -u -u -r1.398 eval.c
--- libguile/eval.c	12 Jul 2005 00:28:09 -0000	1.398
+++ libguile/eval.c	18 Jul 2005 20:49:08 -0000
@@ -96,6 +96,7 @@
 static SCM canonicalize_define (SCM expr);
 static SCM *scm_lookupcar1 (SCM vloc, SCM genv, int check);
 static SCM unmemoize_builtin_macro (SCM expr, SCM env);
+static void eval_letrec_inits (SCM env, SCM init_forms, SCM **init_values_eol);
 
 \f
 
@@ -3148,6 +3149,30 @@
   return *results;
 }
 
+static void
+eval_letrec_inits (SCM env, SCM init_forms, SCM **init_values_eol)
+{
+  SCM argv[10];
+  int i = 0, imax = sizeof (argv) / sizeof (SCM);
+
+  while (!scm_is_null (init_forms))
+    {
+      if (imax == i)
+	{
+	  eval_letrec_inits (env, init_forms, init_values_eol);
+	  break;
+	}
+      argv[i++] = EVALCAR (init_forms, env);
+      init_forms = SCM_CDR (init_forms);
+    }
+
+  for (i--; i >= 0; i--)
+    {
+      **init_values_eol = scm_list_1 (argv[i]);
+      *init_values_eol = SCM_CDRLOC (**init_values_eol);
+    }
+}
+
 #endif /* !DEVAL */
 
 
@@ -3563,21 +3588,10 @@
           x = SCM_CDR (x);
           {
             SCM init_forms = SCM_CAR (x);
-            SCM init_values = SCM_EOL;
-            do
-              {
-                init_values = scm_cons (EVALCAR (init_forms, env), init_values);
-                init_forms = SCM_CDR (init_forms);
-              }
-            while (!scm_is_null (init_forms));
-
-	    /* In order to make case 1.1 of the R5RS pitfall testsuite
-	       succeed, we would need to copy init_values here like
-	       so:
-
-	       init_values = scm_list_copy (init_values);
-	    */
-            SCM_SETCDR (SCM_CAR (env), init_values);
+	    SCM init_values = scm_list_1 (SCM_BOOL_T);
+	    SCM *init_values_eol = SCM_CDRLOC (init_values);
+	    eval_letrec_inits (env, init_forms, &init_values_eol);
+            SCM_SETCDR (SCM_CAR (env), SCM_CDR (init_values));
           }
           x = SCM_CDR (x);
           PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
cvs server: Diffing libguile-ltdl
cvs server: Diffing libguile-ltdl/upstream
cvs server: Diffing libltdl
cvs server: Diffing oop
cvs server: Diffing oop/goops
cvs server: Diffing qt
cvs server: Diffing qt/md
cvs server: Diffing qt/time
cvs server: Diffing scripts
cvs server: Diffing srfi
cvs server: Diffing test-suite
Index: test-suite/ChangeLog
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/test-suite/ChangeLog,v
retrieving revision 1.354
diff -u -u -r1.354 ChangeLog
--- test-suite/ChangeLog	12 Jun 2005 12:31:52 -0000	1.354
+++ test-suite/ChangeLog	18 Jul 2005 20:49:08 -0000
@@ -1,3 +1,7 @@
+2005-07-18  Neil Jerram  <neil@ossau.uklinux.net>
+
+	* tests/r5rs_pitfall.test (1.1): Now passes.
+
 2005-06-12  Marius Vollmer  <mvo@zagadka.de>
 
 	* standalone/test-gh.c: Do nothing when deprecated things are
cvs server: Diffing test-suite/standalone
cvs server: Diffing test-suite/tests
Index: test-suite/tests/r5rs_pitfall.test
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/test-suite/tests/r5rs_pitfall.test,v
retrieving revision 1.6
diff -u -u -r1.6 r5rs_pitfall.test
--- test-suite/tests/r5rs_pitfall.test	5 Jun 2005 20:54:19 -0000	1.6
+++ test-suite/tests/r5rs_pitfall.test	18 Jul 2005 20:49:08 -0000
@@ -18,8 +18,6 @@
 ;; These tests have been copied from
 ;; http://sisc.sourceforge.net/r5rs_pitfall.scm and the 'should-be'
 ;; macro has been modified to fit into our test suite machinery.
-;;
-;; Test 1.1 fails, but we expect that.
 
 (define-module (test-suite test-r5rs-pitfall)
   :use-syntax (ice-9 syncase)
@@ -48,9 +46,7 @@
 ;; defines in letrec body 
 ;; http://groups.google.com/groups?selm=87bsoq0wfk.fsf%40app.dial.idiom.com
 
-;; See eval.c for how to make this test succeed.  Look for "r5rs pitfall".
-
-(should-be-but-isnt 1.1 0
+(should-be 1.1 0
  (let ((cont #f))
    (letrec ((x (call-with-current-continuation (lambda (c) (set! cont c) 0)))
             (y (call-with-current-continuation (lambda (c) (set! cont c) 0))))
cvs server: Diffing test-suite/tests/c-api

[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

      reply	other threads:[~2005-07-18 20:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <d3llfr$u1k$1@nnrp.waia.asn.au>
     [not found] ` <115t7ajdbfq8348@corp.supernews.com>
     [not found]   ` <871x966hwn.fsf@naia.workingwithlinux.com>
     [not found]     ` <426505c8$0$196$edfadb0f@dread12.news.tele.dk>
     [not found]       ` <Pine.LNX.4.58-L.0504191954120.15565@klodrik.uio.no>
     [not found]         ` <iM-dnUKnNq7zyPjfRVn-gw@giganews.com>
     [not found]           ` <426601FF.6010600@ossau.uklinux.net>
     [not found]             ` <9qGdnYkVut1t0PvfRVn-rw@giganews.com>
2005-04-20 19:19               ` Commercial development Neil Jerram
2005-04-20 19:23                 ` Neil Jerram
2005-06-05 20:41                   ` Marius Vollmer
2005-06-07 22:04                     ` Neil Jerram
2005-06-08 19:03                       ` Neil Jerram
2005-06-11 20:56                         ` Marius Vollmer
2005-06-12  7:30                           ` Neil Jerram
2005-06-12  9:38                             ` Neil Jerram
2005-07-18 20:53                               ` Neil Jerram [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42DC16C2.70203@ossau.uklinux.net \
    --to=neil@ossau.uklinux.net \
    --cc=guile-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).