@appthreat/atom 1.8.1 → 1.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/package.json +1 -1
  2. package/phpastgen.js +7 -1
  3. package/plugins/autoload.php +1 -1
  4. package/plugins/bin/atom +1 -1
  5. package/plugins/bin/atom.bat +1 -1
  6. package/plugins/composer/autoload_classmap.php +18 -18
  7. package/plugins/composer/autoload_real.php +4 -4
  8. package/plugins/composer/autoload_static.php +22 -22
  9. package/plugins/composer/installed.json +10 -12
  10. package/plugins/composer/installed.php +9 -9
  11. package/plugins/lib/io.appthreat.atom-1.8.3-classpath.jar +0 -0
  12. package/plugins/lib/{io.appthreat.atom-1.8.1.jar → io.appthreat.atom-1.8.3.jar} +0 -0
  13. package/plugins/lib/{io.appthreat.c2cpg_3-1.1.3.jar → io.appthreat.c2cpg_3-1.1.5.jar} +0 -0
  14. package/plugins/lib/{io.appthreat.dataflowengineoss_3-1.1.3.jar → io.appthreat.dataflowengineoss_3-1.1.5.jar} +0 -0
  15. package/plugins/lib/{io.appthreat.javasrc2cpg_3-1.1.3.jar → io.appthreat.javasrc2cpg_3-1.1.5.jar} +0 -0
  16. package/plugins/lib/{io.appthreat.jimple2cpg_3-1.1.3.jar → io.appthreat.jimple2cpg_3-1.1.5.jar} +0 -0
  17. package/plugins/lib/{io.appthreat.jssrc2cpg_3-1.1.3.jar → io.appthreat.jssrc2cpg_3-1.1.5.jar} +0 -0
  18. package/plugins/lib/io.appthreat.php2atom_3-1.1.5.jar +0 -0
  19. package/plugins/lib/{io.appthreat.pysrc2cpg_3-1.1.3.jar → io.appthreat.pysrc2cpg_3-1.1.5.jar} +0 -0
  20. package/plugins/lib/{io.appthreat.semanticcpg_3-1.1.3.jar → io.appthreat.semanticcpg_3-1.1.5.jar} +0 -0
  21. package/plugins/lib/{io.appthreat.x2cpg_3-1.1.3.jar → io.appthreat.x2cpg_3-1.1.5.jar} +0 -0
  22. package/plugins/nikic/php-parser/README.md +12 -20
  23. package/plugins/nikic/php-parser/bin/php-parse +10 -11
  24. package/plugins/nikic/php-parser/composer.json +4 -6
  25. package/plugins/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +15 -17
  26. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Class_.php +30 -35
  27. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +4 -11
  28. package/plugins/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +7 -9
  29. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +27 -26
  30. package/plugins/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +7 -7
  31. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Function_.php +7 -7
  32. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +10 -11
  33. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Method.php +15 -16
  34. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +5 -5
  35. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Param.php +35 -16
  36. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Property.php +19 -19
  37. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +5 -6
  38. package/plugins/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +28 -25
  39. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +11 -16
  40. package/plugins/nikic/php-parser/lib/PhpParser/Builder/Use_.php +8 -8
  41. package/plugins/nikic/php-parser/lib/PhpParser/Builder.php +3 -2
  42. package/plugins/nikic/php-parser/lib/PhpParser/BuilderFactory.php +69 -45
  43. package/plugins/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +19 -17
  44. package/plugins/nikic/php-parser/lib/PhpParser/Comment/Doc.php +2 -1
  45. package/plugins/nikic/php-parser/lib/PhpParser/Comment.php +67 -35
  46. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +3 -3
  47. package/plugins/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +10 -15
  48. package/plugins/nikic/php-parser/lib/PhpParser/Error.php +33 -24
  49. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +9 -6
  50. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +3 -2
  51. package/plugins/nikic/php-parser/lib/PhpParser/ErrorHandler.php +3 -2
  52. package/plugins/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +7 -11
  53. package/plugins/nikic/php-parser/lib/PhpParser/Internal/Differ.php +22 -36
  54. package/plugins/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +13 -20
  55. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +70 -55
  56. package/plugins/nikic/php-parser/lib/PhpParser/JsonDecoder.php +10 -15
  57. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +93 -68
  58. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +18 -11
  59. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php +47 -0
  60. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +15 -10
  61. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +11 -12
  62. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php +76 -0
  63. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php +23 -0
  64. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +25 -19
  65. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +10 -6
  66. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +29 -22
  67. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php +105 -0
  68. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +3 -3
  69. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +15 -10
  70. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +5 -6
  71. package/plugins/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +5 -10
  72. package/plugins/nikic/php-parser/lib/PhpParser/Lexer.php +513 -69
  73. package/plugins/nikic/php-parser/lib/PhpParser/NameContext.php +24 -23
  74. package/plugins/nikic/php-parser/lib/PhpParser/Node/Arg.php +15 -13
  75. package/plugins/nikic/php-parser/lib/PhpParser/Node/Attribute.php +10 -9
  76. package/plugins/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +7 -5
  77. package/plugins/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +2 -1
  78. package/plugins/nikic/php-parser/lib/PhpParser/Node/Const_.php +10 -9
  79. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +11 -10
  80. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +39 -1
  81. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +11 -11
  82. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +28 -33
  83. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +10 -9
  84. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +3 -2
  85. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +3 -2
  86. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +3 -2
  87. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +3 -2
  88. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +3 -2
  89. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +3 -2
  90. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +3 -2
  91. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +3 -2
  92. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +3 -2
  93. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +3 -2
  94. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +3 -2
  95. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +3 -2
  96. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +3 -2
  97. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +8 -7
  98. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +10 -9
  99. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +5 -4
  100. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +5 -4
  101. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +5 -4
  102. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +5 -4
  103. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +5 -4
  104. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +5 -4
  105. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +5 -4
  106. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +5 -4
  107. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +5 -4
  108. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +5 -4
  109. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +5 -4
  110. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +5 -4
  111. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +5 -4
  112. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +5 -4
  113. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +5 -4
  114. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +5 -4
  115. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +5 -4
  116. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +5 -4
  117. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +5 -4
  118. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +5 -4
  119. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +5 -4
  120. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +5 -4
  121. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +5 -4
  122. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +5 -4
  123. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +5 -4
  124. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +5 -4
  125. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +5 -4
  126. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +11 -8
  127. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +8 -7
  128. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +8 -7
  129. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +7 -3
  130. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +3 -2
  131. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +3 -2
  132. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +6 -5
  133. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +3 -2
  134. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +3 -2
  135. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +3 -2
  136. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +3 -2
  137. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +6 -5
  138. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +10 -10
  139. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +8 -7
  140. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +26 -33
  141. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +32 -1
  142. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +8 -7
  143. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +8 -7
  144. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +6 -5
  145. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +8 -7
  146. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +8 -7
  147. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +11 -10
  148. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +11 -10
  149. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +14 -13
  150. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +11 -11
  151. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +8 -7
  152. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +8 -12
  153. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +7 -8
  154. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +12 -12
  155. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +11 -10
  156. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +12 -12
  157. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +10 -10
  158. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +8 -7
  159. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +8 -7
  160. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +7 -6
  161. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +8 -7
  162. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +8 -7
  163. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +10 -10
  164. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +9 -9
  165. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +13 -12
  166. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +11 -11
  167. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +13 -12
  168. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +7 -6
  169. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +8 -7
  170. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +8 -7
  171. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +7 -6
  172. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +8 -7
  173. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +11 -10
  174. package/plugins/nikic/php-parser/lib/PhpParser/Node/Expr.php +2 -1
  175. package/plugins/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +8 -5
  176. package/plugins/nikic/php-parser/lib/PhpParser/Node/Identifier.php +13 -13
  177. package/plugins/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +9 -6
  178. package/plugins/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +9 -8
  179. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +9 -8
  180. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +9 -8
  181. package/plugins/nikic/php-parser/lib/PhpParser/Node/Name.php +56 -71
  182. package/plugins/nikic/php-parser/lib/PhpParser/Node/NullableType.php +10 -11
  183. package/plugins/nikic/php-parser/lib/PhpParser/Node/Param.php +22 -46
  184. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +75 -1
  185. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +29 -1
  186. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +28 -1
  187. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +78 -1
  188. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +5 -4
  189. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +5 -4
  190. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +5 -4
  191. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +5 -4
  192. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +5 -4
  193. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +5 -4
  194. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +5 -4
  195. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +5 -4
  196. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +5 -4
  197. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +26 -30
  198. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar.php +2 -1
  199. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +9 -8
  200. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +11 -10
  201. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +12 -11
  202. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +32 -24
  203. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +13 -13
  204. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +54 -47
  205. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +89 -46
  206. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +8 -7
  207. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +9 -8
  208. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +32 -1
  209. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +12 -12
  210. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +10 -9
  211. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +8 -7
  212. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +10 -9
  213. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +8 -7
  214. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +12 -11
  215. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +13 -17
  216. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +8 -7
  217. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +8 -7
  218. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +15 -19
  219. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +17 -20
  220. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +24 -28
  221. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +8 -7
  222. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +8 -7
  223. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +14 -16
  224. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +8 -7
  225. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +15 -18
  226. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +8 -7
  227. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +10 -13
  228. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +8 -7
  229. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +12 -11
  230. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +5 -4
  231. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +37 -28
  232. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +32 -1
  233. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +9 -8
  234. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +35 -1
  235. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +8 -8
  236. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +10 -9
  237. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php +30 -0
  238. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +9 -8
  239. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +13 -12
  240. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +10 -9
  241. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +4 -3
  242. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +8 -10
  243. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +12 -11
  244. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +8 -7
  245. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +50 -1
  246. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +16 -16
  247. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +10 -9
  248. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt.php +2 -1
  249. package/plugins/nikic/php-parser/lib/PhpParser/Node/UnionType.php +8 -7
  250. package/plugins/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +3 -2
  251. package/plugins/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +2 -2
  252. package/plugins/nikic/php-parser/lib/PhpParser/Node.php +29 -24
  253. package/plugins/nikic/php-parser/lib/PhpParser/NodeAbstract.php +20 -20
  254. package/plugins/nikic/php-parser/lib/PhpParser/NodeDumper.php +84 -168
  255. package/plugins/nikic/php-parser/lib/PhpParser/NodeFinder.php +19 -28
  256. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverser.php +84 -71
  257. package/plugins/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +7 -4
  258. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +2 -1
  259. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +5 -4
  260. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +7 -6
  261. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +28 -30
  262. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +3 -2
  263. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +11 -8
  264. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor.php +7 -59
  265. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +2 -1
  266. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Multiple.php +55 -0
  267. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php5.php +2682 -0
  268. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php7.php +1522 -1323
  269. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Tokens.php +148 -0
  270. package/plugins/nikic/php-parser/lib/PhpParser/Parser.php +3 -9
  271. package/plugins/nikic/php-parser/lib/PhpParser/ParserAbstract.php +252 -433
  272. package/plugins/nikic/php-parser/lib/PhpParser/ParserFactory.php +49 -15
  273. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +335 -386
  274. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +438 -517
  275. package/plugins/lib/io.appthreat.atom-1.8.1-classpath.jar +0 -0
  276. package/plugins/lib/io.appthreat.php2atom_3-1.1.3.jar +0 -0
  277. package/plugins/nikic/php-parser/.php-cs-fixer.dist.php +0 -31
  278. package/plugins/nikic/php-parser/Makefile +0 -10
  279. package/plugins/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +0 -237
  280. package/plugins/nikic/php-parser/lib/PhpParser/Modifiers.php +0 -69
  281. package/plugins/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +0 -43
  282. package/plugins/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +0 -36
  283. package/plugins/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +0 -37
  284. package/plugins/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +0 -32
  285. package/plugins/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +0 -37
  286. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +0 -78
  287. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +0 -82
  288. package/plugins/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +0 -34
  289. package/plugins/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +0 -39
  290. package/plugins/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +0 -29
  291. package/plugins/nikic/php-parser/lib/PhpParser/Node/UseItem.php +0 -55
  292. package/plugins/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +0 -82
  293. package/plugins/nikic/php-parser/lib/PhpParser/Parser/Php8.php +0 -2717
  294. package/plugins/nikic/php-parser/lib/PhpParser/PhpVersion.php +0 -164
  295. package/plugins/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +0 -51
  296. package/plugins/nikic/php-parser/lib/PhpParser/Token.php +0 -18
  297. package/plugins/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +0 -56
  298. package/plugins/nikic/php-parser/phpstan-baseline.neon +0 -236
  299. package/plugins/nikic/php-parser/phpstan.neon.dist +0 -8
@@ -2,36 +2,43 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
6
- use PhpParser\Token;
5
+ use PhpParser\Lexer\Emulative;
7
6
 
8
- final class AttributeEmulator extends TokenEmulator {
9
- public function getPhpVersion(): PhpVersion {
10
- return PhpVersion::fromComponents(8, 0);
7
+ final class AttributeEmulator extends TokenEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_8_0;
11
12
  }
12
13
 
13
- public function isEmulationNeeded(string $code): bool {
14
+ public function isEmulationNeeded(string $code) : bool
15
+ {
14
16
  return strpos($code, '#[') !== false;
15
17
  }
16
18
 
17
- public function emulate(string $code, array $tokens): array {
19
+ public function emulate(string $code, array $tokens): array
20
+ {
18
21
  // We need to manually iterate and manage a count because we'll change
19
22
  // the tokens array on the way.
23
+ $line = 1;
20
24
  for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
21
- $token = $tokens[$i];
22
- if ($token->text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') {
25
+ if ($tokens[$i] === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1] === '[') {
23
26
  array_splice($tokens, $i, 2, [
24
- new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos),
27
+ [\T_ATTRIBUTE, '#[', $line]
25
28
  ]);
26
29
  $c--;
27
30
  continue;
28
31
  }
32
+ if (\is_array($tokens[$i])) {
33
+ $line += substr_count($tokens[$i][1], "\n");
34
+ }
29
35
  }
30
36
 
31
37
  return $tokens;
32
38
  }
33
39
 
34
- public function reverseEmulate(string $code, array $tokens): array {
40
+ public function reverseEmulate(string $code, array $tokens): array
41
+ {
35
42
  // TODO
36
43
  return $tokens;
37
44
  }
@@ -0,0 +1,47 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class CoaleseEqualTokenEmulator extends TokenEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_7_4;
12
+ }
13
+
14
+ public function isEmulationNeeded(string $code): bool
15
+ {
16
+ return strpos($code, '??=') !== false;
17
+ }
18
+
19
+ public function emulate(string $code, array $tokens): array
20
+ {
21
+ // We need to manually iterate and manage a count because we'll change
22
+ // the tokens array on the way
23
+ $line = 1;
24
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
25
+ if (isset($tokens[$i + 1])) {
26
+ if ($tokens[$i][0] === T_COALESCE && $tokens[$i + 1] === '=') {
27
+ array_splice($tokens, $i, 2, [
28
+ [\T_COALESCE_EQUAL, '??=', $line]
29
+ ]);
30
+ $c--;
31
+ continue;
32
+ }
33
+ }
34
+ if (\is_array($tokens[$i])) {
35
+ $line += substr_count($tokens[$i][1], "\n");
36
+ }
37
+ }
38
+
39
+ return $tokens;
40
+ }
41
+
42
+ public function reverseEmulate(string $code, array $tokens): array
43
+ {
44
+ // ??= was not valid code previously, don't bother.
45
+ return $tokens;
46
+ }
47
+ }
@@ -2,25 +2,30 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
5
+ use PhpParser\Lexer\Emulative;
6
6
 
7
- final class EnumTokenEmulator extends KeywordEmulator {
8
- public function getPhpVersion(): PhpVersion {
9
- return PhpVersion::fromComponents(8, 1);
7
+ final class EnumTokenEmulator extends KeywordEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_8_1;
10
12
  }
11
13
 
12
- public function getKeywordString(): string {
14
+ public function getKeywordString(): string
15
+ {
13
16
  return 'enum';
14
17
  }
15
18
 
16
- public function getKeywordToken(): int {
19
+ public function getKeywordToken(): int
20
+ {
17
21
  return \T_ENUM;
18
22
  }
19
23
 
20
- protected function isKeywordContext(array $tokens, int $pos): bool {
24
+ protected function isKeywordContext(array $tokens, int $pos): bool
25
+ {
21
26
  return parent::isKeywordContext($tokens, $pos)
22
27
  && isset($tokens[$pos + 2])
23
- && $tokens[$pos + 1]->id === \T_WHITESPACE
24
- && $tokens[$pos + 2]->id === \T_STRING;
28
+ && $tokens[$pos + 1][0] === \T_WHITESPACE
29
+ && $tokens[$pos + 2][0] === \T_STRING;
25
30
  }
26
- }
31
+ }
@@ -2,12 +2,11 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
6
- use PhpParser\Token;
5
+ use PhpParser\Lexer\Emulative;
7
6
 
8
7
  class ExplicitOctalEmulator extends TokenEmulator {
9
- public function getPhpVersion(): PhpVersion {
10
- return PhpVersion::fromComponents(8, 1);
8
+ public function getPhpVersion(): string {
9
+ return Emulative::PHP_8_1;
11
10
  }
12
11
 
13
12
  public function isEmulationNeeded(string $code): bool {
@@ -16,14 +15,13 @@ class ExplicitOctalEmulator extends TokenEmulator {
16
15
 
17
16
  public function emulate(string $code, array $tokens): array {
18
17
  for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
19
- $token = $tokens[$i];
20
- if ($token->id == \T_LNUMBER && $token->text === '0' &&
21
- isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING &&
22
- preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text)
18
+ if ($tokens[$i][0] == \T_LNUMBER && $tokens[$i][1] === '0' &&
19
+ isset($tokens[$i + 1]) && $tokens[$i + 1][0] == \T_STRING &&
20
+ preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1][1])
23
21
  ) {
24
- $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text);
22
+ $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1][1]);
25
23
  array_splice($tokens, $i, 2, [
26
- new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos),
24
+ [$tokenKind, '0' . $tokens[$i + 1][1], $tokens[$i][2]],
27
25
  ]);
28
26
  $c--;
29
27
  }
@@ -31,7 +29,8 @@ class ExplicitOctalEmulator extends TokenEmulator {
31
29
  return $tokens;
32
30
  }
33
31
 
34
- private function resolveIntegerOrFloatToken(string $str): int {
32
+ private function resolveIntegerOrFloatToken(string $str): int
33
+ {
35
34
  $str = substr($str, 1);
36
35
  $str = str_replace('_', '', $str);
37
36
  $num = octdec($str);
@@ -42,4 +41,4 @@ class ExplicitOctalEmulator extends TokenEmulator {
42
41
  // Explicit octals were not legal code previously, don't bother.
43
42
  return $tokens;
44
43
  }
45
- }
44
+ }
@@ -0,0 +1,76 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class FlexibleDocStringEmulator extends TokenEmulator
8
+ {
9
+ const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
10
+ /<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
11
+ (?:.*\r?\n)*?
12
+ (?<indentation>\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
13
+ REGEX;
14
+
15
+ public function getPhpVersion(): string
16
+ {
17
+ return Emulative::PHP_7_3;
18
+ }
19
+
20
+ public function isEmulationNeeded(string $code) : bool
21
+ {
22
+ return strpos($code, '<<<') !== false;
23
+ }
24
+
25
+ public function emulate(string $code, array $tokens): array
26
+ {
27
+ // Handled by preprocessing + fixup.
28
+ return $tokens;
29
+ }
30
+
31
+ public function reverseEmulate(string $code, array $tokens): array
32
+ {
33
+ // Not supported.
34
+ return $tokens;
35
+ }
36
+
37
+ public function preprocessCode(string $code, array &$patches): string {
38
+ if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
39
+ // No heredoc/nowdoc found
40
+ return $code;
41
+ }
42
+
43
+ // Keep track of how much we need to adjust string offsets due to the modifications we
44
+ // already made
45
+ $posDelta = 0;
46
+ foreach ($matches as $match) {
47
+ $indentation = $match['indentation'][0];
48
+ $indentationStart = $match['indentation'][1];
49
+
50
+ $separator = $match['separator'][0];
51
+ $separatorStart = $match['separator'][1];
52
+
53
+ if ($indentation === '' && $separator !== '') {
54
+ // Ordinary heredoc/nowdoc
55
+ continue;
56
+ }
57
+
58
+ if ($indentation !== '') {
59
+ // Remove indentation
60
+ $indentationLen = strlen($indentation);
61
+ $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
62
+ $patches[] = [$indentationStart + $posDelta, 'add', $indentation];
63
+ $posDelta -= $indentationLen;
64
+ }
65
+
66
+ if ($separator === '') {
67
+ // Insert newline as separator
68
+ $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
69
+ $patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
70
+ $posDelta += 1;
71
+ }
72
+ }
73
+
74
+ return $code;
75
+ }
76
+ }
@@ -0,0 +1,23 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class FnTokenEmulator extends KeywordEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_7_4;
12
+ }
13
+
14
+ public function getKeywordString(): string
15
+ {
16
+ return 'fn';
17
+ }
18
+
19
+ public function getKeywordToken(): int
20
+ {
21
+ return \T_FN;
22
+ }
23
+ }
@@ -2,38 +2,43 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\Token;
5
+ abstract class KeywordEmulator extends TokenEmulator
6
+ {
7
+ abstract function getKeywordString(): string;
8
+ abstract function getKeywordToken(): int;
6
9
 
7
- abstract class KeywordEmulator extends TokenEmulator {
8
- abstract public function getKeywordString(): string;
9
- abstract public function getKeywordToken(): int;
10
-
11
- public function isEmulationNeeded(string $code): bool {
10
+ public function isEmulationNeeded(string $code): bool
11
+ {
12
12
  return strpos(strtolower($code), $this->getKeywordString()) !== false;
13
13
  }
14
14
 
15
- /** @param Token[] $tokens */
16
- protected function isKeywordContext(array $tokens, int $pos): bool {
15
+ protected function isKeywordContext(array $tokens, int $pos): bool
16
+ {
17
17
  $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $pos);
18
- return $previousNonSpaceToken === null || $previousNonSpaceToken->id !== \T_OBJECT_OPERATOR;
18
+ return $previousNonSpaceToken === null || $previousNonSpaceToken[0] !== \T_OBJECT_OPERATOR;
19
19
  }
20
20
 
21
- public function emulate(string $code, array $tokens): array {
21
+ public function emulate(string $code, array $tokens): array
22
+ {
22
23
  $keywordString = $this->getKeywordString();
23
24
  foreach ($tokens as $i => $token) {
24
- if ($token->id === T_STRING && strtolower($token->text) === $keywordString
25
+ if ($token[0] === T_STRING && strtolower($token[1]) === $keywordString
25
26
  && $this->isKeywordContext($tokens, $i)) {
26
- $token->id = $this->getKeywordToken();
27
+ $tokens[$i][0] = $this->getKeywordToken();
27
28
  }
28
29
  }
29
30
 
30
31
  return $tokens;
31
32
  }
32
33
 
33
- /** @param Token[] $tokens */
34
- private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token {
34
+ /**
35
+ * @param mixed[] $tokens
36
+ * @return array|string|null
37
+ */
38
+ private function getPreviousNonSpaceToken(array $tokens, int $start)
39
+ {
35
40
  for ($i = $start - 1; $i >= 0; --$i) {
36
- if ($tokens[$i]->id === T_WHITESPACE) {
41
+ if ($tokens[$i][0] === T_WHITESPACE) {
37
42
  continue;
38
43
  }
39
44
 
@@ -43,11 +48,12 @@ abstract class KeywordEmulator extends TokenEmulator {
43
48
  return null;
44
49
  }
45
50
 
46
- public function reverseEmulate(string $code, array $tokens): array {
51
+ public function reverseEmulate(string $code, array $tokens): array
52
+ {
47
53
  $keywordToken = $this->getKeywordToken();
48
- foreach ($tokens as $token) {
49
- if ($token->id === $keywordToken) {
50
- $token->id = \T_STRING;
54
+ foreach ($tokens as $i => $token) {
55
+ if ($token[0] === $keywordToken) {
56
+ $tokens[$i][0] = \T_STRING;
51
57
  }
52
58
  }
53
59
 
@@ -2,18 +2,22 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
5
+ use PhpParser\Lexer\Emulative;
6
6
 
7
- final class MatchTokenEmulator extends KeywordEmulator {
8
- public function getPhpVersion(): PhpVersion {
9
- return PhpVersion::fromComponents(8, 0);
7
+ final class MatchTokenEmulator extends KeywordEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_8_0;
10
12
  }
11
13
 
12
- public function getKeywordString(): string {
14
+ public function getKeywordString(): string
15
+ {
13
16
  return 'match';
14
17
  }
15
18
 
16
- public function getKeywordToken(): int {
19
+ public function getKeywordToken(): int
20
+ {
17
21
  return \T_MATCH;
18
22
  }
19
23
  }
@@ -2,58 +2,65 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
6
- use PhpParser\Token;
5
+ use PhpParser\Lexer\Emulative;
7
6
 
8
- final class NullsafeTokenEmulator extends TokenEmulator {
9
- public function getPhpVersion(): PhpVersion {
10
- return PhpVersion::fromComponents(8, 0);
7
+ final class NullsafeTokenEmulator extends TokenEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_8_0;
11
12
  }
12
13
 
13
- public function isEmulationNeeded(string $code): bool {
14
+ public function isEmulationNeeded(string $code): bool
15
+ {
14
16
  return strpos($code, '?->') !== false;
15
17
  }
16
18
 
17
- public function emulate(string $code, array $tokens): array {
19
+ public function emulate(string $code, array $tokens): array
20
+ {
18
21
  // We need to manually iterate and manage a count because we'll change
19
22
  // the tokens array on the way
23
+ $line = 1;
20
24
  for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
21
- $token = $tokens[$i];
22
- if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) {
25
+ if ($tokens[$i] === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) {
23
26
  array_splice($tokens, $i, 2, [
24
- new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
27
+ [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line]
25
28
  ]);
26
29
  $c--;
27
30
  continue;
28
31
  }
29
32
 
30
33
  // Handle ?-> inside encapsed string.
31
- if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
32
- && $tokens[$i - 1]->id === \T_VARIABLE
33
- && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $token->text, $matches)
34
+ if ($tokens[$i][0] === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
35
+ && $tokens[$i - 1][0] === \T_VARIABLE
36
+ && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $tokens[$i][1], $matches)
34
37
  ) {
35
38
  $replacement = [
36
- new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
37
- new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3),
39
+ [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line],
40
+ [\T_STRING, $matches[1], $line],
38
41
  ];
39
- $matchLen = \strlen($matches[0]);
40
- if ($matchLen !== \strlen($token->text)) {
41
- $replacement[] = new Token(
42
+ if (\strlen($matches[0]) !== \strlen($tokens[$i][1])) {
43
+ $replacement[] = [
42
44
  \T_ENCAPSED_AND_WHITESPACE,
43
- \substr($token->text, $matchLen),
44
- $token->line, $token->pos + $matchLen
45
- );
45
+ \substr($tokens[$i][1], \strlen($matches[0])),
46
+ $line
47
+ ];
46
48
  }
47
49
  array_splice($tokens, $i, 1, $replacement);
48
50
  $c += \count($replacement) - 1;
49
51
  continue;
50
52
  }
53
+
54
+ if (\is_array($tokens[$i])) {
55
+ $line += substr_count($tokens[$i][1], "\n");
56
+ }
51
57
  }
52
58
 
53
59
  return $tokens;
54
60
  }
55
61
 
56
- public function reverseEmulate(string $code, array $tokens): array {
62
+ public function reverseEmulate(string $code, array $tokens): array
63
+ {
57
64
  // ?-> was not valid code previously, don't bother.
58
65
  return $tokens;
59
66
  }
@@ -0,0 +1,105 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class NumericLiteralSeparatorEmulator extends TokenEmulator
8
+ {
9
+ const BIN = '(?:0b[01]+(?:_[01]+)*)';
10
+ const HEX = '(?:0x[0-9a-f]+(?:_[0-9a-f]+)*)';
11
+ const DEC = '(?:[0-9]+(?:_[0-9]+)*)';
12
+ const SIMPLE_FLOAT = '(?:' . self::DEC . '\.' . self::DEC . '?|\.' . self::DEC . ')';
13
+ const EXP = '(?:e[+-]?' . self::DEC . ')';
14
+ const FLOAT = '(?:' . self::SIMPLE_FLOAT . self::EXP . '?|' . self::DEC . self::EXP . ')';
15
+ const NUMBER = '~' . self::FLOAT . '|' . self::BIN . '|' . self::HEX . '|' . self::DEC . '~iA';
16
+
17
+ public function getPhpVersion(): string
18
+ {
19
+ return Emulative::PHP_7_4;
20
+ }
21
+
22
+ public function isEmulationNeeded(string $code) : bool
23
+ {
24
+ return preg_match('~[0-9]_[0-9]~', $code)
25
+ || preg_match('~0x[0-9a-f]+_[0-9a-f]~i', $code);
26
+ }
27
+
28
+ public function emulate(string $code, array $tokens): array
29
+ {
30
+ // We need to manually iterate and manage a count because we'll change
31
+ // the tokens array on the way
32
+ $codeOffset = 0;
33
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
34
+ $token = $tokens[$i];
35
+ $tokenLen = \strlen(\is_array($token) ? $token[1] : $token);
36
+
37
+ if ($token[0] !== T_LNUMBER && $token[0] !== T_DNUMBER) {
38
+ $codeOffset += $tokenLen;
39
+ continue;
40
+ }
41
+
42
+ $res = preg_match(self::NUMBER, $code, $matches, 0, $codeOffset);
43
+ assert($res, "No number at number token position");
44
+
45
+ $match = $matches[0];
46
+ $matchLen = \strlen($match);
47
+ if ($matchLen === $tokenLen) {
48
+ // Original token already holds the full number.
49
+ $codeOffset += $tokenLen;
50
+ continue;
51
+ }
52
+
53
+ $tokenKind = $this->resolveIntegerOrFloatToken($match);
54
+ $newTokens = [[$tokenKind, $match, $token[2]]];
55
+
56
+ $numTokens = 1;
57
+ $len = $tokenLen;
58
+ while ($matchLen > $len) {
59
+ $nextToken = $tokens[$i + $numTokens];
60
+ $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken;
61
+ $nextTokenLen = \strlen($nextTokenText);
62
+
63
+ $numTokens++;
64
+ if ($matchLen < $len + $nextTokenLen) {
65
+ // Split trailing characters into a partial token.
66
+ assert(is_array($nextToken), "Partial token should be an array token");
67
+ $partialText = substr($nextTokenText, $matchLen - $len);
68
+ $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]];
69
+ break;
70
+ }
71
+
72
+ $len += $nextTokenLen;
73
+ }
74
+
75
+ array_splice($tokens, $i, $numTokens, $newTokens);
76
+ $c -= $numTokens - \count($newTokens);
77
+ $codeOffset += $matchLen;
78
+ }
79
+
80
+ return $tokens;
81
+ }
82
+
83
+ private function resolveIntegerOrFloatToken(string $str): int
84
+ {
85
+ $str = str_replace('_', '', $str);
86
+
87
+ if (stripos($str, '0b') === 0) {
88
+ $num = bindec($str);
89
+ } elseif (stripos($str, '0x') === 0) {
90
+ $num = hexdec($str);
91
+ } elseif (stripos($str, '0') === 0 && ctype_digit($str)) {
92
+ $num = octdec($str);
93
+ } else {
94
+ $num = +$str;
95
+ }
96
+
97
+ return is_float($num) ? T_DNUMBER : T_LNUMBER;
98
+ }
99
+
100
+ public function reverseEmulate(string $code, array $tokens): array
101
+ {
102
+ // Numeric separators were not legal code previously, don't bother.
103
+ return $tokens;
104
+ }
105
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
5
+ use PhpParser\Lexer\Emulative;
6
6
 
7
7
  /*
8
8
  * In PHP 8.1, "readonly(" was special cased in the lexer in order to support functions with
@@ -20,8 +20,8 @@ class ReadonlyFunctionTokenEmulator extends KeywordEmulator {
20
20
  return \T_READONLY;
21
21
  }
22
22
 
23
- public function getPhpVersion(): PhpVersion {
24
- return PhpVersion::fromComponents(8, 2);
23
+ public function getPhpVersion(): string {
24
+ return Emulative::PHP_8_2;
25
25
  }
26
26
 
27
27
  public function reverseEmulate(string $code, array $tokens): array {
@@ -2,30 +2,35 @@
2
2
 
3
3
  namespace PhpParser\Lexer\TokenEmulator;
4
4
 
5
- use PhpParser\PhpVersion;
5
+ use PhpParser\Lexer\Emulative;
6
6
 
7
- final class ReadonlyTokenEmulator extends KeywordEmulator {
8
- public function getPhpVersion(): PhpVersion {
9
- return PhpVersion::fromComponents(8, 1);
7
+ final class ReadonlyTokenEmulator extends KeywordEmulator
8
+ {
9
+ public function getPhpVersion(): string
10
+ {
11
+ return Emulative::PHP_8_1;
10
12
  }
11
13
 
12
- public function getKeywordString(): string {
14
+ public function getKeywordString(): string
15
+ {
13
16
  return 'readonly';
14
17
  }
15
18
 
16
- public function getKeywordToken(): int {
19
+ public function getKeywordToken(): int
20
+ {
17
21
  return \T_READONLY;
18
22
  }
19
23
 
20
- protected function isKeywordContext(array $tokens, int $pos): bool {
24
+ protected function isKeywordContext(array $tokens, int $pos): bool
25
+ {
21
26
  if (!parent::isKeywordContext($tokens, $pos)) {
22
27
  return false;
23
28
  }
24
29
  // Support "function readonly("
25
30
  return !(isset($tokens[$pos + 1]) &&
26
- ($tokens[$pos + 1]->text === '(' ||
27
- ($tokens[$pos + 1]->id === \T_WHITESPACE &&
31
+ ($tokens[$pos + 1][0] === '(' ||
32
+ ($tokens[$pos + 1][0] === \T_WHITESPACE &&
28
33
  isset($tokens[$pos + 2]) &&
29
- $tokens[$pos + 2]->text === '(')));
34
+ $tokens[$pos + 2][0] === '(')));
30
35
  }
31
36
  }