known?

known? (value -- isKnown)

Inputs

Outputs

known? is the preferred public name of the current stack-value knownness predicate. It tests whether the current stack value is fully known at compile time.

This predicate follows the referenced target for known non-NIL Ref values. It tests compile-time knownness only. Forgotten-contents state and current stability do not by themselves determine the result. Current stack Code values produced by user-visible creation paths such as codeRef, exportFunction, and block assignment to Code still report FALSE. This includes callable non-NIL Code values reached through those paths and known NIL Code values.

Behavior

Example

{} 0 {} [
  knownValue: 7;
  unknownValue: 0 dynamic;
  unknownText: 0 ("") dynamic @;
  codeLocal: {} () {} codeRef;
  [] !codeLocal

  "-- In-place values --" printCompilerMessage
  7 known? printStack _:;
  7 isDynamic printStack _:;
  7 stable? printStack _:;
  unknownValue known? printStack _:;
  unknownValue isDynamic printStack _:;
  unknownValue stable? printStack _:;

  "-- references ask about the target too --" printCompilerMessage
  @knownValue known? printStack _:;
  @unknownValue known? printStack _:;
  0nx knownValue addressToReference known? printStack _:;

  "-- text, meta, code --" printCompilerMessage
  "hi" known? printStack _:;
  0nx "" addressToReference known? printStack _:;
  unknownText known? printStack _:;
  () known? printStack _:;
  {} () {} codeRef known? printStack _:;
  {} () {} codeRef dynamic known? printStack _:;
  @codeLocal known? printStack _:;

  0
] "main" exportFunction

Expected Output During Compilation

-- In-place values --
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
-- references ask about the target too --
TRUE
FALSE
FALSE
-- text, meta, code --
TRUE
FALSE
FALSE
TRUE
FALSE
FALSE
FALSE

See also