fieldWrite (source structTarget ordinal --)

Inputs

Outputs

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

Selection happens inside the builtin from data inputs. structTarget is dereferenced for the selection; source keeps its form. For In-place selected items a Ref source is rejected, so a referenced object must be supplied as an object, for example with new. 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 object even though reading the same item yields a Ref result, while a Ref item can accept either a matching Ref or a direct object 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