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