@@ -11,80 +11,84 @@ import (
1111)
1212
1313func init () {
14- traversal .Register (func (blockCtx * grammar.NoiseRouterBlockContext , currentNamespace string , scope * traversal.Scope ) traversal.Construct {
15- for _ , child := range blockCtx .GetChildren () {
16- if rule , ok := child .(antlr.ParserRuleContext ); ok {
17- traversal .ConstructRegistry .Construct (rule , currentNamespace , scope )
14+ traversal .Register (func (blockCtx * grammar.NoiseRouterBlockContext , currentNamespace string , scope * traversal.Scope ) traversal.Construct {
15+ for _ , child := range blockCtx .GetChildren () {
16+ if rule , ok := child .(antlr.ParserRuleContext ); ok {
17+ traversal .ConstructRegistry .Construct (rule , currentNamespace , scope )
18+ }
1819 }
19- }
20- return nil
21- })
20+ return nil
21+ })
2222 traversal .Register (func (declaration * grammar.NoiseRouterDeclarationContext , currentNamespace string , scope * traversal.Scope ) traversal.Construct {
2323
24- routerDef := declaration .NoiseRouter ()
25- if routerDef == nil {
26- scope .DiagnoseSemanticError ("Missing noise router definition" , declaration )
27- return nil
28- }
24+ routerDef := declaration .NoiseRouter ()
25+ if routerDef == nil {
26+ scope .DiagnoseSemanticError ("Missing noise router definition" , declaration )
27+ return nil
28+ }
2929
30- s := traversal .ProcessDeclaration (declaration .Declare (), routerDef , scope , currentNamespace , "NoiseRouter" )
31- if s == nil {
32- return nil
33- }
34- return s .GetValue ()
35- })
30+ s := traversal .ProcessDeclaration (declaration .Declare (), routerDef , scope , currentNamespace , "NoiseRouter" )
31+ if s == nil {
32+ return nil
33+ }
34+ return s .GetValue ()
35+ })
3636
3737 traversal .Register (func (router * grammar.NoiseRouterContext , currentNamespace string , scope * traversal.Scope ) traversal.Construct {
3838 out := & NoiseRouter {}
3939
40- finalDensityPresent := false
41- for _ , builderCtx := range router .AllNoiseRouter_Builder () {
42- builderKindCtx := builderCtx .GetChild (1 )
43- if builderKindCtx == nil {
44- scope .DiagnoseSemanticError ("Missing builder" , router )
45- continue
46- }
47- builderKind := builderKindCtx .(antlr.TerminalNode ).GetText ()
48-
49- value := traversal .ConstructRegistry .Construct (builderCtx .DensityFn (), currentNamespace , scope )
50- switch NoiseRouterBuilderKind (builderKind ) {
51- case FinalDensity :
52- finalDensityPresent = true
53- out .FinalDensity = value
54- case Barrier :
55- out .Barrier = value
56- case FluidLevelFloodedness :
57- out .FluidLevelFloodedness = value
58- case FluidLevelSpread :
59- out .FluidLevelSpread = value
60- case Lava :
61- out .Lava = value
62- case VeinToggle :
63- out .VeinToggle = value
64- case VeinRidged :
65- out .VeinRidged = value
66- case VeinGap :
67- out .VeinGap = value
68- case Temperature :
69- out .Temperature = value
70- case Vegetation :
71- out .Vegetation = value
72- case Continents :
73- out .Continents = value
74- case Erosion :
75- out .Erosion = value
76- case Depth :
77- out .Depth = value
78- case Ridges :
79- out .Ridges = value
80- }
40+ finalDensityPresent := false
41+ for _ , builderCtx := range router .AllNoiseRouter_Builder () {
42+ if builderCtx .GetChildCount () < 2 {
43+ // TODO: Better diagnosis
44+ continue
8145 }
82-
83- if ! finalDensityPresent {
84- scope .DiagnoseSemanticError ("Missing required FinalDensity()" , router )
46+ builderKindCtx := builderCtx .GetChild (1 )
47+ if builderKindCtx == nil {
48+ // TODO: Better diagnosis
49+ continue
50+ }
51+ builderKind := builderKindCtx .(antlr.TerminalNode ).GetText ()
52+
53+ value := traversal .ConstructRegistry .Construct (builderCtx .DensityFn (), currentNamespace , scope )
54+ switch NoiseRouterBuilderKind (builderKind ) {
55+ case FinalDensity :
56+ finalDensityPresent = true
57+ out .FinalDensity = value
58+ case Barrier :
59+ out .Barrier = value
60+ case FluidLevelFloodedness :
61+ out .FluidLevelFloodedness = value
62+ case FluidLevelSpread :
63+ out .FluidLevelSpread = value
64+ case Lava :
65+ out .Lava = value
66+ case VeinToggle :
67+ out .VeinToggle = value
68+ case VeinRidged :
69+ out .VeinRidged = value
70+ case VeinGap :
71+ out .VeinGap = value
72+ case Temperature :
73+ out .Temperature = value
74+ case Vegetation :
75+ out .Vegetation = value
76+ case Continents :
77+ out .Continents = value
78+ case Erosion :
79+ out .Erosion = value
80+ case Depth :
81+ out .Depth = value
82+ case Ridges :
83+ out .Ridges = value
8584 }
86- return out
87- })
85+ }
86+
87+ if ! finalDensityPresent {
88+ scope .DiagnoseSemanticError ("Missing required FinalDensity()" , router )
89+ }
90+ return out
91+ })
8892}
8993
9094type NoiseRouter struct {
0 commit comments