[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
guile/guile-core/libguile eval.c
From: |
Marius Vollmer |
Subject: |
guile/guile-core/libguile eval.c |
Date: |
Sat, 03 Mar 2001 15:52:58 -0800 |
CVSROOT: /cvs
Module name: guile
Changes by: Marius Vollmer <address@hidden> 01/03/03 15:52:58
Modified files:
guile-core/libguile: eval.c
Log message:
* eval.c (scm_s_duplicate_bindings): New error message.
(scm_m_letrec1, scm_m_letstar): Check for duplicate bindings.
CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/eval.c.diff?r1=1.204&r2=1.205
Patches:
Index: guile/guile-core/libguile/eval.c
diff -u guile/guile-core/libguile/eval.c:1.204
guile/guile-core/libguile/eval.c:1.205
--- guile/guile-core/libguile/eval.c:1.204 Sat Mar 3 09:24:51 2001
+++ guile/guile-core/libguile/eval.c Sat Mar 3 15:52:57 2001
@@ -445,6 +445,7 @@
const char scm_s_test[] = "bad test";
const char scm_s_body[] = "bad body";
const char scm_s_bindings[] = "bad bindings";
+const char scm_s_duplicate_bindings[] = "duplicate bindings";
const char scm_s_variable[] = "bad variable";
const char scm_s_clauses[] = "bad or missing clauses";
const char scm_s_formals[] = "bad formals";
@@ -711,6 +712,8 @@
arg1 = SCM_CAR (proc);
SCM_ASSYNT (2 == scm_ilength (arg1), xorig, scm_s_bindings, s_letstar);
SCM_ASSYNT (SCM_SYMBOLP (SCM_CAR (arg1)), xorig, scm_s_variable,
s_letstar);
+ if (scm_c_improper_memq (SCM_CAR (arg1), vars))
+ scm_wta (xorig, scm_s_duplicate_bindings, s_letstar);
*varloc = scm_cons2 (SCM_CAR (arg1), SCM_CAR (SCM_CDR (arg1)), SCM_EOL);
varloc = SCM_CDRLOC (SCM_CDR (*varloc));
proc = SCM_CDR (proc);
@@ -916,6 +919,8 @@
arg1 = SCM_CAR (proc);
SCM_ASSYNT (2 == scm_ilength (arg1), xorig, scm_s_bindings, what);
SCM_ASSYNT (SCM_SYMBOLP (SCM_CAR (arg1)), xorig, scm_s_variable, what);
+ if (scm_c_improper_memq (SCM_CAR (arg1), vars))
+ scm_wta (xorig, scm_s_duplicate_bindings, what);
vars = scm_cons (SCM_CAR (arg1), vars);
*initloc = scm_cons (SCM_CAR (SCM_CDR (arg1)), SCM_EOL);
initloc = SCM_CDRLOC (*initloc);
@@ -970,7 +975,7 @@
}
SCM_ASSYNT (SCM_NIMP (proc), xorig, scm_s_bindings, s_let);
- if (SCM_CONSP (proc))
+ if (SCM_CONSP (proc))
{
/* plain let, proc is <bindings> */
return scm_m_letrec1 (SCM_IM_LET, SCM_IM_LET, xorig, env);