Module: Fusion::AST

Included in:
Interpreter, Parser
Defined in:
lib/fusion/ast.rb

Defined Under Namespace

Modules: Expression, Pattern, Statement

Constant Summary collapse

IDENTIFIER =

A syntactic identifier: a bound/looked-up name, a .key, or a ...rest binder. Mirrors the lexer's ident rule (Lexer#ident_start? / #ident_part?). Object keys are arbitrary strings, not identifiers, so they stay String.

/\A[A-Za-z_][A-Za-z0-9_]*\z/
ArrayItem =

An array element

TypedData.define(value: Expression)
ArraySpread =

...expr inside an array

TypedData.define(value: Expression)
KeyValuePair =

"k": expr inside an object

TypedData.define(key: String, value: Expression)
ObjectSpread =

...expr inside an object

TypedData.define(value: Expression)
Clause =

One pattern => body of a function

TypedData.define(pattern: Pattern, body: Expression)
PatternItem =

A sub-pattern of an array pattern

TypedData.define(pattern: Pattern)
PatternPair =

"k": pat inside an object pattern

TypedData.define(key: String, pattern: Pattern)
PatternRest =

...name in array/object pattern. (name nil = don't bind)

TypedData.define(name: ->(v) { IDENTIFIER === v || v.nil? })