AttrOf
Used to fetch an attribute of a node with the given name.
attrOf val name<id>
Returns the attribute named name from val.
If name is type, the lookup refers to the type attribute of the node. Otherwise, the lookup is performed on the node’s non-type attributes.
If an attribute is not found through the procedure above and val is a type, a lookup is performed on its type-specific attributes.
import "std/io.orb";
data Foo {
x:i32
}::((xTy i32));
fnc main () () {
eval (sym (x 0::mark));
attrOf x mark; # true
attrOf Foo xTy; # i32
};
There are two types of attributes: the type attribute (defined using
:) and non-type attributes (defined using::).
Each non-type attribute has a name and a value. The name must not be the identifier
type. Node attributes may not share names. If the value is not specified, it is implicitlytrue.
Attribute values must be evaluated, and of a non-owning type.
Node attributes are preserved in invocation arguments,
rawelements, and evaluated ref values.
After a node is processed, if the original node had a type attribute, it overrides the type attribute of the resulting node. The same applies to non-type attributes (as a whole, not per individual attribute).