/[guile]/guile/guile-core/libguile/eval.c
ViewVC logotype

Diff of /guile/guile-core/libguile/eval.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.317 by dirk, Wed Jun 4 23:50:13 2003 UTC revision 1.318 by dirk, Sun Sep 14 08:07:10 2003 UTC
# Line 1618  unmemocopy (SCM x, SCM env) Line 1618  unmemocopy (SCM x, SCM env)
1618      case SCM_BIT7 (SCM_IM_SET_X):      case SCM_BIT7 (SCM_IM_SET_X):
1619        ls = z = scm_cons (scm_sym_set_x, SCM_UNSPECIFIED);        ls = z = scm_cons (scm_sym_set_x, SCM_UNSPECIFIED);
1620        break;        break;
     case SCM_BIT7 (SCM_IM_DEFINE):  
       {  
         SCM n;  
         x = SCM_CDR (x);  
         n = SCM_CAR (x);  
         z = scm_cons (n, SCM_UNSPECIFIED);  
         ls = scm_cons (scm_sym_define, z);  
         if (!SCM_NULLP (env))  
           env = scm_cons (scm_cons (scm_cons (n, SCM_CAAR (env)),  
                                     SCM_CDAR (env)),  
                           SCM_CDR (env));  
         break;  
       }  
1621      case SCM_BIT7 (SCM_MAKISYM (0)):      case SCM_BIT7 (SCM_MAKISYM (0)):
1622        z = SCM_CAR (x);        z = SCM_CAR (x);
       if (!SCM_ISYMP (z))  
         goto unmemo;  
1623        switch (SCM_ISYMNUM (z))        switch (SCM_ISYMNUM (z))
1624          {          {
1625            case (SCM_ISYMNUM (SCM_IM_DEFINE)):
1626              {
1627                SCM n;
1628                x = SCM_CDR (x);
1629                n = SCM_CAR (x);
1630                z = scm_cons (n, SCM_UNSPECIFIED);
1631                ls = scm_cons (scm_sym_define, z);
1632                if (!SCM_NULLP (env))
1633                  env = scm_cons (scm_cons (scm_cons (n, SCM_CAAR (env)),
1634                                            SCM_CDAR (env)),
1635                                  SCM_CDR (env));
1636                break;
1637              }
1638          case (SCM_ISYMNUM (SCM_IM_APPLY)):          case (SCM_ISYMNUM (SCM_IM_APPLY)):
1639            ls = z = scm_cons (scm_sym_atapply, SCM_UNSPECIFIED);            ls = z = scm_cons (scm_sym_atapply, SCM_UNSPECIFIED);
1640            goto loop;            goto loop;
# Line 1657  unmemocopy (SCM x, SCM env) Line 1655  unmemocopy (SCM x, SCM env)
1655          default:          default:
1656            /* appease the Sun compiler god: */ ;            /* appease the Sun compiler god: */ ;
1657          }          }
     unmemo:  
1658      default:      default:
1659        ls = z = unmemocar (scm_cons (unmemocopy (SCM_CAR (x), env),        ls = z = unmemocar (scm_cons (unmemocopy (SCM_CAR (x), env),
1660                                      SCM_UNSPECIFIED),                                      SCM_UNSPECIFIED),
# Line 2441  dispatch: Line 2438  dispatch:
2438        RETURN (SCM_UNSPECIFIED);        RETURN (SCM_UNSPECIFIED);
2439    
2440    
     case SCM_BIT7 (SCM_IM_DEFINE):      /* only for internal defines */  
       scm_misc_error (NULL, "Bad define placement", SCM_EOL);  
   
   
2441        /* new syntactic forms go here. */        /* new syntactic forms go here. */
2442      case SCM_BIT7 (SCM_MAKISYM (0)):      case SCM_BIT7 (SCM_MAKISYM (0)):
2443        proc = SCM_CAR (x);        proc = SCM_CAR (x);
       if (!SCM_ISYMP (proc))  
         goto evapply;  
   
2444        switch (SCM_ISYMNUM (proc))        switch (SCM_ISYMNUM (proc))
2445          {          {
2446    
2447    
2448            case (SCM_ISYMNUM (SCM_IM_DEFINE)):
2449              /* Top level defines are handled directly by the memoizer and thus
2450               * will never generate memoized code with SCM_IM_DEFINE.  Internal
2451               * defines which occur at valid positions will be transformed into
2452               * letrec expressions.  Thus, whenever the executor detects
2453               * SCM_IM_DEFINE, this must come from an internal definition at an
2454               * illegal position.  */
2455              scm_misc_error (NULL, "Bad define placement", SCM_EOL);
2456    
2457    
2458          case (SCM_ISYMNUM (SCM_IM_APPLY)):          case (SCM_ISYMNUM (SCM_IM_APPLY)):
2459            x = SCM_CDR (x);            x = SCM_CDR (x);
2460            proc = EVALCAR (x, env);            proc = EVALCAR (x, env);

Legend:
Removed from v.1.317  
changed lines
  Added in v.1.318

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26