expressir 1.2.4 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. checksums.yaml +4 -4
  2. data/.cross_rubies +0 -6
  3. data/.github/workflows/rake.yml +200 -21
  4. data/.gitignore +7 -2
  5. data/.gitmodules +3 -0
  6. data/.rubocop.yml +13 -4
  7. data/README.adoc +8 -0
  8. data/Rakefile +4 -1
  9. data/bin/console +0 -1
  10. data/bin/rspec +3 -3
  11. data/exe/expressir +4 -2
  12. data/exe/format +1 -1
  13. data/exe/format-test +25 -25
  14. data/exe/generate-parser +16 -13
  15. data/expressir.gemspec +12 -10
  16. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +44 -34
  17. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj +11 -5
  18. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2013.vcxproj.filters +0 -3
  19. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj +11 -4
  20. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2015.vcxproj.filters +0 -3
  21. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj +11 -4
  22. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2017.vcxproj.filters +0 -3
  23. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +11 -4
  24. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj.filters +0 -3
  25. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +20 -20
  26. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +0 -6
  27. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +30 -19
  28. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +13 -10
  29. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonToken.cpp +2 -4
  30. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +16 -13
  31. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.cpp +2 -2
  32. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Exceptions.h +2 -2
  33. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.cpp +5 -4
  34. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/FailedPredicateException.h +1 -1
  35. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +0 -6
  36. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +0 -1
  37. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +0 -13
  38. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.cpp +0 -15
  39. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/LexerInterpreter.h +1 -7
  40. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +47 -27
  41. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +0 -6
  42. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.cpp +27 -39
  43. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserInterpreter.h +1 -7
  44. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +19 -22
  45. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +20 -20
  46. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RecognitionException.cpp +0 -1
  47. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.cpp +16 -27
  48. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +10 -21
  49. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.cpp +4 -3
  50. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuleContext.h +5 -1
  51. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +2 -1
  52. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +0 -32
  53. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +1 -1
  54. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +2 -7
  55. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +15 -18
  56. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/UnbufferedCharStream.h +12 -18
  57. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Version.h +42 -0
  58. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +13 -45
  59. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +11 -26
  60. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +19 -61
  61. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-runtime.h +7 -5
  62. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +4 -55
  63. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +34 -20
  64. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +30 -35
  65. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +35 -32
  66. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +58 -54
  67. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +77 -31
  68. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +22 -32
  69. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +22 -24
  70. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +335 -462
  71. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +9 -68
  72. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +9 -39
  73. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSimulator.h +6 -22
  74. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +10 -26
  75. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +41 -42
  76. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  77. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  78. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +2 -6
  79. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ActionTransition.h +4 -2
  80. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +49 -22
  81. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +20 -12
  82. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +1 -5
  83. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AtomTransition.h +5 -2
  84. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +4 -2
  85. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.h +4 -2
  86. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.h +5 -3
  87. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.h +10 -1
  88. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionInfo.h +1 -1
  89. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.cpp +0 -5
  90. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/DecisionState.h +12 -8
  91. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +2 -6
  92. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +6 -3
  93. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +139 -106
  94. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +9 -48
  95. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +16 -33
  96. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +12 -12
  97. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +69 -82
  98. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +15 -33
  99. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.cpp +12 -6
  100. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerAction.h +45 -11
  101. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +48 -44
  102. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +31 -18
  103. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerActionType.h +3 -1
  104. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +14 -26
  105. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +12 -16
  106. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +15 -32
  107. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +12 -24
  108. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +23 -29
  109. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +13 -19
  110. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +13 -26
  111. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerModeAction.h +12 -16
  112. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +6 -17
  113. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +12 -16
  114. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +6 -17
  115. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +12 -16
  116. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +13 -26
  117. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +12 -16
  118. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +6 -17
  119. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +11 -15
  120. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +13 -26
  121. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +13 -17
  122. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.h +5 -1
  123. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +1 -6
  124. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/NotSetTransition.h +4 -2
  125. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +6 -2
  126. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +8 -3
  127. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +164 -151
  128. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +26 -19
  129. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  130. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +5 -1
  131. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +5 -2
  132. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +2 -11
  133. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +15 -9
  134. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +2 -2
  135. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +2 -2
  136. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +4 -14
  137. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredicateTransition.h +22 -11
  138. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +255 -338
  139. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +86 -127
  140. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  141. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +64 -0
  142. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  143. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  144. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  145. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  146. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +18 -17
  147. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionMode.h +1 -1
  148. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +2 -2
  149. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +2 -2
  150. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +1 -5
  151. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RangeTransition.h +4 -2
  152. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.h +4 -3
  153. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.h +4 -2
  154. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +1 -5
  155. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleTransition.h +5 -3
  156. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +197 -156
  157. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContext.h +92 -81
  158. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  159. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  160. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.cpp +2 -6
  161. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SetTransition.h +11 -3
  162. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +39 -34
  163. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +17 -10
  164. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +5 -2
  165. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +4 -2
  166. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +6 -6
  167. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +6 -2
  168. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.h +5 -2
  169. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.cpp +1 -9
  170. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Transition.h +11 -22
  171. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  172. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  173. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +1 -5
  174. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/WildcardTransition.h +4 -2
  175. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +9 -21
  176. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.h +20 -15
  177. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -8
  178. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.h +4 -4
  179. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +9 -50
  180. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.h +57 -48
  181. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +1 -4
  182. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +3 -4
  183. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +2 -2
  184. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +3 -1
  185. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.cpp +1 -29
  186. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/Interval.h +10 -10
  187. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +7 -20
  188. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.h +1 -9
  189. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +54 -68
  190. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +34 -14
  191. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.cpp +0 -5
  192. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -155
  193. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.h +39 -0
  194. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/BitSet.h +1 -1
  195. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +12 -53
  196. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.h +16 -29
  197. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  198. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Declarations.h +0 -2
  199. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +25 -33
  200. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +2 -62
  201. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  202. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  203. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  204. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +13 -12
  205. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.h +7 -2
  206. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +36 -5
  207. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +14 -4
  208. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +14 -19
  209. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.cpp +0 -3
  210. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +13 -4
  211. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  212. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +4 -4
  213. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +8 -9
  214. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +4 -4
  215. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.h +10 -2
  216. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +2 -5
  217. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +4 -5
  218. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +1 -2
  219. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +128 -119
  220. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +18 -27
  221. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/tests/Utf8Test.cpp +110 -0
  222. data/ext/express-parser/antlrgen/Express.interp +1 -1
  223. data/ext/express-parser/antlrgen/ExpressBaseListener.cpp +1 -1
  224. data/ext/express-parser/antlrgen/ExpressBaseListener.h +1 -1
  225. data/ext/express-parser/antlrgen/ExpressBaseVisitor.cpp +1 -1
  226. data/ext/express-parser/antlrgen/ExpressBaseVisitor.h +200 -200
  227. data/ext/express-parser/antlrgen/ExpressLexer.cpp +645 -1129
  228. data/ext/express-parser/antlrgen/ExpressLexer.h +20 -27
  229. data/ext/express-parser/antlrgen/ExpressLexer.interp +1 -1
  230. data/ext/express-parser/antlrgen/ExpressListener.cpp +1 -1
  231. data/ext/express-parser/antlrgen/ExpressListener.h +1 -1
  232. data/ext/express-parser/antlrgen/ExpressParser.cpp +1754 -1447
  233. data/ext/express-parser/antlrgen/ExpressParser.h +219 -223
  234. data/ext/express-parser/antlrgen/ExpressVisitor.cpp +1 -1
  235. data/ext/express-parser/antlrgen/ExpressVisitor.h +200 -200
  236. data/ext/express-parser/express_parser.cpp +294 -86
  237. data/ext/express-parser/extconf.rb +13 -12
  238. data/lib/expressir/config.rb +1 -1
  239. data/lib/expressir/express/parser.rb +3 -4
  240. data/lib/expressir/express/visitor.rb +7 -5
  241. data/lib/expressir/model.rb +78 -78
  242. data/lib/expressir/version.rb +1 -1
  243. data/rakelib/antlr4-native.rake +161 -0
  244. data/rakelib/cross-ruby.rake +213 -162
  245. data/spec/acceptance/version_spec.rb +17 -2
  246. data/spec/expressir/express/cache_spec.rb +23 -5
  247. data/spec/expressir/express/formatter_spec.rb +54 -8
  248. data/spec/expressir/express/parser_spec.rb +47 -11
  249. data/spec/expressir/model/model_element_spec.rb +198 -146
  250. data/spec/spec_helper.rb +7 -0
  251. metadata +81 -93
  252. data/demo.rb +0 -18
  253. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +0 -621
  254. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.h +0 -61
  255. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.cpp +0 -14
  256. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/AbstractPredicateTransition.h +0 -24
  257. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicBlockStartState.cpp +0 -12
  258. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BasicState.cpp +0 -12
  259. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockEndState.cpp +0 -15
  260. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/BlockStartState.cpp +0 -9
  261. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.cpp +0 -35
  262. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/EmptyPredictionContext.h +0 -27
  263. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LoopEndState.cpp +0 -12
  264. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/Makefile +0 -67
  265. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusBlockStartState.cpp +0 -12
  266. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PlusLoopbackState.cpp +0 -12
  267. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStartState.cpp +0 -16
  268. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/RuleStopState.cpp +0 -12
  269. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarBlockStartState.cpp +0 -12
  270. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/StarLoopEntryState.cpp +0 -15
  271. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/TokensStartState.cpp +0 -12
  272. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.cpp +0 -303
  273. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/guid.h +0 -112
  274. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ErrorNode.cpp +0 -9
  275. data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/TerminalNode.cpp +0 -9
  276. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp +0 -9589
  277. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl +0 -36619
  278. data/original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.xml +0 -13294
  279. data/original/examples/employment/eclipse/.project +0 -17
  280. data/original/examples/employment/eclipse/Export/Employment.png +0 -0
  281. data/original/examples/employment/eclipse/Express/employment_schema.exp +0 -33
  282. data/original/examples/employment/eclipse/Express/employment_schema.xmi +0 -77
  283. data/original/examples/employment/eclipse/Express/employment_schema.xml +0 -93
  284. data/original/examples/employment/eclipse/Models/Employment.uml +0 -4
  285. data/original/examples/employment/eclipse/Models/Employment.umldi +0 -240
  286. data/original/examples/employment/eclipse/readme.txt +0 -7
  287. data/original/examples/employment/employment_schema.exp +0 -33
  288. data/original/examples/employment/employment_schema.rb +0 -232
  289. data/original/examples/employment/employment_schema.xml +0 -93
  290. data/original/examples/employment/employment_schema___module.rb +0 -46
  291. data/original/examples/employment/employment_schema___p28attr.rb +0 -126
  292. data/original/examples/employment/employment_schema___p28inst.rb +0 -26
  293. data/original/examples/employment/example_employment_data.xml +0 -1
  294. data/original/examples/employment/example_employment_data_copy.xml +0 -1
  295. data/original/examples/employment/example_employment_reader.rb +0 -30
  296. data/original/examples/employment/example_employment_writer.rb +0 -51
  297. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.exp +0 -3710
  298. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.owl +0 -35880
  299. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xmi +0 -15357
  300. data/original/examples/plcs/ap239e1_arm_lf_dexlib_2010-01-06.xml +0 -9468
  301. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.exp +0 -8404
  302. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl +0 -43147
  303. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi +0 -18341
  304. data/original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml +0 -11632
  305. data/original/exp2ruby.rb +0 -525
  306. data/original/expsm.rb +0 -34
  307. data/original/mapping_owl.rb +0 -1018
  308. data/original/mapping_sysml.rb +0 -2281
  309. data/original/mapping_uml2.rb +0 -599
  310. data/original/mapping_uml2_eclipse.rb +0 -433
  311. data/original/reeper.rb +0 -134
  312. data/spec/expressr_spec.rb +0 -5
@@ -9,10 +9,7 @@
9
9
 
10
10
  using namespace antlr4::dfa;
11
11
 
12
- LexerDFASerializer::LexerDFASerializer(DFA *dfa) : DFASerializer(dfa, Vocabulary::EMPTY_VOCABULARY) {
13
- }
14
-
15
- LexerDFASerializer::~LexerDFASerializer() {
12
+ LexerDFASerializer::LexerDFASerializer(const DFA *dfa) : DFASerializer(dfa, Vocabulary()) {
16
13
  }
17
14
 
18
15
  std::string LexerDFASerializer::getEdgeLabel(size_t i) const {
@@ -10,13 +10,12 @@
10
10
  namespace antlr4 {
11
11
  namespace dfa {
12
12
 
13
- class ANTLR4CPP_PUBLIC LexerDFASerializer : public DFASerializer {
13
+ class ANTLR4CPP_PUBLIC LexerDFASerializer final : public DFASerializer {
14
14
  public:
15
- LexerDFASerializer(DFA *dfa);
16
- virtual ~LexerDFASerializer();
15
+ explicit LexerDFASerializer(const DFA *dfa);
17
16
 
18
17
  protected:
19
- virtual std::string getEdgeLabel(size_t i) const override;
18
+ std::string getEdgeLabel(size_t i) const override;
20
19
  };
21
20
 
22
21
  } // namespace atn
@@ -101,7 +101,7 @@ InterpreterData InterpreterDataReader::parseFile(std::string const& fileName) {
101
101
  };
102
102
  }
103
103
 
104
- std::vector<uint16_t> serializedATN;
104
+ std::vector<int32_t> serializedATN;
105
105
 
106
106
  std::getline(input, line, '\n');
107
107
  assert(line == "atn:");
@@ -115,7 +115,7 @@ InterpreterData InterpreterDataReader::parseFile(std::string const& fileName) {
115
115
  number = std::strtoul(&value[1], nullptr, 10);
116
116
  else
117
117
  number = std::strtoul(value.c_str(), nullptr, 10);
118
- serializedATN.push_back(static_cast<uint16_t>(number));
118
+ serializedATN.push_back(static_cast<int32_t>(number));
119
119
  }
120
120
 
121
121
  ATNDeserializer deserializer;
@@ -6,12 +6,14 @@
6
6
  #pragma once
7
7
 
8
8
  #include "antlr4-common.h"
9
+ #include "atn/ATN.h"
10
+ #include "Vocabulary.h"
9
11
 
10
12
  namespace antlr4 {
11
13
  namespace misc {
12
14
 
13
15
  struct InterpreterData {
14
- atn::ATN atn;
16
+ std::unique_ptr<atn::ATN> atn;
15
17
  dfa::Vocabulary vocabulary;
16
18
  std::vector<std::string> ruleNames;
17
19
  std::vector<std::string> channels; // Only valid for lexer grammars.
@@ -7,35 +7,7 @@
7
7
 
8
8
  using namespace antlr4::misc;
9
9
 
10
- size_t antlr4::misc::numericToSymbol(ssize_t v) {
11
- return static_cast<size_t>(v);
12
- }
13
-
14
- ssize_t antlr4::misc::symbolToNumeric(size_t v) {
15
- return static_cast<ssize_t>(v);
16
- }
17
-
18
- Interval const Interval::INVALID;
19
-
20
- Interval::Interval() : Interval(static_cast<ssize_t>(-1), -2) { // Need an explicit cast here for VS.
21
- }
22
-
23
- Interval::Interval(size_t a_, size_t b_) : Interval(symbolToNumeric(a_), symbolToNumeric(b_)) {
24
- }
25
-
26
- Interval::Interval(ssize_t a_, ssize_t b_) : a(a_), b(b_) {
27
- }
28
-
29
- size_t Interval::length() const {
30
- if (b < a) {
31
- return 0;
32
- }
33
- return size_t(b - a + 1);
34
- }
35
-
36
- bool Interval::operator == (const Interval &other) const {
37
- return a == other.a && b == other.b;
38
- }
10
+ const Interval Interval::INVALID;
39
11
 
40
12
  size_t Interval::hashCode() const {
41
13
  size_t hash = 23;
@@ -13,11 +13,11 @@ namespace misc {
13
13
  // Helpers to convert certain unsigned symbols (e.g. Token::EOF) to their original numeric value (e.g. -1)
14
14
  // and vice versa. This is needed mostly for intervals to keep their original order and for toString()
15
15
  // methods to print the original numeric value (e.g. for tests).
16
- size_t numericToSymbol(ssize_t v);
17
- ssize_t symbolToNumeric(size_t v);
16
+ constexpr size_t numericToSymbol(ssize_t v) { return static_cast<size_t>(v); }
17
+ constexpr ssize_t symbolToNumeric(size_t v) { return static_cast<ssize_t>(v); }
18
18
 
19
19
  /// An immutable inclusive interval a..b
20
- class ANTLR4CPP_PUBLIC Interval {
20
+ class ANTLR4CPP_PUBLIC Interval final {
21
21
  public:
22
22
  static const Interval INVALID;
23
23
 
@@ -25,15 +25,17 @@ namespace misc {
25
25
  ssize_t a;
26
26
  ssize_t b;
27
27
 
28
- Interval();
29
- explicit Interval(size_t a_, size_t b_); // For unsigned -> signed mappings.
30
- Interval(ssize_t a_, ssize_t b_);
28
+ constexpr Interval() : Interval(static_cast<ssize_t>(-1), static_cast<ssize_t>(-2)) {}
29
+
30
+ constexpr explicit Interval(size_t a_, size_t b_) : Interval(symbolToNumeric(a_), symbolToNumeric(b_)) {}
31
+
32
+ constexpr Interval(ssize_t a_, ssize_t b_) : a(a_), b(b_) {}
31
33
 
32
34
  /// return number of elements between a and b inclusively. x..x is length 1.
33
35
  /// if b < a, then length is 0. 9..10 has length 2.
34
- size_t length() const;
36
+ constexpr size_t length() const { return b >= a ? static_cast<size_t>(b - a + 1) : 0; }
35
37
 
36
- bool operator == (const Interval &other) const;
38
+ constexpr bool operator==(const Interval &other) const { return a == other.a && b == other.b; }
37
39
 
38
40
  size_t hashCode() const;
39
41
 
@@ -76,8 +78,6 @@ namespace misc {
76
78
  Interval intersection(const Interval &other) const;
77
79
 
78
80
  std::string toString() const;
79
-
80
- private:
81
81
  };
82
82
 
83
83
  } // namespace atn
@@ -13,7 +13,7 @@
13
13
  using namespace antlr4;
14
14
  using namespace antlr4::misc;
15
15
 
16
- IntervalSet const IntervalSet::COMPLETE_CHAR_SET =
16
+ IntervalSet const IntervalSet::COMPLETE_CHAR_SET =
17
17
  IntervalSet::of(Lexer::MIN_CHAR_VALUE, Lexer::MAX_CHAR_VALUE);
18
18
 
19
19
  IntervalSet const IntervalSet::EMPTY_SET;
@@ -265,18 +265,13 @@ bool IntervalSet::contains(size_t el) const {
265
265
  }
266
266
 
267
267
  bool IntervalSet::contains(ssize_t el) const {
268
- if (_intervals.empty())
268
+ if (_intervals.empty() || el < _intervals.front().a || el > _intervals.back().b) {
269
269
  return false;
270
-
271
- if (el < _intervals[0].a) // list is sorted and el is before first interval; not here
272
- return false;
273
-
274
- for (const auto &interval : _intervals) {
275
- if (el >= interval.a && el <= interval.b) {
276
- return true; // found in this interval
277
- }
278
270
  }
279
- return false;
271
+
272
+ return std::binary_search(_intervals.begin(), _intervals.end(), Interval(el, el), [](const Interval &lhs, const Interval &rhs) {
273
+ return lhs.b < rhs.a;
274
+ });
280
275
  }
281
276
 
282
277
  bool IntervalSet::isEmpty() const {
@@ -306,7 +301,7 @@ ssize_t IntervalSet::getMinElement() const {
306
301
  return Token::INVALID_TYPE;
307
302
  }
308
303
 
309
- return _intervals[0].a;
304
+ return _intervals.front().a;
310
305
  }
311
306
 
312
307
  std::vector<Interval> const& IntervalSet::getIntervals() const {
@@ -379,10 +374,6 @@ std::string IntervalSet::toString(bool elemAreChar) const {
379
374
  return ss.str();
380
375
  }
381
376
 
382
- std::string IntervalSet::toString(const std::vector<std::string> &tokenNames) const {
383
- return toString(dfa::Vocabulary::fromTokenNames(tokenNames));
384
- }
385
-
386
377
  std::string IntervalSet::toString(const dfa::Vocabulary &vocabulary) const {
387
378
  if (_intervals.empty()) {
388
379
  return "{}";
@@ -420,10 +411,6 @@ std::string IntervalSet::toString(const dfa::Vocabulary &vocabulary) const {
420
411
  return ss.str();
421
412
  }
422
413
 
423
- std::string IntervalSet::elementName(const std::vector<std::string> &tokenNames, ssize_t a) const {
424
- return elementName(dfa::Vocabulary::fromTokenNames(tokenNames), a);
425
- }
426
-
427
414
  std::string IntervalSet::elementName(const dfa::Vocabulary &vocabulary, ssize_t a) const {
428
415
  if (a == -1) {
429
416
  return "<EOF>";
@@ -23,7 +23,7 @@ namespace misc {
23
23
  * the range {@link Integer#MIN_VALUE} to {@link Integer#MAX_VALUE}
24
24
  * (inclusive).</p>
25
25
  */
26
- class ANTLR4CPP_PUBLIC IntervalSet {
26
+ class ANTLR4CPP_PUBLIC IntervalSet final {
27
27
  public:
28
28
  static IntervalSet const COMPLETE_CHAR_SET;
29
29
  static IntervalSet const EMPTY_SET;
@@ -151,17 +151,9 @@ namespace misc {
151
151
  std::string toString() const;
152
152
  std::string toString(bool elemAreChar) const;
153
153
 
154
- /**
155
- * @deprecated Use {@link #toString(Vocabulary)} instead.
156
- */
157
- std::string toString(const std::vector<std::string> &tokenNames) const;
158
154
  std::string toString(const dfa::Vocabulary &vocabulary) const;
159
155
 
160
156
  protected:
161
- /**
162
- * @deprecated Use {@link #elementName(Vocabulary, int)} instead.
163
- */
164
- std::string elementName(const std::vector<std::string> &tokenNames, ssize_t a) const;
165
157
  std::string elementName(const dfa::Vocabulary &vocabulary, ssize_t a) const;
166
158
 
167
159
  public:
@@ -3,6 +3,10 @@
3
3
  * can be found in the LICENSE.txt file in the project root.
4
4
  */
5
5
 
6
+ #include <cstddef>
7
+ #include <cstdint>
8
+ #include <cstring>
9
+
6
10
  #include "misc/MurmurHash.h"
7
11
 
8
12
  using namespace antlr4::misc;
@@ -17,118 +21,100 @@ using namespace antlr4::misc;
17
21
 
18
22
  #if defined(_MSC_VER)
19
23
 
20
- #define FORCE_INLINE __forceinline
21
-
22
24
  #include <stdlib.h>
23
25
 
24
26
  #define ROTL32(x,y) _rotl(x,y)
25
27
  #define ROTL64(x,y) _rotl64(x,y)
26
28
 
27
- #define BIG_CONSTANT(x) (x)
29
+ #elif ANTLR4CPP_HAVE_BUILTIN(__builtin_rotateleft32) && ANTLR4CPP_HAVE_BUILTIN(__builtin_rotateleft64)
30
+
31
+ #define ROTL32(x, y) __builtin_rotateleft32(x, y)
32
+ #define ROTL64(x, y) __builtin_rotateleft64(x, y)
28
33
 
29
34
  #else // defined(_MSC_VER)
30
35
 
31
36
  // Other compilers
32
37
 
33
- #define FORCE_INLINE inline __attribute__((always_inline))
38
+ namespace {
34
39
 
35
- inline uint32_t rotl32 (uint32_t x, int8_t r)
36
- {
40
+ constexpr uint32_t ROTL32(uint32_t x, int r) {
37
41
  return (x << r) | (x >> (32 - r));
38
42
  }
39
-
40
- inline uint64_t rotl64 (uint64_t x, int8_t r)
41
- {
43
+ constexpr uint64_t ROTL64(uint64_t x, int r) {
42
44
  return (x << r) | (x >> (64 - r));
43
45
  }
44
46
 
45
- #define ROTL32(x,y) rotl32(x,y)
46
- #define ROTL64(x,y) rotl64(x,y)
47
-
48
- #define BIG_CONSTANT(x) (x##LLU)
49
-
50
- #endif // !defined(_MSC_VER)
51
-
52
- size_t MurmurHash::initialize() {
53
- return initialize(DEFAULT_SEED);
54
- }
55
-
56
- size_t MurmurHash::initialize(size_t seed) {
57
- return seed;
58
47
  }
59
48
 
60
- #if defined(_WIN32) || defined(_WIN64)
61
- #if _WIN64
62
- #define ENVIRONMENT64
63
- #else
64
- #define ENVIRONMENT32
65
- #endif
66
- #endif
67
-
68
- #if defined(__GNUC__)
69
- #if defined(__x86_64__) || defined(__ppc64__)
70
- #define ENVIRONMENT64
71
- #else
72
- #define ENVIRONMENT32
73
- #endif
74
- #endif
49
+ #endif // !defined(_MSC_VER)
75
50
 
76
- #if defined(ENVIRONMENT32)
51
+ #if SIZE_MAX == UINT64_MAX
77
52
 
78
53
  size_t MurmurHash::update(size_t hash, size_t value) {
79
- static const size_t c1 = 0xCC9E2D51;
80
- static const size_t c2 = 0x1B873593;
81
-
82
54
  size_t k1 = value;
83
- k1 *= c1;
84
- k1 = ROTL32(k1, 15);
85
- k1 *= c2;
55
+ k1 *= UINT64_C(0x87c37b91114253d5);
56
+ k1 = ROTL64(k1, 31);
57
+ k1 *= UINT64_C(0x4cf5ad432745937f);
86
58
 
87
59
  hash ^= k1;
88
- hash = ROTL32(hash, 13);
89
- hash = hash * 5 + 0xE6546B64;
60
+ hash = ROTL64(hash, 27);
61
+ hash = hash * 5 + UINT64_C(0x52dce729);
90
62
 
91
63
  return hash;
92
64
  }
93
65
 
66
+ size_t MurmurHash::update(size_t hash, const void *data, size_t size) {
67
+ size_t value;
68
+ const uint8_t *bytes = static_cast<const uint8_t*>(data);
69
+ while (size >= sizeof(size_t)) {
70
+ std::memcpy(&value, bytes, sizeof(size_t));
71
+ hash = update(hash, value);
72
+ bytes += sizeof(size_t);
73
+ size -= sizeof(size_t);
74
+ }
75
+ if (size != 0) {
76
+ value = 0;
77
+ std::memcpy(&value, bytes, size);
78
+ hash = update(hash, value);
79
+ }
80
+ return hash;
81
+ }
94
82
 
95
83
  size_t MurmurHash::finish(size_t hash, size_t entryCount) {
96
- hash ^= entryCount * 4;
97
- hash ^= hash >> 16;
98
- hash *= 0x85EBCA6B;
99
- hash ^= hash >> 13;
100
- hash *= 0xC2B2AE35;
101
- hash ^= hash >> 16;
84
+ hash ^= entryCount * 8;
85
+ hash ^= hash >> 33;
86
+ hash *= UINT64_C(0xff51afd7ed558ccd);
87
+ hash ^= hash >> 33;
88
+ hash *= UINT64_C(0xc4ceb9fe1a85ec53);
89
+ hash ^= hash >> 33;
102
90
  return hash;
103
91
  }
104
92
 
105
- #else
93
+ #elif SIZE_MAX == UINT32_MAX
106
94
 
107
95
  size_t MurmurHash::update(size_t hash, size_t value) {
108
- static const size_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
109
- static const size_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
110
-
111
96
  size_t k1 = value;
112
- k1 *= c1;
113
- k1 = ROTL64(k1, 31);
114
- k1 *= c2;
97
+ k1 *= UINT32_C(0xCC9E2D51);
98
+ k1 = ROTL32(k1, 15);
99
+ k1 *= UINT32_C(0x1B873593);
115
100
 
116
101
  hash ^= k1;
117
- hash = ROTL64(hash, 27);
118
- hash = hash * 5 + 0x52dce729;
102
+ hash = ROTL32(hash, 13);
103
+ hash = hash * 5 + UINT32_C(0xE6546B64);
119
104
 
120
105
  return hash;
121
106
  }
122
107
 
123
-
124
108
  size_t MurmurHash::finish(size_t hash, size_t entryCount) {
125
- hash ^= entryCount * 8;
126
- hash ^= hash >> 33;
127
- hash *= 0xff51afd7ed558ccd;
128
- hash ^= hash >> 33;
129
- hash *= 0xc4ceb9fe1a85ec53;
130
- hash ^= hash >> 33;
109
+ hash ^= entryCount * 4;
110
+ hash ^= hash >> 16;
111
+ hash *= UINT32_C(0x85EBCA6B);
112
+ hash ^= hash >> 13;
113
+ hash *= UINT32_C(0xC2B2AE35);
114
+ hash ^= hash >> 16;
131
115
  return hash;
132
116
  }
133
117
 
118
+ #else
119
+ #error "Expected sizeof(size_t) to be 4 or 8."
134
120
  #endif
@@ -5,29 +5,25 @@
5
5
 
6
6
  #pragma once
7
7
 
8
+ #include <cstdint>
9
+ #include <type_traits>
10
+
8
11
  #include "antlr4-common.h"
9
12
 
10
13
  namespace antlr4 {
11
14
  namespace misc {
12
15
 
13
- class ANTLR4CPP_PUBLIC MurmurHash {
14
-
16
+ class ANTLR4CPP_PUBLIC MurmurHash final {
15
17
  private:
16
- #if __cplusplus >= 201703L
17
18
  static constexpr size_t DEFAULT_SEED = 0;
18
- #else
19
- enum : size_t {
20
- DEFAULT_SEED = 0,
21
- };
22
- #endif
23
19
 
24
20
  /// Initialize the hash using the default seed value.
25
21
  /// Returns the intermediate hash value.
26
22
  public:
27
- static size_t initialize();
23
+ static size_t initialize() { return initialize(DEFAULT_SEED); }
28
24
 
29
25
  /// Initialize the hash using the specified seed.
30
- static size_t initialize(size_t seed);
26
+ static size_t initialize(size_t seed) { return seed; }
31
27
 
32
28
  /// Update the intermediate hash value for the next input {@code value}.
33
29
  /// <param name="hash"> the intermediate hash value </param>
@@ -52,6 +48,13 @@ namespace misc {
52
48
  return update(hash, value != nullptr ? value->hashCode() : 0);
53
49
  }
54
50
 
51
+ static size_t update(size_t hash, const void *data, size_t size);
52
+
53
+ template <typename T>
54
+ static size_t update(size_t hash, const T *data, size_t size) {
55
+ return update(hash, static_cast<const void*>(data), size * sizeof(std::remove_reference_t<T>));
56
+ }
57
+
55
58
  /// <summary>
56
59
  /// Apply the final computation steps to the intermediate value {@code hash}
57
60
  /// to form the final result of the MurmurHash 3 hash function.
@@ -68,14 +71,31 @@ namespace misc {
68
71
  /// <param name="seed"> the seed for the MurmurHash algorithm </param>
69
72
  /// <returns> the hash code of the data </returns>
70
73
  template<typename T> // where T is C array type
71
- static size_t hashCode(const std::vector<Ref<T>> &data, size_t seed) {
74
+ static size_t hashCode(const std::vector<Ref<T>> &data, size_t seed = DEFAULT_SEED) {
72
75
  size_t hash = initialize(seed);
73
- for (auto entry : data) {
74
- hash = update(hash, entry->hashCode());
76
+ for (auto &entry : data) {
77
+ hash = update(hash, entry);
75
78
  }
76
-
77
79
  return finish(hash, data.size());
78
80
  }
81
+
82
+ static size_t hashCode(const void *data, size_t size, size_t seed = DEFAULT_SEED) {
83
+ size_t hash = initialize(seed);
84
+ hash = update(hash, data, size);
85
+ return finish(hash, size);
86
+ }
87
+
88
+ template <typename T>
89
+ static size_t hashCode(const T *data, size_t size, size_t seed = DEFAULT_SEED) {
90
+ return hashCode(static_cast<const void*>(data), size * sizeof(std::remove_reference_t<T>), seed);
91
+ }
92
+
93
+ private:
94
+ MurmurHash() = delete;
95
+
96
+ MurmurHash(const MurmurHash&) = delete;
97
+
98
+ MurmurHash& operator=(const MurmurHash&) = delete;
79
99
  };
80
100
 
81
101
  } // namespace atn
@@ -6,8 +6,3 @@
6
6
  #include "Any.h"
7
7
 
8
8
  using namespace antlrcpp;
9
-
10
- Any::~Any()
11
- {
12
- delete _ptr;
13
- }
@@ -9,162 +9,8 @@
9
9
 
10
10
  #include "antlr4-common.h"
11
11
 
12
- #ifdef _MSC_VER
13
- #pragma warning(push)
14
- #pragma warning(disable: 4521) // 'antlrcpp::Any': multiple copy constructors specified
15
- #endif
16
-
17
12
  namespace antlrcpp {
18
13
 
19
- template<class T>
20
- using StorageType = typename std::decay<T>::type;
21
-
22
- struct ANTLR4CPP_PUBLIC Any
23
- {
24
- bool isNull() const { return _ptr == nullptr; }
25
- bool isNotNull() const { return _ptr != nullptr; }
26
-
27
- Any() : _ptr(nullptr) {
28
- }
29
-
30
- Any(Any& that) : _ptr(that.clone()) {
31
- }
32
-
33
- Any(Any&& that) : _ptr(that._ptr) {
34
- that._ptr = nullptr;
35
- }
36
-
37
- Any(const Any& that) : _ptr(that.clone()) {
38
- }
39
-
40
- Any(const Any&& that) : _ptr(that.clone()) {
41
- }
42
-
43
- template<typename U>
44
- Any(U&& value) : _ptr(new Derived<StorageType<U>>(std::forward<U>(value))) {
45
- }
46
-
47
- template<class U>
48
- bool is() const {
49
- auto derived = getDerived<U>(false);
50
-
51
- return derived != nullptr;
52
- }
53
-
54
- template<class U>
55
- StorageType<U>& as() {
56
- auto derived = getDerived<U>(true);
57
-
58
- return derived->value;
59
- }
60
-
61
- template<class U>
62
- const StorageType<U>& as() const {
63
- auto derived = getDerived<U>(true);
64
-
65
- return derived->value;
66
- }
67
-
68
- template<class U>
69
- operator U() {
70
- return as<StorageType<U>>();
71
- }
72
-
73
- template<class U>
74
- operator const U() const {
75
- return as<const StorageType<U>>();
76
- }
77
-
78
- Any& operator = (const Any& a) {
79
- if (_ptr == a._ptr)
80
- return *this;
81
-
82
- auto * old_ptr = _ptr;
83
- _ptr = a.clone();
84
-
85
- if (old_ptr)
86
- delete old_ptr;
87
-
88
- return *this;
89
- }
90
-
91
- Any& operator = (Any&& a) {
92
- if (_ptr == a._ptr)
93
- return *this;
94
-
95
- std::swap(_ptr, a._ptr);
96
-
97
- return *this;
98
- }
99
-
100
- virtual ~Any();
101
-
102
- virtual bool equals(Any other) const {
103
- return _ptr == other._ptr;
104
- }
105
-
106
- private:
107
- struct Base {
108
- virtual ~Base() {};
109
- virtual Base* clone() const = 0;
110
- };
111
-
112
- template<typename T>
113
- struct Derived : Base
114
- {
115
- template<typename U> Derived(U&& value_) : value(std::forward<U>(value_)) {
116
- }
117
-
118
- T value;
119
-
120
- Base* clone() const {
121
- return clone<>();
122
- }
123
-
124
- private:
125
- template<int N = 0, typename std::enable_if<N == N && std::is_nothrow_copy_constructible<T>::value, int>::type = 0>
126
- Base* clone() const {
127
- return new Derived<T>(value);
128
- }
129
-
130
- template<int N = 0, typename std::enable_if<N == N && !std::is_nothrow_copy_constructible<T>::value, int>::type = 0>
131
- Base* clone() const {
132
- return nullptr;
133
- }
134
-
135
- };
136
-
137
- Base* clone() const
138
- {
139
- if (_ptr)
140
- return _ptr->clone();
141
- else
142
- return nullptr;
143
- }
144
-
145
- template<class U>
146
- Derived<StorageType<U>>* getDerived(bool checkCast) const {
147
- typedef StorageType<U> T;
148
-
149
- auto derived = dynamic_cast<Derived<T>*>(_ptr);
150
-
151
- if (checkCast && !derived)
152
- throw std::bad_cast();
153
-
154
- return derived;
155
- }
156
-
157
- Base *_ptr;
158
-
159
- };
160
-
161
- template<> inline
162
- Any::Any(std::nullptr_t&& ) : _ptr(nullptr) {
163
- }
164
-
14
+ using Any = std::any;
165
15
 
166
16
  } // namespace antlrcpp
167
-
168
- #ifdef _MSC_VER
169
- #pragma warning(pop)
170
- #endif