From bd37cf044c01591e4ba98e75e5ebb5cb4dde6207 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Sat, 6 Nov 2021 18:33:51 +0300 Subject: [PATCH] Get rid of reflection in Go.stg, fixes #2278 --- .../antlr/v4/tool/templates/codegen/Go/Go.stg | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) 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 e2ebed5dde..c3c4d308c7 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 @@ -13,7 +13,6 @@ package parser // import ( "fmt" - "reflect" "strconv" "github.com/antlr/antlr4/runtime/Go/antlr" @@ -26,7 +25,6 @@ import ( // Suppress unused import errors var _ = fmt.Printf -var _ = reflect.Copy var _ = strconv.Itoa @@ -932,7 +930,13 @@ ContextTokenListIndexedGetterDecl(t) ::= << ContextRuleGetterDecl(r) ::= << () I { - var t = s.GetTypedRuleContext(reflect.TypeOf((*I)(nil)).Elem(), 0) + var t antlr.RuleContext; + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(I); ok { + t = ctx.(antlr.RuleContext); + break + } + } if t == nil { return nil @@ -944,12 +948,20 @@ ContextRuleGetterDecl(r) ::= << ContextRuleListGetterDecl(r) ::= << All() []I { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*I)(nil)).Elem()) - var tst = make([]I, len(ts)) + children := s.GetChildren() + len := 0 + for _, ctx := range children { + if _, ok := ctx.(I); ok { + len++ + } + } - for i, t := range ts { - if t != nil { + tst := make([]I, len) + i := 0 + for _, ctx := range children { + if t, ok := ctx.(I); ok { tst[i] = t.(I) + i++ } } @@ -959,7 +971,17 @@ All() []I { ContextRuleListIndexedGetterDecl(r) ::= << (i int) I { - var t = s.GetTypedRuleContext(reflect.TypeOf((*I)(nil)).Elem(), i) + var t antlr.RuleContext; + j := 0 + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(I); ok { + if j == i { + t = ctx.(antlr.RuleContext); + break + } + j++ + } + } if t == nil { return nil