fieldIsVirtual

fieldIsVirtual (schema ordinal -- hasNoStorage)

Inputs

Outputs

fieldIsVirtual is a selected-item storage predicate. It tests whether one selected item of the dereferenced Struct schema has no runtime field storage.

TRUE includes static items and Meta items. Current field contents do not participate. This is a schema predicate, not a read-result predicate, so a static item can make fieldIsVirtual return TRUE even though reading that item later produces a non-Meta value and virtual? returns FALSE. A static Ref-like item can make both fieldIsVirtual and fieldIsRef return TRUE, because storage kind and schema kind are tested separately.

Behavior

Example

{} 0 {} [
  dict: {
    ordinaryField: 0;
    staticField: 0 virtual;
    staticCodeField: {} () {} codeRef virtual;
    metaField: ();
  };

  "-- In-place field schema versus read result --" printCompilerMessage
  dict 0 fieldIsVirtual printStack _:;
  @dict 0 fieldRead virtual? printStack _:;

  "-- static field schema versus read result --" printCompilerMessage
  dict 1 fieldIsVirtual printStack _:;
  @dict 1 fieldRead virtual? printStack _:;

  "-- static Ref-like field schema versus read result --" printCompilerMessage
  dict 2 fieldIsVirtual printStack _:;
  dict 2 fieldIsRef printStack _:;
  @dict 2 fieldRead virtual? printStack _:;

  "-- meta field schema versus read result --" printCompilerMessage
  dict 3 fieldIsVirtual printStack _:;
  @dict 3 fieldRead virtual? printStack _:;

  tuple: (0 ());
  "-- Tuple item storage --" printCompilerMessage
  tuple 0 fieldIsVirtual printStack _:;
  tuple 1 fieldIsVirtual printStack _:;

  0
] "main" exportFunction

Expected Output During Compilation

-- In-place field schema versus read result --
FALSE
FALSE
-- static field schema versus read result --
TRUE
FALSE
-- static Ref-like field schema versus read result --
TRUE
TRUE
FALSE
-- meta field schema versus read result --
TRUE
TRUE
-- Tuple item storage --
FALSE
TRUE

See also