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." } ;