summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--changelog/1151.md1
-rw-r--r--src/Parser/TemplateParser.php1469
-rw-r--r--src/Parser/TemplateParser.y22
-rw-r--r--tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/FunctionObjectChainTest.php208
-rw-r--r--tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/templates/test_function_chain.tpl4
6 files changed, 971 insertions, 735 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8dfdf32b..9cba3624 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -115,5 +115,7 @@ If you are a maintainer, you can publish the document using [mike](https://githu
mike deploy 5.x
```
+Then, push the `gh-pages` branch.
+
## Attribution
This guide is based on the **contributing.md**. [Make your own](https://contributing.md/)!
diff --git a/changelog/1151.md b/changelog/1151.md
new file mode 100644
index 00000000..3e3d91b0
--- /dev/null
+++ b/changelog/1151.md
@@ -0,0 +1 @@
+- Support for Laravel Collections style object chaining for objects return from function calls implemented as modifiers [#1151](https://github.com/smarty-php/smarty/issues/1151) \ No newline at end of file
diff --git a/src/Parser/TemplateParser.php b/src/Parser/TemplateParser.php
index 772df98d..1f47e3d4 100644
--- a/src/Parser/TemplateParser.php
+++ b/src/Parser/TemplateParser.php
@@ -263,579 +263,580 @@ class TemplateParser
const TP_ARRAYOPEN = 57;
const TP_QUOTE = 58;
const TP_BACKTICK = 59;
- const YY_NO_ACTION = 542;
- const YY_ACCEPT_ACTION = 541;
- const YY_ERROR_ACTION = 540;
+ const YY_NO_ACTION = 546;
+ const YY_ACCEPT_ACTION = 545;
+ const YY_ERROR_ACTION = 544;
- const YY_SZ_ACTTAB = 2565;
+ const YY_SZ_ACTTAB = 2564;
public static $yy_action = array(
- 33, 106, 269, 306, 179, 305, 200, 247, 248, 249,
- 1, 264, 138, 237, 202, 361, 6, 87, 284, 222,
- 338, 361, 112, 107, 400, 321, 217, 261, 218, 130,
- 224, 400, 21, 400, 49, 44, 400, 32, 45, 46,
- 278, 226, 400, 282, 400, 203, 400, 53, 4, 139,
- 302, 231, 28, 102, 225, 5, 54, 247, 248, 249,
- 1, 20, 135, 192, 193, 271, 6, 87, 246, 222,
- 216, 29, 112, 229, 7, 159, 217, 261, 218, 140,
- 208, 272, 21, 509, 53, 44, 13, 302, 45, 46,
- 278, 226, 149, 235, 153, 203, 257, 53, 4, 328,
- 302, 302, 256, 304, 143, 5, 54, 247, 248, 249,
- 1, 302, 100, 394, 86, 236, 6, 87, 3, 222,
- 102, 257, 112, 144, 97, 394, 217, 261, 218, 102,
- 224, 394, 21, 256, 446, 44, 178, 305, 45, 46,
- 278, 226, 302, 282, 200, 203, 446, 53, 4, 115,
- 302, 47, 22, 285, 41, 5, 54, 247, 248, 249,
- 1, 139, 137, 267, 202, 141, 6, 87, 14, 222,
- 541, 99, 112, 151, 15, 446, 217, 261, 218, 314,
- 224, 216, 21, 256, 233, 44, 9, 446, 45, 46,
- 278, 226, 325, 282, 268, 203, 53, 53, 4, 302,
- 302, 152, 257, 361, 320, 5, 54, 247, 248, 249,
- 1, 264, 137, 102, 194, 361, 6, 87, 37, 222,
- 102, 361, 112, 257, 89, 316, 217, 261, 218, 314,
- 224, 216, 21, 36, 49, 44, 200, 40, 45, 46,
- 278, 226, 115, 282, 237, 203, 14, 53, 4, 115,
- 302, 238, 15, 155, 107, 5, 54, 247, 248, 249,
- 1, 466, 136, 256, 202, 200, 6, 87, 466, 222,
- 255, 171, 112, 264, 446, 310, 217, 261, 218, 158,
- 224, 257, 11, 142, 157, 44, 446, 183, 45, 46,
- 278, 226, 26, 282, 256, 203, 49, 53, 4, 446,
- 302, 184, 260, 323, 176, 5, 54, 247, 248, 249,
- 1, 446, 137, 264, 189, 291, 6, 87, 183, 222,
- 200, 302, 112, 253, 178, 305, 217, 261, 218, 263,
- 213, 18, 21, 200, 184, 44, 49, 15, 45, 46,
- 278, 226, 146, 282, 269, 203, 25, 53, 4, 220,
- 302, 312, 107, 152, 290, 5, 54, 247, 248, 249,
- 1, 219, 137, 147, 187, 130, 6, 87, 259, 222,
- 16, 19, 112, 256, 167, 258, 217, 261, 218, 111,
- 224, 173, 21, 96, 256, 44, 200, 23, 45, 46,
- 278, 226, 177, 282, 227, 203, 335, 53, 4, 174,
- 302, 180, 305, 170, 90, 5, 54, 247, 248, 249,
- 1, 184, 137, 256, 202, 91, 6, 87, 482, 222,
- 160, 482, 112, 214, 197, 482, 217, 261, 218, 184,
- 188, 181, 21, 245, 302, 44, 164, 140, 45, 46,
- 278, 226, 466, 282, 13, 203, 166, 53, 4, 466,
- 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
- 1, 264, 139, 447, 202, 40, 6, 87, 293, 294,
- 295, 296, 112, 17, 311, 447, 217, 261, 218, 337,
- 224, 183, 21, 260, 49, 48, 244, 245, 45, 46,
- 278, 226, 24, 282, 303, 203, 8, 53, 4, 92,
- 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
- 1, 10, 139, 9, 202, 317, 6, 87, 293, 294,
- 295, 296, 112, 116, 299, 35, 217, 261, 218, 225,
- 224, 198, 21, 98, 34, 44, 329, 324, 45, 46,
- 278, 226, 448, 282, 448, 203, 161, 53, 4, 172,
- 302, 129, 175, 225, 232, 5, 54, 288, 215, 216,
- 252, 101, 93, 109, 243, 191, 103, 85, 450, 162,
- 450, 24, 101, 330, 182, 273, 274, 300, 298, 301,
- 250, 251, 281, 204, 283, 113, 289, 262, 300, 298,
- 301, 121, 288, 215, 216, 252, 270, 93, 109, 275,
- 190, 103, 60, 277, 279, 225, 237, 101, 280, 297,
- 273, 274, 129, 239, 199, 266, 107, 281, 204, 283,
- 7, 289, 101, 300, 298, 301, 288, 88, 216, 254,
- 163, 114, 109, 265, 191, 103, 85, 200, 300, 298,
- 301, 101, 200, 259, 273, 274, 19, 165, 326, 362,
- 258, 281, 204, 283, 396, 289, 234, 300, 298, 301,
- 288, 362, 216, 327, 200, 114, 396, 362, 201, 119,
- 72, 336, 396, 37, 259, 101, 393, 19, 273, 274,
- 154, 258, 228, 339, 94, 281, 204, 283, 393, 289,
- 256, 300, 298, 301, 393, 38, 314, 288, 314, 216,
- 314, 314, 114, 207, 319, 201, 119, 72, 314, 314,
- 314, 314, 101, 221, 184, 273, 274, 156, 314, 314,
- 314, 95, 281, 204, 283, 314, 289, 256, 300, 298,
- 301, 314, 314, 314, 288, 314, 216, 314, 314, 108,
- 206, 319, 201, 122, 51, 314, 120, 314, 314, 101,
- 314, 184, 273, 274, 314, 314, 314, 314, 314, 281,
- 204, 283, 314, 289, 314, 300, 298, 301, 288, 314,
- 216, 314, 314, 114, 314, 314, 201, 122, 67, 314,
- 314, 314, 314, 101, 314, 314, 273, 274, 314, 314,
- 314, 314, 314, 281, 204, 283, 314, 289, 314, 300,
- 298, 301, 288, 314, 216, 314, 314, 114, 212, 314,
- 201, 122, 67, 314, 314, 314, 314, 101, 314, 314,
- 273, 274, 314, 314, 314, 314, 314, 281, 204, 283,
- 314, 289, 314, 300, 298, 301, 288, 314, 216, 314,
- 314, 114, 205, 314, 201, 119, 72, 314, 314, 314,
- 314, 101, 314, 314, 273, 274, 314, 314, 314, 314,
- 314, 281, 204, 283, 314, 289, 314, 300, 298, 301,
- 314, 314, 314, 288, 314, 216, 314, 314, 114, 314,
- 318, 201, 122, 78, 314, 314, 314, 314, 101, 314,
- 482, 273, 274, 482, 314, 314, 314, 482, 281, 204,
- 283, 314, 289, 209, 211, 298, 301, 288, 314, 216,
- 314, 314, 108, 314, 314, 201, 122, 58, 314, 238,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 482,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 118, 64, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 196, 117, 59, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 104, 84,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 300, 298, 301, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 105, 83, 314, 314, 314, 314, 101, 314,
- 314, 273, 274, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 122, 55, 314, 314,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 122, 66, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 201, 104, 56, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 122, 65,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 300, 298, 301, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 122, 57, 314, 314, 314, 314, 101, 314,
- 314, 273, 274, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 122, 58, 314, 314,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 122, 68, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 201, 122, 69, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 122, 70,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 300, 298, 301, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 122, 71, 314, 314, 314, 314, 101, 314,
- 314, 273, 274, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 122, 73, 314, 314,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 195,
- 122, 61, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 201, 122, 62, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 122, 63,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 300, 298, 301, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 122, 74, 314, 314, 314, 314, 101, 314,
- 314, 273, 274, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 122, 75, 314, 314,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 122, 76, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 201, 122, 77, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 122, 79,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 210, 298, 301, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 122, 80, 314, 314, 314, 314, 101, 314,
- 314, 273, 274, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 122, 81, 314, 314,
- 314, 314, 101, 314, 314, 273, 274, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 122, 82, 314, 314, 314, 314, 101, 314, 314, 273,
- 274, 314, 314, 314, 314, 314, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 288, 314, 216, 314, 314,
- 114, 314, 314, 201, 122, 50, 314, 314, 314, 314,
- 101, 314, 314, 273, 274, 314, 314, 314, 314, 314,
- 281, 204, 283, 314, 289, 314, 300, 298, 301, 288,
- 314, 216, 314, 314, 114, 314, 314, 201, 122, 52,
- 314, 314, 314, 314, 101, 314, 314, 273, 274, 314,
- 314, 314, 314, 314, 281, 204, 283, 314, 289, 314,
- 300, 298, 301, 288, 314, 216, 168, 314, 114, 314,
- 314, 201, 134, 314, 314, 314, 256, 314, 101, 47,
- 22, 285, 41, 314, 314, 314, 314, 333, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 288, 314, 216,
- 145, 314, 114, 314, 314, 201, 128, 314, 314, 314,
- 256, 314, 101, 47, 22, 285, 41, 314, 314, 314,
- 314, 287, 281, 204, 283, 315, 289, 314, 300, 298,
- 301, 247, 248, 249, 2, 314, 313, 314, 314, 314,
- 6, 87, 259, 314, 314, 19, 112, 314, 14, 258,
- 217, 261, 218, 314, 15, 39, 314, 14, 14, 42,
- 43, 286, 12, 15, 15, 314, 314, 314, 42, 43,
- 286, 12, 314, 314, 314, 314, 293, 294, 295, 296,
- 308, 27, 314, 314, 315, 293, 294, 295, 296, 314,
- 247, 248, 249, 2, 314, 313, 314, 110, 314, 6,
- 87, 314, 314, 314, 314, 112, 314, 314, 148, 217,
- 261, 218, 314, 42, 43, 286, 12, 314, 42, 43,
- 286, 12, 314, 314, 314, 314, 314, 314, 314, 314,
- 293, 294, 295, 296, 314, 293, 294, 295, 296, 309,
- 27, 314, 314, 240, 241, 242, 133, 223, 314, 247,
- 248, 249, 1, 314, 482, 314, 314, 482, 6, 87,
- 3, 482, 466, 314, 112, 314, 276, 314, 217, 261,
- 218, 288, 314, 216, 314, 314, 114, 314, 314, 201,
- 132, 314, 314, 314, 314, 314, 101, 314, 466, 314,
- 314, 466, 314, 482, 314, 466, 281, 204, 283, 314,
- 289, 314, 300, 298, 301, 314, 288, 314, 216, 314,
- 200, 114, 314, 314, 201, 123, 314, 314, 314, 314,
- 314, 101, 365, 314, 314, 314, 230, 314, 314, 314,
- 314, 281, 204, 283, 14, 289, 314, 300, 298, 301,
- 15, 314, 288, 446, 216, 314, 169, 114, 314, 314,
- 201, 124, 314, 314, 314, 446, 256, 101, 314, 47,
- 22, 285, 41, 314, 314, 314, 314, 281, 204, 283,
- 314, 289, 314, 300, 298, 301, 314, 288, 314, 216,
- 314, 314, 114, 314, 314, 201, 125, 314, 314, 314,
- 314, 314, 101, 314, 314, 314, 314, 314, 314, 314,
- 314, 314, 281, 204, 283, 314, 289, 314, 300, 298,
- 301, 314, 314, 288, 314, 216, 314, 314, 114, 314,
- 314, 201, 126, 314, 314, 314, 314, 314, 101, 314,
- 314, 314, 314, 314, 314, 314, 314, 314, 281, 204,
- 283, 314, 289, 314, 300, 298, 301, 314, 288, 314,
- 216, 314, 314, 114, 314, 314, 201, 127, 314, 314,
- 314, 314, 314, 101, 314, 314, 314, 314, 314, 314,
- 314, 314, 314, 281, 204, 283, 314, 289, 314, 300,
- 298, 301, 314, 314, 288, 314, 216, 223, 314, 114,
- 314, 314, 201, 131, 482, 314, 314, 482, 314, 101,
- 314, 482, 466, 314, 314, 314, 276, 314, 314, 281,
- 204, 283, 314, 289, 314, 300, 298, 301, 314, 314,
- 409, 314, 314, 314, 314, 314, 314, 314, 466, 314,
- 314, 466, 314, 482, 223, 466, 292, 314, 314, 314,
- 314, 482, 314, 314, 482, 314, 314, 36, 482, 466,
- 314, 223, 446, 276, 409, 409, 409, 409, 482, 314,
- 314, 482, 314, 314, 446, 482, 466, 314, 314, 30,
- 276, 409, 409, 409, 409, 466, 482, 314, 466, 482,
- 482, 314, 466, 482, 466, 314, 314, 314, 276, 314,
- 314, 314, 466, 314, 314, 466, 332, 482, 314, 466,
- 314, 314, 314, 314, 314, 331, 42, 43, 286, 12,
- 466, 314, 314, 466, 314, 482, 314, 466, 314, 42,
- 43, 286, 12, 293, 294, 295, 296, 307, 314, 42,
- 43, 286, 12, 185, 314, 314, 293, 294, 295, 296,
- 186, 314, 314, 314, 322, 314, 293, 294, 295, 296,
- 42, 43, 286, 12, 31, 314, 42, 43, 286, 12,
- 314, 334, 314, 42, 43, 286, 12, 293, 294, 295,
- 296, 314, 314, 293, 294, 295, 296, 314, 314, 314,
- 293, 294, 295, 296, 42, 43, 286, 12, 42, 43,
- 286, 12, 482, 314, 314, 482, 314, 314, 314, 482,
- 466, 293, 294, 295, 296, 293, 294, 295, 296, 314,
- 314, 314, 259, 314, 314, 19, 314, 314, 314, 258,
- 314, 314, 314, 314, 314, 314, 466, 314, 14, 466,
- 150, 482, 314, 466, 15,
+ 33, 103, 271, 308, 180, 202, 307, 249, 250, 251,
+ 1, 266, 139, 202, 204, 363, 6, 87, 248, 224,
+ 218, 363, 113, 316, 402, 218, 219, 263, 220, 222,
+ 226, 402, 21, 402, 49, 44, 402, 32, 45, 46,
+ 280, 228, 402, 284, 402, 205, 402, 53, 4, 140,
+ 304, 233, 177, 103, 227, 5, 54, 249, 250, 251,
+ 1, 20, 136, 194, 195, 273, 6, 87, 14, 224,
+ 312, 29, 113, 231, 15, 160, 219, 263, 220, 141,
+ 210, 274, 21, 186, 53, 44, 13, 304, 45, 46,
+ 280, 228, 150, 237, 154, 205, 259, 53, 4, 330,
+ 304, 304, 258, 255, 144, 5, 54, 249, 250, 251,
+ 1, 304, 101, 396, 86, 238, 6, 87, 3, 224,
+ 103, 259, 113, 17, 97, 396, 219, 263, 220, 339,
+ 226, 396, 21, 153, 448, 44, 202, 40, 45, 46,
+ 280, 228, 304, 284, 202, 205, 448, 53, 4, 116,
+ 304, 47, 22, 287, 41, 5, 54, 249, 250, 251,
+ 1, 140, 138, 269, 204, 513, 6, 87, 14, 224,
+ 545, 100, 113, 152, 15, 448, 219, 263, 220, 107,
+ 226, 153, 21, 258, 235, 44, 143, 448, 45, 46,
+ 280, 228, 327, 284, 270, 205, 53, 53, 4, 304,
+ 304, 202, 259, 363, 323, 5, 54, 249, 250, 251,
+ 1, 266, 138, 364, 196, 363, 6, 87, 306, 224,
+ 103, 363, 113, 145, 304, 364, 219, 263, 220, 202,
+ 226, 364, 21, 258, 49, 44, 18, 174, 45, 46,
+ 280, 228, 15, 284, 37, 205, 103, 53, 4, 116,
+ 304, 179, 159, 307, 259, 5, 54, 249, 250, 251,
+ 1, 155, 137, 239, 204, 94, 6, 87, 186, 224,
+ 340, 258, 113, 108, 239, 116, 219, 263, 220, 293,
+ 226, 240, 11, 259, 108, 44, 142, 286, 45, 46,
+ 280, 228, 172, 284, 156, 205, 186, 53, 4, 131,
+ 304, 182, 331, 307, 258, 5, 54, 249, 250, 251,
+ 1, 157, 138, 266, 191, 95, 6, 87, 26, 224,
+ 257, 258, 113, 186, 262, 448, 219, 263, 220, 185,
+ 215, 178, 21, 229, 112, 44, 49, 448, 45, 46,
+ 280, 228, 148, 284, 158, 205, 186, 53, 4, 90,
+ 304, 314, 258, 292, 258, 5, 54, 249, 250, 251,
+ 1, 179, 138, 307, 189, 131, 6, 87, 261, 224,
+ 175, 19, 113, 147, 168, 260, 219, 263, 220, 185,
+ 226, 266, 21, 108, 258, 44, 202, 23, 45, 46,
+ 280, 228, 171, 284, 91, 205, 36, 53, 4, 271,
+ 304, 186, 258, 161, 49, 5, 54, 249, 250, 251,
+ 1, 325, 138, 181, 204, 307, 6, 87, 484, 224,
+ 202, 484, 113, 165, 468, 484, 219, 263, 220, 141,
+ 190, 468, 21, 216, 199, 44, 13, 337, 45, 46,
+ 280, 228, 468, 284, 167, 205, 25, 53, 4, 468,
+ 304, 42, 43, 288, 12, 5, 54, 249, 250, 251,
+ 1, 28, 140, 183, 204, 247, 6, 87, 295, 296,
+ 297, 298, 113, 266, 313, 304, 219, 263, 220, 16,
+ 226, 185, 21, 7, 40, 48, 246, 247, 45, 46,
+ 280, 228, 96, 284, 8, 205, 49, 53, 4, 265,
+ 304, 42, 43, 288, 12, 5, 54, 249, 250, 251,
+ 1, 24, 140, 305, 204, 262, 6, 87, 295, 296,
+ 297, 298, 113, 316, 448, 218, 219, 263, 220, 92,
+ 226, 221, 21, 301, 449, 44, 448, 10, 45, 46,
+ 280, 228, 9, 284, 319, 205, 449, 53, 4, 117,
+ 304, 130, 35, 9, 234, 5, 54, 290, 217, 218,
+ 254, 102, 93, 110, 245, 193, 104, 85, 200, 89,
+ 318, 322, 102, 162, 98, 275, 276, 302, 300, 303,
+ 227, 252, 283, 206, 285, 34, 291, 99, 302, 300,
+ 303, 227, 290, 217, 218, 254, 239, 93, 110, 326,
+ 192, 104, 60, 241, 201, 173, 108, 102, 184, 176,
+ 275, 276, 130, 163, 253, 268, 114, 283, 206, 285,
+ 264, 291, 102, 302, 300, 303, 290, 122, 218, 256,
+ 272, 115, 110, 267, 193, 104, 85, 202, 302, 300,
+ 303, 102, 202, 261, 275, 276, 19, 279, 227, 398,
+ 260, 283, 206, 285, 395, 291, 277, 302, 300, 303,
+ 290, 398, 218, 7, 202, 115, 395, 398, 203, 120,
+ 72, 450, 395, 450, 261, 102, 367, 19, 275, 276,
+ 232, 260, 230, 281, 282, 283, 206, 285, 14, 291,
+ 14, 302, 300, 303, 15, 299, 15, 448, 290, 452,
+ 218, 452, 88, 115, 209, 321, 203, 120, 72, 448,
+ 24, 164, 332, 102, 236, 328, 275, 276, 166, 261,
+ 338, 329, 19, 283, 206, 285, 260, 291, 37, 302,
+ 300, 303, 484, 38, 341, 484, 290, 317, 218, 484,
+ 317, 109, 208, 321, 203, 123, 51, 317, 121, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 223, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 484, 218, 317, 317, 115, 317, 317, 203, 123,
+ 67, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 214, 203, 123, 67, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 207, 203, 120, 72, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 123, 78, 320, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 211, 213, 300, 303, 290, 317, 218, 317,
+ 317, 109, 317, 317, 203, 123, 58, 317, 240, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 119,
+ 64, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 198, 118, 59, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 105, 84, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 106, 83, 317, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 123, 55, 317, 317, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 123,
+ 66, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 203, 105, 56, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 123, 65, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 123, 57, 317, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 123, 58, 317, 317, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 123,
+ 68, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 203, 123, 69, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 123, 70, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 123, 71, 317, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 123, 73, 317, 317, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 197, 123,
+ 61, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 203, 123, 62, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 123, 63, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 123, 74, 317, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 123, 75, 317, 317, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 123,
+ 76, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 203, 123, 77, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 123, 79, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 212,
+ 300, 303, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 123, 80, 317, 317, 317, 317, 102, 317, 317,
+ 275, 276, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 123, 81, 317, 317, 317,
+ 317, 102, 317, 317, 275, 276, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 123,
+ 82, 317, 317, 317, 317, 102, 317, 317, 275, 276,
+ 317, 317, 317, 317, 317, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 290, 317, 218, 317, 317, 115,
+ 317, 317, 203, 123, 50, 317, 317, 317, 317, 102,
+ 317, 317, 275, 276, 317, 317, 317, 317, 317, 283,
+ 206, 285, 317, 291, 317, 302, 300, 303, 290, 317,
+ 218, 317, 317, 115, 317, 317, 203, 123, 52, 317,
+ 317, 317, 317, 102, 317, 317, 275, 276, 317, 317,
+ 317, 317, 317, 283, 206, 285, 317, 291, 317, 302,
+ 300, 303, 290, 317, 218, 169, 317, 115, 317, 317,
+ 203, 135, 317, 317, 317, 258, 317, 102, 47, 22,
+ 287, 41, 317, 317, 317, 317, 335, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 290, 317, 218, 146,
+ 317, 115, 317, 317, 203, 129, 317, 317, 317, 258,
+ 317, 102, 47, 22, 287, 41, 317, 317, 317, 317,
+ 289, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 249, 250, 251, 2, 317, 315, 317, 317, 317, 6,
+ 87, 317, 317, 317, 317, 113, 317, 14, 317, 219,
+ 263, 220, 317, 15, 39, 317, 14, 317, 42, 43,
+ 288, 12, 15, 317, 317, 317, 317, 42, 43, 288,
+ 12, 317, 317, 317, 317, 295, 296, 297, 298, 310,
+ 27, 317, 317, 317, 295, 296, 297, 298, 317, 249,
+ 250, 251, 2, 317, 315, 317, 111, 317, 6, 87,
+ 317, 317, 317, 317, 113, 317, 317, 149, 219, 263,
+ 220, 317, 42, 43, 288, 12, 317, 42, 43, 288,
+ 12, 317, 317, 317, 317, 317, 317, 317, 317, 295,
+ 296, 297, 298, 317, 295, 296, 297, 298, 311, 27,
+ 317, 317, 242, 243, 244, 134, 225, 317, 249, 250,
+ 251, 1, 317, 484, 317, 317, 484, 6, 87, 3,
+ 484, 468, 317, 113, 317, 278, 317, 219, 263, 220,
+ 290, 317, 218, 317, 317, 115, 317, 317, 203, 133,
+ 317, 317, 317, 317, 317, 102, 317, 468, 317, 317,
+ 468, 317, 484, 317, 468, 283, 206, 285, 317, 291,
+ 317, 302, 300, 303, 317, 290, 317, 218, 170, 317,
+ 115, 317, 317, 203, 124, 317, 317, 317, 258, 317,
+ 102, 47, 22, 287, 41, 317, 317, 317, 317, 317,
+ 283, 206, 285, 317, 291, 317, 302, 300, 303, 317,
+ 317, 290, 317, 218, 317, 317, 115, 317, 317, 203,
+ 125, 317, 317, 317, 317, 317, 102, 317, 317, 317,
+ 317, 317, 317, 317, 317, 317, 283, 206, 285, 317,
+ 291, 317, 302, 300, 303, 317, 290, 317, 218, 317,
+ 317, 115, 317, 317, 203, 126, 317, 317, 317, 317,
+ 317, 102, 317, 317, 317, 317, 317, 317, 317, 317,
+ 317, 283, 206, 285, 317, 291, 317, 302, 300, 303,
+ 317, 317, 290, 317, 218, 317, 317, 115, 317, 317,
+ 203, 127, 317, 317, 317, 317, 317, 102, 317, 317,
+ 317, 317, 317, 317, 317, 317, 317, 283, 206, 285,
+ 317, 291, 317, 302, 300, 303, 317, 290, 317, 218,
+ 317, 317, 115, 317, 317, 203, 128, 317, 317, 317,
+ 317, 317, 102, 317, 317, 317, 317, 317, 317, 317,
+ 317, 317, 283, 206, 285, 317, 291, 317, 302, 300,
+ 303, 317, 317, 290, 317, 218, 225, 317, 115, 317,
+ 317, 203, 132, 484, 317, 317, 484, 317, 102, 317,
+ 484, 468, 317, 317, 317, 278, 317, 317, 283, 206,
+ 285, 317, 291, 317, 302, 300, 303, 317, 317, 411,
+ 317, 317, 317, 317, 317, 317, 317, 468, 317, 317,
+ 468, 317, 484, 225, 468, 294, 317, 317, 317, 317,
+ 484, 317, 317, 484, 317, 317, 36, 484, 468, 317,
+ 225, 448, 278, 411, 411, 411, 411, 484, 317, 317,
+ 484, 317, 317, 448, 484, 468, 317, 317, 30, 278,
+ 411, 411, 411, 411, 468, 484, 317, 468, 484, 484,
+ 317, 468, 484, 468, 317, 317, 317, 278, 317, 317,
+ 317, 468, 317, 317, 468, 334, 484, 317, 468, 317,
+ 317, 317, 317, 317, 333, 42, 43, 288, 12, 468,
+ 317, 317, 468, 317, 484, 317, 468, 317, 42, 43,
+ 288, 12, 295, 296, 297, 298, 309, 317, 42, 43,
+ 288, 12, 187, 317, 317, 295, 296, 297, 298, 188,
+ 317, 317, 317, 324, 317, 295, 296, 297, 298, 42,
+ 43, 288, 12, 31, 317, 42, 43, 288, 12, 317,
+ 336, 317, 42, 43, 288, 12, 295, 296, 297, 298,
+ 317, 317, 295, 296, 297, 298, 317, 317, 317, 295,
+ 296, 297, 298, 42, 43, 288, 12, 42, 43, 288,
+ 12, 484, 317, 317, 484, 317, 317, 317, 484, 468,
+ 295, 296, 297, 298, 295, 296, 297, 298, 317, 317,
+ 317, 261, 317, 317, 19, 317, 317, 317, 260, 317,
+ 317, 317, 317, 317, 317, 468, 317, 14, 468, 151,
+ 484, 317, 468, 15,
);
public static $yy_lookahead = array(
- 2, 80, 100, 13, 102, 103, 1, 9, 10, 11,
- 12, 21, 14, 70, 16, 25, 18, 19, 93, 21,
- 77, 31, 24, 80, 13, 104, 28, 29, 30, 104,
+ 2, 17, 100, 13, 102, 1, 104, 9, 10, 11,
+ 12, 21, 14, 1, 16, 25, 18, 19, 65, 21,
+ 67, 31, 24, 65, 13, 67, 28, 29, 30, 17,
32, 20, 34, 22, 44, 37, 25, 39, 40, 41,
42, 43, 31, 45, 33, 47, 35, 49, 50, 14,
- 52, 16, 12, 17, 43, 57, 58, 9, 10, 11,
- 12, 12, 14, 14, 16, 16, 18, 19, 65, 21,
- 67, 12, 24, 14, 34, 16, 28, 29, 30, 43,
- 32, 32, 34, 1, 49, 37, 50, 52, 40, 41,
+ 52, 16, 76, 17, 43, 57, 58, 9, 10, 11,
+ 12, 12, 14, 14, 16, 16, 18, 19, 25, 21,
+ 112, 12, 24, 14, 31, 16, 28, 29, 30, 43,
+ 32, 32, 34, 107, 49, 37, 50, 52, 40, 41,
42, 43, 72, 45, 99, 47, 101, 49, 50, 51,
52, 52, 82, 69, 14, 57, 58, 9, 10, 11,
12, 52, 14, 13, 16, 15, 18, 19, 15, 21,
- 17, 101, 24, 72, 34, 25, 28, 29, 30, 17,
- 32, 31, 34, 82, 34, 37, 102, 103, 40, 41,
+ 17, 101, 24, 15, 34, 25, 28, 29, 30, 21,
+ 32, 31, 34, 99, 34, 37, 1, 2, 40, 41,
42, 43, 52, 45, 1, 47, 46, 49, 50, 46,
52, 85, 86, 87, 88, 57, 58, 9, 10, 11,
- 12, 14, 14, 16, 16, 80, 18, 19, 25, 21,
- 61, 62, 24, 72, 31, 34, 28, 29, 30, 65,
- 32, 67, 34, 82, 43, 37, 33, 46, 40, 41,
+ 12, 14, 14, 16, 16, 1, 18, 19, 25, 21,
+ 61, 62, 24, 72, 31, 34, 28, 29, 30, 80,
+ 32, 99, 34, 82, 43, 37, 14, 46, 40, 41,
42, 43, 51, 45, 47, 47, 49, 49, 50, 52,
- 52, 99, 101, 13, 51, 57, 58, 9, 10, 11,
- 12, 21, 14, 17, 16, 25, 18, 19, 15, 21,
- 17, 31, 24, 101, 110, 111, 28, 29, 30, 65,
- 32, 67, 34, 15, 44, 37, 1, 2, 40, 41,
- 42, 43, 46, 45, 70, 47, 25, 49, 50, 46,
- 52, 77, 31, 72, 80, 57, 58, 9, 10, 11,
- 12, 43, 14, 82, 16, 1, 18, 19, 50, 21,
- 82, 76, 24, 21, 34, 111, 28, 29, 30, 99,
- 32, 101, 34, 14, 72, 37, 46, 106, 40, 41,
- 42, 43, 27, 45, 82, 47, 44, 49, 50, 34,
- 52, 106, 107, 51, 76, 57, 58, 9, 10, 11,
- 12, 46, 14, 21, 16, 51, 18, 19, 106, 21,
- 1, 52, 24, 69, 102, 103, 28, 29, 30, 16,
- 32, 25, 34, 1, 106, 37, 44, 31, 40, 41,
- 42, 43, 70, 45, 100, 47, 27, 49, 50, 17,
- 52, 59, 80, 99, 93, 57, 58, 9, 10, 11,
- 12, 48, 14, 72, 16, 104, 18, 19, 9, 21,
- 20, 12, 24, 82, 72, 16, 28, 29, 30, 79,
- 32, 76, 34, 33, 82, 37, 1, 2, 40, 41,
- 42, 43, 14, 45, 16, 47, 14, 49, 50, 76,
- 52, 102, 103, 72, 80, 57, 58, 9, 10, 11,
- 12, 106, 14, 82, 16, 80, 18, 19, 9, 21,
- 99, 12, 24, 63, 64, 16, 28, 29, 30, 106,
- 32, 6, 34, 8, 52, 37, 99, 43, 40, 41,
- 42, 43, 43, 45, 50, 47, 99, 49, 50, 50,
+ 52, 1, 101, 13, 105, 57, 58, 9, 10, 11,
+ 12, 21, 14, 13, 16, 25, 18, 19, 69, 21,
+ 17, 31, 24, 72, 52, 25, 28, 29, 30, 1,
+ 32, 31, 34, 82, 44, 37, 25, 76, 40, 41,
+ 42, 43, 31, 45, 15, 47, 17, 49, 50, 46,
+ 52, 102, 99, 104, 101, 57, 58, 9, 10, 11,
+ 12, 72, 14, 70, 16, 76, 18, 19, 107, 21,
+ 77, 82, 24, 80, 70, 46, 28, 29, 30, 51,
+ 32, 77, 34, 101, 80, 37, 80, 93, 40, 41,
+ 42, 43, 76, 45, 72, 47, 107, 49, 50, 105,
+ 52, 102, 103, 104, 82, 57, 58, 9, 10, 11,
+ 12, 72, 14, 21, 16, 76, 18, 19, 27, 21,
+ 82, 82, 24, 107, 108, 34, 28, 29, 30, 107,
+ 32, 14, 34, 16, 79, 37, 44, 46, 40, 41,
+ 42, 43, 72, 45, 72, 47, 107, 49, 50, 80,
+ 52, 59, 82, 93, 82, 57, 58, 9, 10, 11,
+ 12, 102, 14, 104, 16, 105, 18, 19, 9, 21,
+ 76, 12, 24, 70, 72, 16, 28, 29, 30, 107,
+ 32, 21, 34, 80, 82, 37, 1, 2, 40, 41,
+ 42, 43, 72, 45, 80, 47, 15, 49, 50, 100,
+ 52, 107, 82, 99, 44, 57, 58, 9, 10, 11,
+ 12, 51, 14, 102, 16, 104, 18, 19, 9, 21,
+ 1, 12, 24, 99, 43, 16, 28, 29, 30, 43,
+ 32, 50, 34, 63, 64, 37, 50, 14, 40, 41,
+ 42, 43, 43, 45, 99, 47, 27, 49, 50, 50,
52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
- 12, 21, 14, 34, 16, 2, 18, 19, 53, 54,
- 55, 56, 24, 15, 59, 46, 28, 29, 30, 21,
- 32, 106, 34, 107, 44, 37, 7, 8, 40, 41,
- 42, 43, 33, 45, 35, 47, 34, 49, 50, 99,
+ 12, 12, 14, 6, 16, 8, 18, 19, 53, 54,
+ 55, 56, 24, 21, 59, 52, 28, 29, 30, 20,
+ 32, 107, 34, 34, 2, 37, 7, 8, 40, 41,
+ 42, 43, 33, 45, 34, 47, 44, 49, 50, 16,
52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
- 12, 34, 14, 33, 16, 35, 18, 19, 53, 54,
- 55, 56, 24, 46, 103, 15, 28, 29, 30, 43,
- 32, 64, 34, 81, 33, 37, 35, 51, 40, 41,
- 42, 43, 33, 45, 35, 47, 99, 49, 50, 81,
- 52, 70, 81, 43, 73, 57, 58, 65, 66, 67,
- 68, 80, 70, 71, 7, 73, 74, 75, 33, 99,
- 35, 33, 80, 35, 16, 83, 84, 96, 97, 98,
- 13, 13, 90, 91, 92, 16, 94, 16, 96, 97,
- 98, 16, 65, 66, 67, 68, 16, 70, 71, 14,
- 73, 74, 75, 16, 32, 43, 70, 80, 32, 16,
- 83, 84, 70, 77, 78, 73, 80, 90, 91, 92,
- 34, 94, 80, 96, 97, 98, 65, 16, 67, 68,
- 49, 70, 71, 91, 73, 74, 75, 1, 96, 97,
- 98, 80, 1, 9, 83, 84, 12, 49, 51, 13,
- 16, 90, 91, 92, 13, 94, 16, 96, 97, 98,
- 65, 25, 67, 51, 1, 70, 25, 31, 73, 74,
- 75, 16, 31, 15, 9, 80, 13, 12, 83, 84,
- 72, 16, 48, 35, 76, 90, 91, 92, 25, 94,
- 82, 96, 97, 98, 31, 22, 112, 65, 112, 67,
- 112, 112, 70, 108, 109, 73, 74, 75, 112, 112,
- 112, 112, 80, 48, 106, 83, 84, 72, 112, 112,
- 112, 76, 90, 91, 92, 112, 94, 82, 96, 97,
- 98, 112, 112, 112, 65, 112, 67, 112, 112, 70,
- 108, 109, 73, 74, 75, 112, 77, 112, 112, 80,
- 112, 106, 83, 84, 112, 112, 112, 112, 112, 90,
- 91, 92, 112, 94, 112, 96, 97, 98, 65, 112,
- 67, 112, 112, 70, 112, 112, 73, 74, 75, 112,
- 112, 112, 112, 80, 112, 112, 83, 84, 112, 112,
- 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
- 97, 98, 65, 112, 67, 112, 112, 70, 105, 112,
- 73, 74, 75, 112, 112, 112, 112, 80, 112, 112,
- 83, 84, 112, 112, 112, 112, 112, 90, 91, 92,
- 112, 94, 112, 96, 97, 98, 65, 112, 67, 112,
- 112, 70, 105, 112, 73, 74, 75, 112, 112, 112,
- 112, 80, 112, 112, 83, 84, 112, 112, 112, 112,
- 112, 90, 91, 92, 112, 94, 112, 96, 97, 98,
- 112, 112, 112, 65, 112, 67, 112, 112, 70, 112,
- 109, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 9, 83, 84, 12, 112, 112, 112, 16, 90, 91,
- 92, 112, 94, 95, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 77,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 48,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
- 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
- 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
- 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
- 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
- 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
- 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
- 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
- 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
- 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
- 96, 97, 98, 65, 112, 67, 72, 112, 70, 112,
- 112, 73, 74, 112, 112, 112, 82, 112, 80, 85,
- 86, 87, 88, 112, 112, 112, 112, 89, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
- 72, 112, 70, 112, 112, 73, 74, 112, 112, 112,
- 82, 112, 80, 85, 86, 87, 88, 112, 112, 112,
- 112, 89, 90, 91, 92, 3, 94, 112, 96, 97,
- 98, 9, 10, 11, 12, 112, 14, 112, 112, 112,
- 18, 19, 9, 112, 112, 12, 24, 112, 25, 16,
- 28, 29, 30, 112, 31, 23, 112, 25, 25, 36,
- 37, 38, 39, 31, 31, 112, 112, 112, 36, 37,
- 38, 39, 112, 112, 112, 112, 53, 54, 55, 56,
- 58, 59, 112, 112, 3, 53, 54, 55, 56, 112,
- 9, 10, 11, 12, 112, 14, 112, 20, 112, 18,
- 19, 112, 112, 112, 112, 24, 112, 112, 26, 28,
- 29, 30, 112, 36, 37, 38, 39, 112, 36, 37,
- 38, 39, 112, 112, 112, 112, 112, 112, 112, 112,
- 53, 54, 55, 56, 112, 53, 54, 55, 56, 58,
- 59, 112, 112, 3, 4, 5, 6, 2, 112, 9,
- 10, 11, 12, 112, 9, 112, 112, 12, 18, 19,
- 15, 16, 17, 112, 24, 112, 21, 112, 28, 29,
- 30, 65, 112, 67, 112, 112, 70, 112, 112, 73,
- 74, 112, 112, 112, 112, 112, 80, 112, 43, 112,
- 112, 46, 112, 48, 112, 50, 90, 91, 92, 112,
- 94, 112, 96, 97, 98, 112, 65, 112, 67, 112,
- 1, 70, 112, 112, 73, 74, 112, 112, 112, 112,
- 112, 80, 13, 112, 112, 112, 17, 112, 112, 112,
- 112, 90, 91, 92, 25, 94, 112, 96, 97, 98,
- 31, 112, 65, 34, 67, 112, 72, 70, 112, 112,
- 73, 74, 112, 112, 112, 46, 82, 80, 112, 85,
- 86, 87, 88, 112, 112, 112, 112, 90, 91, 92,
- 112, 94, 112, 96, 97, 98, 112, 65, 112, 67,
- 112, 112, 70, 112, 112, 73, 74, 112, 112, 112,
- 112, 112, 80, 112, 112, 112, 112, 112, 112, 112,
- 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
- 98, 112, 112, 65, 112, 67, 112, 112, 70, 112,
- 112, 73, 74, 112, 112, 112, 112, 112, 80, 112,
- 112, 112, 112, 112, 112, 112, 112, 112, 90, 91,
- 92, 112, 94, 112, 96, 97, 98, 112, 65, 112,
- 67, 112, 112, 70, 112, 112, 73, 74, 112, 112,
- 112, 112, 112, 80, 112, 112, 112, 112, 112, 112,
- 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
- 97, 98, 112, 112, 65, 112, 67, 2, 112, 70,
- 112, 112, 73, 74, 9, 112, 112, 12, 112, 80,
- 112, 16, 17, 112, 112, 112, 21, 112, 112, 90,
- 91, 92, 112, 94, 112, 96, 97, 98, 112, 112,
- 2, 112, 112, 112, 112, 112, 112, 112, 43, 112,
- 112, 46, 112, 48, 2, 50, 51, 112, 112, 112,
- 112, 9, 112, 112, 12, 112, 112, 15, 16, 17,
- 112, 2, 34, 21, 36, 37, 38, 39, 9, 112,
- 112, 12, 112, 112, 46, 16, 17, 112, 112, 2,
- 21, 53, 54, 55, 56, 43, 9, 112, 46, 12,
- 48, 112, 50, 16, 17, 112, 112, 112, 21, 112,
- 112, 112, 43, 112, 112, 46, 13, 48, 112, 50,
- 112, 112, 112, 112, 112, 35, 36, 37, 38, 39,
- 43, 112, 112, 46, 112, 48, 112, 50, 112, 36,
- 37, 38, 39, 53, 54, 55, 56, 13, 112, 36,
- 37, 38, 39, 13, 112, 112, 53, 54, 55, 56,
- 13, 112, 112, 112, 51, 112, 53, 54, 55, 56,
- 36, 37, 38, 39, 2, 112, 36, 37, 38, 39,
- 112, 13, 112, 36, 37, 38, 39, 53, 54, 55,
- 56, 112, 112, 53, 54, 55, 56, 112, 112, 112,
- 53, 54, 55, 56, 36, 37, 38, 39, 36, 37,
- 38, 39, 9, 112, 112, 12, 112, 112, 112, 16,
- 17, 53, 54, 55, 56, 53, 54, 55, 56, 112,
- 112, 112, 9, 112, 112, 12, 112, 112, 112, 16,
- 112, 112, 112, 112, 112, 112, 43, 112, 25, 46,
- 27, 48, 112, 50, 31,
+ 12, 33, 14, 35, 16, 108, 18, 19, 53, 54,
+ 55, 56, 24, 65, 34, 67, 28, 29, 30, 99,
+ 32, 48, 34, 104, 34, 37, 46, 34, 40, 41,
+ 42, 43, 33, 45, 35, 47, 46, 49, 50, 46,
+ 52, 70, 15, 33, 73, 57, 58, 65, 66, 67,
+ 68, 80, 70, 71, 7, 73, 74, 75, 64, 111,
+ 112, 51, 80, 99, 81, 83, 84, 96, 97, 98,
+ 43, 13, 90, 91, 92, 33, 94, 35, 96, 97,
+ 98, 43, 65, 66, 67, 68, 70, 70, 71, 51,
+ 73, 74, 75, 77, 78, 81, 80, 80, 16, 81,
+ 83, 84, 70, 99, 13, 73, 16, 90, 91, 92,
+ 16, 94, 80, 96, 97, 98, 65, 16, 67, 68,
+ 16, 70, 71, 91, 73, 74, 75, 1, 96, 97,
+ 98, 80, 1, 9, 83, 84, 12, 16, 43, 13,
+ 16, 90, 91, 92, 13, 94, 14, 96, 97, 98,
+ 65, 25, 67, 34, 1, 70, 25, 31, 73, 74,
+ 75, 33, 31, 35, 9, 80, 13, 12, 83, 84,
+ 17, 16, 48, 32, 32, 90, 91, 92, 25, 94,
+ 25, 96, 97, 98, 31, 16, 31, 34, 65, 33,
+ 67, 35, 16, 70, 109, 110, 73, 74, 75, 46,
+ 33, 49, 35, 80, 16, 51, 83, 84, 49, 9,
+ 16, 51, 12, 90, 91, 92, 16, 94, 15, 96,
+ 97, 98, 9, 22, 35, 12, 65, 113, 67, 16,
+ 113, 70, 109, 110, 73, 74, 75, 113, 77, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 48, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 48, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 106, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 106, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 110, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 95, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 77, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 113, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 113, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 113, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 113, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 113, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 113, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 113, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 113, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 75, 113, 113, 113, 113, 80, 113, 113,
+ 83, 84, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 75, 113, 113, 113,
+ 113, 80, 113, 113, 83, 84, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 75, 113, 113, 113, 113, 80, 113, 113, 83, 84,
+ 113, 113, 113, 113, 113, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 65, 113, 67, 113, 113, 70,
+ 113, 113, 73, 74, 75, 113, 113, 113, 113, 80,
+ 113, 113, 83, 84, 113, 113, 113, 113, 113, 90,
+ 91, 92, 113, 94, 113, 96, 97, 98, 65, 113,
+ 67, 113, 113, 70, 113, 113, 73, 74, 75, 113,
+ 113, 113, 113, 80, 113, 113, 83, 84, 113, 113,
+ 113, 113, 113, 90, 91, 92, 113, 94, 113, 96,
+ 97, 98, 65, 113, 67, 72, 113, 70, 113, 113,
+ 73, 74, 113, 113, 113, 82, 113, 80, 85, 86,
+ 87, 88, 113, 113, 113, 113, 89, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 65, 113, 67, 72,
+ 113, 70, 113, 113, 73, 74, 113, 113, 113, 82,
+ 113, 80, 85, 86, 87, 88, 113, 113, 113, 113,
+ 89, 90, 91, 92, 3, 94, 113, 96, 97, 98,
+ 9, 10, 11, 12, 113, 14, 113, 113, 113, 18,
+ 19, 113, 113, 113, 113, 24, 113, 25, 113, 28,
+ 29, 30, 113, 31, 23, 113, 25, 113, 36, 37,
+ 38, 39, 31, 113, 113, 113, 113, 36, 37, 38,
+ 39, 113, 113, 113, 113, 53, 54, 55, 56, 58,
+ 59, 113, 113, 3, 53, 54, 55, 56, 113, 9,
+ 10, 11, 12, 113, 14, 113, 20, 113, 18, 19,
+ 113, 113, 113, 113, 24, 113, 113, 26, 28, 29,
+ 30, 113, 36, 37, 38, 39, 113, 36, 37, 38,
+ 39, 113, 113, 113, 113, 113, 113, 113, 113, 53,
+ 54, 55, 56, 113, 53, 54, 55, 56, 58, 59,
+ 113, 113, 3, 4, 5, 6, 2, 113, 9, 10,
+ 11, 12, 113, 9, 113, 113, 12, 18, 19, 15,
+ 16, 17, 113, 24, 113, 21, 113, 28, 29, 30,
+ 65, 113, 67, 113, 113, 70, 113, 113, 73, 74,
+ 113, 113, 113, 113, 113, 80, 113, 43, 113, 113,
+ 46, 113, 48, 113, 50, 90, 91, 92, 113, 94,
+ 113, 96, 97, 98, 113, 65, 113, 67, 72, 113,
+ 70, 113, 113, 73, 74, 113, 113, 113, 82, 113,
+ 80, 85, 86, 87, 88, 113, 113, 113, 113, 113,
+ 90, 91, 92, 113, 94, 113, 96, 97, 98, 113,
+ 113, 65, 113, 67, 113, 113, 70, 113, 113, 73,
+ 74, 113, 113, 113, 113, 113, 80, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 90, 91, 92, 113,
+ 94, 113, 96, 97, 98, 113, 65, 113, 67, 113,
+ 113, 70, 113, 113, 73, 74, 113, 113, 113, 113,
+ 113, 80, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 90, 91, 92, 113, 94, 113, 96, 97, 98,
+ 113, 113, 65, 113, 67, 113, 113, 70, 113, 113,
+ 73, 74, 113, 113, 113, 113, 113, 80, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 90, 91, 92,
+ 113, 94, 113, 96, 97, 98, 113, 65, 113, 67,
+ 113, 113, 70, 113, 113, 73, 74, 113, 113, 113,
+ 113, 113, 80, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 90, 91, 92, 113, 94, 113, 96, 97,
+ 98, 113, 113, 65, 113, 67, 2, 113, 70, 113,
+ 113, 73, 74, 9, 113, 113, 12, 113, 80, 113,
+ 16, 17, 113, 113, 113, 21, 113, 113, 90, 91,
+ 92, 113, 94, 113, 96, 97, 98, 113, 113, 2,
+ 113, 113, 113, 113, 113, 113, 113, 43, 113, 113,
+ 46, 113, 48, 2, 50, 51, 113, 113, 113, 113,
+ 9, 113, 113, 12, 113, 113, 15, 16, 17, 113,
+ 2, 34, 21, 36, 37, 38, 39, 9, 113, 113,
+ 12, 113, 113, 46, 16, 17, 113, 113, 2, 21,
+ 53, 54, 55, 56, 43, 9, 113, 46, 12, 48,
+ 113, 50, 16, 17, 113, 113, 113, 21, 113, 113,
+ 113, 43, 113, 113, 46, 13, 48, 113, 50, 113,
+ 113, 113, 113, 113, 35, 36, 37, 38, 39, 43,
+ 113, 113, 46, 113, 48, 113, 50, 113, 36, 37,
+ 38, 39, 53, 54, 55, 56, 13, 113, 36, 37,
+ 38, 39, 13, 113, 113, 53, 54, 55, 56, 13,
+ 113, 113, 113, 51, 113, 53, 54, 55, 56, 36,
+ 37, 38, 39, 2, 113, 36, 37, 38, 39, 113,
+ 13, 113, 36, 37, 38, 39, 53, 54, 55, 56,
+ 113, 113, 53, 54, 55, 56, 113, 113, 113, 53,
+ 54, 55, 56, 36, 37, 38, 39, 36, 37, 38,
+ 39, 9, 113, 113, 12, 113, 113, 113, 16, 17,
+ 53, 54, 55, 56, 53, 54, 55, 56, 113, 113,
+ 113, 9, 113, 113, 12, 113, 113, 113, 16, 113,
+ 113, 113, 113, 113, 113, 43, 113, 25, 46, 27,
+ 48, 113, 50, 31,
);
- const YY_SHIFT_USE_DFLT = -11;
- const YY_SHIFT_MAX = 239;
+ const YY_SHIFT_USE_DFLT = -17;
+ const YY_SHIFT_MAX = 241;
public static $yy_shift_ofst = array(
- -11, 98, 98, 148, 198, 198, 248, 148, 148, 198,
+ -17, 98, 98, 148, 198, 198, 248, 148, 148, 198,
148, 248, -2, 48, 298, 148, 148, 148, 298, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
348, 148, 148, 148, 148, 148, 398, 148, 148, 148,
448, 498, 498, 498, 498, 498, 498, 498, 498, 147,
- 1962, 1953, 1953, 35, 1952, 2007, 2012, 2413, 2400, 2423,
- 2444, 415, 2450, 2457, 2482, 2478, 465, 465, 465, 465,
+ 1961, 1952, 1952, 35, 1951, 2006, 2011, 2412, 2399, 2422,
+ 2443, 415, 2449, 2456, 2481, 2477, 465, 465, 465, 465,
465, 465, 465, 465, 465, 465, 465, 465, 465, 465,
- 465, 465, 465, 465, 465, 465, 2139, 90, 143, 2011,
- 2533, 1963, 36, 103, 143, 143, 90, 90, 235, 2070,
- 2075, 634, 59, 636, 641, 663, 359, 359, 203, 221,
- 269, 221, 306, 332, 196, 378, 378, 264, 385, 319,
- 221, 5, 5, 5, 5, 5, 5, 5, 5, 112,
- 112, 82, 5, -11, -11, 2315, 2362, 2379, 2397, 2513,
- 49, 665, 409, 218, 221, 221, 458, 221, 382, 221,
- 382, 221, 394, 394, 221, 221, 221, 221, 394, 40,
- 394, 394, 394, 399, 394, 399, 394, 221, 221, 221,
- 221, 5, 463, 5, 5, 463, 5, 462, 112, 112,
- 112, -11, -11, -11, -11, -11, -11, 2348, 11, 100,
- -10, 190, 881, 141, 265, 292, 252, 425, 479, 350,
- 313, 440, 240, 429, 477, 459, 480, 153, 486, 501,
- 509, 535, 538, 510, 557, 567, 568, 558, 569, 571,
- 575, 580, 585, 587, 562, 572, 576, 586, 593, 462,
- 611, 581, 598, 640, 597, 612, 655, 658, 648, 673,
+ 465, 465, 465, 465, 465, 465, 663, 90, 143, 2010,
+ 2532, 665, 36, 103, 143, 143, 90, 90, 135, -16,
+ 2069, 2074, 634, 59, 200, 636, 641, 359, 359, 229,
+ 43, 172, 43, 211, 12, 203, 317, 317, 228, 385,
+ 419, 43, 4, 4, 4, 4, 4, 4, 4, 4,
+ -16, -16, 164, 4, -17, -17, 2314, 2361, 2378, 2396,
+ 2512, 49, 710, 409, 381, 43, 43, 108, 43, 423,
+ 43, 423, 43, 386, 386, 43, 43, 43, 43, 386,
+ 449, 386, 386, 386, 399, 386, 399, 386, 43, 43,
+ 43, 43, 4, 482, 4, 4, 482, 4, 460, -16,
+ -16, -16, -16, -17, -17, -17, -17, -17, -17, 2347,
+ 11, 100, -10, 190, 723, 141, 291, 292, 360, 457,
+ 479, 459, 483, 452, 490, 500, 503, 478, 509, 520,
+ 548, 552, 638, 666, 677, 537, 557, 568, 601, 592,
+ 600, 604, 611, 614, 642, 631, 605, 651, 652, 629,
+ 679, 460, 686, 662, 669, 698, 664, 670, 704, 713,
+ 699, 711,
);
const YY_REDUCE_USE_DFLT = -99;
- const YY_REDUCE_MAX = 186;
+ const YY_REDUCE_MAX = 188;
public static $yy_reduce_ofst = array(
- 109, 492, 527, 561, 595, 632, 669, 703, 737, 771,
- 808, 842, 876, 910, 944, 978, 1012, 1046, 1080, 1114,
- 1148, 1182, 1216, 1250, 1284, 1318, 1352, 1386, 1420, 1454,
- 1488, 1522, 1556, 1590, 1624, 1658, 1692, 1726, 1760, 1794,
- 1828, 1862, 2036, 2071, 2107, 2142, 2178, 2213, 2249, 542,
- 1824, 1858, 2104, 481, 114, 66, 66, 66, 66, 66,
+ 109, 492, 527, 561, 595, 633, 671, 705, 739, 773,
+ 807, 841, 875, 909, 943, 977, 1011, 1045, 1079, 1113,
+ 1147, 1181, 1215, 1249, 1283, 1317, 1351, 1385, 1419, 1453,
+ 1487, 1521, 1555, 1589, 1623, 1657, 1691, 1725, 1759, 1793,
+ 1827, 1861, 2035, 2070, 2106, 2141, 2177, 2212, 2248, 542,
+ 1823, 1857, 2066, 481, 458, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 608, 536, 645, 164,
- 20, 101, -98, 34, 181, 212, -57, 174, 195, 3,
- 254, -5, -79, 228, 228, 228, 180, -5, 222, 51,
- 272, 291, 302, 305, 222, -75, 261, 228, 228, 228,
- 331, 323, 228, 228, 228, 228, 228, 228, 228, 222,
- 299, 228, 228, 360, 228, 102, 102, 102, 102, 102,
- 85, 122, 102, 102, 188, 188, 300, 188, 324, 188,
- 335, 188, 244, 244, 188, 188, 188, 188, 244, 321,
- 244, 244, 244, 337, 244, 347, 244, 188, 188, 188,
- 188, 375, 376, 375, 375, 376, 375, 400, 421, 421,
- 421, 467, 452, 468, 471, 447, 470,
+ 66, 66, 66, 66, 66, 66, 189, 526, 239, -42,
+ 20, 101, -98, 149, 222, 272, 193, 204, 216, 199,
+ -47, 34, -5, 99, -24, -24, -24, 153, -5, 259,
+ 151, 303, 270, 302, 161, 259, 194, 260, -24, -24,
+ -24, 320, 294, -24, -24, -24, -24, -24, -24, -24,
+ 259, 311, -24, -24, 370, -24, 82, 82, 82, 82,
+ 82, 206, 182, 82, 82, 238, 238, 255, 238, 269,
+ 238, 314, 238, 299, 299, 238, 238, 238, 238, 299,
+ 304, 299, 299, 299, 324, 299, 345, 299, 238, 238,
+ 238, 238, 374, 407, 374, 374, 407, 374, 430, 429,
+ 429, 429, 429, 504, 493, 524, 528, 474, 514,
);
public static $yyExpectedTokens = array(
array(),
@@ -937,6 +938,7 @@ public static $yy_action = array(
array(14, 34, 52, ),
array(14, 34, 52, ),
array(1, 2, ),
+ array(17, ),
array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 24, 28, 29, 30, ),
array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ),
array(9, 12, 16, 48, ),
@@ -1019,6 +1021,7 @@ public static $yy_action = array(
array(17, ),
array(17, ),
array(17, ),
+ array(17, ),
array(),
array(),
array(),
@@ -1180,45 +1183,46 @@ public static $yy_action = array(
array(),
);
public static $yy_default = array(
- 350, 540, 540, 540, 525, 525, 540, 501, 501, 524,
- 452, 540, 540, 540, 540, 540, 540, 540, 540, 540,
- 540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
- 540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
- 540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
- 390, 369, 390, 540, 540, 540, 395, 540, 540, 540,
- 363, 540, 540, 540, 540, 540, 374, 500, 413, 420,
- 499, 526, 528, 527, 419, 421, 418, 422, 451, 449,
- 397, 401, 402, 392, 395, 363, 433, 540, 390, 540,
- 390, 390, 514, 454, 390, 390, 540, 540, 381, 340,
- 453, 466, 540, 404, 404, 404, 466, 466, 454, 390,
- 540, 390, 390, 384, 454, 540, 540, 404, 404, 404,
- 371, 386, 404, 411, 424, 425, 426, 412, 417, 454,
- 511, 424, 410, 348, 508, 453, 453, 453, 453, 453,
- 540, 468, 466, 482, 360, 370, 540, 373, 540, 378,
- 540, 379, 463, 464, 364, 366, 367, 368, 492, 466,
- 491, 494, 493, 457, 458, 459, 460, 380, 376, 377,
- 372, 382, 502, 385, 387, 503, 442, 466, 488, 515,
- 512, 348, 507, 507, 507, 466, 466, 433, 429, 433,
- 423, 423, 467, 433, 433, 423, 423, 346, 540, 540,
- 540, 423, 433, 443, 540, 540, 540, 540, 429, 540,
- 461, 461, 540, 429, 540, 540, 540, 540, 540, 540,
- 540, 540, 540, 540, 429, 431, 540, 513, 540, 482,
- 540, 540, 540, 540, 540, 438, 540, 540, 540, 398,
- 341, 342, 343, 344, 345, 347, 349, 351, 352, 353,
- 354, 355, 356, 357, 359, 388, 389, 484, 485, 486,
- 506, 383, 504, 505, 427, 436, 437, 446, 447, 465,
- 469, 470, 471, 405, 406, 407, 408, 409, 428, 430,
- 432, 434, 438, 439, 440, 414, 415, 416, 441, 444,
- 445, 479, 477, 516, 517, 518, 519, 455, 456, 490,
- 461, 462, 483, 498, 358, 489, 536, 537, 529, 530,
- 531, 534, 533, 535, 538, 539, 532, 521, 523, 522,
- 520, 495, 480, 478, 476, 473, 474, 475, 481, 496,
- 497, 435, 472, 510, 487, 482, 391, 375, 399, 403,
+ 352, 544, 544, 544, 529, 529, 544, 505, 505, 528,
+ 454, 544, 544, 544, 544, 544, 544, 544, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
+ 392, 371, 392, 544, 544, 544, 397, 544, 544, 544,
+ 365, 544, 544, 544, 544, 544, 376, 504, 415, 422,
+ 503, 530, 532, 531, 421, 423, 420, 424, 453, 451,
+ 399, 403, 404, 394, 397, 365, 435, 544, 392, 544,
+ 392, 392, 518, 456, 392, 392, 544, 544, 383, 491,
+ 342, 455, 468, 544, 406, 406, 406, 468, 468, 456,
+ 392, 544, 392, 392, 386, 456, 544, 544, 406, 406,
+ 406, 373, 388, 406, 413, 426, 427, 428, 414, 419,
+ 456, 515, 426, 412, 350, 512, 455, 455, 455, 455,
+ 455, 544, 470, 468, 484, 362, 372, 544, 375, 544,
+ 380, 544, 381, 465, 466, 366, 368, 369, 370, 496,
+ 468, 495, 498, 497, 459, 460, 461, 462, 382, 378,
+ 379, 374, 384, 506, 387, 389, 507, 444, 468, 490,
+ 519, 516, 492, 350, 511, 511, 511, 468, 468, 435,
+ 431, 435, 425, 425, 469, 435, 435, 425, 425, 348,
+ 544, 544, 544, 425, 435, 445, 544, 544, 544, 544,
+ 431, 544, 463, 463, 544, 431, 544, 544, 544, 544,
+ 544, 544, 544, 544, 544, 544, 431, 433, 544, 517,
+ 544, 484, 544, 544, 544, 544, 544, 440, 544, 544,
+ 544, 400, 343, 344, 345, 346, 347, 349, 351, 353,
+ 354, 355, 356, 357, 358, 359, 361, 390, 391, 486,
+ 487, 488, 510, 385, 508, 509, 429, 438, 439, 448,
+ 449, 467, 471, 472, 473, 407, 408, 409, 410, 411,
+ 430, 432, 434, 436, 440, 441, 442, 416, 417, 418,
+ 443, 446, 447, 481, 479, 520, 521, 522, 523, 457,
+ 458, 494, 463, 464, 485, 502, 360, 493, 540, 541,
+ 533, 534, 535, 538, 537, 539, 542, 543, 536, 525,
+ 527, 526, 524, 499, 482, 480, 478, 475, 476, 477,
+ 483, 500, 501, 437, 474, 514, 489, 484, 393, 377,
+ 401, 405,
);
- const YYNOCODE = 113;
+ const YYNOCODE = 114;
const YYSTACKDEPTH = 500;
- const YYNSTATE = 340;
- const YYNRULE = 200;
+ const YYNSTATE = 342;
+ const YYNRULE = 202;
const YYERRORSYMBOL = 60;
const YYERRSYMDT = 'yy0';
const YYFALLBACK = 0;
@@ -1273,9 +1277,10 @@ public static $yy_action = array(
'isin', 'array', 'function', 'ns1',
'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'variablelist',
'variable', 'object', 'configvariable', 'arrayindex',
- 'indexdef', 'varvarele', 'objectchain', 'objectelement',
- 'method', 'params', 'modifier', 'modparameter',
- 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
+ 'indexdef', 'varvarele', 'objectchain', 'optobjectchain',
+ 'objectelement', 'method', 'params', 'modifier',
+ 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted',
+ 'doublequotedcontent',
);
public static $yyRuleName = array(
@@ -1428,6 +1433,8 @@ public static $yy_action = array(
'varvarele ::= SIMPELOUTPUT',
'varvarele ::= LDEL expr RDEL',
'object ::= varindexed objectchain',
+ 'optobjectchain ::=',
+ 'optobjectchain ::= objectchain',
'objectchain ::= objectelement',
'objectchain ::= objectchain objectelement',
'objectelement ::= PTR ID arrayindex',
@@ -1435,7 +1442,7 @@ public static $yy_action = array(
'objectelement ::= PTR LDEL expr RDEL arrayindex',
'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
'objectelement ::= PTR method',
- 'function ::= ns1 OPENP variablelist CLOSEP',
+ 'function ::= ns1 OPENP variablelist CLOSEP optobjectchain',
'method ::= ID OPENP params CLOSEP',
'method ::= DOLLARID OPENP params CLOSEP',
'params ::= params COMMA expr',
@@ -1943,28 +1950,30 @@ public static $yy_action = array(
array( 0 => 101, 1 => 1 ),
array( 0 => 101, 1 => 3 ),
array( 0 => 97, 1 => 2 ),
+ array( 0 => 103, 1 => 0 ),
+ array( 0 => 103, 1 => 1 ),
array( 0 => 102, 1 => 1 ),
array( 0 => 102, 1 => 2 ),
- array( 0 => 103, 1 => 3 ),
- array( 0 => 103, 1 => 3 ),
- array( 0 => 103, 1 => 5 ),
- array( 0 => 103, 1 => 6 ),
- array( 0 => 103, 1 => 2 ),
- array( 0 => 90, 1 => 4 ),
- array( 0 => 104, 1 => 4 ),
- array( 0 => 104, 1 => 4 ),
- array( 0 => 105, 1 => 3 ),
- array( 0 => 105, 1 => 1 ),
- array( 0 => 105, 1 => 0 ),
+ array( 0 => 104, 1 => 3 ),
+ array( 0 => 104, 1 => 3 ),
+ array( 0 => 104, 1 => 5 ),
+ array( 0 => 104, 1 => 6 ),
+ array( 0 => 104, 1 => 2 ),
+ array( 0 => 90, 1 => 5 ),
+ array( 0 => 105, 1 => 4 ),
+ array( 0 => 105, 1 => 4 ),
+ array( 0 => 106, 1 => 3 ),
+ array( 0 => 106, 1 => 1 ),
+ array( 0 => 106, 1 => 0 ),
array( 0 => 76, 1 => 3 ),
array( 0 => 76, 1 => 2 ),
- array( 0 => 106, 1 => 3 ),
- array( 0 => 106, 1 => 2 ),
- array( 0 => 81, 1 => 2 ),
- array( 0 => 81, 1 => 0 ),
- array( 0 => 107, 1 => 2 ),
array( 0 => 107, 1 => 3 ),
array( 0 => 107, 1 => 2 ),
+ array( 0 => 81, 1 => 2 ),
+ array( 0 => 81, 1 => 0 ),
+ array( 0 => 108, 1 => 2 ),
+ array( 0 => 108, 1 => 3 ),
+ array( 0 => 108, 1 => 2 ),
array( 0 => 93, 1 => 1 ),
array( 0 => 93, 1 => 2 ),
array( 0 => 93, 1 => 1 ),
@@ -1976,24 +1985,24 @@ public static $yy_action = array(
array( 0 => 87, 1 => 1 ),
array( 0 => 94, 1 => 3 ),
array( 0 => 94, 1 => 3 ),
- array( 0 => 108, 1 => 1 ),
- array( 0 => 108, 1 => 3 ),
- array( 0 => 108, 1 => 2 ),
- array( 0 => 108, 1 => 0 ),
- array( 0 => 109, 1 => 3 ),
- array( 0 => 109, 1 => 3 ),
array( 0 => 109, 1 => 1 ),
+ array( 0 => 109, 1 => 3 ),
+ array( 0 => 109, 1 => 2 ),
+ array( 0 => 109, 1 => 0 ),
+ array( 0 => 110, 1 => 3 ),
+ array( 0 => 110, 1 => 3 ),
+ array( 0 => 110, 1 => 1 ),
array( 0 => 92, 1 => 2 ),
array( 0 => 92, 1 => 3 ),
- array( 0 => 110, 1 => 2 ),
- array( 0 => 110, 1 => 1 ),
- array( 0 => 111, 1 => 3 ),
- array( 0 => 111, 1 => 3 ),
- array( 0 => 111, 1 => 1 ),
- array( 0 => 111, 1 => 3 ),
- array( 0 => 111, 1 => 3 ),
- array( 0 => 111, 1 => 1 ),
+ array( 0 => 111, 1 => 2 ),
array( 0 => 111, 1 => 1 ),
+ array( 0 => 112, 1 => 3 ),
+ array( 0 => 112, 1 => 3 ),
+ array( 0 => 112, 1 => 1 ),
+ array( 0 => 112, 1 => 3 ),
+ array( 0 => 112, 1 => 3 ),
+ array( 0 => 112, 1 => 1 ),
+ array( 0 => 112, 1 => 1 ),
);
public static $yyReduceMap = array(
@@ -2023,10 +2032,12 @@ public static $yy_action = array(
104 => 6,
106 => 6,
122 => 6,
- 182 => 6,
- 188 => 6,
+ 150 => 6,
+ 184 => 6,
+ 190 => 6,
7 => 7,
8 => 8,
+ 149 => 8,
9 => 9,
11 => 11,
12 => 12,
@@ -2066,14 +2077,14 @@ public static $yy_action = array(
58 => 49,
110 => 49,
111 => 49,
- 160 => 49,
- 164 => 49,
- 168 => 49,
+ 162 => 49,
+ 166 => 49,
170 => 49,
+ 172 => 49,
50 => 50,
112 => 50,
- 161 => 50,
- 167 => 50,
+ 163 => 50,
+ 169 => 50,
51 => 51,
52 => 52,
53 => 52,
@@ -2120,7 +2131,7 @@ public static $yy_action = array(
107 => 107,
108 => 108,
109 => 108,
- 159 => 108,
+ 161 => 108,
113 => 113,
114 => 114,
115 => 115,
@@ -2133,7 +2144,7 @@ public static $yy_action = array(
123 => 123,
124 => 124,
126 => 126,
- 185 => 126,
+ 187 => 126,
127 => 127,
128 => 128,
129 => 129,
@@ -2151,13 +2162,11 @@ public static $yy_action = array(
141 => 141,
142 => 142,
143 => 143,
- 189 => 143,
+ 191 => 143,
144 => 144,
146 => 146,
147 => 147,
148 => 148,
- 149 => 149,
- 150 => 150,
151 => 151,
152 => 152,
153 => 153,
@@ -2166,13 +2175,13 @@ public static $yy_action = array(
156 => 156,
157 => 157,
158 => 158,
- 162 => 162,
- 163 => 163,
+ 159 => 159,
+ 160 => 160,
+ 164 => 164,
165 => 165,
- 166 => 166,
- 169 => 169,
+ 167 => 167,
+ 168 => 168,
171 => 171,
- 172 => 172,
173 => 173,
174 => 174,
175 => 175,
@@ -2181,21 +2190,23 @@ public static $yy_action = array(
178 => 178,
179 => 179,
180 => 180,
- 181 => 180,
- 183 => 183,
- 184 => 184,
+ 181 => 181,
+ 182 => 182,
+ 183 => 182,
+ 185 => 185,
186 => 186,
- 187 => 187,
- 190 => 190,
- 191 => 191,
+ 188 => 188,
+ 189 => 189,
192 => 192,
193 => 193,
- 196 => 193,
194 => 194,
- 197 => 194,
195 => 195,
- 198 => 198,
- 199 => 199,
+ 198 => 195,
+ 196 => 196,
+ 199 => 196,
+ 197 => 197,
+ 200 => 200,
+ 201 => 201,
);
// line 245 "src/Parser/TemplateParser.y"
public function yy_r0(){
@@ -2773,93 +2784,93 @@ public static $yy_action = array(
$this->_retvalue = '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor['var'] . ')'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
}
}
-// line 1066 "src/Parser/TemplateParser.y"
- public function yy_r149(){
+// line 1076 "src/Parser/TemplateParser.y"
+ public function yy_r151(){
$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
}
-// line 1071 "src/Parser/TemplateParser.y"
- public function yy_r150(){
+// line 1081 "src/Parser/TemplateParser.y"
+ public function yy_r152(){
$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1076 "src/Parser/TemplateParser.y"
- public function yy_r151(){
+// line 1086 "src/Parser/TemplateParser.y"
+ public function yy_r153(){
if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') {
$this->compiler->trigger_template_error (self::ERR1);
}
$this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1083 "src/Parser/TemplateParser.y"
- public function yy_r152(){
+// line 1093 "src/Parser/TemplateParser.y"
+ public function yy_r154(){
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
$this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor);
$this->_retvalue = '->{$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor . ')'.$this->yystack[$this->yyidx + 0]->minor.'}';
}
-// line 1091 "src/Parser/TemplateParser.y"
- public function yy_r153(){
+// line 1101 "src/Parser/TemplateParser.y"
+ public function yy_r155(){
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
$this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
}
-// line 1098 "src/Parser/TemplateParser.y"
- public function yy_r154(){
+// line 1108 "src/Parser/TemplateParser.y"
+ public function yy_r156(){
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
$this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
}
-// line 1106 "src/Parser/TemplateParser.y"
- public function yy_r155(){
+// line 1116 "src/Parser/TemplateParser.y"
+ public function yy_r157(){
$this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1114 "src/Parser/TemplateParser.y"
- public function yy_r156(){
+// line 1124 "src/Parser/TemplateParser.y"
+ public function yy_r158(){
- if ($this->yystack[$this->yyidx + -3]->minor == 'isset') {
+ if ($this->yystack[$this->yyidx + -4]->minor == 'isset') {
$this->_retvalue = '(true';
- if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
+ if (count($this->yystack[$this->yyidx + -2]->minor) == 0) {
throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
}
- foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ foreach ($this->yystack[$this->yyidx + -2]->minor as $value) {
if (is_array($value)) {
$this->_retvalue .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))';
} else {
$this->_retvalue .= ' && (' . $value . ' !== null)';
}
}
- $this->_retvalue .= ')';
- } elseif ($this->yystack[$this->yyidx + -3]->minor == 'empty') {
- if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
+ $this->_retvalue .= ')' . $this->yystack[$this->yyidx + 0]->minor;
+ } elseif ($this->yystack[$this->yyidx + -4]->minor == 'empty') {
+ if (count($this->yystack[$this->yyidx + -2]->minor) != 1) {
throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
}
- if (is_array($this->yystack[$this->yyidx + -1]->minor[0])) {
- $this->_retvalue .= '( !' . $this->yystack[$this->yyidx + -1]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -1]->minor[0][1] . '))';
+ if (is_array($this->yystack[$this->yyidx + -2]->minor[0])) {
+ $this->_retvalue = '( !' . $this->yystack[$this->yyidx + -2]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -2]->minor[0][1] . '))' . $this->yystack[$this->yyidx + 0]->minor;
} else {
- $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -1]->minor[0];
+ $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -2]->minor[0] . $this->yystack[$this->yyidx + 0]->minor;
}
} else {
$p = array();
- foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ foreach ($this->yystack[$this->yyidx + -2]->minor as $value) {
if (is_array($value)) {
$p[] = $value[1];
} else {
$p[] = $value;
}
}
- $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -3]->minor, $p);
+ $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -4]->minor, $p) . $this->yystack[$this->yyidx + 0]->minor;
}
}
-// line 1155 "src/Parser/TemplateParser.y"
- public function yy_r157(){
+// line 1165 "src/Parser/TemplateParser.y"
+ public function yy_r159(){
if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') {
$this->compiler->trigger_template_error (self::ERR1);
}
$this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
}
-// line 1162 "src/Parser/TemplateParser.y"
- public function yy_r158(){
+// line 1172 "src/Parser/TemplateParser.y"
+ public function yy_r160(){
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
@@ -2868,52 +2879,52 @@ public static $yy_action = array(
$this->compiler->appendPrefixCode("<?php {$prefixVar} = \$_smarty_tpl->getValue('".substr($this->yystack[$this->yyidx + -3]->minor,1).'\')'.';?>');
$this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
}
-// line 1191 "src/Parser/TemplateParser.y"
- public function yy_r162(){
+// line 1201 "src/Parser/TemplateParser.y"
+ public function yy_r164(){
$this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
}
-// line 1195 "src/Parser/TemplateParser.y"
- public function yy_r163(){
+// line 1205 "src/Parser/TemplateParser.y"
+ public function yy_r165(){
$this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
}
-// line 1203 "src/Parser/TemplateParser.y"
- public function yy_r165(){
+// line 1213 "src/Parser/TemplateParser.y"
+ public function yy_r167(){
$this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
}
-// line 1211 "src/Parser/TemplateParser.y"
- public function yy_r166(){
+// line 1221 "src/Parser/TemplateParser.y"
+ public function yy_r168(){
$this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
}
-// line 1224 "src/Parser/TemplateParser.y"
- public function yy_r169(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1233 "src/Parser/TemplateParser.y"
+// line 1234 "src/Parser/TemplateParser.y"
public function yy_r171(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
- }
-// line 1238 "src/Parser/TemplateParser.y"
- public function yy_r172(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
}
// line 1243 "src/Parser/TemplateParser.y"
public function yy_r173(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
}
// line 1248 "src/Parser/TemplateParser.y"
public function yy_r174(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
}
// line 1253 "src/Parser/TemplateParser.y"
public function yy_r175(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
}
-// line 1259 "src/Parser/TemplateParser.y"
+// line 1258 "src/Parser/TemplateParser.y"
public function yy_r176(){
- $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
}
// line 1263 "src/Parser/TemplateParser.y"
public function yy_r177(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
+ }
+// line 1269 "src/Parser/TemplateParser.y"
+ public function yy_r178(){
+ $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
+ }
+// line 1273 "src/Parser/TemplateParser.y"
+ public function yy_r179(){
static $lops = array(
'eq' => ' == ',
'ne' => ' != ',
@@ -2932,8 +2943,8 @@ public static $yy_action = array(
$op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
$this->_retvalue = $lops[$op];
}
-// line 1282 "src/Parser/TemplateParser.y"
- public function yy_r178(){
+// line 1292 "src/Parser/TemplateParser.y"
+ public function yy_r180(){
static $tlops = array(
'isdivby' => array('op' => ' % ', 'pre' => '!('),
'isnotdivby' => array('op' => ' % ', 'pre' => '('),
@@ -2945,8 +2956,8 @@ public static $yy_action = array(
$op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
$this->_retvalue = $tlops[$op];
}
-// line 1295 "src/Parser/TemplateParser.y"
- public function yy_r179(){
+// line 1305 "src/Parser/TemplateParser.y"
+ public function yy_r181(){
static $scond = array (
'iseven' => '!(1 & ',
'isnoteven' => '(1 & ',
@@ -2956,58 +2967,58 @@ public static $yy_action = array(
$op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
$this->_retvalue = $scond[$op];
}
-// line 1309 "src/Parser/TemplateParser.y"
- public function yy_r180(){
+// line 1319 "src/Parser/TemplateParser.y"
+ public function yy_r182(){
$this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
}
-// line 1320 "src/Parser/TemplateParser.y"
- public function yy_r183(){
+// line 1330 "src/Parser/TemplateParser.y"
+ public function yy_r185(){
$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1324 "src/Parser/TemplateParser.y"
- public function yy_r184(){
+// line 1334 "src/Parser/TemplateParser.y"
+ public function yy_r186(){
$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.',';
}
-// line 1332 "src/Parser/TemplateParser.y"
- public function yy_r186(){
+// line 1342 "src/Parser/TemplateParser.y"
+ public function yy_r188(){
$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1336 "src/Parser/TemplateParser.y"
- public function yy_r187(){
+// line 1346 "src/Parser/TemplateParser.y"
+ public function yy_r189(){
$this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
}
-// line 1352 "src/Parser/TemplateParser.y"
- public function yy_r190(){
+// line 1362 "src/Parser/TemplateParser.y"
+ public function yy_r192(){
$this->compiler->leaveDoubleQuote();
$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
}
-// line 1358 "src/Parser/TemplateParser.y"
- public function yy_r191(){
+// line 1368 "src/Parser/TemplateParser.y"
+ public function yy_r193(){
$this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
}
-// line 1363 "src/Parser/TemplateParser.y"
- public function yy_r192(){
+// line 1373 "src/Parser/TemplateParser.y"
+ public function yy_r194(){
$this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor);
}
-// line 1367 "src/Parser/TemplateParser.y"
- public function yy_r193(){
+// line 1377 "src/Parser/TemplateParser.y"
+ public function yy_r195(){
$this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
}
-// line 1371 "src/Parser/TemplateParser.y"
- public function yy_r194(){
+// line 1381 "src/Parser/TemplateParser.y"
+ public function yy_r196(){
$this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
}
-// line 1375 "src/Parser/TemplateParser.y"
- public function yy_r195(){
+// line 1385 "src/Parser/TemplateParser.y"
+ public function yy_r197(){
$this->_retvalue = new Code('(string)$_smarty_tpl->getValue(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')');
}
-// line 1387 "src/Parser/TemplateParser.y"
- public function yy_r198(){
+// line 1397 "src/Parser/TemplateParser.y"
+ public function yy_r200(){
$this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor);
}
-// line 1391 "src/Parser/TemplateParser.y"
- public function yy_r199(){
+// line 1401 "src/Parser/TemplateParser.y"
+ public function yy_r201(){
$this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor);
}
diff --git a/src/Parser/TemplateParser.y b/src/Parser/TemplateParser.y
index 544148f1..7ca4a252 100644
--- a/src/Parser/TemplateParser.y
+++ b/src/Parser/TemplateParser.y
@@ -1062,12 +1062,22 @@ object(res) ::= varindexed(vi) objectchain(oc). {
}
}
+ // optional objectchain - empty
+optobjectchain(res) ::= . {
+ res = '';
+}
+
+ // optional objectchain - present
+optobjectchain(res) ::= objectchain(oc). {
+ res = oc;
+}
+
// single element
objectchain(res) ::= objectelement(oe). {
res = oe;
}
- // chain of elements
+ // chain of elements
objectchain(res) ::= objectchain(oc) objectelement(oe). {
res = oc.oe;
}
@@ -1111,7 +1121,7 @@ objectelement(res)::= PTR method(f). {
//
// function
//
-function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. {
+function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP optobjectchain(oc). {
if (f == 'isset') {
res = '(true';
@@ -1125,15 +1135,15 @@ function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. {
res .= ' && (' . $value . ' !== null)';
}
}
- res .= ')';
+ res .= ')' . oc;
} elseif (f == 'empty') {
if (count(v) != 1) {
throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
}
if (is_array(v[0])) {
- res .= '( !' . v[0][0] . ' || empty(' . v[0][1] . '))';
+ res = '( !' . v[0][0] . ' || empty(' . v[0][1] . '))' . oc;
} else {
- res = 'false == ' . v[0];
+ res = 'false == ' . v[0] . oc;
}
} else {
$p = array();
@@ -1144,7 +1154,7 @@ function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. {
$p[] = $value;
}
}
- res = $this->compiler->compileModifierInExpression(f, $p);
+ res = $this->compiler->compileModifierInExpression(f, $p) . oc;
}
}
diff --git a/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/FunctionObjectChainTest.php b/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/FunctionObjectChainTest.php
new file mode 100644
index 00000000..c1e34bdd
--- /dev/null
+++ b/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/FunctionObjectChainTest.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * Smarty PHPunit tests for object chain functionality after function calls
+ * Tests the new feature: {$x = collect($data)->filter()->values()->toJson()}
+ *
+ * @author Smarty Vibe
+ */
+
+/**
+ * Helper class to simulate a chainable collection object
+ */
+class ChainableCollection
+{
+ private $data;
+
+ public function __construct($data)
+ {
+ $this->data = $data;
+ }
+
+ public function filter()
+ {
+ $this->data = array_filter($this->data);
+ return $this;
+ }
+
+ public function values()
+ {
+ $this->data = array_values($this->data);
+ return $this;
+ }
+
+ public function toJson()
+ {
+ return json_encode($this->data);
+ }
+
+ public function toArray()
+ {
+ return $this->data;
+ }
+
+ public function count()
+ {
+ return count($this->data);
+ }
+}
+
+/**
+ * Modifier plugin that returns a chainable object (simulates collect())
+ */
+function smarty_modifier_collect($data)
+{
+ return new ChainableCollection($data);
+}
+
+/**
+ * Modifier plugin that returns an object with methods
+ */
+function smarty_modifier_create_object($value = null)
+{
+ return new class {
+ public function getName() {
+ return 'TestObject';
+ }
+
+ public function getNext() {
+ return new class {
+ public function getValue() {
+ return 'ChainedValue';
+ }
+ };
+ }
+ };
+}
+
+/**
+ * class for function object chain tests
+ *
+ * @preserveGlobalState disabled
+ *
+ */
+class FunctionObjectChainTest extends PHPUnit_Smarty
+{
+ public function setUp(): void
+ {
+ $this->setUpSmarty(__DIR__);
+
+ // Register modifier plugins that return chainable objects
+ // These are called like functions: {collect($data)}
+ $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'collect', 'smarty_modifier_collect');
+ $this->smarty->registerPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, 'create_object', 'smarty_modifier_create_object');
+ }
+
+ public function testInit()
+ {
+ $this->cleanDirs();
+ }
+
+ /**
+ * Test the NEW feature: function call followed by method chain
+ * This is the core test for: {$x = collect($data)->filter()->values()->toJson()}
+ */
+ public function testFunctionCallWithMethodChain()
+ {
+ $data = [1, 2, 0, 3, null, 4, '', 5];
+ $this->smarty->assign('data', $data);
+
+ // Test the new syntax: function()->method()->method()->method()
+ $result = $this->smarty->fetch('string:{collect($data)->filter()->values()->toJson()}');
+ $this->assertEquals('[1,2,3,4,5]', $result);
+ }
+
+ /**
+ * Test function call with method chain assigned to a variable
+ * This tests: {$x = collect($data)->filter()->values()->toJson()}
+ */
+ public function testFunctionCallWithMethodChainAssignment()
+ {
+ $data = ['a', 'b', '', 'c', null, 'd'];
+ $this->smarty->assign('data', $data);
+
+ // Test assignment with chained methods
+ $result = $this->smarty->fetch('string:{$result = collect($data)->filter()->values()->toJson()}{$result}');
+ $this->assertEquals('["a","b","c","d"]', $result);
+ }
+
+ /**
+ * Test function call with single method chain
+ */
+ public function testFunctionCallWithSingleMethod()
+ {
+ $data = [1, 2, 3];
+ $this->smarty->assign('data', $data);
+
+ $result = $this->smarty->fetch('string:{collect($data)->count()}');
+ $this->assertEquals('3', $result);
+ }
+
+ /**
+ * Test function call with nested method chains
+ */
+ public function testFunctionCallWithNestedChain()
+ {
+ $result = $this->smarty->fetch('string:{create_object("")->getNext()->getValue()}');
+ $this->assertEquals('ChainedValue', $result);
+ }
+
+ /**
+ * Test that old syntax still works (two-step process)
+ */
+ public function testOldSyntaxStillWorks()
+ {
+ $data = [1, 2, 0, 3];
+ $this->smarty->assign('data', $data);
+
+ // Old syntax: assign to variable first, then chain
+ $result = $this->smarty->fetch('string:{$x = collect($data)}{$x->filter()->values()->toJson()}');
+ $this->assertEquals('[1,2,3]', $result);
+ }
+
+ /**
+ * Test object chain functionality using template file
+ */
+ public function testFunctionObjectChainFromTemplateFile()
+ {
+ $data = ['foo', '', 'bar', null, 'baz'];
+ $this->smarty->assign('data', $data);
+
+ $result = $this->smarty->fetch('test_function_chain.tpl');
+ // Expected: JSON of filtered array and count
+ $this->assertStringContainsString('["foo","bar","baz"]', $result);
+ $this->assertStringContainsString('3', $result);
+ }
+
+ /**
+ * Test complex chaining with multiple operations
+ * This demonstrates the power of the new feature
+ */
+ public function testComplexChaining()
+ {
+ $data = [1, 2, 0, 3, '', 4, null, 5, false, 6];
+ $this->smarty->assign('data', $data);
+
+ // Complex chain: collect -> filter -> values -> toArray
+ $result = $this->smarty->fetch('string:{$filtered = collect($data)->filter()->values()->toArray()}{$filtered|@json_encode}');
+ $this->assertEquals('[1,2,3,4,5,6]', $result);
+ }
+
+ /**
+ * Test that demonstrates the benefit: one line vs multiple lines
+ */
+ public function testNewSyntaxVsOldSyntax()
+ {
+ $data = [10, 20, 0, 30];
+ $this->smarty->assign('data', $data);
+
+ // NEW syntax (single line)
+ $new = $this->smarty->fetch('string:{collect($data)->filter()->count()}');
+
+ // OLD syntax (multiple steps)
+ $old = $this->smarty->fetch('string:{$temp = collect($data)}{$temp = $temp->filter()}{$temp->count()}');
+
+ // Both should produce the same result
+ $this->assertEquals('3', $new);
+ $this->assertEquals($new, $old);
+ }
+} \ No newline at end of file
diff --git a/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/templates/test_function_chain.tpl b/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/templates/test_function_chain.tpl
new file mode 100644
index 00000000..5d576834
--- /dev/null
+++ b/tests/UnitTests/TemplateSource/TagTests/FunctionObjectChain/templates/test_function_chain.tpl
@@ -0,0 +1,4 @@
+{* Test template for NEW function object chain feature *}
+{* Test: function()->method()->method()->method() *}
+{collect($data)->filter()->values()->toJson()}
+{collect($data)->filter()->count()} \ No newline at end of file