semiReserved.test 14 KB

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