This expands an expression and gives you an sexp representation
of the resulting ast, renaming symbols when there are conflicts.
It doesn't guarantee the minimum number of renames (neither in
terms of renamed bindings nor renamed instances) but tries to be
minimal and does guarantee no renames if there are no conflicts.
This is just for debugging purposes - chibi itself directly
uses the AST without renaming or doing anything like this.
Each contexts keep a link to the heap which it is a part
of (when using the native GC), as well as a vector of
special globals that it needs quick access to (e.g. the
`quote' and `quasiquote', etc. symbols. You can use this
to manage multiple completely unrelated VMs in the same
application, and everything will be thread-safe.
The old behavior is still available by editing config.h,
which now includes somewhat better descriptions of all
the settings.
all native types, present and future, now supported.
allows for distinguishing which slots should be used
for comparison (e.g. source info of pairs isn't compared).
Replacing sexp_make_integer, sexp_integerp, etc. with sexp_make_fixnum,
sexp_fixnump, etc. Defining the old names as variants handling either
fixnums or bignums, or just as aliases for the new terms when compiled
without bignum support. sexp_make_integer needs to take a context now
in case it generates a bignum.
Adding sexp_gc_var1..6 and corresponding _preserve/release1..6
referring to fixed preservation variable names, to substantially
reduce the boilerplate on C functions which produce temporary sexp
values. The fixed variable names are safe because we never nest
them within the same C function. The original macros are still
available for manual naming, block local variables and cases of
more than 6 gc vars.
Consider combining var+preserve into a single macro, since splitting
them is rare.