expressir 1.2.4 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
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