Skip to content

Commit 989821e

Browse files
committed
add CompilerError, sort vars for deterministic codegen
Signed-off-by: James Hamlin <jfhamlin@gmail.com>
1 parent 02ce507 commit 989821e

File tree

14 files changed

+65012
-64942
lines changed

14 files changed

+65012
-64942
lines changed

pkg/codegen/codegen.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ func (g *Generator) Generate(ns *lang.Namespace) error {
9595
// 1. Iterate through ns.Mappings()
9696
// 2. Generate Go code for each var (this discovers lifted values)
9797
mappings := ns.Mappings()
98+
99+
type namedVar struct {
100+
name *lang.Symbol
101+
vr *lang.Var
102+
}
103+
var internedVars []namedVar
104+
98105
for seq := mappings.Seq(); seq != nil; seq = seq.Next() {
99106
entry := seq.First()
100107
name, ok := lang.First(entry).(*lang.Symbol)
@@ -111,8 +118,15 @@ func (g *Generator) Generate(ns *lang.Namespace) error {
111118
continue // Skip non-interned mappings
112119
}
113120

114-
if err := g.generateVar("ns", name, vr); err != nil {
115-
return fmt.Errorf("failed to generate code for var %s: %w", name, err)
121+
internedVars = append(internedVars, namedVar{name: name, vr: vr})
122+
}
123+
// Sort internedVars by name for deterministic output
124+
sort.Slice(internedVars, func(i, j int) bool {
125+
return internedVars[i].name.String() < internedVars[j].name.String()
126+
})
127+
for _, nv := range internedVars {
128+
if err := g.generateVar("ns", nv.name, nv.vr); err != nil {
129+
return fmt.Errorf("failed to generate code for var %s: %w", nv.name, err)
116130
}
117131
}
118132

0 commit comments

Comments
 (0)