[Next] [Previous] [Up] [Top] [Contents] [Index]

10 Macros

Pattern Variable Constraints

Each pattern-variable in the left-hand side of a rule in a macro definition has a constraint associated with it. This prevents the pattern from matching unless the fragment matched to the pattern-variable satisfies the constraint. In most cases it also controls how the matching fragment is parsed.

You specify a constraint in a pattern-variable by suffixing a colon and the constraint name to the pattern variable name. Intervening whitespace is not allowed. As an abbreviation, if a pattern variable has the same name as its constraint, the pattern-variable can be written ?:the-name instead of ?the-name:the-name.

The following constraints are available:
Available constraints
Constraint name Grammar acceptedBinds pattern variable to
expression expressionparsed expression fragment
variable variablefragment(1)
name nameone-token fragment
token tokenone-token fragment
body bodyopt (2)parsed expression fragment (3)
case-body case-bodyopt (2)fragment(1)
macro macrofragment(4)
* (wildcard)fragment


Where expression, operand, constituents or body appears in the grammar that this constraint accepts, the bound fragment contains a parsed expression fragment, not the original elementary fragments.

Parsing stops at an intermediate word.

The body is wrapped in begin ... end to make it an expression, using the standard binding of begin in the Dylan module. An empty body defaults to #f.

A pattern-variable with a macro constraint accepts exactly one elementary fragment, which must be a macro call fragment. It binds the pattern variable to the expansion of the macro.

Some implementations and a future version of the Dylan language specification might add more constraint choices to this table.

When a pattern variable has the same name as an auxiliary rule-set, its constraint defaults to wildcard and can be omitted. Otherwise a constraint must be specified in every pattern-variable and pattern-keyword.

A constraint applies only to the specific pattern variable occurrence to which it is attached. It does not constrain other pattern variable occurrences with the same name.

Intermediate Words

When a pattern-variable has a constraint of body or case-body, its parsing of the fragment stops before any token that is an intermediate word. This allows intermediate words to delimit clauses that have separate bodies, like else and elseif in an if statement. The intermediate words of a macro are identified as follows:

Dylan Reference Manual - 17 OCT 1995
[Next] [Previous] [Up] [Top] [Contents] [Index]

Generated with Harlequin WebMaker