document compiler/zo-struct changes for new bytecode form

This commit is contained in:
Matthew Flatt 2015-08-05 17:57:51 -06:00
parent 0480f55f67
commit 27fed2b1ed
2 changed files with 20 additions and 1 deletions

View File

@ -104,7 +104,10 @@ Many forms in the decompiled code, such as @racket[module],
@item{A form @racket[(#%apply-values _proc _expr)] is equivalent to
@racket[(call-with-values (lambda () _expr) _proc)], but the run-time
system avoids allocating a closure for @racket[_expr].}
system avoids allocating a closure for @racket[_expr]. Similarly,
a @racket[#%call-with-immediate-continuation-mark] call is equivalent to
a @racket[call-with-immediate-continuation-mark] call, but avoiding
a closure allocation.}
@item{A @racket[define-values] form may have @racket[(begin
'%%inline-variant%% _expr1 _expr2)] for its expression, in which case

View File

@ -567,6 +567,22 @@ binding, constructor, etc.}
which is handled specially by the run-time system.}
@defstruct+[(with-immed-mark expr)
([key (or/c expr? seq? any/c)]
[val (or/c expr? seq? any/c)]
[body (or/c expr? seq? any/c)])]{
Represents a @racket[(call-with-immediate-continuation-mark key
(lambda (_arg) _body) val)] expression that is handled specially by
the run-time system to avoid a closure allocation. One initialized
slot is pushed onto the stack after @racket[expr] and @racket[val]
are evaluated and before @racket[body] is evaluated.
After each of @racket[key] and @racket[val] is evaluated, the stack is
restored to its depth from before evaluating @racket[key] or
@racket[val].}
@defstruct+[(primval expr)
([id exact-nonnegative-integer?])]{
Represents a direct reference to a variable imported from the run-time