expressir 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +200 -9
  4. data/.gitignore +7 -2
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/Rakefile +4 -1
  8. data/bin/console +0 -1
  9. data/bin/rspec +3 -3
  10. data/exe/expressir +4 -2
  11. data/exe/format +1 -1
  12. data/exe/format-test +25 -25
  13. data/exe/generate-parser +16 -13
  14. data/expressir.gemspec +11 -9
  15. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -34
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
  17. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
  18. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +11 -4
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +20 -20
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -6
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +30 -19
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +13 -10
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -6
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -1
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -13
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +47 -27
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -6
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +19 -22
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +20 -20
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +10 -21
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -32
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +1 -1
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +2 -7
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -45
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -26
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -61
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +4 -55
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +34 -20
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +30 -35
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +35 -32
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -462
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -68
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +41 -42
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -106
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +9 -48
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +15 -33
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +164 -151
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +86 -127
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +9 -21
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -8
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +7 -20
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +34 -14
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +12 -53
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -33
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -62
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +13 -4
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +4 -4
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  221. data/ext/express-parser/antlrgen/Express.interp +1 -1
  222. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  223. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  224. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  225. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  226. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  227. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  228. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  229. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  230. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  231. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  232. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  233. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  234. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  235. data/ext/express-parser/express_parser.cpp +207 -75
  236. data/ext/express-parser/extconf.rb +10 -9
  237. data/lib/expressir/config.rb +1 -1
  238. data/lib/expressir/express/parser.rb +2 -2
  239. data/lib/expressir/express/visitor.rb +7 -5
  240. data/lib/expressir/model.rb +78 -78
  241. data/lib/expressir/version.rb +1 -1
  242. data/rakelib/antlr4-native.rake +63 -0
  243. data/rakelib/cross-ruby.rake +213 -162
  244. data/spec/acceptance/version_spec.rb +7 -2
  245. data/spec/expressir/express/cache_spec.rb +8 -5
  246. data/spec/expressir/express/formatter_spec.rb +16 -8
  247. data/spec/expressir/express/parser_spec.rb +17 -11
  248. data/spec/expressir/model/model_element_spec.rb +154 -146
  249. metadata +79 -91
  250. data/demo.rb +0 -18
  251. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  252. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  253. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  254. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  255. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  256. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  257. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  258. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  259. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  260. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  261. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  262. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  263. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  264. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  265. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  266. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  267. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  268. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  274. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  275. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  276. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  277. data/original/examples/employment/eclipse/.project +0 -17
  278. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  279. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  280. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  281. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  282. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  283. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  284. data/original/examples/employment/eclipse/readme.txt +0 -7
  285. data/original/examples/employment/employment_schema.exp +0 -33
  286. data/original/examples/employment/employment_schema.rb +0 -232
  287. data/original/examples/employment/employment_schema.xml +0 -93
  288. data/original/examples/employment/employment_schema___module.rb +0 -46
  289. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  290. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  291. data/original/examples/employment/example_employment_data.xml +0 -1
  292. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  293. data/original/examples/employment/example_employment_reader.rb +0 -30
  294. data/original/examples/employment/example_employment_writer.rb +0 -51
  295. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  296. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  297. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  298. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  299. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  300. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  301. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  302. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  303. data/original/exp2ruby.rb +0 -525
  304. data/original/expsm.rb +0 -34
  305. data/original/mapping_owl.rb +0 -1018
  306. data/original/mapping_sysml.rb +0 -2281
  307. data/original/mapping_uml2.rb +0 -599
  308. data/original/mapping_uml2_eclipse.rb +0 -433
  309. data/original/reeper.rb +0 -134
  310. data/spec/expressr_spec.rb +0 -5
@@ -15,26 +15,31 @@
15
15
  using namespace antlr4::atn;
16
16
  using namespace antlrcpp;
17
17
 
18
- ATNConfigSet::ATNConfigSet(bool fullCtx) : fullCtx(fullCtx) {
19
- InitializeInstanceFields();
20
- }
18
+ namespace {
21
19
 
22
- ATNConfigSet::ATNConfigSet(const Ref<ATNConfigSet> &old) : ATNConfigSet(old->fullCtx) {
23
- addAll(old);
24
- uniqueAlt = old->uniqueAlt;
25
- conflictingAlts = old->conflictingAlts;
26
- hasSemanticContext = old->hasSemanticContext;
27
- dipsIntoOuterContext = old->dipsIntoOuterContext;
28
20
  }
29
21
 
30
- ATNConfigSet::~ATNConfigSet() {
22
+ ATNConfigSet::ATNConfigSet() : ATNConfigSet(true) {}
23
+
24
+ ATNConfigSet::ATNConfigSet(const ATNConfigSet &other)
25
+ : fullCtx(other.fullCtx), _configLookup(other._configLookup.bucket_count(), ATNConfigHasher{this}, ATNConfigComparer{this}) {
26
+ addAll(other);
27
+ uniqueAlt = other.uniqueAlt;
28
+ conflictingAlts = other.conflictingAlts;
29
+ hasSemanticContext = other.hasSemanticContext;
30
+ dipsIntoOuterContext = other.dipsIntoOuterContext;
31
31
  }
32
32
 
33
+ ATNConfigSet::ATNConfigSet(bool fullCtx)
34
+ : fullCtx(fullCtx), _configLookup(0, ATNConfigHasher{this}, ATNConfigComparer{this}) {}
35
+
33
36
  bool ATNConfigSet::add(const Ref<ATNConfig> &config) {
34
37
  return add(config, nullptr);
35
38
  }
36
39
 
37
40
  bool ATNConfigSet::add(const Ref<ATNConfig> &config, PredictionContextMergeCache *mergeCache) {
41
+ assert(config);
42
+
38
43
  if (_readonly) {
39
44
  throw IllegalStateException("This set is readonly");
40
45
  }
@@ -45,10 +50,9 @@ bool ATNConfigSet::add(const Ref<ATNConfig> &config, PredictionContextMergeCache
45
50
  dipsIntoOuterContext = true;
46
51
  }
47
52
 
48
- size_t hash = getHash(config.get());
49
- ATNConfig *existing = _configLookup[hash];
50
- if (existing == nullptr) {
51
- _configLookup[hash] = config.get();
53
+ auto existing = _configLookup.find(config.get());
54
+ if (existing == _configLookup.end()) {
55
+ _configLookup.insert(config.get());
52
56
  _cachedHashCode = 0;
53
57
  configs.push_back(config); // track order here
54
58
 
@@ -57,32 +61,33 @@ bool ATNConfigSet::add(const Ref<ATNConfig> &config, PredictionContextMergeCache
57
61
 
58
62
  // a previous (s,i,pi,_), merge with it and save result
59
63
  bool rootIsWildcard = !fullCtx;
60
- Ref<PredictionContext> merged = PredictionContext::merge(existing->context, config->context, rootIsWildcard, mergeCache);
64
+ Ref<const PredictionContext> merged = PredictionContext::merge((*existing)->context, config->context, rootIsWildcard, mergeCache);
61
65
  // no need to check for existing.context, config.context in cache
62
66
  // since only way to create new graphs is "call rule" and here. We
63
67
  // cache at both places.
64
- existing->reachesIntoOuterContext = std::max(existing->reachesIntoOuterContext, config->reachesIntoOuterContext);
68
+ (*existing)->reachesIntoOuterContext = std::max((*existing)->reachesIntoOuterContext, config->reachesIntoOuterContext);
65
69
 
66
70
  // make sure to preserve the precedence filter suppression during the merge
67
71
  if (config->isPrecedenceFilterSuppressed()) {
68
- existing->setPrecedenceFilterSuppressed(true);
72
+ (*existing)->setPrecedenceFilterSuppressed(true);
69
73
  }
70
74
 
71
- existing->context = merged; // replace context; no need to alt mapping
75
+ (*existing)->context = std::move(merged); // replace context; no need to alt mapping
72
76
 
73
77
  return true;
74
78
  }
75
79
 
76
- bool ATNConfigSet::addAll(const Ref<ATNConfigSet> &other) {
77
- for (auto &c : other->configs) {
80
+ bool ATNConfigSet::addAll(const ATNConfigSet &other) {
81
+ for (const auto &c : other.configs) {
78
82
  add(c);
79
83
  }
80
84
  return false;
81
85
  }
82
86
 
83
- std::vector<ATNState*> ATNConfigSet::getStates() {
87
+ std::vector<ATNState*> ATNConfigSet::getStates() const {
84
88
  std::vector<ATNState*> states;
85
- for (auto c : configs) {
89
+ states.reserve(configs.size());
90
+ for (const auto &c : configs) {
86
91
  states.push_back(c->state);
87
92
  }
88
93
  return states;
@@ -97,17 +102,18 @@ std::vector<ATNState*> ATNConfigSet::getStates() {
97
102
  * @since 4.3
98
103
  */
99
104
 
100
- BitSet ATNConfigSet::getAlts() {
105
+ BitSet ATNConfigSet::getAlts() const {
101
106
  BitSet alts;
102
- for (ATNConfig config : configs) {
103
- alts.set(config.alt);
107
+ for (const auto &config : configs) {
108
+ alts.set(config->alt);
104
109
  }
105
110
  return alts;
106
111
  }
107
112
 
108
- std::vector<Ref<SemanticContext>> ATNConfigSet::getPredicates() {
109
- std::vector<Ref<SemanticContext>> preds;
110
- for (auto c : configs) {
113
+ std::vector<Ref<const SemanticContext>> ATNConfigSet::getPredicates() const {
114
+ std::vector<Ref<const SemanticContext>> preds;
115
+ preds.reserve(configs.size());
116
+ for (const auto &c : configs) {
111
117
  if (c->semanticContext != SemanticContext::NONE) {
112
118
  preds.push_back(c->semanticContext);
113
119
  }
@@ -115,23 +121,25 @@ std::vector<Ref<SemanticContext>> ATNConfigSet::getPredicates() {
115
121
  return preds;
116
122
  }
117
123
 
118
- Ref<ATNConfig> ATNConfigSet::get(size_t i) const {
124
+ const Ref<ATNConfig>& ATNConfigSet::get(size_t i) const {
119
125
  return configs[i];
120
126
  }
121
127
 
122
128
  void ATNConfigSet::optimizeConfigs(ATNSimulator *interpreter) {
129
+ assert(interpreter);
130
+
123
131
  if (_readonly) {
124
132
  throw IllegalStateException("This set is readonly");
125
133
  }
126
134
  if (_configLookup.empty())
127
135
  return;
128
136
 
129
- for (auto &config : configs) {
137
+ for (const auto &config : configs) {
130
138
  config->context = interpreter->getCachedContext(config->context);
131
139
  }
132
140
  }
133
141
 
134
- bool ATNConfigSet::operator == (const ATNConfigSet &other) {
142
+ bool ATNConfigSet::equals(const ATNConfigSet &other) const {
135
143
  if (&other == this) {
136
144
  return true;
137
145
  }
@@ -147,22 +155,23 @@ bool ATNConfigSet::operator == (const ATNConfigSet &other) {
147
155
  return Arrays::equals(configs, other.configs);
148
156
  }
149
157
 
150
- size_t ATNConfigSet::hashCode() {
151
- if (!isReadonly() || _cachedHashCode == 0) {
152
- _cachedHashCode = 1;
153
- for (auto &i : configs) {
154
- _cachedHashCode = 31 * _cachedHashCode + i->hashCode(); // Same as Java's list hashCode impl.
158
+ size_t ATNConfigSet::hashCode() const {
159
+ size_t cachedHashCode = _cachedHashCode.load(std::memory_order_relaxed);
160
+ if (!isReadonly() || cachedHashCode == 0) {
161
+ cachedHashCode = 1;
162
+ for (const auto &i : configs) {
163
+ cachedHashCode = 31 * cachedHashCode + i->hashCode(); // Same as Java's list hashCode impl.
155
164
  }
165
+ _cachedHashCode.store(cachedHashCode, std::memory_order_relaxed);
156
166
  }
157
-
158
- return _cachedHashCode;
167
+ return cachedHashCode;
159
168
  }
160
169
 
161
- size_t ATNConfigSet::size() {
170
+ size_t ATNConfigSet::size() const {
162
171
  return configs.size();
163
172
  }
164
173
 
165
- bool ATNConfigSet::isEmpty() {
174
+ bool ATNConfigSet::isEmpty() const {
166
175
  return configs.empty();
167
176
  }
168
177
 
@@ -175,16 +184,16 @@ void ATNConfigSet::clear() {
175
184
  _configLookup.clear();
176
185
  }
177
186
 
178
- bool ATNConfigSet::isReadonly() {
187
+ bool ATNConfigSet::isReadonly() const {
179
188
  return _readonly;
180
189
  }
181
190
 
182
191
  void ATNConfigSet::setReadonly(bool readonly) {
183
192
  _readonly = readonly;
184
- _configLookup.clear();
193
+ LookupContainer(0, ATNConfigHasher{this}, ATNConfigComparer{this}).swap(_configLookup);
185
194
  }
186
195
 
187
- std::string ATNConfigSet::toString() {
196
+ std::string ATNConfigSet::toString() const {
188
197
  std::stringstream ss;
189
198
  ss << "[";
190
199
  for (size_t i = 0; i < configs.size(); i++) {
@@ -210,19 +219,14 @@ std::string ATNConfigSet::toString() {
210
219
  return ss.str();
211
220
  }
212
221
 
213
- size_t ATNConfigSet::getHash(ATNConfig *c) {
222
+ size_t ATNConfigSet::hashCode(const ATNConfig &other) const {
214
223
  size_t hashCode = 7;
215
- hashCode = 31 * hashCode + c->state->stateNumber;
216
- hashCode = 31 * hashCode + c->alt;
217
- hashCode = 31 * hashCode + c->semanticContext->hashCode();
224
+ hashCode = 31 * hashCode + other.state->stateNumber;
225
+ hashCode = 31 * hashCode + other.alt;
226
+ hashCode = 31 * hashCode + other.semanticContext->hashCode();
218
227
  return hashCode;
219
228
  }
220
229
 
221
- void ATNConfigSet::InitializeInstanceFields() {
222
- uniqueAlt = 0;
223
- hasSemanticContext = false;
224
- dipsIntoOuterContext = false;
225
-
226
- _readonly = false;
227
- _cachedHashCode = 0;
230
+ bool ATNConfigSet::equals(const ATNConfig &lhs, const ATNConfig &rhs) const {
231
+ return lhs.state->stateNumber == rhs.state->stateNumber && lhs.alt == rhs.alt && *lhs.semanticContext == *rhs.semanticContext;
228
232
  }
@@ -5,8 +5,11 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <cassert>
9
+
8
10
  #include "support/BitSet.h"
9
11
  #include "atn/PredictionContext.h"
12
+ #include "atn/ATNConfig.h"
10
13
 
11
14
  namespace antlr4 {
12
15
  namespace atn {
@@ -20,7 +23,7 @@ namespace atn {
20
23
 
21
24
  // TODO: these fields make me pretty uncomfortable but nice to pack up info together, saves recomputation
22
25
  // TODO: can we track conflicts as they are added to save scanning configs later?
23
- size_t uniqueAlt;
26
+ size_t uniqueAlt = 0;
24
27
 
25
28
  /** Currently this is only used when we detect SLL conflict; this does
26
29
  * not necessarily represent the ambiguous alternatives. In fact,
@@ -31,20 +34,25 @@ namespace atn {
31
34
 
32
35
  // Used in parser and lexer. In lexer, it indicates we hit a pred
33
36
  // while computing a closure operation. Don't make a DFA state from this.
34
- bool hasSemanticContext;
35
- bool dipsIntoOuterContext;
37
+ bool hasSemanticContext = false;
38
+ bool dipsIntoOuterContext = false;
36
39
 
37
40
  /// Indicates that this configuration set is part of a full context
38
41
  /// LL prediction. It will be used to determine how to merge $. With SLL
39
42
  /// it's a wildcard whereas it is not for LL context merge.
40
- const bool fullCtx;
43
+ const bool fullCtx = true;
44
+
45
+ ATNConfigSet();
46
+
47
+ ATNConfigSet(const ATNConfigSet &other);
41
48
 
42
- ATNConfigSet(bool fullCtx = true);
43
- ATNConfigSet(const Ref<ATNConfigSet> &old);
49
+ ATNConfigSet(ATNConfigSet&&) = delete;
44
50
 
45
- virtual ~ATNConfigSet();
51
+ explicit ATNConfigSet(bool fullCtx);
46
52
 
47
- virtual bool add(const Ref<ATNConfig> &config);
53
+ virtual ~ATNConfigSet() = default;
54
+
55
+ bool add(const Ref<ATNConfig> &config);
48
56
 
49
57
  /// <summary>
50
58
  /// Adding a new config means merging contexts with existing configs for
@@ -56,9 +64,11 @@ namespace atn {
56
64
  /// This method updates <seealso cref="#dipsIntoOuterContext"/> and
57
65
  /// <seealso cref="#hasSemanticContext"/> when necessary.
58
66
  /// </summary>
59
- virtual bool add(const Ref<ATNConfig> &config, PredictionContextMergeCache *mergeCache);
67
+ bool add(const Ref<ATNConfig> &config, PredictionContextMergeCache *mergeCache);
68
+
69
+ bool addAll(const ATNConfigSet &other);
60
70
 
61
- virtual std::vector<ATNState *> getStates();
71
+ std::vector<ATNState*> getStates() const;
62
72
 
63
73
  /**
64
74
  * Gets the complete set of represented alternatives for the configuration
@@ -68,43 +78,79 @@ namespace atn {
68
78
  *
69
79
  * @since 4.3
70
80
  */
71
- antlrcpp::BitSet getAlts();
72
- virtual std::vector<Ref<SemanticContext>> getPredicates();
81
+ antlrcpp::BitSet getAlts() const;
82
+ std::vector<Ref<const SemanticContext>> getPredicates() const;
83
+
84
+ const Ref<ATNConfig>& get(size_t i) const;
73
85
 
74
- virtual Ref<ATNConfig> get(size_t i) const;
86
+ void optimizeConfigs(ATNSimulator *interpreter);
75
87
 
76
- virtual void optimizeConfigs(ATNSimulator *interpreter);
88
+ size_t size() const;
89
+ bool isEmpty() const;
90
+ void clear();
91
+ bool isReadonly() const;
92
+ void setReadonly(bool readonly);
93
+
94
+ virtual size_t hashCode() const;
95
+
96
+ virtual bool equals(const ATNConfigSet &other) const;
97
+
98
+ virtual std::string toString() const;
99
+
100
+ private:
101
+ struct ATNConfigHasher final {
102
+ const ATNConfigSet* atnConfigSet;
77
103
 
78
- bool addAll(const Ref<ATNConfigSet> &other);
104
+ size_t operator()(const ATNConfig *other) const {
105
+ assert(other != nullptr);
106
+ return atnConfigSet->hashCode(*other);
107
+ }
108
+ };
79
109
 
80
- bool operator == (const ATNConfigSet &other);
81
- virtual size_t hashCode();
82
- virtual size_t size();
83
- virtual bool isEmpty();
84
- virtual void clear();
85
- virtual bool isReadonly();
86
- virtual void setReadonly(bool readonly);
87
- virtual std::string toString();
110
+ struct ATNConfigComparer final {
111
+ const ATNConfigSet* atnConfigSet;
112
+
113
+ bool operator()(const ATNConfig *lhs, const ATNConfig *rhs) const {
114
+ assert(lhs != nullptr);
115
+ assert(rhs != nullptr);
116
+ return atnConfigSet->equals(*lhs, *rhs);
117
+ }
118
+ };
119
+
120
+ mutable std::atomic<size_t> _cachedHashCode = 0;
88
121
 
89
- protected:
90
122
  /// Indicates that the set of configurations is read-only. Do not
91
123
  /// allow any code to manipulate the set; DFA states will point at
92
124
  /// the sets and they must not change. This does not protect the other
93
125
  /// fields; in particular, conflictingAlts is set after
94
126
  /// we've made this readonly.
95
- bool _readonly;
127
+ bool _readonly = false;
96
128
 
97
- virtual size_t getHash(ATNConfig *c); // Hash differs depending on set type.
129
+ virtual size_t hashCode(const ATNConfig &atnConfig) const;
98
130
 
99
- private:
100
- size_t _cachedHashCode;
131
+ virtual bool equals(const ATNConfig &lhs, const ATNConfig &rhs) const;
132
+
133
+ using LookupContainer = std::unordered_set<ATNConfig*, ATNConfigHasher, ATNConfigComparer>;
101
134
 
102
135
  /// All configs but hashed by (s, i, _, pi) not including context. Wiped out
103
136
  /// when we go readonly as this set becomes a DFA state.
104
- std::unordered_map<size_t, ATNConfig *> _configLookup;
105
-
106
- void InitializeInstanceFields();
137
+ LookupContainer _configLookup;
107
138
  };
108
139
 
140
+ inline bool operator==(const ATNConfigSet &lhs, const ATNConfigSet &rhs) { return lhs.equals(rhs); }
141
+
142
+ inline bool operator!=(const ATNConfigSet &lhs, const ATNConfigSet &rhs) { return !operator==(lhs, rhs); }
143
+
109
144
  } // namespace atn
110
145
  } // namespace antlr4
146
+
147
+ namespace std {
148
+
149
+ template <>
150
+ struct hash<::antlr4::atn::ATNConfigSet> {
151
+ size_t operator()(const ::antlr4::atn::ATNConfigSet &atnConfigSet) const {
152
+ return atnConfigSet.hashCode();
153
+ }
154
+ };
155
+
156
+ } // namespace std
@@ -4,61 +4,51 @@
4
4
  */
5
5
 
6
6
  #include "atn/ATNDeserializationOptions.h"
7
+ #include "Exceptions.h"
7
8
 
9
+ #include <memory>
10
+ #include <mutex>
11
+
12
+ using namespace antlr4;
8
13
  using namespace antlr4::atn;
9
14
 
10
- ATNDeserializationOptions ATNDeserializationOptions::defaultOptions;
15
+ namespace {
11
16
 
12
- ATNDeserializationOptions::ATNDeserializationOptions() {
13
- InitializeInstanceFields();
14
- }
17
+ std::once_flag defaultATNDeserializationOptionsOnceFlag;
18
+ std::unique_ptr<ATNDeserializationOptions> defaultATNDeserializationOptions;
15
19
 
16
- ATNDeserializationOptions::ATNDeserializationOptions(ATNDeserializationOptions *options) : ATNDeserializationOptions() {
17
- this->verifyATN = options->verifyATN;
18
- this->generateRuleBypassTransitions = options->generateRuleBypassTransitions;
20
+ void initializeDefaultATNDeserializationOptions() {
21
+ defaultATNDeserializationOptions.reset(new ATNDeserializationOptions());
19
22
  }
20
23
 
21
- ATNDeserializationOptions::~ATNDeserializationOptions() {
22
24
  }
23
25
 
24
- const ATNDeserializationOptions& ATNDeserializationOptions::getDefaultOptions() {
25
- return defaultOptions;
26
- }
26
+ ATNDeserializationOptions::ATNDeserializationOptions(ATNDeserializationOptions *options)
27
+ : _readOnly(false), _verifyATN(options->_verifyATN),
28
+ _generateRuleBypassTransitions(options->_generateRuleBypassTransitions) {}
27
29
 
28
- bool ATNDeserializationOptions::isReadOnly() {
29
- return readOnly;
30
+ const ATNDeserializationOptions& ATNDeserializationOptions::getDefaultOptions() {
31
+ std::call_once(defaultATNDeserializationOptionsOnceFlag,
32
+ initializeDefaultATNDeserializationOptions);
33
+ return *defaultATNDeserializationOptions;
30
34
  }
31
35
 
32
36
  void ATNDeserializationOptions::makeReadOnly() {
33
- readOnly = true;
34
- }
35
-
36
- bool ATNDeserializationOptions::isVerifyATN() {
37
- return verifyATN;
37
+ _readOnly = true;
38
38
  }
39
39
 
40
40
  void ATNDeserializationOptions::setVerifyATN(bool verify) {
41
41
  throwIfReadOnly();
42
- verifyATN = verify;
43
- }
44
-
45
- bool ATNDeserializationOptions::isGenerateRuleBypassTransitions() {
46
- return generateRuleBypassTransitions;
42
+ _verifyATN = verify;
47
43
  }
48
44
 
49
45
  void ATNDeserializationOptions::setGenerateRuleBypassTransitions(bool generate) {
50
46
  throwIfReadOnly();
51
- generateRuleBypassTransitions = generate;
47
+ _generateRuleBypassTransitions = generate;
52
48
  }
53
49
 
54
- void ATNDeserializationOptions::throwIfReadOnly() {
50
+ void ATNDeserializationOptions::throwIfReadOnly() const {
55
51
  if (isReadOnly()) {
56
- throw "The object is read only.";
52
+ throw IllegalStateException("ATNDeserializationOptions is read only.");
57
53
  }
58
54
  }
59
-
60
- void ATNDeserializationOptions::InitializeInstanceFields() {
61
- readOnly = false;
62
- verifyATN = true;
63
- generateRuleBypassTransitions = false;
64
- }
@@ -10,41 +10,39 @@
10
10
  namespace antlr4 {
11
11
  namespace atn {
12
12
 
13
- class ANTLR4CPP_PUBLIC ATNDeserializationOptions {
14
- private:
15
- static ATNDeserializationOptions defaultOptions;
13
+ class ANTLR4CPP_PUBLIC ATNDeserializationOptions final {
14
+ public:
15
+ ATNDeserializationOptions()
16
+ : _readOnly(false), _verifyATN(true), _generateRuleBypassTransitions(false) {}
16
17
 
17
- bool readOnly;
18
- bool verifyATN;
19
- bool generateRuleBypassTransitions;
18
+ // TODO: Is this useful? If so we should mark it as explicit, otherwise remove it.
19
+ ATNDeserializationOptions(ATNDeserializationOptions *options);
20
20
 
21
- public:
22
- ATNDeserializationOptions();
23
- ATNDeserializationOptions(ATNDeserializationOptions *options);
24
- ATNDeserializationOptions(ATNDeserializationOptions const&) = default;
25
- virtual ~ATNDeserializationOptions();
26
- ATNDeserializationOptions& operator=(ATNDeserializationOptions const&) = default;
21
+ ATNDeserializationOptions(const ATNDeserializationOptions&) = default;
27
22
 
28
- static const ATNDeserializationOptions& getDefaultOptions();
23
+ ATNDeserializationOptions& operator=(const ATNDeserializationOptions&) = default;
29
24
 
30
- bool isReadOnly();
25
+ static const ATNDeserializationOptions& getDefaultOptions();
31
26
 
32
- void makeReadOnly();
27
+ bool isReadOnly() const { return _readOnly; }
33
28
 
34
- bool isVerifyATN();
29
+ void makeReadOnly();
35
30
 
36
- void setVerifyATN(bool verify);
31
+ bool isVerifyATN() const { return _verifyATN; }
37
32
 
38
- bool isGenerateRuleBypassTransitions();
33
+ void setVerifyATN(bool verify);
39
34
 
40
- void setGenerateRuleBypassTransitions(bool generate);
35
+ bool isGenerateRuleBypassTransitions() const { return _generateRuleBypassTransitions; }
41
36
 
42
- protected:
43
- virtual void throwIfReadOnly();
37
+ void setGenerateRuleBypassTransitions(bool generate);
44
38
 
45
- private:
46
- void InitializeInstanceFields();
47
- };
39
+ private:
40
+ void throwIfReadOnly() const;
41
+
42
+ bool _readOnly;
43
+ bool _verifyATN;
44
+ bool _generateRuleBypassTransitions;
45
+ };
48
46
 
49
47
  } // namespace atn
50
48
  } // namespace antlr4