diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg index 19dcc3f4354..31aed396037 100644 --- a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg @@ -166,7 +166,7 @@ type struct { } -var ParserStaticData struct { +type ParserStaticData struct { once sync.Once serializedATN []int32 LiteralNames []string @@ -198,10 +198,9 @@ func ParserInit() { staticData.serializedATN = deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) - atn := staticData.atn - staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState)) + staticData.decisionToDFA = make([]*antlr.DFA, len(staticData.atn.DecisionToState)) decisionToDFA := staticData.decisionToDFA - for index, state := range atn.DecisionToState { + for index, state := range staticData.atn.DecisionToState { decisionToDFA[index] = antlr.NewDFA(state, index) } } @@ -210,14 +209,15 @@ func ParserInit() { // static state used to implement the parser is lazily initialized during the first call to // New(). You can call this function if you wish to initialize the static state ahead // of time. -func Init() { - staticData := &ParserStaticData - staticData.once.Do(ParserInit) +func Init() *ParserStaticData { + staticData := &ParserStaticData{} + ParserInit(staticData) + return staticData } // New produces a new parser instance for the optional input antlr.TokenStream. func New(input antlr.TokenStream) * { - Init() + staticData := Init() this := new() this.BaseParser = antlr.NewBaseParser(input) staticData := &ParserStaticData