-
Notifications
You must be signed in to change notification settings - Fork 3.3k
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
[Performance] [Python] Use bitwise check instead of in operator within list #3703
Comments
Are you certain of your benchmark? The benefits seem to small compared to what it should be.
The disassembly of this is quite interesting: the list is loaded as a single constant. It thus make it even smaller in size. And since the list is a constant, it's instanciated only once, at parsing time. |
3 times performance improvement is small? You can try the benchmark yourself.
ANTLR now uses refs instead plain int literals. It could affect generated bytecode. I'll investigate if it's enough to replace refs with literals. |
Well, yes. Compared to 15×2 = 30 dereferences, I was expecting one or two orders of magnitude, not just 1/3 of the time.
Yeah… a terrible terrible terrible idea with Python where there is no constant, thus no optimization possible. |
Interesting, it looks like literals much more effective than refs, and maybe more effective than bitwise check:
RefsCodedef check_by_range_test(i):
return i in [C.C0, C.C1, C.C2, C.C3,
C.C4, C.C5, C.C6, C.C7,
C.C8, C.C9, C.C10, C.C11,
C.C12, C.C13, C.C14, C.C15] Bytecode
LiteralsCodedef check_by_range_with_literals_test(i):
return i in [0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15] Bytecode
|
Maybe dereference is very fast operation but Python interpreter can't optimize expression with references.
Agree, I suggest replacing all token names with literals for efficiency for Python. |
Your benchmark has indeed a bias. Since you are calling the function with a fixed value, you don't see the full picture. So… bitwise is faster if there is enough elements. I think you can determine the value of "enough" by rolling a dice (I think it'll be too specific to be determined once) |
Anyway |
Created a patch script that implements this optimization: https://gist.github.com/amykyta3/8285559e95074c4431c2836d78b36530 |
Update getMultiTokenAlternativeDescriptor test fixes antlr#3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com>
Update getMultiTokenAlternativeDescriptor test fixes antlr#3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com>
Update getMultiTokenAlternativeDescriptor test fixes antlr#3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com>
Update getMultiTokenAlternativeDescriptor test fixes antlr#3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com>
Update getMultiTokenAlternativeDescriptor test fixes antlr#3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr>
* Fix CMake syntax for variable expansion When using variables to compare (like in if clause) the variable shouldn't be quoted. More details can be found at the link below: https://cmake.org/cmake/help/latest/command/if.html#variable-expansion Signed-off-by: HS <hs@apotell.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * initial commit Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * renamed for clarity Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * renamed for clarity Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * able to locate antlr4 runtime using ts-node, missing types Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * progressing Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * able to 'run' a test. It fails but it compiles and resolves! Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * reflect refactored runtime Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * able to run RecursiveLexerRuleRefWithWildcardPlus_1 test locally Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * passes LexerExec tests in IntelliJ Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * make ATN private Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ignore same tests as JavaScript Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * compiles Parser and Lexer bu local run fails Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ParserExec.TokenOffset test successful in IntelliJ ! Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Progressing, passing 131 of 348 tests Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * pass 327 tests out of 348 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * more successful tests Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * 333 successful tests out of 348 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * all tests pass except 7 caused by #3868 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update getting-started doc Signed-off-by: nicksxs <nicksxs@hotmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * add blank github action file for hosted CI Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update getting started document to say java 11 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Revert "update getting started document to say java 11" This reverts commit 1df58f7. Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * add C# book code links Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Add Jim/Ken to readme Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Update Swift Package to support static library Add static library distribution in SPM Signed-off-by: Hell_Ghost <dev.hellghost@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Update Package.swift Signed-off-by: Hell_Ghost dev.hellghost@gmail.com Signed-off-by: Hell_Ghost <dev.hellghost@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Add caching support for maven & dependencies. Also, include caching for cpp builds using actions/ccache. Builds are more reliable (avoids the archive.apache server which intermittently reports timeouts) and also significantly improves the overall builds times (down from 46 mins to 28 mins). The slowest part of the build now is the Windows+cpp builds because there is no reliable cache implementation yet. MacOS+cpp (65% cache hit) is also relatively slow compared to Ubuntu+cpp (99% cache hit). Signed-off-by: HS <hs@apotell.com> Signed-off-by: Terence Parr <parrt@antlr.org> # Conflicts: # .github/workflows/hosted.yml Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * use snap to install go 1.19 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * grr...install snap Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ugh. start snap Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ugh. start snap Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ugh. cant get snap to install go Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * try downloading golang with curl Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Issue #3823: Temporarily disable a few tests on CI The tests are currently failing. The underlying issues have been fixed on dev and so the builds will be turned back with the next release. Signed-off-by: HS <hs@apotell.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update actions status badge Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update getting started document to say java 11 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Revert "update getting started document to say java 11" This reverts commit 3591ee0. Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update getting-started doc Signed-off-by: nicksxs <nicksxs@hotmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * make getValue visible to external profiler tools. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Fix #3508: Document the $parser attribute and its use in target-agnostic grammars. Signed-off-by: Ross Patterson <ross.patterson@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Add accessor to IntervalSet for intervals Signed-off-by: James Taylor <jamestaylor@apache.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Remove libuuid dependency from C++ runtime libuuid and its headers are not referenced anywhere, so remove it. Signed-off-by: Bryan Tan <bryantan@technius.net> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Add `@SuppressWarnings("CheckReturnValue")` to prevent error_prone lib errors. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: Fixes for #3718 o Implement collections with generics to solve hash collisions o Fix type casting in LL start parser simulation optimization o General minor tidy ups Acknowledgements to @kaby76 for help with tracing errors Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3718 Revert accidental keyboard error in Java target Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3718 Correct DFAState index in Lexer ATN Simulator Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3718 Fix go runtime test runners With older versions of go, there was no good way to tell the compiler to use your local development copy of a particular package instead of the one installed in GOPATH/src/... However, we are now using modules, which allows us to tell the compiler that instead of a module downloaded to GOPATH/pkg, to use a local copy on disk. Hence this change removes the need to copy the whole of the go installation to a tempoorary location, then put the antlr go runtime in to the go installation as if it was part of the compiler. Hence the execution time for the go tests is now faster than before. This works because when the generated code is placed in the temporary location, we create a go.mod file for it, tell the module to replace the online module for the go runtime with the local copy on disk, then ro a go mod tidy to add the dependencies from the code (which avoids network access, so it is instant), which adds the ANTLR dependency itself (which is then replaced at compile time). All go runtime tests now pass. Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Rm remote github actions; hosted seems to work Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * install golang with curl; go was missing from dev Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: Rework of all Hash() and Equals() methods - implement generic collections - Implement new collections using generics that implement the functionality required by the Java runtime in a more idiomatic Go way. - Fix Hash() and Equals() for all objects in the runtime - Fix getConflictingAlts so that it behaves the same way as Java, using a new generic collection - Replaces the use of the array2DHashSet, which was causing unneeded memory allocations. Replaced with generic collection that allocates minimally (though, I think I can improve on that with a little analysis). Jim Idle - jimi@idle.ws Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3718 Correct DFAState index in Lexer ATN Simulator Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: Reduce initial memory allocations for collections - Many small collections are created at runtime, the default allocation for maps, even though small, still requires memory. Specifying a very small initial allocation prevents unnecesary allocations and has no measurable effect on performance. A small incremental change. Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3758 Allow for string being a keyword and fix go template to use escapedName - The go template was ignoring the use of escapedName in many places and was not consistenet with the Java version. - Added 'string' to the list of reserved words for the Go target Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3758 Add go.sum to the repo Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #3758 Ensure that standard runtime extensions are included in go.mod Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #2826 Go template is incorrect for dynamic scopes closes #2826 obviates PR #3101 Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #2016 - Generate correct iGo code for lists in a grammar, such as `label+=arg+` Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: Bump poms to use 4.11 Snapshot Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * turn off Golang test at circleci for now Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Replace smart-quote with single-quote in code examples Signed-off-by: Tim McCormack <cortex@brainonfire.net> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Augment error message during testing to include full cause of problem. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Augment error message during testing to include full cause of problem. (round 2 to avoid null ptr) Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Cpp: Link to threads library As detailed in #3708, it is necessary to link against the (p)threads library in order to be able to use std::call_once without producing linker errors. Since this function is frequently used in ANTLR's cpp version, this commit ensures that the respective library is always linked against in order to avoid this error, even if downstream users are not explicitly linking against an appropriate threads library. Fixes #3708 Signed-off-by: Robert Adam <dev@robert-adam.de> Co-authored-by: Bryan Tan <Technius@users.noreply.github.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * add test for #2016 and fix java. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ensure all targets have the appropriate argument list for the template causing the problem. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Fix other targets Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix format Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * add check that $args is a list Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * change made by @lingyv-li to fix bug in DART exposed by this test. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix AssertIsList in multiple targets. Go doesn't pass test and has no AssertIsList so I'm dropping that test from the Go test suite. How did a comment to the C++ runnerFor my future reference as to how to build things from the command line. Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * C++ gets an exception with this test so I'm turning it off. See #3845 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: #3840 Move Go to version v4.11.0 Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: #3840 Create the v4 version of the Go runtime Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: Create the v4 runtime layout for the Go runtime, ready for release tagging Note that the vast majority of the changes here are just copying the runtime file in to the /v4 subdirectory so that we can support legacy projects that use GOPATH only, as well as users that can use go modules. At a later release, we will delete the default path, and move the v4 subdirectory back to the top level. But, we cannot do that on this release. Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Reenable go tests on CircleCI Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Fold constants in generated code for all runtimes Go: getInlineTestSetWordSize 32 -> 64 Dart: get rid of BigInt Swift: optimize TestSetInline Python: fixes #3698 JavaScript: fixes #3699 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Use int literals instead of refs for Python and JavaScript Update getMultiTokenAlternativeDescriptor test fixes #3703 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update release doc for Go version numbers Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix: #2016 Fix Go template list reference, go runtime and got test template for list labels Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * feat: Add a deprecation message to the existing v1 module Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Split tool and runtime tests for GitHub workflow Build only necessary modules for tests Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Remove not used methods from FileUtils (runtime tests) Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Update dependencies of antlr4-maven-plugin Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Update jUnit: 5.8.2 -> 5.9.0 Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Fixes #3733; update ST4 so it uses proper ANTLR 3 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * tweak doc Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Set to 4.11.0 not 4.11 in poms Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare release 4.11.0 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare for next development iteration Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Damn. java target said 4.10.2 not 4.11.0 Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * roll back to 4.11.0; made mistake Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * roll back to 4.11.0; made mistake Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare release antlr4-master-4.11.0 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare for next development iteration Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * use build and twine to publish source and wheel Signed-off-by: Qijia Liu <liumeo@pku.edu.cn> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * tweak doc Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * tweak c++ build script to make Mac binaries with cmake/make Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * tweak release doc Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * tweak code / doc related to bad previous release Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare release 4.11.1 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * [maven-release-plugin] prepare for next development iteration Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * clean up deploy c++ source script Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * cleanup code generation Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * don't initialize default param values twice Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * add missing field Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * update codegen template for 4.11.1 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * support new param: Parser Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix template for 4.11 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * default export Listener and Visitor Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * also default export parser and lexer Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * all tests pass except 7 caused by #3868 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix issues Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * make it easy to break Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix #3868 Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * ALL TESTS PASS!!!! Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * cross fingers with CI Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * try fixing broken go tests Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Try fix typescript CI Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * disable cpp for now Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix broken config Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * try fix macos gh build Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * improve speed by caching node_modules Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * no longer using ts-node Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix all tsc warnings Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * try fix MacOS CI Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * CI errors seem random, reactivate ubuntu Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Disable node_modules caching, which seems to randomly fail in CI Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * don't delete symlink contents on windows (java bug with is SymbolicLink ?) Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * fix broken windows CI Signed-off-by: ERIC-WINDOWS\ericv <eric.vergnaud@wanadoo.fr> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * verify windows ci Signed-off-by: ERIC-WINDOWS\ericv <eric.vergnaud@wanadoo.fr> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * Revert "verify windows ci" This reverts commit 770d821. Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * reinstate full CI Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * manually merged * manually merge * fix merge * fix broken template * add template for invoking context list * fix typo * fix test templates * Add code of conduct but with a different name since I do not like that name Signed-off-by: Terence Parr <parrt@antlr.org> * Update C# release instructions * Tweak code of conduct Signed-off-by: Terence Parr <parrt@antlr.org> * Bring back the Package.swift in the project's root Signed-off-by: Nikolay Edigaryev <edigaryev@gmail.com> * swift-target.md: fix SPM installation instructions Signed-off-by: Nikolay Edigaryev <edigaryev@gmail.com> * the scope (parser or lexer) in @parser::header was dropped, so keep track of it and only include @Header in Listener and Visitor code Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> * drop workaround in favor of #3878 * drop cache usage since it fails in CI * #3878 was missing some scenarios * fix issue when deleting test folder * fix warnings * drop duplicate behavior * drop alien 'abstractRecognizer' property * drop alien property 'channels' * fix various codegen issues * change import * restore js extensions, see microsoft/TypeScript#50501 * use consistent inheritance * more API * more API stuff * fix typo * fix typescript exports * use ts-node to run typescript tests * webpack runtime before linking * fix exec paths on windows Signed-off-by: ERIC-WINDOWS\ericv <eric.vergnaud@wanadoo.fr> * fix failing tests * fix a few import issues * merge typescript-target with latest dev * runs Java and JavaScript tests after merging typescript-target * merge test template * skip unsupported test * fix template prototype * fix missing merge * bump typescript beta version after rebase * update docs * rollback unwanted changes Signed-off-by: HS <hs@apotell.com> Signed-off-by: Eric Vergnaud <eric.vergnaud@wanadoo.fr> Signed-off-by: nicksxs <nicksxs@hotmail.com> Signed-off-by: Terence Parr <parrt@antlr.org> Signed-off-by: Hell_Ghost <dev.hellghost@gmail.com> Signed-off-by: Hell_Ghost dev.hellghost@gmail.com Signed-off-by: Ross Patterson <ross.patterson@gmail.com> Signed-off-by: James Taylor <jamestaylor@apache.org> Signed-off-by: Bryan Tan <bryantan@technius.net> Signed-off-by: Jim.Idle <jimi@gatherstars.com> Signed-off-by: Tim McCormack <cortex@brainonfire.net> Signed-off-by: Ivan Kochurkin <kvanttt@gmail.com> Signed-off-by: Qijia Liu <liumeo@pku.edu.cn> Signed-off-by: ERIC-WINDOWS\ericv <eric.vergnaud@wanadoo.fr> Signed-off-by: Nikolay Edigaryev <edigaryev@gmail.com> Co-authored-by: HS <hs@apotell.com> Co-authored-by: nicksxs <nicksxs@hotmail.com> Co-authored-by: Terence Parr <parrt@antlr.org> Co-authored-by: Hell_Ghost <dev.hellghost@gmail.com> Co-authored-by: Ross Patterson <ross.patterson@gmail.com> Co-authored-by: James Taylor <jamestaylor@apache.org> Co-authored-by: Bryan Tan <bryantan@technius.net> Co-authored-by: Jim.Idle <jimi@gatherstars.com> Co-authored-by: Tim McCormack <cortex@brainonfire.net> Co-authored-by: Robert Adam <dev@robert-adam.de> Co-authored-by: Bryan Tan <Technius@users.noreply.github.com> Co-authored-by: Ivan Kochurkin <kvanttt@gmail.com> Co-authored-by: Qijia Liu <liumeo@pku.edu.cn> Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
Grammar
Generated code
ANTLR generates the following code for
e0
:The problem
The line
if token in [TestParser.T1, TestParser.T2, TestParser.T3, TestParser.T4, TestParser.T5, TestParser.T6, TestParser.T7, TestParser.T8, TestParser.T9, TestParser.T10, TestParser.T11, TestParser.T12, TestParser.T13, TestParser.T14, TestParser.T15]
is far from efficient because it allocates list on everye0
call and it has O(N) complexity that depends on tokens count. The more tokens to check the slower code we have.It's quite common case and it's especially important for Python because Python doesn't support
switch case
construction and it's unable to optimize the code during intepretation. Maybe bitwise check also efficient for other runtimes as well but ANTLR generatesswitch case
for them and it should be optimized by their compilers.Solution
It can be replaced by bitwise checking, something like
(1 << token) & 0xFFFF != 0
. The similar check we have forTestSetInline
.Benchmark
https://gist.github.com/KvanTTT/e3b355f7e321fe7f52e11ea1aa0ecbce#file-check-range-vs-mask-py
The text was updated successfully, but these errors were encountered: