diff --git a/docs/decisions.md b/docs/decisions.md index cc12a65..8b13829 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -590,8 +590,9 @@ is until a real data set needs the indexed form. 2026-09-17, Lilleman auf Larv. -A path that fails below its first level then moves no seeded stream, at the cost of one -draw-free walk per call, which allocates nothing up to 16 steps. +Goals 8 and 11: a path that fails moves no seeded stream, at the cost of one draw-free +walk per call, compiling its steps into a stack buffer of 16. Valid while that walk +costs little against the draw it guards. ## A country's postal codes and streets are siblings under its locality diff --git a/path.go b/path.go index c4f1307..b2ae912 100644 --- a/path.go +++ b/path.go @@ -200,12 +200,12 @@ type pathStep struct { type stepKind uint8 const ( - stepField stepKind = iota + 1 // into a field of the template at this level + stepField stepKind = iota + 1 // into a folder's entry or a template's field stepSelect // pin the selected row of the table stepDraw // draw a row of the table inside the pins stepRow // land on the table's row node - stepColumn // into a column of the table - stepChild // into a table linked to the table + stepColumn + stepChild ) // pathCheck proves a path resolves whichever way the draws go: every variant of a @@ -408,8 +408,6 @@ func (t *table) drawStep(s *generatorState, st pathStep, pins *pinSet) node { panic(internalError("drawStep has no case for step kind %d", st.kind)) } -// drawVariant is the variant of c a draw continues into at the step at: the one memo keeps for -// that level, drawn once, where the draw has a memo; else one drawn afresh. func drawVariant(s *generatorState, c *choice, memo *drawMemo, levels []string, at int) node { if memo == nil { return resolveChoice(s, c)