fieldWrite

fieldWrite (value structTarget ordinal --)

Inputs

Outputs

Writes one selected item by zero-based item ordinal, with the value and Struct target before the ordinal.

Selection happens inside the builtin from data inputs. Both value and structTarget are dereferenced first. For In-place selected items, a Ref value therefore contributes the value it references. For Ref selected items, replacement still follows the selected item's own Ref schema.

Behavior

fieldIsRef describes the selected item schema, not the accepted source form after dereferencing. A non-static In-place item can therefore still require a direct same-schema value even though reading the same item yields a Ref result, while a Ref item can accept either a matching Ref or a direct value of its referent schema.

Example

{} 0 {} [
  value: 1;
  dict: {
    ordinaryField: 2;
    mutableReferenceField: @value;
    immutableReferenceField: value;
    codeField: {} () {} codeRef;
  };

  "-- In-place item write rule --" printCompilerMessage
  dict 0 fieldIsRef printStack _:;
  7 @dict 0 fieldWrite
  @dict 0 fieldRead new printStack _:;

  "-- mutable Ref item write rule --" printCompilerMessage
  dict 1 fieldIsRef printStack _:;
  5 @dict 1 fieldWrite
  @dict 1 fieldRead printStack _:;

  "-- immutable Ref item write rule --" printCompilerMessage
  dict 2 fieldIsRef printStack _:;
  6 @dict 2 fieldWrite
  @dict 2 fieldRead printStack _:;

  "-- code item write rule --" printCompilerMessage
  dict 3 fieldIsRef printStack _:;
  ["-- code field compiled --" printCompilerMessage] @dict 3 fieldWrite
  @dict 3 fieldRead printStack _:;

  list: (1 2) dynamic;
  ordinal: 0 dynamic;
  "-- uniform struct through unknown ordinal --" printCompilerMessage
  9 @list ordinal fieldWrite
  @list new printStack _:;

  0
] "main" exportFunction

Expected Output During Compilation

-- In-place item write rule --
FALSE
7
-- mutable Ref item write rule --
TRUE
5 Ref
-- immutable Ref item write rule --
TRUE
6 Cref
-- code item write rule --
TRUE
-- code field compiled --
{} () {} codeRef
-- uniform struct through unknown ordinal --
Int32 2 array

See also