guile-cvs
[Top][All Lists]
Advanced

[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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]