A compiled <send> executable-content node (spec 6.2) - the interned
counterpart to Statifier.Document.Send.
event, target, type, and delay each fold their own static/expr
attribute pair into a single Machine.expr() | nil, mirroring
Statifier.Machine.Invoke.type/.src: {:static, v} from
event/target/type/delay, {:compiled, ...} from
eventexpr/targetexpr/typeexpr/delayexpr, nil when neither
sibling was written (an already-validated document never writes both -
6.2.1's "Must not occur with" pairs).
id is the author's literal id attribute, used verbatim
(ADR-0008 as amended). idlocation stays a raw, uncompiled location
path string, never a compiled expression - Statifier.Machine.Invoke.idlocation's
own moduledoc gives the reason: a location path cannot be resolved any
earlier than execute time, even in principle.
namelist and params are kept as two separate lists of
Statifier.Machine.Param.t(), every namelist entry compiled with
kind: :location - the same split Statifier.Machine.Invoke keeps for
its own namelist/params, so the validator can enforce 6.2.1's
"namelist Must not occur with the <param> element". A namelist entry
that fails to compile as a location expression does not fail
Statifier.Compiler.compile/1: it carries {:invalid, error} on the
entry's expr (5.9.4 deferral, see Statifier.Machine.Param) and is
discarded at execute time - resolve_params/2 below - rather than at load
time.
content folds <content>'s markup into a single Machine.expr(),
exactly as Machine.Invoke.content and Machine.Donedata.expr do - nil
when <send> has no <content> child.
attribute_locations is Statifier.Document.Send's own map, carried
through unchanged rather than distilled into individual *_location
fields - the same call Statifier.Machine.Invoke's moduledoc makes for
its own eight source attributes.
Its Statifier.ExecutableContent implementation lives right below the
struct: this file is the whole node, top to bottom, with no dispatcher
anywhere else in the tree.
Summary
Types
@type t() :: %Statifier.Machine.Content.Send{ attribute_locations: Statifier.Document.attribute_locations(), c_index: non_neg_integer(), content: Statifier.Machine.expr() | nil, delay: Statifier.Machine.expr() | nil, event: Statifier.Machine.expr() | nil, id: String.t() | nil, idlocation: String.t() | nil, location: Statifier.Parser.Location.t(), namelist: [Statifier.Machine.Param.t()], params: [Statifier.Machine.Param.t()], target: Statifier.Machine.expr() | nil, type: Statifier.Machine.expr() | nil }