Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Go runtime performance fixup #2916

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion contributors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,8 @@ YYYY/MM/DD, github id, Full name, email
2020/09/06, ArthurSonzogni, Sonzogni Arthur, arthursonzogni@gmail.com
2020/09/12, Clcanny, Charles Ruan, a837940593@gmail.com
2020/09/15, rmcgregor1990, Robert McGregor, rmcgregor1990@gmail.com
2020/09/15, dmitrys99, Dmitry Solomennikov, dmitrys99/mail/ru
2020/09/16, trenki2, Markus Trenkwalder, trenki2[at]gmx[dot]net
2020/10/08, Marti2203, Martin Mirchev, mirchevmartin2203@gmail.com
2020/10/20, adamwojs, Adam Wójs, adam[at]wojs.pl
2020/10/24, cliid, Jiwu Jang, jiwujang@naver.com
2020/10/24, cliid, Jiwu Jang, jiwujang@naver.com
58 changes: 39 additions & 19 deletions runtime/Go/antlr/atn_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package antlr

import (
"fmt"
"strconv"
)

type comparable interface {
Expand All @@ -22,7 +23,8 @@ type ATNConfig interface {

hash() int

GetState() ATNState
GetState(a *ATN) ATNState
GetStateValue() int
GetAlt() int
GetSemanticContext() SemanticContext

Expand All @@ -33,14 +35,15 @@ type ATNConfig interface {
SetReachesIntoOuterContext(int)

String() string
GetStateString() string

getPrecedenceFilterSuppressed() bool
setPrecedenceFilterSuppressed(bool)
}

type BaseATNConfig struct {
precedenceFilterSuppressed bool
state ATNState
state int
alt int
context PredictionContext
semanticContext SemanticContext
Expand All @@ -57,35 +60,35 @@ func NewBaseATNConfig7(old *BaseATNConfig) *BaseATNConfig { // TODO: Dup
}
}

func NewBaseATNConfig6(state ATNState, alt int, context PredictionContext) *BaseATNConfig {
func NewBaseATNConfig6(state int, alt int, context PredictionContext) *BaseATNConfig {
return NewBaseATNConfig5(state, alt, context, SemanticContextNone)
}

func NewBaseATNConfig5(state ATNState, alt int, context PredictionContext, semanticContext SemanticContext) *BaseATNConfig {
func NewBaseATNConfig5(state int, alt int, context PredictionContext, semanticContext SemanticContext) *BaseATNConfig {
if semanticContext == nil {
panic("semanticContext cannot be nil") // TODO: Necessary?
}

return &BaseATNConfig{state: state, alt: alt, context: context, semanticContext: semanticContext}
}

func NewBaseATNConfig4(c ATNConfig, state ATNState) *BaseATNConfig {
func NewBaseATNConfig4(c ATNConfig, state int) *BaseATNConfig {
return NewBaseATNConfig(c, state, c.GetContext(), c.GetSemanticContext())
}

func NewBaseATNConfig3(c ATNConfig, state ATNState, semanticContext SemanticContext) *BaseATNConfig {
func NewBaseATNConfig3(c ATNConfig, state int, semanticContext SemanticContext) *BaseATNConfig {
return NewBaseATNConfig(c, state, c.GetContext(), semanticContext)
}

func NewBaseATNConfig2(c ATNConfig, semanticContext SemanticContext) *BaseATNConfig {
return NewBaseATNConfig(c, c.GetState(), c.GetContext(), semanticContext)
return NewBaseATNConfig(c, c.GetStateValue(), c.GetContext(), semanticContext)
}

func NewBaseATNConfig1(c ATNConfig, state ATNState, context PredictionContext) *BaseATNConfig {
func NewBaseATNConfig1(c ATNConfig, state int, context PredictionContext) *BaseATNConfig {
return NewBaseATNConfig(c, state, context, c.GetSemanticContext())
}

func NewBaseATNConfig(c ATNConfig, state ATNState, context PredictionContext, semanticContext SemanticContext) *BaseATNConfig {
func NewBaseATNConfig(c ATNConfig, state int, context PredictionContext, semanticContext SemanticContext) *BaseATNConfig {
if semanticContext == nil {
panic("semanticContext cannot be nil")
}
Expand All @@ -108,10 +111,19 @@ func (b *BaseATNConfig) setPrecedenceFilterSuppressed(v bool) {
b.precedenceFilterSuppressed = v
}

func (b *BaseATNConfig) GetState() ATNState {
func (b *BaseATNConfig) GetStateValue() int {
return b.state
}

func (b *BaseATNConfig) GetState(a *ATN) ATNState {
if a != nil && a.states != nil && b.state >= 0 && b.state <= len(a.states) {
return a.states[b.state]
} else {
panic("GetState")
return nil
}
}

func (b *BaseATNConfig) GetAlt() int {
return b.alt
}
Expand Down Expand Up @@ -157,7 +169,7 @@ func (b *BaseATNConfig) equals(o interface{}) bool {
}

var (
nums = b.state.GetStateNumber() == other.state.GetStateNumber()
nums = b.state == other.state
alts = b.alt == other.alt
cons = b.semanticContext.equals(other.semanticContext)
sups = b.precedenceFilterSuppressed == other.precedenceFilterSuppressed
Expand All @@ -173,13 +185,17 @@ func (b *BaseATNConfig) hash() int {
}

h := murmurInit(7)
h = murmurUpdate(h, b.state.GetStateNumber())
h = murmurUpdate(h, b.state)
h = murmurUpdate(h, b.alt)
h = murmurUpdate(h, c)
h = murmurUpdate(h, b.semanticContext.hash())
return murmurFinish(h, 4)
}

func (b *BaseATNConfig) GetStateString() string {
return strconv.Itoa(b.state)
}

func (b *BaseATNConfig) String() string {
var s1, s2, s3 string

Expand All @@ -205,42 +221,46 @@ type LexerATNConfig struct {
}

func NewLexerATNConfig6(state ATNState, alt int, context PredictionContext) *LexerATNConfig {
return &LexerATNConfig{BaseATNConfig: NewBaseATNConfig5(state, alt, context, SemanticContextNone)}
return &LexerATNConfig{BaseATNConfig: NewBaseATNConfig5(state.GetStateNumber(), alt, context, SemanticContextNone)}
}

func NewLexerATNConfig5(state ATNState, alt int, context PredictionContext, lexerActionExecutor *LexerActionExecutor) *LexerATNConfig {
return &LexerATNConfig{
BaseATNConfig: NewBaseATNConfig5(state, alt, context, SemanticContextNone),
BaseATNConfig: NewBaseATNConfig5(state.GetStateNumber(), alt, context, SemanticContextNone),
lexerActionExecutor: lexerActionExecutor,
}
}

func NewLexerATNConfig4(c *LexerATNConfig, state ATNState) *LexerATNConfig {
return &LexerATNConfig{
BaseATNConfig: NewBaseATNConfig(c, state, c.GetContext(), c.GetSemanticContext()),
BaseATNConfig: NewBaseATNConfig(c, state.GetStateNumber(), c.GetContext(), c.GetSemanticContext()),
lexerActionExecutor: c.lexerActionExecutor,
passedThroughNonGreedyDecision: checkNonGreedyDecision(c, state),
}
}

func NewLexerATNConfig3(c *LexerATNConfig, state ATNState, lexerActionExecutor *LexerActionExecutor) *LexerATNConfig {
return &LexerATNConfig{
BaseATNConfig: NewBaseATNConfig(c, state, c.GetContext(), c.GetSemanticContext()),
BaseATNConfig: NewBaseATNConfig(c, state.GetStateNumber(), c.GetContext(), c.GetSemanticContext()),
lexerActionExecutor: lexerActionExecutor,
passedThroughNonGreedyDecision: checkNonGreedyDecision(c, state),
}
}

func NewLexerATNConfig2(c *LexerATNConfig, state ATNState, context PredictionContext) *LexerATNConfig {
return &LexerATNConfig{
BaseATNConfig: NewBaseATNConfig(c, state, context, c.GetSemanticContext()),
BaseATNConfig: NewBaseATNConfig(c, state.GetStateNumber(), context, c.GetSemanticContext()),
lexerActionExecutor: c.lexerActionExecutor,
passedThroughNonGreedyDecision: checkNonGreedyDecision(c, state),
}
}

func NewLexerATNConfig1(state ATNState, alt int, context PredictionContext) *LexerATNConfig {
return &LexerATNConfig{BaseATNConfig: NewBaseATNConfig5(state, alt, context, SemanticContextNone)}
return &LexerATNConfig{BaseATNConfig: NewBaseATNConfig5(state.GetStateNumber(), alt, context, SemanticContextNone)}
}

func (b *LexerATNConfig) GetStateString() string {
return strconv.Itoa(b.state)
}

func (l *LexerATNConfig) hash() int {
Expand All @@ -251,7 +271,7 @@ func (l *LexerATNConfig) hash() int {
f = 0
}
h := murmurInit(7)
h = murmurUpdate(h, l.state.hash())
h = murmurUpdate(h, l.GetStateValue())
h = murmurUpdate(h, l.alt)
h = murmurUpdate(h, l.context.hash())
h = murmurUpdate(h, l.semanticContext.hash())
Expand Down
4 changes: 2 additions & 2 deletions runtime/Go/antlr/atn_config_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ func (b *BaseATNConfigSet) GetStates() *Set {
states := NewSet(nil, nil)

for i := 0; i < len(b.configs); i++ {
states.add(b.configs[i].GetState())
states.add(b.configs[i].GetStateValue())
}

return states
Expand Down Expand Up @@ -379,7 +379,7 @@ func equalATNConfigs(a, b interface{}) bool {
return false
}

nums := ai.GetState().GetStateNumber() == bi.GetState().GetStateNumber()
nums := ai.GetStateValue() == bi.GetStateValue()
alts := ai.GetAlt() == bi.GetAlt()
cons := ai.GetSemanticContext().equals(bi.GetSemanticContext())

Expand Down
Loading