feat(life-arc): add field requirements for life arcs
Added optional requires clause to life_arc declarations:
life_arc Baker requires { skill_level: Number } { ... }
Includes new FieldRequirement AST type, requires keyword token,
and parser support for the requires clause.
This commit is contained in:
@@ -338,13 +338,26 @@ OverrideOp: OverrideOp = {
|
||||
// ===== Life Arc =====
|
||||
|
||||
LifeArc: LifeArc = {
|
||||
"life_arc" <name:Ident> "{" <fields:Field*> <states:ArcState*> "}" => LifeArc {
|
||||
"life_arc" <name:Ident> <reqs:RequiresClause?> "{" <fields:Field*> <states:ArcState*> "}" => LifeArc {
|
||||
name,
|
||||
required_fields: reqs.unwrap_or_default(),
|
||||
states,
|
||||
span: Span::new(0, 0),
|
||||
}
|
||||
};
|
||||
|
||||
RequiresClause: Vec<FieldRequirement> = {
|
||||
"requires" "{" <reqs:Comma<FieldReq>> "}" => reqs,
|
||||
};
|
||||
|
||||
FieldReq: FieldRequirement = {
|
||||
<name:Ident> ":" <type_name:Ident> => FieldRequirement {
|
||||
name,
|
||||
type_name,
|
||||
span: Span::new(0, 0),
|
||||
}
|
||||
};
|
||||
|
||||
ArcState: ArcState = {
|
||||
"state" <name:Ident> "{" <on_enter:OnEnter?> <fields:Field*> <transitions:Transition*> "}" => ArcState {
|
||||
name,
|
||||
@@ -963,6 +976,7 @@ extern {
|
||||
"sub_concept" => Token::SubConcept,
|
||||
"concept_comparison" => Token::ConceptComparison,
|
||||
"any" => Token::Any,
|
||||
"requires" => Token::Requires,
|
||||
"state" => Token::State,
|
||||
"on" => Token::On,
|
||||
"enter" => Token::Enter,
|
||||
|
||||
Reference in New Issue
Block a user