pm_match_required_node_t

Type Alias pm_match_required_node_t 

Source
pub type pm_match_required_node_t = pm_match_required_node;
Expand description

MatchRequiredNode

Represents the use of the => operator.

 foo => bar
 ^^^^^^^^^^

Type: ::PM_MATCH_REQUIRED_NODE

@extends pm_node_t

Aliased Type§

#[repr(C)]
pub struct pm_match_required_node_t { pub base: pm_node, pub value: *mut pm_node, pub pattern: *mut pm_node, pub operator_loc: pm_location_t, }

Fields§

§base: pm_node

The embedded base node.

§value: *mut pm_node

MatchRequiredNode#value

Represents the left-hand side of the operator.

 foo => bar
 ^^^
§pattern: *mut pm_node

MatchRequiredNode#pattern

Represents the right-hand side of the operator. The type of the node depends on the expression.

Anything that looks like a local variable name (including _) will result in a LocalVariableTargetNode.

 foo => a # This is equivalent to writing `a = foo`
        ^

Using an explicit Array or combining expressions with , will result in a ArrayPatternNode. This can be preceded by a constant.

 foo => [a]
        ^^^
 foo => a, b
        ^^^^
 foo => Bar[a, b]
        ^^^^^^^^^

If the array pattern contains at least two wildcard matches, a FindPatternNode is created instead.

 foo => *, 1, *a
        ^^^^^

Using an explicit Hash or a constant with square brackets and hash keys in the square brackets will result in a HashPatternNode.

 foo => { a: 1, b: }
 foo => Bar[a: 1, b:]
 foo => Bar[**]

To use any variable that needs run time evaluation, pinning is required. This results in a PinnedVariableNode

 foo => ^a
        ^^

Similar, any expression can be used with pinning. This results in a PinnedExpressionNode.

 foo => ^(a + 1)

Anything else will result in the regular node for that expression, for example a ConstantReadNode.

 foo => CONST
§operator_loc: pm_location_t

MatchRequiredNode#operator_loc

The location of the operator.

 foo => bar
     ^^