LispMe

vm.c の PTR exec(void) を一部抜粋。cons とかはマクロ。

      case LDC:
        /*------------------------------------------------------------*/
        /* s e (LDC x.c) d --> (x.s) e c d                            */
        /*------------------------------------------------------------*/
        S = cons(cadr(C),S);
        goto skip2;


      case LDF:
        /*------------------------------------------------------------*/
        /* s e (LDF c'.c) d --> ((c'.e).s) e c d                      */
        /*------------------------------------------------------------*/
        S = cons(cons(cadr(C),E), S);
        goto skip2;


      case AP:
        /*------------------------------------------------------------*/
        /* ((c'.e') v.s) e (AP.c) d --> NIL (v.e') c' (s e c.d)       */
        /*------------------------------------------------------------*/
        D = cons(cddr(S), cons(E, cons(cdr(C), D)));
        E = cons(cadr(S), cdar(S));
        C = caar(S); S = NIL;
        break;