constant_expr.test 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. Expressions in static scalar context
  2. -----
  3. <?php
  4. const T_1 = 1 << 1;
  5. const T_2 = 1 / 2;
  6. const T_3 = 1.5 + 1.5;
  7. const T_4 = "foo" . "bar";
  8. const T_5 = (1.5 + 1.5) * 2;
  9. const T_6 = "foo" . 2 . 3 . 4.0;
  10. const T_7 = __LINE__;
  11. const T_8 = <<<ENDOFSTRING
  12. This is a test string
  13. ENDOFSTRING;
  14. const T_9 = ~-1;
  15. const T_10 = (-1?:1) + (0?2:3);
  16. const T_11 = 1 && 0;
  17. const T_12 = 1 and 1;
  18. const T_13 = 0 || 0;
  19. const T_14 = 1 or 0;
  20. const T_15 = 1 xor 1;
  21. const T_16 = 1 xor 0;
  22. const T_17 = 1 < 0;
  23. const T_18 = 0 <= 0;
  24. const T_19 = 1 > 0;
  25. const T_20 = 1 >= 0;
  26. const T_21 = 1 === 1;
  27. const T_22 = 1 !== 1;
  28. const T_23 = 0 != "0";
  29. const T_24 = 1 == "1";
  30. const T_25 = 1 + 2 * 3;
  31. const T_26 = "1" + 2 + "3";
  32. const T_27 = 2 ** 3;
  33. const T_28 = [1, 2, 3][1];
  34. const T_29 = 12 - 13;
  35. const T_30 = 12 ^ 13;
  36. const T_31 = 12 & 13;
  37. const T_32 = 12 | 13;
  38. const T_33 = 12 % 3;
  39. const T_34 = 100 >> 4;
  40. const T_35 = !false;
  41. -----
  42. array(
  43. 0: Stmt_Const(
  44. consts: array(
  45. 0: Const(
  46. name: Identifier(
  47. name: T_1
  48. )
  49. value: Expr_BinaryOp_ShiftLeft(
  50. left: Scalar_LNumber(
  51. value: 1
  52. )
  53. right: Scalar_LNumber(
  54. value: 1
  55. )
  56. )
  57. )
  58. )
  59. )
  60. 1: Stmt_Const(
  61. consts: array(
  62. 0: Const(
  63. name: Identifier(
  64. name: T_2
  65. )
  66. value: Expr_BinaryOp_Div(
  67. left: Scalar_LNumber(
  68. value: 1
  69. )
  70. right: Scalar_LNumber(
  71. value: 2
  72. )
  73. )
  74. )
  75. )
  76. )
  77. 2: Stmt_Const(
  78. consts: array(
  79. 0: Const(
  80. name: Identifier(
  81. name: T_3
  82. )
  83. value: Expr_BinaryOp_Plus(
  84. left: Scalar_DNumber(
  85. value: 1.5
  86. )
  87. right: Scalar_DNumber(
  88. value: 1.5
  89. )
  90. )
  91. )
  92. )
  93. )
  94. 3: Stmt_Const(
  95. consts: array(
  96. 0: Const(
  97. name: Identifier(
  98. name: T_4
  99. )
  100. value: Expr_BinaryOp_Concat(
  101. left: Scalar_String(
  102. value: foo
  103. )
  104. right: Scalar_String(
  105. value: bar
  106. )
  107. )
  108. )
  109. )
  110. )
  111. 4: Stmt_Const(
  112. consts: array(
  113. 0: Const(
  114. name: Identifier(
  115. name: T_5
  116. )
  117. value: Expr_BinaryOp_Mul(
  118. left: Expr_BinaryOp_Plus(
  119. left: Scalar_DNumber(
  120. value: 1.5
  121. )
  122. right: Scalar_DNumber(
  123. value: 1.5
  124. )
  125. )
  126. right: Scalar_LNumber(
  127. value: 2
  128. )
  129. )
  130. )
  131. )
  132. )
  133. 5: Stmt_Const(
  134. consts: array(
  135. 0: Const(
  136. name: Identifier(
  137. name: T_6
  138. )
  139. value: Expr_BinaryOp_Concat(
  140. left: Expr_BinaryOp_Concat(
  141. left: Expr_BinaryOp_Concat(
  142. left: Scalar_String(
  143. value: foo
  144. )
  145. right: Scalar_LNumber(
  146. value: 2
  147. )
  148. )
  149. right: Scalar_LNumber(
  150. value: 3
  151. )
  152. )
  153. right: Scalar_DNumber(
  154. value: 4
  155. )
  156. )
  157. )
  158. )
  159. )
  160. 6: Stmt_Const(
  161. consts: array(
  162. 0: Const(
  163. name: Identifier(
  164. name: T_7
  165. )
  166. value: Scalar_MagicConst_Line(
  167. )
  168. )
  169. )
  170. )
  171. 7: Stmt_Const(
  172. consts: array(
  173. 0: Const(
  174. name: Identifier(
  175. name: T_8
  176. )
  177. value: Scalar_String(
  178. value: This is a test string
  179. )
  180. )
  181. )
  182. )
  183. 8: Stmt_Const(
  184. consts: array(
  185. 0: Const(
  186. name: Identifier(
  187. name: T_9
  188. )
  189. value: Expr_BitwiseNot(
  190. expr: Expr_UnaryMinus(
  191. expr: Scalar_LNumber(
  192. value: 1
  193. )
  194. )
  195. )
  196. )
  197. )
  198. )
  199. 9: Stmt_Const(
  200. consts: array(
  201. 0: Const(
  202. name: Identifier(
  203. name: T_10
  204. )
  205. value: Expr_BinaryOp_Plus(
  206. left: Expr_Ternary(
  207. cond: Expr_UnaryMinus(
  208. expr: Scalar_LNumber(
  209. value: 1
  210. )
  211. )
  212. if: null
  213. else: Scalar_LNumber(
  214. value: 1
  215. )
  216. )
  217. right: Expr_Ternary(
  218. cond: Scalar_LNumber(
  219. value: 0
  220. )
  221. if: Scalar_LNumber(
  222. value: 2
  223. )
  224. else: Scalar_LNumber(
  225. value: 3
  226. )
  227. )
  228. )
  229. )
  230. )
  231. )
  232. 10: Stmt_Const(
  233. consts: array(
  234. 0: Const(
  235. name: Identifier(
  236. name: T_11
  237. )
  238. value: Expr_BinaryOp_BooleanAnd(
  239. left: Scalar_LNumber(
  240. value: 1
  241. )
  242. right: Scalar_LNumber(
  243. value: 0
  244. )
  245. )
  246. )
  247. )
  248. )
  249. 11: Stmt_Const(
  250. consts: array(
  251. 0: Const(
  252. name: Identifier(
  253. name: T_12
  254. )
  255. value: Expr_BinaryOp_LogicalAnd(
  256. left: Scalar_LNumber(
  257. value: 1
  258. )
  259. right: Scalar_LNumber(
  260. value: 1
  261. )
  262. )
  263. )
  264. )
  265. )
  266. 12: Stmt_Const(
  267. consts: array(
  268. 0: Const(
  269. name: Identifier(
  270. name: T_13
  271. )
  272. value: Expr_BinaryOp_BooleanOr(
  273. left: Scalar_LNumber(
  274. value: 0
  275. )
  276. right: Scalar_LNumber(
  277. value: 0
  278. )
  279. )
  280. )
  281. )
  282. )
  283. 13: Stmt_Const(
  284. consts: array(
  285. 0: Const(
  286. name: Identifier(
  287. name: T_14
  288. )
  289. value: Expr_BinaryOp_LogicalOr(
  290. left: Scalar_LNumber(
  291. value: 1
  292. )
  293. right: Scalar_LNumber(
  294. value: 0
  295. )
  296. )
  297. )
  298. )
  299. )
  300. 14: Stmt_Const(
  301. consts: array(
  302. 0: Const(
  303. name: Identifier(
  304. name: T_15
  305. )
  306. value: Expr_BinaryOp_LogicalXor(
  307. left: Scalar_LNumber(
  308. value: 1
  309. )
  310. right: Scalar_LNumber(
  311. value: 1
  312. )
  313. )
  314. )
  315. )
  316. )
  317. 15: Stmt_Const(
  318. consts: array(
  319. 0: Const(
  320. name: Identifier(
  321. name: T_16
  322. )
  323. value: Expr_BinaryOp_LogicalXor(
  324. left: Scalar_LNumber(
  325. value: 1
  326. )
  327. right: Scalar_LNumber(
  328. value: 0
  329. )
  330. )
  331. )
  332. )
  333. )
  334. 16: Stmt_Const(
  335. consts: array(
  336. 0: Const(
  337. name: Identifier(
  338. name: T_17
  339. )
  340. value: Expr_BinaryOp_Smaller(
  341. left: Scalar_LNumber(
  342. value: 1
  343. )
  344. right: Scalar_LNumber(
  345. value: 0
  346. )
  347. )
  348. )
  349. )
  350. )
  351. 17: Stmt_Const(
  352. consts: array(
  353. 0: Const(
  354. name: Identifier(
  355. name: T_18
  356. )
  357. value: Expr_BinaryOp_SmallerOrEqual(
  358. left: Scalar_LNumber(
  359. value: 0
  360. )
  361. right: Scalar_LNumber(
  362. value: 0
  363. )
  364. )
  365. )
  366. )
  367. )
  368. 18: Stmt_Const(
  369. consts: array(
  370. 0: Const(
  371. name: Identifier(
  372. name: T_19
  373. )
  374. value: Expr_BinaryOp_Greater(
  375. left: Scalar_LNumber(
  376. value: 1
  377. )
  378. right: Scalar_LNumber(
  379. value: 0
  380. )
  381. )
  382. )
  383. )
  384. )
  385. 19: Stmt_Const(
  386. consts: array(
  387. 0: Const(
  388. name: Identifier(
  389. name: T_20
  390. )
  391. value: Expr_BinaryOp_GreaterOrEqual(
  392. left: Scalar_LNumber(
  393. value: 1
  394. )
  395. right: Scalar_LNumber(
  396. value: 0
  397. )
  398. )
  399. )
  400. )
  401. )
  402. 20: Stmt_Const(
  403. consts: array(
  404. 0: Const(
  405. name: Identifier(
  406. name: T_21
  407. )
  408. value: Expr_BinaryOp_Identical(
  409. left: Scalar_LNumber(
  410. value: 1
  411. )
  412. right: Scalar_LNumber(
  413. value: 1
  414. )
  415. )
  416. )
  417. )
  418. )
  419. 21: Stmt_Const(
  420. consts: array(
  421. 0: Const(
  422. name: Identifier(
  423. name: T_22
  424. )
  425. value: Expr_BinaryOp_NotIdentical(
  426. left: Scalar_LNumber(
  427. value: 1
  428. )
  429. right: Scalar_LNumber(
  430. value: 1
  431. )
  432. )
  433. )
  434. )
  435. )
  436. 22: Stmt_Const(
  437. consts: array(
  438. 0: Const(
  439. name: Identifier(
  440. name: T_23
  441. )
  442. value: Expr_BinaryOp_NotEqual(
  443. left: Scalar_LNumber(
  444. value: 0
  445. )
  446. right: Scalar_String(
  447. value: 0
  448. )
  449. )
  450. )
  451. )
  452. )
  453. 23: Stmt_Const(
  454. consts: array(
  455. 0: Const(
  456. name: Identifier(
  457. name: T_24
  458. )
  459. value: Expr_BinaryOp_Equal(
  460. left: Scalar_LNumber(
  461. value: 1
  462. )
  463. right: Scalar_String(
  464. value: 1
  465. )
  466. )
  467. )
  468. )
  469. )
  470. 24: Stmt_Const(
  471. consts: array(
  472. 0: Const(
  473. name: Identifier(
  474. name: T_25
  475. )
  476. value: Expr_BinaryOp_Plus(
  477. left: Scalar_LNumber(
  478. value: 1
  479. )
  480. right: Expr_BinaryOp_Mul(
  481. left: Scalar_LNumber(
  482. value: 2
  483. )
  484. right: Scalar_LNumber(
  485. value: 3
  486. )
  487. )
  488. )
  489. )
  490. )
  491. )
  492. 25: Stmt_Const(
  493. consts: array(
  494. 0: Const(
  495. name: Identifier(
  496. name: T_26
  497. )
  498. value: Expr_BinaryOp_Plus(
  499. left: Expr_BinaryOp_Plus(
  500. left: Scalar_String(
  501. value: 1
  502. )
  503. right: Scalar_LNumber(
  504. value: 2
  505. )
  506. )
  507. right: Scalar_String(
  508. value: 3
  509. )
  510. )
  511. )
  512. )
  513. )
  514. 26: Stmt_Const(
  515. consts: array(
  516. 0: Const(
  517. name: Identifier(
  518. name: T_27
  519. )
  520. value: Expr_BinaryOp_Pow(
  521. left: Scalar_LNumber(
  522. value: 2
  523. )
  524. right: Scalar_LNumber(
  525. value: 3
  526. )
  527. )
  528. )
  529. )
  530. )
  531. 27: Stmt_Const(
  532. consts: array(
  533. 0: Const(
  534. name: Identifier(
  535. name: T_28
  536. )
  537. value: Expr_ArrayDimFetch(
  538. var: Expr_Array(
  539. items: array(
  540. 0: Expr_ArrayItem(
  541. key: null
  542. value: Scalar_LNumber(
  543. value: 1
  544. )
  545. byRef: false
  546. unpack: false
  547. )
  548. 1: Expr_ArrayItem(
  549. key: null
  550. value: Scalar_LNumber(
  551. value: 2
  552. )
  553. byRef: false
  554. unpack: false
  555. )
  556. 2: Expr_ArrayItem(
  557. key: null
  558. value: Scalar_LNumber(
  559. value: 3
  560. )
  561. byRef: false
  562. unpack: false
  563. )
  564. )
  565. )
  566. dim: Scalar_LNumber(
  567. value: 1
  568. )
  569. )
  570. )
  571. )
  572. )
  573. 28: Stmt_Const(
  574. consts: array(
  575. 0: Const(
  576. name: Identifier(
  577. name: T_29
  578. )
  579. value: Expr_BinaryOp_Minus(
  580. left: Scalar_LNumber(
  581. value: 12
  582. )
  583. right: Scalar_LNumber(
  584. value: 13
  585. )
  586. )
  587. )
  588. )
  589. )
  590. 29: Stmt_Const(
  591. consts: array(
  592. 0: Const(
  593. name: Identifier(
  594. name: T_30
  595. )
  596. value: Expr_BinaryOp_BitwiseXor(
  597. left: Scalar_LNumber(
  598. value: 12
  599. )
  600. right: Scalar_LNumber(
  601. value: 13
  602. )
  603. )
  604. )
  605. )
  606. )
  607. 30: Stmt_Const(
  608. consts: array(
  609. 0: Const(
  610. name: Identifier(
  611. name: T_31
  612. )
  613. value: Expr_BinaryOp_BitwiseAnd(
  614. left: Scalar_LNumber(
  615. value: 12
  616. )
  617. right: Scalar_LNumber(
  618. value: 13
  619. )
  620. )
  621. )
  622. )
  623. )
  624. 31: Stmt_Const(
  625. consts: array(
  626. 0: Const(
  627. name: Identifier(
  628. name: T_32
  629. )
  630. value: Expr_BinaryOp_BitwiseOr(
  631. left: Scalar_LNumber(
  632. value: 12
  633. )
  634. right: Scalar_LNumber(
  635. value: 13
  636. )
  637. )
  638. )
  639. )
  640. )
  641. 32: Stmt_Const(
  642. consts: array(
  643. 0: Const(
  644. name: Identifier(
  645. name: T_33
  646. )
  647. value: Expr_BinaryOp_Mod(
  648. left: Scalar_LNumber(
  649. value: 12
  650. )
  651. right: Scalar_LNumber(
  652. value: 3
  653. )
  654. )
  655. )
  656. )
  657. )
  658. 33: Stmt_Const(
  659. consts: array(
  660. 0: Const(
  661. name: Identifier(
  662. name: T_34
  663. )
  664. value: Expr_BinaryOp_ShiftRight(
  665. left: Scalar_LNumber(
  666. value: 100
  667. )
  668. right: Scalar_LNumber(
  669. value: 4
  670. )
  671. )
  672. )
  673. )
  674. )
  675. 34: Stmt_Const(
  676. consts: array(
  677. 0: Const(
  678. name: Identifier(
  679. name: T_35
  680. )
  681. value: Expr_BooleanNot(
  682. expr: Expr_ConstFetch(
  683. name: Name(
  684. parts: array(
  685. 0: false
  686. )
  687. )
  688. )
  689. )
  690. )
  691. )
  692. )
  693. )