semiReserved.test 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. Valid usages of reserved keywords as identifiers
  2. -----
  3. <?php
  4. class Test {
  5. function array() {}
  6. function public() {}
  7. static function list() {}
  8. static function protected() {}
  9. public $class;
  10. public $private;
  11. const TRAIT = 3, FINAL = 4;
  12. const __CLASS__ = 1, __TRAIT__ = 2, __FUNCTION__ = 3, __METHOD__ = 4, __LINE__ = 5,
  13. __FILE__ = 6, __DIR__ = 7, __NAMESPACE__ = 8;
  14. // __halt_compiler does not work
  15. }
  16. $t = new Test;
  17. $t->array();
  18. $t->public();
  19. Test::list();
  20. Test::protected();
  21. $t->class;
  22. $t->private;
  23. Test::TRAIT;
  24. Test::FINAL;
  25. class Foo {
  26. use TraitA, TraitB {
  27. TraitA::catch insteadof namespace\TraitB;
  28. TraitA::list as foreach;
  29. TraitB::throw as protected public;
  30. TraitB::self as protected;
  31. exit as die;
  32. \TraitC::exit as bye;
  33. namespace\TraitC::exit as byebye;
  34. TraitA::
  35. //
  36. /** doc comment */
  37. #
  38. catch /* comment */
  39. // comment
  40. # comment
  41. insteadof TraitB;
  42. }
  43. }
  44. -----
  45. array(
  46. 0: Stmt_Class(
  47. flags: 0
  48. name: Identifier(
  49. name: Test
  50. )
  51. extends: null
  52. implements: array(
  53. )
  54. stmts: array(
  55. 0: Stmt_ClassMethod(
  56. flags: 0
  57. byRef: false
  58. name: Identifier(
  59. name: array
  60. )
  61. params: array(
  62. )
  63. returnType: null
  64. stmts: array(
  65. )
  66. )
  67. 1: Stmt_ClassMethod(
  68. flags: 0
  69. byRef: false
  70. name: Identifier(
  71. name: public
  72. )
  73. params: array(
  74. )
  75. returnType: null
  76. stmts: array(
  77. )
  78. )
  79. 2: Stmt_ClassMethod(
  80. flags: MODIFIER_STATIC (8)
  81. byRef: false
  82. name: Identifier(
  83. name: list
  84. )
  85. params: array(
  86. )
  87. returnType: null
  88. stmts: array(
  89. )
  90. )
  91. 3: Stmt_ClassMethod(
  92. flags: MODIFIER_STATIC (8)
  93. byRef: false
  94. name: Identifier(
  95. name: protected
  96. )
  97. params: array(
  98. )
  99. returnType: null
  100. stmts: array(
  101. )
  102. )
  103. 4: Stmt_Property(
  104. flags: MODIFIER_PUBLIC (1)
  105. props: array(
  106. 0: Stmt_PropertyProperty(
  107. name: VarLikeIdentifier(
  108. name: class
  109. )
  110. default: null
  111. )
  112. )
  113. )
  114. 5: Stmt_Property(
  115. flags: MODIFIER_PUBLIC (1)
  116. props: array(
  117. 0: Stmt_PropertyProperty(
  118. name: VarLikeIdentifier(
  119. name: private
  120. )
  121. default: null
  122. )
  123. )
  124. )
  125. 6: Stmt_ClassConst(
  126. flags: 0
  127. consts: array(
  128. 0: Const(
  129. name: Identifier(
  130. name: TRAIT
  131. )
  132. value: Scalar_LNumber(
  133. value: 3
  134. )
  135. )
  136. 1: Const(
  137. name: Identifier(
  138. name: FINAL
  139. )
  140. value: Scalar_LNumber(
  141. value: 4
  142. )
  143. )
  144. )
  145. )
  146. 7: Stmt_ClassConst(
  147. flags: 0
  148. consts: array(
  149. 0: Const(
  150. name: Identifier(
  151. name: __CLASS__
  152. )
  153. value: Scalar_LNumber(
  154. value: 1
  155. )
  156. )
  157. 1: Const(
  158. name: Identifier(
  159. name: __TRAIT__
  160. )
  161. value: Scalar_LNumber(
  162. value: 2
  163. )
  164. )
  165. 2: Const(
  166. name: Identifier(
  167. name: __FUNCTION__
  168. )
  169. value: Scalar_LNumber(
  170. value: 3
  171. )
  172. )
  173. 3: Const(
  174. name: Identifier(
  175. name: __METHOD__
  176. )
  177. value: Scalar_LNumber(
  178. value: 4
  179. )
  180. )
  181. 4: Const(
  182. name: Identifier(
  183. name: __LINE__
  184. )
  185. value: Scalar_LNumber(
  186. value: 5
  187. )
  188. )
  189. 5: Const(
  190. name: Identifier(
  191. name: __FILE__
  192. )
  193. value: Scalar_LNumber(
  194. value: 6
  195. )
  196. )
  197. 6: Const(
  198. name: Identifier(
  199. name: __DIR__
  200. )
  201. value: Scalar_LNumber(
  202. value: 7
  203. )
  204. )
  205. 7: Const(
  206. name: Identifier(
  207. name: __NAMESPACE__
  208. )
  209. value: Scalar_LNumber(
  210. value: 8
  211. )
  212. )
  213. )
  214. )
  215. 8: Stmt_Nop(
  216. comments: array(
  217. 0: // __halt_compiler does not work
  218. )
  219. )
  220. )
  221. )
  222. 1: Stmt_Expression(
  223. expr: Expr_Assign(
  224. var: Expr_Variable(
  225. name: t
  226. )
  227. expr: Expr_New(
  228. class: Name(
  229. parts: array(
  230. 0: Test
  231. )
  232. )
  233. args: array(
  234. )
  235. )
  236. )
  237. )
  238. 2: Stmt_Expression(
  239. expr: Expr_MethodCall(
  240. var: Expr_Variable(
  241. name: t
  242. )
  243. name: Identifier(
  244. name: array
  245. )
  246. args: array(
  247. )
  248. )
  249. )
  250. 3: Stmt_Expression(
  251. expr: Expr_MethodCall(
  252. var: Expr_Variable(
  253. name: t
  254. )
  255. name: Identifier(
  256. name: public
  257. )
  258. args: array(
  259. )
  260. )
  261. )
  262. 4: Stmt_Expression(
  263. expr: Expr_StaticCall(
  264. class: Name(
  265. parts: array(
  266. 0: Test
  267. )
  268. )
  269. name: Identifier(
  270. name: list
  271. )
  272. args: array(
  273. )
  274. )
  275. )
  276. 5: Stmt_Expression(
  277. expr: Expr_StaticCall(
  278. class: Name(
  279. parts: array(
  280. 0: Test
  281. )
  282. )
  283. name: Identifier(
  284. name: protected
  285. )
  286. args: array(
  287. )
  288. )
  289. )
  290. 6: Stmt_Expression(
  291. expr: Expr_PropertyFetch(
  292. var: Expr_Variable(
  293. name: t
  294. )
  295. name: Identifier(
  296. name: class
  297. )
  298. )
  299. )
  300. 7: Stmt_Expression(
  301. expr: Expr_PropertyFetch(
  302. var: Expr_Variable(
  303. name: t
  304. )
  305. name: Identifier(
  306. name: private
  307. )
  308. )
  309. )
  310. 8: Stmt_Expression(
  311. expr: Expr_ClassConstFetch(
  312. class: Name(
  313. parts: array(
  314. 0: Test
  315. )
  316. )
  317. name: Identifier(
  318. name: TRAIT
  319. )
  320. )
  321. )
  322. 9: Stmt_Expression(
  323. expr: Expr_ClassConstFetch(
  324. class: Name(
  325. parts: array(
  326. 0: Test
  327. )
  328. )
  329. name: Identifier(
  330. name: FINAL
  331. )
  332. )
  333. )
  334. 10: Stmt_Class(
  335. flags: 0
  336. name: Identifier(
  337. name: Foo
  338. )
  339. extends: null
  340. implements: array(
  341. )
  342. stmts: array(
  343. 0: Stmt_TraitUse(
  344. traits: array(
  345. 0: Name(
  346. parts: array(
  347. 0: TraitA
  348. )
  349. )
  350. 1: Name(
  351. parts: array(
  352. 0: TraitB
  353. )
  354. )
  355. )
  356. adaptations: array(
  357. 0: Stmt_TraitUseAdaptation_Precedence(
  358. trait: Name(
  359. parts: array(
  360. 0: TraitA
  361. )
  362. )
  363. method: Identifier(
  364. name: catch
  365. )
  366. insteadof: array(
  367. 0: Name_Relative(
  368. parts: array(
  369. 0: TraitB
  370. )
  371. )
  372. )
  373. )
  374. 1: Stmt_TraitUseAdaptation_Alias(
  375. trait: Name(
  376. parts: array(
  377. 0: TraitA
  378. )
  379. )
  380. method: Identifier(
  381. name: list
  382. )
  383. newModifier: null
  384. newName: Identifier(
  385. name: foreach
  386. )
  387. )
  388. 2: Stmt_TraitUseAdaptation_Alias(
  389. trait: Name(
  390. parts: array(
  391. 0: TraitB
  392. )
  393. )
  394. method: Identifier(
  395. name: throw
  396. )
  397. newModifier: MODIFIER_PROTECTED (2)
  398. newName: Identifier(
  399. name: public
  400. )
  401. )
  402. 3: Stmt_TraitUseAdaptation_Alias(
  403. trait: Name(
  404. parts: array(
  405. 0: TraitB
  406. )
  407. )
  408. method: Identifier(
  409. name: self
  410. )
  411. newModifier: MODIFIER_PROTECTED (2)
  412. newName: null
  413. )
  414. 4: Stmt_TraitUseAdaptation_Alias(
  415. trait: null
  416. method: Identifier(
  417. name: exit
  418. )
  419. newModifier: null
  420. newName: Identifier(
  421. name: die
  422. )
  423. )
  424. 5: Stmt_TraitUseAdaptation_Alias(
  425. trait: Name_FullyQualified(
  426. parts: array(
  427. 0: TraitC
  428. )
  429. )
  430. method: Identifier(
  431. name: exit
  432. )
  433. newModifier: null
  434. newName: Identifier(
  435. name: bye
  436. )
  437. )
  438. 6: Stmt_TraitUseAdaptation_Alias(
  439. trait: Name_Relative(
  440. parts: array(
  441. 0: TraitC
  442. )
  443. )
  444. method: Identifier(
  445. name: exit
  446. )
  447. newModifier: null
  448. newName: Identifier(
  449. name: byebye
  450. )
  451. )
  452. 7: Stmt_TraitUseAdaptation_Precedence(
  453. trait: Name(
  454. parts: array(
  455. 0: TraitA
  456. )
  457. )
  458. method: Identifier(
  459. name: catch
  460. comments: array(
  461. 0: //
  462. 1: /** doc comment */
  463. 2: #
  464. )
  465. )
  466. insteadof: array(
  467. 0: Name(
  468. parts: array(
  469. 0: TraitB
  470. )
  471. )
  472. )
  473. )
  474. )
  475. )
  476. )
  477. )
  478. )