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
prev parent 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).