isStatic

isStatic (value -- isKnown)

Inputs

Outputs

isStatic is the historical 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;
  codeLocal: {} () {} codeRef;
  unknownValue: 0 dynamic;
  unknownText: 0 ("") dynamic @;
  [] !codeLocal

  "-- same as known? for In-place values --" printCompilerMessage
  7 isStatic printStack _:;
  7 known? printStack _:;
  unknownValue isStatic printStack _:;
  unknownValue known? printStack _:;
  unknownValue stable? printStack _:;

  "-- same as known? for references --" printCompilerMessage
  @knownValue isStatic printStack _:;
  @knownValue known? printStack _:;
  @unknownValue isStatic printStack _:;
  @unknownValue known? printStack _:;
  0nx knownValue addressToReference isStatic printStack _:;
  0nx knownValue addressToReference known? printStack _:;

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

  0
] "main" exportFunction

Expected Output During Compilation

-- same as known? for In-place values --
TRUE
TRUE
FALSE
FALSE
TRUE
-- same as known? for references --
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
-- same as known? for text, meta, code --
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE

See also