fieldIsRef

fieldIsRef (schema ordinal -- isRefLike)

Inputs

Outputs

fieldIsRef is a selected-item schema predicate. It tests whether one selected item of the dereferenced Struct schema is Ref-like.

In this builtin, Ref-like means Ref, Code, or Text. Current field contents, current knownness, and current NIL status do not participate. This is a schema predicate, not a read-result predicate, so a non-static In-place item can make fieldIsRef return FALSE even though reading that item later produces a Ref-like result. A static Ref-like item can make both fieldIsRef and fieldIsVirtual return TRUE, because schema kind and runtime storage are tested separately.

Behavior

Example

{} 0 {} [
  dict: {
    ordinaryField: 0;
    textField: 0 ("") dynamic @;
    codeField: {} () {} codeRef;
    metaField: ();
  };

  "-- In-place field schema versus read result --" printCompilerMessage
  dict 0 fieldIsRef printStack _:;
  @dict 0 fieldRead isRef printStack _:; _:;

  "-- text field schema versus read result --" printCompilerMessage
  dict 1 fieldIsRef printStack _:;
  @dict 1 fieldRead isRef printStack _:; _:;

  "-- code field schema versus read result --" printCompilerMessage
  dict 2 fieldIsRef printStack _:;
  @dict 2 fieldRead isRef printStack _:; _:;

  "-- meta field schema versus read result --" printCompilerMessage
  dict 3 fieldIsRef printStack _:;
  @dict 3 fieldRead isRef printStack _:; _:;

  tuple: (0 "" {} () {} codeRef);
  "-- Tuple item schemas use the same category --" printCompilerMessage
  tuple 0 fieldIsRef printStack _:;
  tuple 1 fieldIsRef printStack _:;
  tuple 2 fieldIsRef printStack _:;

  0
] "main" exportFunction

Expected Output During Compilation

-- In-place field schema versus read result --
FALSE
0 Ref
TRUE
-- text field schema versus read result --
TRUE
Text
TRUE
-- code field schema versus read result --
TRUE
{} () {} codeRef CNIL
TRUE
-- meta field schema versus read result --
FALSE
()
FALSE
-- Tuple item schemas use the same category --
FALSE
TRUE
TRUE

See also