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:
2026-02-14 14:30:11 +00:00
parent c49b00a2dc
commit 51c4f33a31
8 changed files with 7029 additions and 5864 deletions

View File

@@ -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,