dynamic

dynamic (value -- dynamicValue)

Inputs

Outputs

dynamic is a current stack-value forgotten-contents conversion builtin. It keeps the schema of value and keeps the same general value kind, but it may erase current value knowledge.

For a known non-NIL Ref value, the referenced target becomes forgotten while the current Ref view stays the same.

Behavior

Example

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

  "-- In-place value --" printCompilerMessage
  7 known? printStack _:;
  7 dynamic printStack _:;
  7 dynamic known? printStack _:;
  7 dynamic isDynamic printStack _:;

  "-- known Ref --" printCompilerMessage
  @value known? printStack _:;
  @value dynamic printStack _:;
  @value dynamic known? printStack _:;
  @value dynamic isDynamic printStack _:;

  "-- known NIL Ref --" printCompilerMessage
  0nx value addressToReference printStack _:;
  0nx value addressToReference known? printStack _:;
  0nx value addressToReference isDynamic printStack _:;
  0nx value addressToReference dynamic printStack _:;
  0nx value addressToReference dynamic known? printStack _:;
  0nx value addressToReference dynamic isDynamic printStack _:;

  "-- code --" printCompilerMessage
  {} () {} codeRef printStack _:;
  {} () {} codeRef known? printStack _:;
  {} () {} codeRef isDynamic printStack _:;
  {} () {} codeRef dynamic printStack _:;
  {} () {} codeRef dynamic known? printStack _:;
  {} () {} codeRef dynamic isDynamic printStack _:;
  @codeLocal dynamic printStack _:;
  @codeLocal dynamic known? printStack _:;
  @codeLocal dynamic isDynamic printStack _:;

  "-- text and meta --" printCompilerMessage
  "hi" dynamic printStack _:;
  "hi" dynamic known? printStack _:;
  "hi" dynamic isDynamic printStack _:;
  () dynamic printStack _:;
  () dynamic known? printStack _:;
  () dynamic isDynamic printStack _:;

  0
] "main" exportFunction

Expected Output During Compilation

-- In-place value --
TRUE
Int32
FALSE
TRUE
-- known Ref --
TRUE
Int32 Ref
FALSE
TRUE
-- known NIL Ref --
Int32 CNIL
FALSE
FALSE
Int32 CNIL
FALSE
FALSE
-- code --
{} () {} codeRef CNIL
FALSE
FALSE
{} () {} codeRef
FALSE
FALSE
{} () {} codeRef
FALSE
FALSE
-- text and meta --
"hi"
TRUE
FALSE
()
TRUE
FALSE

See also