[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Library semantics correction



With the semantics as stated in the document, a library will only ever
be visited at phase 0, so a recursion step seems to be missing.  Indeed,
the following example is not covered:

  (library "m" "scheme"
    (export u)
    (define-syntax u (lambda (exp) (syntax 1)))

  (library "n" "scheme"
    (import (for "m" syntax))
    (define-syntax v (lambda (exp) (u)))

Indeed, visiting "n" at phase 0 requires "m" to be visited at phase 1 (because
there is a reference to the macro u on the right hand side of the
definition of v.

Here is what I think needs to be added:

To visit a library at phase N:

    * Visit at phase N any library that is imported by this library for run time,
      and that is not yet visited at phase N.
    * Invoke at phase N+1 any library that is imported by this library for .... expand,
      and that is not yet invoked at phase N+1.

[ADDITION]
    * Visit at phase N+1 any library that is imported by this library
      for .... expand, and that is not yet visited at phase N+1.
[END ADDITION]

    * Evaluate all syntax definitions within the library.
      (Top-level expressions are not evaluated, and the right-hand sides
      of variable definitions are not evaluated.)

Regards
Andre