32 lines
1.9 KiB
Plaintext
32 lines
1.9 KiB
Plaintext
IN: inference
|
|
USING: help words ;
|
|
|
|
HELP: consume/produce
|
|
{ $values { "word" "a word" } { "effect" "an instance of " { $link effect } } }
|
|
{ $description "Adds a node to the dataflow graph that calls " { $snippet "word" } " with a stack effect of " { $snippet "effect" } "." } ;
|
|
|
|
HELP: no-effect
|
|
{ $values { "word" "a word" } }
|
|
{ $description "Throws a " { $link no-effect } " error." }
|
|
{ $error-description "Thrown when inference encounters a call to a word which is already known not to have a static stack effect, due to a prior inference attempt failing." } ;
|
|
|
|
HELP: collect-recursion
|
|
{ $values { "#label" "a " { $link #label } " node" } { "seq" "a new sequence" } }
|
|
{ $description "Collect the input stacks of all child " { $link #call-label } " nodes that call the given label." } ;
|
|
|
|
HELP: inline-closure
|
|
{ $values { "word" "a word" } }
|
|
{ $description "Called during inference to infer stack effects of inline words."
|
|
$terpri
|
|
"If the inline word is recursive, a new " { $link #label } " node is added to the dataflow graph, and the word has to be inferred twice, to determine which literals survive the recursion (eg, quotations) and which don't (loop indices, etc)."
|
|
$terpri
|
|
"If the inline word is not recursive, the resulting nodes are spliced into the dataflow graph, and no " { $link #label } " node is created." } ;
|
|
|
|
HELP: effect-error
|
|
{ $values { "word" "a word" } { "effect" "an instance of " { $link effect } } }
|
|
{ $description "Throws an " { $link effect-error } "." }
|
|
{ $error-description "Thrown when a word's inferred stack effect does not match its declared stack effect." } ;
|
|
|
|
HELP: recursive-declare-error
|
|
{ $error-description "Thrown when inference encounters a recursive call to a word lacking a stack effect declaration. Recursive words must declare a stack effect in order to compile. Due to implementation detail, generic words are recursive, and thus the same restriction applies." } ;
|