Completed
Branch master (e379bd)
by Pierre-Henry
33:06
created

Smarty_Internal_Templateparser::yy_r109()   B

Complexity

Conditions 5
Paths 3

Size

Total Lines 20
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 15
nc 3
nop 0
dl 0
loc 20
rs 8.8571
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A Smarty_Internal_Templateparser::yy_r102() 0 5 1
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 3 and the first side effect is on line 77.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
3
class TP_yyToken implements ArrayAccess
4
{
5
    public $string = '';
6
7
    public $metadata = array();
8
9
    public function __construct($s, $m = array())
10
    {
11
        if ($s instanceof TP_yyToken) {
12
            $this->string = $s->string;
13
            $this->metadata = $s->metadata;
14
        } else {
15
            $this->string = (string) $s;
16
            if ($m instanceof TP_yyToken) {
17
                $this->metadata = $m->metadata;
18
            } elseif (is_array($m)) {
19
                $this->metadata = $m;
20
            }
21
        }
22
    }
23
24
    public function __toString()
25
    {
26
        return $this->string;
27
    }
28
29
    public function offsetExists($offset)
30
    {
31
        return isset($this->metadata[ $offset ]);
32
    }
33
34
    public function offsetGet($offset)
35
    {
36
        return $this->metadata[ $offset ];
37
    }
38
39
    public function offsetSet($offset, $value)
40
    {
41
        if ($offset === null) {
42
            if (isset($value[ 0 ])) {
43
                $x = ($value instanceof TP_yyToken) ? $value->metadata : $value;
44
                $this->metadata = array_merge($this->metadata, $x);
45
46
                return;
47
            }
48
            $offset = count($this->metadata);
49
        }
50
        if ($value === null) {
51
            return;
52
        }
53
        if ($value instanceof TP_yyToken) {
54
            if ($value->metadata) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $value->metadata of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
55
                $this->metadata[ $offset ] = $value->metadata;
56
            }
57
        } elseif ($value) {
58
            $this->metadata[ $offset ] = $value;
59
        }
60
    }
61
62
    public function offsetUnset($offset)
63
    {
64
        unset($this->metadata[ $offset ]);
65
    }
66
}
67
68
class TP_yyStackEntry
69
{
70
    public $stateno;       /* The state-number */
71
    public $major;         /* The major token value.  This is the code
72
                     ** number for the token at this stack level */
73
    public $minor; /* The user-supplied minor token value.  This
74
                     ** is the value of the token  */
75
}
76
77
;
78
79
#line 11 "../smarty/lexer/smarty_internal_templateparser.y"
80
81
/**
82
 * Smarty Template Parser Class
83
 *
84
 * This is the template parser.
85
 * It is generated from the smarty_internal_templateparser.y file
86
 *
87
 * @author Uwe Tews <[email protected]>
88
 */
89
class Smarty_Internal_Templateparser
90
{
91
    #line 23 "../smarty/lexer/smarty_internal_templateparser.y"
92
93
    const Err1 = "Security error: Call to private object member not allowed";
94
95
    const Err2 = "Security error: Call to dynamic object member not allowed";
96
97
    const Err3 = "PHP in template not allowed. Use SmartyBC to enable it";
98
99
    /**
100
     * result status
101
     *
102
     * @var bool
103
     */
104
    public $successful = true;
105
106
    /**
107
     * return value
108
     *
109
     * @var mixed
110
     */
111
    public $retvalue = 0;
112
113
    /**
114
     * @var
115
     */
116
    public $yymajor;
117
118
    /**
119
     * last index of array variable
120
     *
121
     * @var mixed
122
     */
123
    public $last_index;
124
125
    /**
126
     * last variable name
127
     *
128
     * @var string
129
     */
130
    public $last_variable;
131
132
    /**
133
     * root parse tree buffer
134
     *
135
     * @var Smarty_Internal_ParseTree
136
     */
137
    public $root_buffer;
138
139
    /**
140
     * current parse tree object
141
     *
142
     * @var Smarty_Internal_ParseTree
143
     */
144
    public $current_buffer;
145
146
    /**
147
     * lexer object
148
     *
149
     * @var Smarty_Internal_Templatelexer
150
     */
151
    public $lex;
152
153
    /**
154
     * internal error flag
155
     *
156
     * @var bool
157
     */
158
    private $internalError = false;
159
160
    /**
161
     * {strip} status
162
     *
163
     * @var bool
164
     */
165
    public $strip = false;
166
167
    /**
168
     * compiler object
169
     *
170
     * @var Smarty_Internal_TemplateCompilerBase
171
     */
172
    public $compiler = null;
173
174
    /**
175
     * smarty object
176
     *
177
     * @var Smarty
178
     */
179
    public $smarty = null;
180
181
    /**
182
     * template object
183
     *
184
     * @var Smarty_Internal_Template
185
     */
186
    public $template = null;
187
188
    /**
189
     * block nesting level
190
     *
191
     * @var int
192
     */
193
    public $block_nesting_level = 0;
194
195
    /**
196
     * security object
197
     *
198
     * @var Smarty_Security
199
     */
200
    public $security = null;
201
202
    /**
203
     * template prefix array
204
     *
205
     * @var \Smarty_Internal_ParseTree[]
206
     */
207
    public $template_prefix = array();
208
209
    /**
210
     * security object
211
     *
212
     * @var \Smarty_Internal_ParseTree[]
213
     */
214
    public $template_postfix = array();
215
216
    /**
217
     * constructor
218
     *
219
     * @param Smarty_Internal_Templatelexer        $lex
220
     * @param Smarty_Internal_TemplateCompilerBase $compiler
221
     */
222
    function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
223
    {
224
        $this->lex = $lex;
225
        $this->compiler = $compiler;
226
        $this->template = $this->compiler->template;
227
        $this->smarty = $this->template->smarty;
228
        $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
0 ignored issues
show
Documentation Bug introduced by
It seems like isset($this->smarty->sec...security_policy : false can also be of type false. However, the property $security is declared as type object<Smarty_Security>. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
229
        $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
230
    }
231
232
    /**
233
     * insert PHP code in current buffer
234
     *
235
     * @param string $code
236
     */
237
    public function insertPhpCode($code)
238
    {
239
        $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Smarty_Internal_ParseTree as the method append_subtree() does only exist in the following sub-classes of Smarty_Internal_ParseTree: Smarty_Internal_ParseTree_Dq, Smarty_Internal_ParseTree_Template. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
240
    }
241
242
    /**
243
     *  merge PHP code with prefix code and return parse tree tag object
244
     *
245
     * @param string $code
246
     *
247
     * @return Smarty_Internal_ParseTree_Tag
248
     */
249
    public function mergePrefixCode($code)
250
    {
251
        $tmp = '';
252
        foreach ($this->compiler->prefix_code as $preCode) {
253
            $tmp .= $preCode;
254
        }
255
        $this->compiler->prefix_code = array();
256
        $tmp .= $code;
257
        return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
258
    }
259
260
    const TP_VERT = 1;
261
262
    const TP_COLON = 2;
263
264
    const TP_PHP = 3;
265
266
    const TP_TEXT = 4;
267
268
    const TP_STRIPON = 5;
269
270
    const TP_STRIPOFF = 6;
271
272
    const TP_LITERALSTART = 7;
273
274
    const TP_LITERALEND = 8;
275
276
    const TP_LITERAL = 9;
277
278
    const TP_RDEL = 10;
279
280
    const TP_SIMPELOUTPUT = 11;
281
282
    const TP_LDEL = 12;
283
284
    const TP_DOLLARID = 13;
285
286
    const TP_EQUAL = 14;
287
288
    const TP_SIMPLETAG = 15;
289
290
    const TP_ID = 16;
291
292
    const TP_PTR = 17;
293
294
    const TP_LDELMAKENOCACHE = 18;
295
296
    const TP_LDELIF = 19;
297
298
    const TP_LDELFOR = 20;
299
300
    const TP_SEMICOLON = 21;
301
302
    const TP_INCDEC = 22;
303
304
    const TP_TO = 23;
305
306
    const TP_STEP = 24;
307
308
    const TP_LDELFOREACH = 25;
309
310
    const TP_SPACE = 26;
311
312
    const TP_AS = 27;
313
314
    const TP_APTR = 28;
315
316
    const TP_LDELSETFILTER = 29;
317
318
    const TP_SMARTYBLOCKCHILDPARENT = 30;
319
320
    const TP_CLOSETAG = 31;
321
322
    const TP_LDELSLASH = 32;
323
324
    const TP_ATTR = 33;
325
326
    const TP_INTEGER = 34;
327
328
    const TP_COMMA = 35;
329
330
    const TP_OPENP = 36;
331
332
    const TP_CLOSEP = 37;
333
334
    const TP_MATH = 38;
335
336
    const TP_UNIMATH = 39;
337
338
    const TP_ISIN = 40;
339
340
    const TP_QMARK = 41;
341
342
    const TP_NOT = 42;
343
344
    const TP_TYPECAST = 43;
345
346
    const TP_HEX = 44;
347
348
    const TP_DOT = 45;
349
350
    const TP_INSTANCEOF = 46;
351
352
    const TP_SINGLEQUOTESTRING = 47;
353
354
    const TP_DOUBLECOLON = 48;
355
356
    const TP_NAMESPACE = 49;
357
358
    const TP_AT = 50;
359
360
    const TP_HATCH = 51;
361
362
    const TP_OPENB = 52;
363
364
    const TP_CLOSEB = 53;
365
366
    const TP_DOLLAR = 54;
367
368
    const TP_LOGOP = 55;
369
370
    const TP_SLOGOP = 56;
371
372
    const TP_TLOGOP = 57;
373
374
    const TP_SINGLECOND = 58;
375
376
    const TP_QUOTE = 59;
377
378
    const TP_BACKTICK = 60;
379
380
    const YY_NO_ACTION = 532;
381
382
    const YY_ACCEPT_ACTION = 531;
383
384
    const YY_ERROR_ACTION = 530;
385
386
    const YY_SZ_ACTTAB = 2114;
387
388
    static public $yy_action = array(268, 8, 132, 210, 245, 197, 183, 228, 7, 84, 176, 264, 275, 302, 112, 44, 36, 278,
389
                                     233, 136, 305, 221, 281, 203, 237, 26, 234, 202, 41, 104, 189, 39, 42, 256, 213,
390
                                     216, 224, 78, 207, 129, 82, 1, 316, 297, 102, 268, 8, 133, 79, 245, 80, 302, 228,
391
                                     7, 84, 330, 299, 82, 272, 112, 297, 273, 325, 233, 285, 305, 221, 214, 231, 34, 26,
392
                                     3, 101, 41, 230, 78, 39, 42, 256, 213, 35, 239, 314, 207, 300, 82, 1, 13, 297, 333,
393
                                     268, 8, 135, 79, 245, 201, 302, 228, 7, 84, 35, 85, 322, 109, 112, 29, 196, 13,
394
                                     233, 269, 305, 221, 237, 231, 249, 26, 136, 104, 41, 219, 78, 39, 42, 256, 213,
395
                                     459, 239, 267, 207, 355, 82, 1, 459, 297, 446, 268, 8, 135, 79, 245, 193, 302, 228,
396
                                     7, 84, 35, 446, 297, 28, 112, 247, 263, 13, 233, 82, 305, 221, 297, 231, 309, 26,
397
                                     185, 292, 41, 298, 78, 39, 42, 256, 213, 27, 239, 237, 207, 232, 82, 1, 104, 297,
398
                                     459, 268, 8, 135, 79, 245, 195, 459, 228, 7, 84, 446, 297, 283, 11, 112, 25, 188,
399
                                     282, 233, 236, 305, 221, 446, 204, 294, 26, 32, 318, 41, 90, 210, 39, 42, 256, 213,
400
                                     174, 239, 137, 207, 402, 82, 1, 210, 297, 9, 268, 8, 136, 79, 245, 201, 223, 228,
401
                                     7, 84, 402, 142, 235, 225, 112, 22, 227, 402, 233, 166, 305, 221, 35, 231, 27, 33,
402
                                     210, 101, 41, 13, 210, 39, 42, 256, 213, 361, 239, 302, 207, 399, 82, 1, 210, 297,
403
                                     101, 268, 8, 135, 79, 245, 201, 402, 228, 7, 84, 399, 235, 297, 109, 112, 447, 78,
404
                                     399, 233, 319, 305, 221, 402, 194, 172, 26, 279, 447, 41, 402, 307, 39, 42, 256,
405
                                     213, 182, 239, 16, 207, 296, 82, 1, 210, 297, 101, 268, 8, 131, 79, 245, 201, 357,
406
                                     228, 7, 84, 283, 11, 475, 475, 112, 282, 303, 475, 233, 24, 305, 221, 35, 231, 175,
407
                                     4, 279, 271, 41, 13, 109, 39, 42, 256, 213, 181, 239, 178, 207, 12, 82, 1, 16, 297,
408
                                     274, 268, 8, 135, 79, 245, 200, 475, 228, 7, 84, 475, 475, 283, 11, 112, 475, 189,
409
                                     282, 233, 210, 305, 221, 20, 231, 38, 26, 179, 292, 41, 148, 446, 39, 42, 256, 213,
410
                                     229, 239, 180, 207, 332, 82, 1, 446, 297, 190, 268, 8, 134, 79, 245, 201, 215, 228,
411
                                     7, 84, 168, 16, 188, 243, 112, 104, 189, 303, 233, 140, 305, 221, 325, 231, 255,
412
                                     26, 177, 214, 41, 218, 312, 39, 42, 256, 213, 277, 239, 128, 207, 101, 82, 1, 92,
413
                                     297, 2, 268, 8, 136, 79, 245, 201, 23, 228, 7, 84, 210, 108, 251, 184, 112, 297,
414
                                     304, 289, 233, 367, 305, 221, 137, 231, 315, 33, 220, 5, 41, 9, 5, 39, 42, 256,
415
                                     213, 35, 239, 189, 207, 113, 82, 311, 13, 297, 106, 446, 214, 212, 79, 116, 72,
416
                                     114, 258, 260, 261, 222, 102, 446, 214, 257, 280, 187, 308, 334, 270, 206, 242,
417
                                     152, 299, 210, 128, 83, 262, 250, 252, 253, 176, 332, 211, 329, 268, 8, 151, 143,
418
                                     245, 189, 178, 228, 7, 84, 210, 265, 332, 332, 112, 188, 21, 311, 233, 153, 305,
419
                                     221, 214, 212, 17, 122, 67, 114, 164, 141, 189, 13, 102, 149, 266, 257, 280, 183,
420
                                     332, 332, 270, 206, 242, 332, 299, 295, 44, 36, 278, 235, 311, 208, 279, 145, 169,
421
                                     214, 212, 91, 122, 67, 114, 189, 320, 332, 167, 102, 146, 139, 257, 280, 94, 171,
422
                                     159, 270, 206, 242, 332, 299, 210, 38, 311, 189, 332, 155, 209, 214, 212, 317, 122,
423
                                     53, 107, 123, 232, 332, 189, 102, 291, 400, 257, 280, 6, 217, 276, 270, 206, 242,
424
                                     311, 299, 297, 158, 313, 214, 212, 400, 122, 49, 107, 154, 117, 332, 400, 102, 30,
425
                                     446, 257, 280, 248, 332, 173, 270, 206, 242, 279, 299, 324, 446, 186, 292, 332, 95,
426
                                     279, 268, 10, 326, 170, 245, 88, 87, 228, 7, 84, 279, 138, 89, 279, 112, 86, 309,
427
                                     311, 233, 115, 305, 221, 214, 212, 254, 122, 67, 114, 105, 303, 163, 165, 102, 303,
428
                                     93, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 303, 303, 303, 286, 19, 311,
429
                                     205, 303, 303, 303, 214, 212, 303, 116, 72, 114, 303, 43, 40, 37, 102, 303, 303,
430
                                     257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 324, 327, 323, 288, 287, 303,
431
                                     303, 268, 10, 326, 331, 245, 303, 303, 228, 7, 84, 303, 303, 303, 303, 112, 303,
432
                                     303, 311, 233, 303, 305, 221, 214, 212, 303, 122, 70, 114, 303, 303, 303, 303, 102,
433
                                     303, 303, 257, 280, 303, 283, 11, 270, 206, 242, 282, 299, 303, 311, 303, 290, 19,
434
                                     303, 214, 212, 35, 122, 54, 114, 303, 303, 303, 13, 102, 162, 303, 257, 280, 183,
435
                                     303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 212, 303, 122, 68,
436
                                     114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242,
437
                                     303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 100, 73, 114, 303, 303, 303, 303,
438
                                     102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303,
439
                                     303, 303, 214, 212, 303, 122, 77, 114, 303, 303, 303, 303, 102, 147, 303, 257, 280,
440
                                     183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 212, 303, 122,
441
                                     76, 114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242,
442
                                     303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 99, 71, 114, 303, 303, 303, 303,
443
                                     102, 161, 303, 257, 280, 183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278,
444
                                     303, 214, 212, 303, 122, 47, 114, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303,
445
                                     303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 59,
446
                                     114, 303, 303, 303, 303, 102, 150, 303, 257, 280, 183, 303, 303, 270, 206, 242,
447
                                     332, 299, 311, 44, 36, 278, 303, 214, 198, 303, 118, 55, 114, 303, 303, 303, 303,
448
                                     102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303,
449
                                     303, 303, 214, 212, 303, 122, 69, 114, 303, 303, 303, 303, 102, 160, 303, 257, 280,
450
                                     183, 303, 303, 270, 206, 242, 332, 299, 311, 44, 36, 278, 303, 214, 97, 303, 81,
451
                                     48, 103, 303, 303, 303, 303, 102, 189, 303, 257, 280, 303, 303, 303, 270, 206, 242,
452
                                     303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 57, 114, 303, 303, 303, 303,
453
                                     102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303,
454
                                     303, 303, 214, 212, 303, 122, 65, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280,
455
                                     303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 96, 303, 81,
456
                                     46, 103, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242,
457
                                     303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 111, 50, 114, 303, 303, 303, 303,
458
                                     102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303,
459
                                     303, 303, 214, 212, 303, 98, 61, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280,
460
                                     303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 199, 303,
461
                                     122, 56, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206,
462
                                     242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 51, 114, 303, 303, 303,
463
                                     303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303,
464
                                     303, 303, 303, 214, 212, 303, 122, 58, 114, 303, 303, 303, 303, 102, 303, 303, 257,
465
                                     280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212,
466
                                     303, 122, 74, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270,
467
                                     206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 62, 114, 303, 303,
468
                                     303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311,
469
                                     303, 303, 303, 303, 214, 212, 303, 122, 60, 114, 303, 303, 303, 303, 102, 303, 303,
470
                                     257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214,
471
                                     212, 303, 122, 45, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303,
472
                                     270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 64, 114, 303,
473
                                     303, 303, 303, 102, 303, 303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299,
474
                                     311, 303, 303, 303, 303, 214, 212, 303, 122, 75, 114, 303, 303, 303, 303, 102, 303,
475
                                     303, 257, 280, 303, 303, 303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303,
476
                                     214, 212, 303, 122, 63, 114, 303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 303,
477
                                     303, 270, 206, 242, 303, 299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 66, 114,
478
                                     303, 303, 303, 303, 102, 303, 303, 257, 280, 303, 412, 412, 270, 206, 242, 303,
479
                                     299, 311, 303, 303, 303, 303, 214, 212, 303, 122, 53, 114, 303, 303, 303, 303, 102,
480
                                     303, 303, 257, 280, 210, 303, 303, 270, 206, 242, 303, 299, 446, 301, 412, 412,
481
                                     412, 303, 531, 52, 259, 260, 261, 222, 446, 303, 214, 303, 303, 35, 303, 412, 412,
482
                                     412, 412, 303, 13, 303, 303, 303, 303, 43, 40, 37, 210, 303, 303, 311, 303, 303,
483
                                     303, 303, 214, 212, 210, 130, 303, 114, 327, 323, 288, 287, 102, 303, 303, 303,
484
                                     241, 31, 303, 35, 270, 206, 242, 303, 299, 303, 13, 303, 303, 35, 303, 43, 40, 37,
485
                                     303, 303, 13, 303, 303, 303, 303, 43, 40, 37, 303, 303, 303, 311, 327, 323, 288,
486
                                     287, 214, 212, 210, 124, 303, 114, 327, 323, 288, 287, 102, 192, 303, 303, 310,
487
                                     303, 303, 303, 270, 206, 242, 311, 299, 226, 303, 303, 214, 212, 303, 120, 303,
488
                                     114, 475, 475, 303, 28, 102, 475, 459, 43, 40, 37, 303, 303, 270, 206, 242, 303,
489
                                     299, 303, 303, 303, 303, 303, 303, 311, 327, 323, 288, 287, 214, 212, 303, 126,
490
                                     303, 114, 459, 303, 303, 459, 102, 475, 303, 459, 226, 303, 303, 303, 270, 206,
491
                                     242, 303, 299, 475, 475, 226, 18, 303, 475, 459, 303, 303, 303, 303, 475, 475, 303,
492
                                     303, 226, 475, 459, 283, 11, 303, 303, 303, 282, 475, 475, 303, 303, 303, 475, 459,
493
                                     303, 303, 35, 459, 144, 303, 459, 303, 475, 13, 459, 303, 303, 303, 459, 303, 303,
494
                                     459, 311, 475, 303, 459, 321, 214, 212, 303, 119, 459, 114, 303, 459, 303, 475,
495
                                     102, 459, 303, 303, 303, 303, 303, 303, 270, 206, 242, 303, 299, 311, 210, 14, 303,
496
                                     303, 214, 212, 303, 127, 303, 114, 303, 284, 303, 303, 102, 129, 303, 303, 303,
497
                                     303, 102, 303, 270, 206, 242, 311, 299, 210, 303, 293, 214, 212, 299, 121, 303,
498
                                     114, 311, 43, 40, 37, 102, 214, 212, 303, 125, 303, 114, 303, 270, 206, 242, 102,
499
                                     299, 156, 327, 323, 288, 287, 210, 270, 206, 242, 210, 299, 43, 40, 37, 210, 303,
500
                                     303, 303, 244, 303, 303, 303, 303, 303, 303, 110, 303, 303, 327, 323, 288, 287,
501
                                     303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 43, 40, 37, 210, 43, 40, 37, 210,
502
                                     303, 43, 40, 37, 240, 210, 303, 303, 191, 327, 323, 288, 287, 327, 323, 288, 287,
503
                                     303, 327, 323, 288, 287, 303, 306, 303, 303, 303, 303, 303, 303, 303, 303, 43, 40,
504
                                     37, 303, 43, 40, 37, 210, 303, 238, 43, 40, 37, 303, 303, 303, 303, 327, 323, 288,
505
                                     287, 327, 323, 288, 287, 15, 303, 327, 323, 288, 287, 303, 303, 303, 475, 475, 303,
506
                                     303, 303, 475, 459, 210, 303, 246, 43, 40, 37, 210, 303, 303, 303, 303, 303, 475,
507
                                     475, 283, 11, 303, 475, 459, 282, 327, 323, 288, 287, 303, 303, 303, 459, 303, 35,
508
                                     459, 157, 475, 303, 459, 303, 13, 43, 40, 37, 303, 303, 303, 43, 40, 37, 459, 303,
509
                                     303, 459, 303, 475, 328, 459, 327, 323, 288, 287, 303, 303, 327, 323, 288, 287,
510
                                     303, 406, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 406, 303, 406, 303,
511
                                     303, 406, 303, 303, 303, 303, 303, 303, 406, 303, 406, 303, 406, 303, 303, 303,
512
                                     303, 303, 303, 303, 235,);
513
514
    static public $yy_lookahead = array(11, 12, 13, 1, 15, 16, 76, 18, 19, 20, 7, 8, 9, 22, 25, 85, 86, 87, 29, 13, 31,
515
                                        32, 16, 34, 75, 36, 77, 78, 39, 80, 100, 42, 43, 44, 45, 71, 47, 46, 49, 75, 51,
516
                                        52, 53, 54, 80, 11, 12, 13, 59, 15, 16, 22, 18, 19, 20, 49, 92, 51, 66, 25, 54,
517
                                        69, 65, 29, 30, 31, 32, 70, 34, 14, 36, 35, 17, 39, 16, 46, 42, 43, 44, 45, 26,
518
                                        47, 53, 49, 10, 51, 52, 33, 54, 53, 11, 12, 13, 59, 15, 16, 22, 18, 19, 20, 26,
519
                                        104, 105, 48, 25, 12, 13, 33, 29, 16, 31, 32, 75, 34, 77, 36, 13, 80, 39, 16,
520
                                        46, 42, 43, 44, 45, 45, 47, 34, 49, 10, 51, 52, 52, 54, 36, 11, 12, 13, 59, 15,
521
                                        16, 22, 18, 19, 20, 26, 48, 54, 14, 25, 13, 34, 33, 29, 51, 31, 32, 54, 34, 94,
522
                                        36, 96, 97, 39, 97, 46, 42, 43, 44, 45, 14, 47, 75, 49, 77, 51, 52, 80, 54, 45,
523
                                        11, 12, 13, 59, 15, 16, 52, 18, 19, 20, 36, 54, 11, 12, 25, 21, 100, 16, 29, 45,
524
                                        31, 32, 48, 34, 16, 36, 14, 53, 39, 35, 1, 42, 43, 44, 45, 93, 47, 45, 49, 10,
525
                                        51, 52, 1, 54, 52, 11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 26, 27, 45, 50, 25,
526
                                        12, 13, 33, 29, 16, 31, 32, 26, 34, 14, 36, 1, 17, 39, 33, 1, 42, 43, 44, 45,
527
                                        10, 47, 22, 49, 10, 51, 52, 1, 54, 17, 11, 12, 13, 59, 15, 16, 10, 18, 19, 20,
528
                                        26, 45, 54, 48, 25, 36, 46, 33, 29, 53, 31, 32, 26, 34, 93, 36, 95, 48, 39, 33,
529
                                        60, 42, 43, 44, 45, 81, 47, 35, 49, 37, 51, 52, 1, 54, 17, 11, 12, 13, 59, 15,
530
                                        16, 10, 18, 19, 20, 11, 12, 11, 12, 25, 16, 101, 16, 29, 14, 31, 32, 26, 34, 93,
531
                                        36, 95, 22, 39, 33, 48, 42, 43, 44, 45, 81, 47, 76, 49, 41, 51, 52, 35, 54, 37,
532
                                        11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 11, 12, 11, 12, 25, 16, 100, 16, 29, 1,
533
                                        31, 32, 28, 34, 2, 36, 96, 97, 39, 72, 36, 42, 43, 44, 45, 17, 47, 76, 49, 82,
534
                                        51, 52, 48, 54, 16, 11, 12, 13, 59, 15, 16, 50, 18, 19, 20, 75, 35, 100, 37, 25,
535
                                        80, 100, 101, 29, 13, 31, 32, 65, 34, 37, 36, 13, 70, 39, 16, 91, 42, 43, 44,
536
                                        45, 16, 47, 98, 49, 17, 51, 52, 36, 54, 36, 11, 12, 13, 59, 15, 16, 12, 18, 19,
537
                                        20, 1, 48, 4, 76, 25, 54, 16, 105, 29, 10, 31, 32, 45, 34, 53, 36, 17, 36, 39,
538
                                        52, 36, 42, 43, 44, 45, 26, 47, 100, 49, 16, 51, 65, 33, 54, 80, 36, 70, 71, 59,
539
                                        73, 74, 75, 64, 65, 66, 67, 80, 48, 70, 83, 84, 76, 98, 91, 88, 89, 90, 72, 92,
540
                                        1, 98, 16, 3, 4, 5, 6, 7, 82, 102, 103, 11, 12, 72, 72, 15, 100, 76, 18, 19, 20,
541
                                        1, 16, 82, 82, 25, 100, 28, 65, 29, 51, 31, 32, 70, 71, 26, 73, 74, 75, 72, 72,
542
                                        100, 33, 80, 72, 10, 83, 84, 76, 82, 82, 88, 89, 90, 82, 92, 16, 85, 86, 87, 45,
543
                                        65, 99, 95, 72, 51, 70, 71, 76, 73, 74, 75, 100, 53, 82, 93, 80, 72, 13, 83, 84,
544
                                        76, 93, 72, 88, 89, 90, 82, 92, 1, 2, 65, 100, 82, 72, 99, 70, 71, 53, 73, 74,
545
                                        75, 16, 77, 82, 100, 80, 16, 10, 83, 84, 36, 14, 34, 88, 89, 90, 65, 92, 54, 72,
546
                                        13, 70, 71, 26, 73, 74, 75, 72, 77, 82, 33, 80, 23, 36, 83, 84, 82, 82, 72, 88,
547
                                        89, 90, 95, 92, 4, 48, 96, 97, 82, 81, 95, 11, 12, 13, 93, 15, 80, 80, 18, 19,
548
                                        20, 95, 80, 80, 95, 25, 80, 94, 65, 29, 79, 31, 32, 70, 71, 8, 73, 74, 75, 68,
549
                                        106, 93, 93, 80, 106, 93, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 106, 106,
550
                                        106, 59, 60, 65, 99, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 38, 39, 40,
551
                                        80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 4, 55, 56, 57, 58,
552
                                        106, 106, 11, 12, 13, 103, 15, 106, 106, 18, 19, 20, 106, 106, 106, 106, 25,
553
                                        106, 106, 65, 29, 106, 31, 32, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80,
554
                                        106, 106, 83, 84, 106, 11, 12, 88, 89, 90, 16, 92, 106, 65, 106, 59, 60, 106,
555
                                        70, 71, 26, 73, 74, 75, 106, 106, 106, 33, 80, 72, 106, 83, 84, 76, 106, 106,
556
                                        88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106,
557
                                        106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106,
558
                                        106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84,
559
                                        106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74,
560
                                        75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106, 88, 89, 90, 82, 92,
561
                                        65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 100, 106,
562
                                        83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106,
563
                                        73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106, 88, 89, 90,
564
                                        82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80,
565
                                        100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106,
566
                                        70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76, 106, 106,
567
                                        88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106,
568
                                        106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106,
569
                                        106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 72, 106, 83, 84, 76,
570
                                        106, 106, 88, 89, 90, 82, 92, 65, 85, 86, 87, 106, 70, 71, 106, 73, 74, 75, 106,
571
                                        106, 106, 106, 80, 100, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65,
572
                                        106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106,
573
                                        83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106,
574
                                        73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90,
575
                                        106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106,
576
                                        80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106,
577
                                        106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106,
578
                                        106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75,
579
                                        106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92,
580
                                        65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106,
581
                                        106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71,
582
                                        106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88,
583
                                        89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106,
584
                                        106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106,
585
                                        106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84,
586
                                        106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74,
587
                                        75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106,
588
                                        92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80,
589
                                        106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106,
590
                                        70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106,
591
                                        106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106,
592
                                        106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65,
593
                                        106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106,
594
                                        83, 84, 106, 106, 106, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106, 70, 71, 106,
595
                                        73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 106, 106, 106, 88, 89, 90,
596
                                        106, 92, 65, 106, 106, 106, 106, 70, 71, 106, 73, 74, 75, 106, 106, 106, 106,
597
                                        80, 106, 106, 83, 84, 106, 1, 2, 88, 89, 90, 106, 92, 65, 106, 106, 106, 106,
598
                                        70, 71, 106, 73, 74, 75, 106, 106, 106, 106, 80, 106, 106, 83, 84, 1, 106, 106,
599
                                        88, 89, 90, 106, 92, 36, 10, 38, 39, 40, 106, 62, 63, 64, 65, 66, 67, 48, 106,
600
                                        70, 106, 106, 26, 106, 55, 56, 57, 58, 106, 33, 106, 106, 106, 106, 38, 39, 40,
601
                                        1, 106, 106, 65, 106, 106, 106, 106, 70, 71, 1, 73, 106, 75, 55, 56, 57, 58, 80,
602
                                        106, 106, 106, 84, 24, 106, 26, 88, 89, 90, 106, 92, 106, 33, 106, 106, 26, 106,
603
                                        38, 39, 40, 106, 106, 33, 106, 106, 106, 106, 38, 39, 40, 106, 106, 106, 65, 55,
604
                                        56, 57, 58, 70, 71, 1, 73, 106, 75, 55, 56, 57, 58, 80, 10, 106, 106, 84, 106,
605
                                        106, 106, 88, 89, 90, 65, 92, 2, 106, 106, 70, 71, 106, 73, 106, 75, 11, 12,
606
                                        106, 14, 80, 16, 17, 38, 39, 40, 106, 106, 88, 89, 90, 106, 92, 106, 106, 106,
607
                                        106, 106, 106, 65, 55, 56, 57, 58, 70, 71, 106, 73, 106, 75, 45, 106, 106, 48,
608
                                        80, 50, 106, 52, 2, 106, 106, 106, 88, 89, 90, 106, 92, 11, 12, 2, 14, 106, 16,
609
                                        17, 106, 106, 106, 106, 11, 12, 106, 106, 2, 16, 17, 11, 12, 106, 106, 106, 16,
610
                                        11, 12, 106, 106, 106, 16, 17, 106, 106, 26, 45, 28, 106, 48, 106, 50, 33, 52,
611
                                        106, 106, 106, 45, 106, 106, 48, 65, 50, 106, 52, 53, 70, 71, 106, 73, 45, 75,
612
                                        106, 48, 106, 50, 80, 52, 106, 106, 106, 106, 106, 106, 88, 89, 90, 106, 92, 65,
613
                                        1, 2, 106, 106, 70, 71, 106, 73, 106, 75, 106, 71, 106, 106, 80, 75, 106, 106,
614
                                        106, 106, 80, 106, 88, 89, 90, 65, 92, 1, 106, 89, 70, 71, 92, 73, 106, 75, 65,
615
                                        38, 39, 40, 80, 70, 71, 106, 73, 106, 75, 106, 88, 89, 90, 80, 92, 27, 55, 56,
616
                                        57, 58, 1, 88, 89, 90, 1, 92, 38, 39, 40, 1, 106, 106, 106, 10, 106, 106, 106,
617
                                        106, 106, 106, 21, 106, 106, 55, 56, 57, 58, 106, 106, 106, 106, 106, 106, 106,
618
                                        106, 106, 106, 38, 39, 40, 1, 38, 39, 40, 1, 106, 38, 39, 40, 10, 1, 106, 106,
619
                                        10, 55, 56, 57, 58, 55, 56, 57, 58, 106, 55, 56, 57, 58, 106, 60, 106, 106, 106,
620
                                        106, 106, 106, 106, 106, 38, 39, 40, 106, 38, 39, 40, 1, 106, 37, 38, 39, 40,
621
                                        106, 106, 106, 106, 55, 56, 57, 58, 55, 56, 57, 58, 2, 106, 55, 56, 57, 58, 106,
622
                                        106, 106, 11, 12, 106, 106, 106, 16, 17, 1, 106, 37, 38, 39, 40, 1, 106, 106,
623
                                        106, 106, 106, 11, 12, 11, 12, 106, 16, 17, 16, 55, 56, 57, 58, 106, 106, 106,
624
                                        45, 106, 26, 48, 28, 50, 106, 52, 106, 33, 38, 39, 40, 106, 106, 106, 38, 39,
625
                                        40, 45, 106, 106, 48, 106, 50, 53, 52, 55, 56, 57, 58, 106, 106, 55, 56, 57, 58,
626
                                        106, 10, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21, 106, 23, 106,
627
                                        106, 26, 106, 106, 106, 106, 106, 106, 33, 106, 35, 106, 37, 106, 106, 106, 106,
628
                                        106, 106, 106, 45,);
629
630
    const YY_SHIFT_USE_DFLT = - 12;
631
632
    const YY_SHIFT_MAX = 238;
633
634
    static public $yy_shift_ofst = array(519, 349, 79, 349, 304, 79, 79, 304, 34, - 11, 34, 79, 394, 79, 79, 124, 79,
635
                                         169, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 259, 79, 79, 79, 79, 79, 79, 169,
636
                                         79, 214, 214, 439, 439, 439, 439, 439, 439, 1617, 1577, 1627, 1627, 1627, 1627,
637
                                         1627, 519, 1944, 1978, 2012, 1903, 1938, 1677, 1836, 1934, 1863, 1898, 1894,
638
                                         2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 695,
639
                                         695, 6, 660, 459, 311, 103, 221, 411, 745, 1766, 2016, 783, 783, 411, 221, 411,
640
                                         427, 221, 607, 74, 119, 209, 266, 254, 228, 181, 55, 314, 3, 314, 235, 418,
641
                                         418, 584, 250, 528, 378, 297, 54, 518, 54, 539, 2, 2, 2, 2, 2, 2, 2, 2, 2, 252,
642
                                         252, - 12, 1697, 1759, 1748, 1995, 1772, 2014, 93, 361, 359, 134, 54, 137, 54,
643
                                         137, 54, 54, 54, 54, 54, 54, 54, 54, 80, 54, 54, 137, 137, 54, 54, 54, 54, 54,
644
                                         172, 54, 172, 444, 172, 320, 80, 172, 172, 172, 54, 172, 172, 687, 594, 2, 252,
645
                                         2, 382, 382, 2, 2, 252, 252, 2, - 12, - 12, - 12, - 12, - 12, 1550, 2068, 617,
646
                                         316, 154, 29, 240, 354, 98, 174, 236, 192, 272, 413, 249, 322, 381, 188, 36,
647
                                         - 9, 598, 554, 424, 533, 525, 441, 498, 505, 473, 458, 450, 421, 559, 610, 594,
648
                                         627, 605, 564, 534, 392, 388, 629, 117, 58, 156, 313,);
649
650
    const YY_REDUCE_USE_DFLT = - 71;
651
652
    const YY_REDUCE_MAX = 192;
653
654
    static public $yy_reduce_ofst = array(1530, 426, 482, 656, 545, 515, 623, 571, 1017, 961, 1101, 1325, 933, 793, 849,
655
                                          821, 1465, 1157, 1129, 1185, 1073, 989, 1045, 1241, 1381, 1437, 1493, 1409,
656
                                          1269, 1297, 1353, 1213, 708, 737, 905, 877, 765, 1606, 1556, 1632, 1808, 1797,
657
                                          1771, 1666, 1743, 886, 491, 830, 491, 746, 942, 998, 438, - 70, - 70, - 70,
658
                                          - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70,
659
                                          - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, - 70, 1777, - 3, 524, 460,
660
                                          - 36, 511, - 51, 362, 487, 575, 567, 586, 37, 445, 97, 65, 317, 321, 541, 541,
661
                                          276, 276, 276, 414, 246, 290, 246, - 8, 201, 290, 344, 422, 340, 276, 461,
662
                                          387, 290, 486, 276, 530, 276, 276, 276, 276, 276, 435, 276, 276, 276, 276,
663
                                          570, 290, 276, 122, 122, 122, 122, 122, 122, 602, 589, 122, 122, 574, 606,
664
                                          574, 603, 574, 574, 574, 574, 574, 574, 574, 574, 581, 574, 574, 597, 596,
665
                                          574, 574, 574, 574, 574, 593, 574, 593, 609, 593, 611, 608, 593, 593, 593,
666
                                          574, 593, 593, 631, 612, 96, 67, 96, 230, 230, 96, 96, 67, 67, 96, 269, 224,
667
                                          588, 508, 501,);
668
669
    static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 11, 12, 15, 18, 19, 20, 25, 29, 31, 32,),
670
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
671
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
672
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
673
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
674
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
675
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
676
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
677
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
678
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
679
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
680
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
681
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
682
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
683
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
684
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 42,
685
                                                  43, 44, 45, 47, 49, 51, 52, 54, 59,),
686
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
687
                                                  44, 45, 47, 49, 51, 52, 53, 54, 59,),
688
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 42,
689
                                                  43, 44, 45, 47, 49, 51, 52, 54, 59,),
690
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
691
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
692
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
693
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
694
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
695
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
696
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
697
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
698
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
699
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
700
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
701
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
702
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
703
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
704
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
705
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
706
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
707
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
708
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
709
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
710
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
711
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
712
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
713
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
714
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
715
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
716
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
717
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
718
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
719
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
720
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
721
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
722
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
723
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
724
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
725
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
726
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
727
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
728
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
729
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
730
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
731
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
732
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
733
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
734
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
735
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
736
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
737
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
738
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
739
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
740
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
741
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
742
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
743
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
744
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
745
                                                  44, 45, 47, 49, 51, 52, 54, 59,),
746
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
747
                                                  44, 45, 47, 49, 51, 54, 59,),
748
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
749
                                                  44, 45, 47, 49, 51, 54, 59,),
750
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
751
                                                  44, 45, 47, 49, 51, 54, 59,),
752
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
753
                                                  44, 45, 47, 49, 51, 54, 59,),
754
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
755
                                                  44, 45, 47, 49, 51, 54, 59,),
756
                                            array(11, 12, 13, 15, 16, 18, 19, 20, 25, 29, 31, 32, 34, 36, 39, 42, 43,
757
                                                  44, 45, 47, 49, 51, 54, 59,),
758
                                            array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
759
                                            array(1, 10, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
760
                                            array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
761
                                            array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
762
                                            array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
763
                                            array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
764
                                            array(1, 26, 33, 38, 39, 40, 55, 56, 57, 58,),
765
                                            array(3, 4, 5, 6, 7, 11, 12, 15, 18, 19, 20, 25, 29, 31, 32,),
766
                                            array(1, 37, 38, 39, 40, 55, 56, 57, 58,),
767
                                            array(1, 37, 38, 39, 40, 55, 56, 57, 58,),
768
                                            array(1, 38, 39, 40, 53, 55, 56, 57, 58,),
769
                                            array(1, 38, 39, 40, 55, 56, 57, 58, 60,),
770
                                            array(1, 10, 38, 39, 40, 55, 56, 57, 58,),
771
                                            array(1, 10, 38, 39, 40, 55, 56, 57, 58,),
772
                                            array(1, 2, 38, 39, 40, 55, 56, 57, 58,),
773
                                            array(1, 10, 38, 39, 40, 55, 56, 57, 58,),
774
                                            array(1, 27, 38, 39, 40, 55, 56, 57, 58,),
775
                                            array(1, 10, 38, 39, 40, 55, 56, 57, 58,),
776
                                            array(1, 21, 38, 39, 40, 55, 56, 57, 58,),
777
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
778
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
779
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
780
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
781
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
782
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
783
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
784
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
785
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
786
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
787
                                            array(1, 38, 39, 40, 55, 56, 57, 58,),
788
                                            array(1, 38, 39, 40, 55, 56, 57, 58,), array(38, 39, 40, 55, 56, 57, 58,),
789
                                            array(38, 39, 40, 55, 56, 57, 58,), array(13, 16, 49, 51, 54,),
790
                                            array(4, 11, 12, 13, 15, 18, 19, 20, 25, 29, 31, 32, 59, 60,),
791
                                            array(1, 10, 17, 26, 33, 36, 48,), array(1, 10, 26, 33,),
792
                                            array(13, 16, 51, 54,), array(1, 26, 33,), array(13, 36, 54,),
793
                                            array(4, 11, 12, 13, 15, 18, 19, 20, 25, 29, 31, 32, 59, 60,),
794
                                            array(11, 12, 16, 26, 28, 33,), array(11, 12, 16, 26, 28, 33,),
795
                                            array(11, 12, 16, 26, 33,), array(11, 12, 16, 26, 33,), array(13, 36, 54,),
796
                                            array(1, 26, 33,), array(13, 36, 54,), array(17, 45, 52,),
797
                                            array(1, 26, 33,), array(1, 2,), array(10, 22, 26, 33, 46,),
798
                                            array(10, 22, 26, 33, 46,), array(1, 10, 26, 27, 33,),
799
                                            array(1, 10, 26, 33,), array(1, 10, 26, 33,), array(12, 13, 16, 54,),
800
                                            array(11, 12, 16, 50,), array(14, 17, 48,), array(11, 12, 16,),
801
                                            array(7, 8, 9,), array(11, 12, 16,), array(14, 17, 48,), array(13, 16,),
802
                                            array(13, 16,), array(13, 54,), array(1, 10,), array(26, 33,),
803
                                            array(1, 17,), array(17, 48,), array(26, 33,), array(1, 28,),
804
                                            array(26, 33,), array(1, 53,), array(1,), array(1,), array(1,), array(1,),
805
                                            array(1,), array(1,), array(1,), array(1,), array(1,), array(17,),
806
                                            array(17,), array(), array(2, 11, 12, 14, 16, 17, 45, 48, 50, 52,),
807
                                            array(2, 11, 12, 16, 17, 45, 48, 50, 52, 53,),
808
                                            array(2, 11, 12, 14, 16, 17, 45, 48, 50, 52,),
809
                                            array(2, 11, 12, 16, 17, 45, 48, 50, 52,),
810
                                            array(2, 11, 12, 16, 17, 45, 48, 50, 52,),
811
                                            array(11, 12, 16, 17, 45, 48, 50, 52,), array(12, 13, 16, 34, 54,),
812
                                            array(11, 12, 16, 50,), array(11, 12, 16,), array(14, 45, 52,),
813
                                            array(26, 33,), array(13, 54,), array(26, 33,), array(13, 54,),
814
                                            array(26, 33,), array(26, 33,), array(26, 33,), array(26, 33,),
815
                                            array(26, 33,), array(26, 33,), array(26, 33,), array(26, 33,),
816
                                            array(45, 52,), array(26, 33,), array(26, 33,), array(13, 54,),
817
                                            array(13, 54,), array(26, 33,), array(26, 33,), array(26, 33,),
818
                                            array(26, 33,), array(26, 33,), array(45, 52,), array(26, 33,),
819
                                            array(45, 52,), array(12, 36,), array(45, 52,), array(14, 22,),
820
                                            array(45, 52,), array(45, 52,), array(45, 52,), array(45, 52,),
821
                                            array(26, 33,), array(45, 52,), array(45, 52,), array(8,), array(36,),
822
                                            array(1,), array(17,), array(1,), array(2,), array(2,), array(1,),
823
                                            array(1,), array(17,), array(17,), array(1,), array(), array(), array(),
824
                                            array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57, 58,),
825
                                            array(10, 21, 23, 26, 33, 35, 37, 45,), array(10, 14, 26, 33, 36, 48,),
826
                                            array(11, 12, 16, 50,), array(36, 45, 48, 53,), array(22, 46, 53,),
827
                                            array(22, 46, 60,), array(28, 36, 48,), array(36, 48,), array(21, 35,),
828
                                            array(45, 53,), array(14, 45,), array(35, 37,), array(36, 48,),
829
                                            array(36, 48,), array(35, 37,), array(35, 37,), array(16, 50,),
830
                                            array(35, 53,), array(22, 46,), array(34,), array(10,), array(16,),
831
                                            array(51,), array(16,), array(36,), array(51,), array(16,), array(16,),
832
                                            array(4,), array(16,), array(53,), array(16,), array(16,), array(36,),
833
                                            array(13,), array(16,), array(53,), array(45,), array(37,), array(16,),
834
                                            array(23,), array(34,), array(16,), array(14,), array(41,), array(),
835
                                            array(), array(), array(), array(), array(), array(), array(), array(),
836
                                            array(), array(), array(), array(), array(), array(), array(), array(),
837
                                            array(), array(), array(), array(), array(), array(), array(), array(),
838
                                            array(), array(), array(), array(), array(), array(), array(), array(),
839
                                            array(), array(), array(), array(), array(), array(), array(), array(),
840
                                            array(), array(), array(), array(), array(), array(), array(), array(),
841
                                            array(), array(), array(), array(), array(), array(), array(), array(),
842
                                            array(), array(), array(), array(), array(), array(), array(), array(),
843
                                            array(), array(), array(), array(), array(), array(), array(), array(),
844
                                            array(), array(), array(), array(), array(), array(), array(), array(),
845
                                            array(), array(), array(), array(), array(), array(), array(), array(),
846
                                            array(), array(), array(), array(), array(), array(), array(),);
847
848
    static public $yy_default = array(338, 515, 494, 530, 530, 494, 494, 530, 530, 530, 530, 530, 530, 530, 530, 530,
849
                                      530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530,
850
                                      530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 396, 530, 396,
851
                                      359, 372, 362, 396, 335, 530, 530, 530, 530, 530, 530, 530, 530, 401, 530, 530,
852
                                      377, 517, 492, 493, 418, 516, 403, 401, 518, 398, 407, 408, 423, 422, 530, 530,
853
                                      434, 410, 530, 396, 530, 530, 396, 396, 396, 396, 530, 396, 530, 506, 396, 386,
854
                                      424, 424, 410, 410, 410, 530, 459, 449, 459, 530, 459, 449, 530, 530, 530, 410,
855
                                      396, 390, 449, 396, 410, 374, 410, 417, 426, 425, 410, 392, 421, 414, 413, 427,
856
                                      503, 449, 501, 448, 448, 448, 448, 448, 448, 530, 461, 459, 475, 382, 530, 381,
857
                                      530, 369, 366, 364, 368, 360, 363, 358, 370, 452, 384, 356, 530, 530, 385, 375,
858
                                      380, 379, 373, 455, 376, 484, 459, 487, 530, 454, 453, 486, 485, 383, 456, 457,
859
                                      350, 459, 443, 481, 387, 495, 496, 416, 391, 507, 504, 393, 500, 500, 500, 459,
860
                                      459, 434, 430, 434, 460, 434, 424, 424, 434, 434, 530, 430, 430, 530, 530, 444,
861
                                      530, 530, 530, 530, 424, 530, 530, 530, 530, 530, 505, 530, 530, 530, 342, 530,
862
                                      439, 530, 530, 475, 530, 530, 530, 430, 530, 530, 404, 432, 530, 530, 436, 439,
863
                                      480, 502, 440, 490, 465, 365, 436, 475, 394, 405, 343, 344, 345, 346, 347, 409,
864
                                      429, 411, 337, 336, 339, 340, 341, 431, 348, 397, 353, 464, 354, 463, 435, 378,
865
                                      351, 349, 489, 352, 433, 462, 419, 477, 415, 446, 478, 479, 438, 388, 519, 511,
866
                                      510, 521, 520, 412, 482, 437, 498, 497, 491, 476, 483, 451, 526, 527, 428, 499,
867
                                      450, 389, 524, 523, 488, 458, 420, 442, 445, 371, 471, 468, 474, 467, 466, 469,
868
                                      472, 470, 522, 509, 529, 528, 525, 508, 473, 513, 447, 514, 395, 512, 441,);
869
870
    const YYNOCODE = 107;
871
872
    const YYSTACKDEPTH = 500;
873
874
    const YYNSTATE = 335;
875
876
    const YYNRULE = 195;
877
878
    const YYERRORSYMBOL = 61;
879
880
    const YYERRSYMDT = 'yy0';
881
882
    const YYFALLBACK = 0;
883
884
    public static $yyFallback = array();
885
886
    public function Trace($TraceFILE, $zTracePrompt)
887
    {
888
        if (!$TraceFILE) {
889
            $zTracePrompt = 0;
890
        } elseif (!$zTracePrompt) {
891
            $TraceFILE = 0;
892
        }
893
        $this->yyTraceFILE = $TraceFILE;
894
        $this->yyTracePrompt = $zTracePrompt;
895
    }
896
897
    public function PrintTrace()
898
    {
899
        $this->yyTraceFILE = fopen('php://output', 'w');
900
        $this->yyTracePrompt = '<br>';
901
    }
902
903
    public $yyTraceFILE;
904
905
    public $yyTracePrompt;
906
907
    public $yyidx;                    /* Index of top element in stack */
908
    public $yyerrcnt;                 /* Shifts left before out of the error */
909
    public $yystack = array();  /* The parser's stack */
910
911
    public $yyTokenName = array('$', 'VERT', 'COLON', 'PHP', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART',
912
                                'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL',
913
                                'SIMPLETAG', 'ID', 'PTR', 'LDELMAKENOCACHE', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC',
914
                                'TO', 'STEP', 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER',
915
                                'SMARTYBLOCKCHILDPARENT', 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP',
916
                                'CLOSEP', 'MATH', 'UNIMATH', 'ISIN', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT',
917
                                'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB',
918
                                'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP', 'TLOGOP', 'SINGLECOND', 'QUOTE', 'BACKTICK',
919
                                'error', 'start', 'template', 'template_element', 'smartytag', 'literal',
920
                                'text_content', 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes',
921
                                'value', 'expr', 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction',
922
                                'varvar', 'modparameters', 'attribute', 'ternary', 'array', 'tlop', 'lop', 'scond',
923
                                'function', 'ns1', 'doublequoted_with_quotes', 'static_class_access', 'object',
924
                                'arrayindex', 'indexdef', 'varvarele', 'objectchain', 'objectelement', 'method',
925
                                'params', 'modifier', 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted',
926
                                'doublequotedcontent',);
927
928
    public static $yyRuleName = array('start ::= template', 'template ::= template_element',
929
                                      'template ::= template template_element', 'template ::=',
930
                                      'template_element ::= smartytag', 'template_element ::= literal',
931
                                      'template_element ::= PHP', 'template_element ::= text_content',
932
                                      'text_content ::= TEXT', 'text_content ::= text_content TEXT',
933
                                      'template_element ::= STRIPON', 'template_element ::= STRIPOFF',
934
                                      'literal ::= LITERALSTART LITERALEND',
935
                                      'literal ::= LITERALSTART literal_elements LITERALEND',
936
                                      'literal_elements ::= literal_elements literal_element', 'literal_elements ::=',
937
                                      'literal_element ::= literal', 'literal_element ::= LITERAL',
938
                                      'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable',
939
                                      'tag ::= LDEL variable attributes', 'tag ::= LDEL value',
940
                                      'tag ::= LDEL value attributes', 'tag ::= LDEL expr',
941
                                      'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value',
942
                                      'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes',
943
                                      'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG',
944
                                      'tag ::= LDEL ID attributes', 'tag ::= LDEL ID',
945
                                      'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes',
946
                                      'tag ::= LDEL ID PTR ID modifierlist attributes',
947
                                      'tag ::= LDELMAKENOCACHE DOLLARID', 'tag ::= LDELIF expr',
948
                                      'tag ::= LDELIF expr attributes', 'tag ::= LDELIF statement',
949
                                      'tag ::= LDELIF statement attributes',
950
                                      'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
951
                                      'foraction ::= EQUAL expr', 'foraction ::= INCDEC',
952
                                      'tag ::= LDELFOR statement TO expr attributes',
953
                                      'tag ::= LDELFOR statement TO expr STEP expr attributes',
954
                                      'tag ::= LDELFOREACH attributes',
955
                                      'tag ::= LDELFOREACH SPACE value AS varvar attributes',
956
                                      'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes',
957
                                      'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
958
                                      'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
959
                                      'tag ::= LDELSETFILTER ID modparameters',
960
                                      'tag ::= LDELSETFILTER ID modparameters modifierlist',
961
                                      'tag ::= LDEL SMARTYBLOCKCHILDPARENT', 'smartytag ::= CLOSETAG',
962
                                      'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist',
963
                                      'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist',
964
                                      'attributes ::= attributes attribute', 'attributes ::= attribute',
965
                                      'attributes ::=', 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr',
966
                                      'attribute ::= ATTR value', 'attribute ::= SPACE ID', 'attribute ::= SPACE expr',
967
                                      'attribute ::= SPACE value', 'attribute ::= SPACE INTEGER EQUAL expr',
968
                                      'statements ::= statement', 'statements ::= statements COMMA statement',
969
                                      'statement ::= DOLLARID EQUAL INTEGER', 'statement ::= DOLLARID EQUAL expr',
970
                                      'statement ::= varindexed EQUAL expr', 'statement ::= OPENP statement CLOSEP',
971
                                      'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID',
972
                                      'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array',
973
                                      'expr ::= expr modifierlist', 'expr ::= expr tlop value',
974
                                      'expr ::= expr lop expr', 'expr ::= expr scond', 'expr ::= expr ISIN array',
975
                                      'expr ::= expr ISIN value',
976
                                      'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr',
977
                                      'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', 'value ::= variable',
978
                                      'value ::= UNIMATH value', 'value ::= NOT value', 'value ::= TYPECAST value',
979
                                      'value ::= variable INCDEC', 'value ::= HEX', 'value ::= INTEGER',
980
                                      'value ::= INTEGER DOT INTEGER', 'value ::= INTEGER DOT', 'value ::= DOT INTEGER',
981
                                      'value ::= ID', 'value ::= function', 'value ::= OPENP expr CLOSEP',
982
                                      'value ::= variable INSTANCEOF ns1', 'value ::= variable INSTANCEOF variable',
983
                                      'value ::= SINGLEQUOTESTRING', 'value ::= doublequoted_with_quotes',
984
                                      'value ::= varindexed DOUBLECOLON static_class_access', 'value ::= smartytag',
985
                                      'value ::= value modifierlist', 'value ::= NAMESPACE',
986
                                      'value ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID',
987
                                      'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', 'variable ::= varindexed',
988
                                      'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH',
989
                                      'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH',
990
                                      'variable ::= HATCH variable HATCH arrayindex',
991
                                      'varindexed ::= DOLLARID arrayindex', 'varindexed ::= varvar arrayindex',
992
                                      'arrayindex ::= arrayindex indexdef', 'arrayindex ::=',
993
                                      'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar',
994
                                      'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID',
995
                                      'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL',
996
                                      'indexdef ::= OPENB ID CLOSEB', 'indexdef ::= OPENB ID DOT ID CLOSEB',
997
                                      'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
998
                                      'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB',
999
                                      'indexdef ::= OPENB variable CLOSEB', 'indexdef ::= OPENB value CLOSEB',
1000
                                      'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB',
1001
                                      'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele',
1002
                                      'varvarele ::= ID', 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL',
1003
                                      'object ::= varindexed objectchain', 'objectchain ::= objectelement',
1004
                                      'objectchain ::= objectchain objectelement',
1005
                                      'objectelement ::= PTR ID arrayindex', 'objectelement ::= PTR varvar arrayindex',
1006
                                      'objectelement ::= PTR LDEL expr RDEL arrayindex',
1007
                                      'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
1008
                                      'objectelement ::= PTR method', 'function ::= ns1 OPENP params CLOSEP',
1009
                                      'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP',
1010
                                      'params ::= params COMMA expr', 'params ::= expr', 'params ::=',
1011
                                      'modifierlist ::= modifierlist modifier modparameters',
1012
                                      'modifierlist ::= modifier modparameters', 'modifier ::= VERT AT ID',
1013
                                      'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter',
1014
                                      'modparameters ::=', 'modparameter ::= COLON value',
1015
                                      'modparameter ::= COLON array', 'static_class_access ::= method',
1016
                                      'static_class_access ::= method objectchain', 'static_class_access ::= ID',
1017
                                      'static_class_access ::= DOLLARID arrayindex',
1018
                                      'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP',
1019
                                      'lop ::= SLOGOP', 'tlop ::= TLOGOP', 'scond ::= SINGLECOND',
1020
                                      'array ::= OPENB arrayelements CLOSEB', 'arrayelements ::= arrayelement',
1021
                                      'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=',
1022
                                      'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr',
1023
                                      'arrayelement ::= expr', 'doublequoted_with_quotes ::= QUOTE QUOTE',
1024
                                      'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
1025
                                      'doublequoted ::= doublequoted doublequotedcontent',
1026
                                      'doublequoted ::= doublequotedcontent',
1027
                                      'doublequotedcontent ::= BACKTICK variable BACKTICK',
1028
                                      'doublequotedcontent ::= BACKTICK expr BACKTICK',
1029
                                      'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL',
1030
                                      'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag',
1031
                                      'doublequotedcontent ::= TEXT',);
1032
1033
    public function tokenName($tokenType)
1034
    {
1035
        if ($tokenType === 0) {
1036
            return 'End of Input';
1037
        }
1038
        if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
1039
            return $this->yyTokenName[ $tokenType ];
1040
        } else {
1041
            return "Unknown";
1042
        }
1043
    }
1044
1045
    public static function yy_destructor($yymajor, $yypminor)
0 ignored issues
show
Unused Code introduced by
The parameter $yypminor is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1046
    {
1047
        switch ($yymajor) {
1048
            default:
0 ignored issues
show
Unused Code introduced by
default: break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
1049
                break;   /* If no destructor action specified: do nothing */
1050
        }
1051
    }
1052
1053
    public function yy_pop_parser_stack()
1054
    {
1055
        if (empty($this->yystack)) {
1056
            return;
1057
        }
1058
        $yytos = array_pop($this->yystack);
1059
        if ($this->yyTraceFILE && $this->yyidx >= 0) {
1060
            fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] . "\n");
1061
        }
1062
        $yymajor = $yytos->major;
1063
        self::yy_destructor($yymajor, $yytos->minor);
0 ignored issues
show
Unused Code introduced by
The call to the method Smarty_Internal_Templateparser::yy_destructor() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
1064
        $this->yyidx --;
1065
1066
        return $yymajor;
1067
    }
1068
1069
    public function __destruct()
1070
    {
1071
        while ($this->yystack !== Array()) {
1072
            $this->yy_pop_parser_stack();
1073
        }
1074
        if (is_resource($this->yyTraceFILE)) {
1075
            fclose($this->yyTraceFILE);
1076
        }
1077
    }
1078
1079
    public function yy_get_expected_tokens($token)
1080
    {
1081
        static $res3 = array();
1082
        static $res4 = array();
1083
        $state = $this->yystack[ $this->yyidx ]->stateno;
1084
        $expected = self::$yyExpectedTokens[ $state ];
1085
        if (isset($res3[ $state ][ $token ])) {
1086
            if ($res3[ $state ][ $token ]) {
1087
                return $expected;
1088
            }
1089
        } else {
1090
            if ($res3[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
1091
                return $expected;
1092
            }
1093
        }
1094
        $stack = $this->yystack;
1095
        $yyidx = $this->yyidx;
1096
        do {
1097
            $yyact = $this->yy_find_shift_action($token);
1098
            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
1099
                // reduce action
1100
                $done = 0;
1101
                do {
1102
                    if ($done ++ == 100) {
1103
                        $this->yyidx = $yyidx;
1104
                        $this->yystack = $stack;
1105
                        // too much recursion prevents proper detection
1106
                        // so give up
1107
                        return array_unique($expected);
1108
                    }
1109
                    $yyruleno = $yyact - self::YYNSTATE;
1110
                    $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
1111
                    $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno,
1112
                                                              self::$yyRuleInfo[ $yyruleno ][ 0 ]);
1113
                    if (isset(self::$yyExpectedTokens[ $nextstate ])) {
1114
                        $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
1115
                        if (isset($res4[ $nextstate ][ $token ])) {
1116
                            if ($res4[ $nextstate ][ $token ]) {
1117
                                $this->yyidx = $yyidx;
1118
                                $this->yystack = $stack;
1119
                                return array_unique($expected);
1120
                            }
1121
                        } else {
1122
                            if ($res4[ $nextstate ][ $token ] =
1123
                                in_array($token, self::$yyExpectedTokens[ $nextstate ], true)
1124
                            ) {
1125
                                $this->yyidx = $yyidx;
1126
                                $this->yystack = $stack;
1127
                                return array_unique($expected);
1128
                            }
1129
                        }
1130
                    }
1131
                    if ($nextstate < self::YYNSTATE) {
1132
                        // we need to shift a non-terminal
1133
                        $this->yyidx ++;
1134
                        $x = new TP_yyStackEntry;
1135
                        $x->stateno = $nextstate;
1136
                        $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
1137
                        $this->yystack[ $this->yyidx ] = $x;
1138
                        continue 2;
1139
                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
1140
                        $this->yyidx = $yyidx;
1141
                        $this->yystack = $stack;
1142
                        // the last token was just ignored, we can't accept
1143
                        // by ignoring input, this is in essence ignoring a
1144
                        // syntax error!
1145
                        return array_unique($expected);
1146
                    } elseif ($nextstate === self::YY_NO_ACTION) {
1147
                        $this->yyidx = $yyidx;
1148
                        $this->yystack = $stack;
1149
                        // input accepted, but not shifted (I guess)
1150
                        return $expected;
1151
                    } else {
1152
                        $yyact = $nextstate;
1153
                    }
1154
                }
1155
                while (true);
1156
            }
1157
            break;
1158
        }
1159
        while (true);
1160
        $this->yyidx = $yyidx;
1161
        $this->yystack = $stack;
1162
1163
        return array_unique($expected);
1164
    }
1165
1166
    public function yy_is_expected_token($token)
1167
    {
1168
        static $res = array();
1169
        static $res2 = array();
1170
        if ($token === 0) {
1171
            return true; // 0 is not part of this
1172
        }
1173
        $state = $this->yystack[ $this->yyidx ]->stateno;
1174
        if (isset($res[ $state ][ $token ])) {
1175
            if ($res[ $state ][ $token ]) {
1176
                return true;
1177
            }
1178
        } else {
1179
            if ($res[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
1180
                return true;
1181
            }
1182
        }
1183
        $stack = $this->yystack;
1184
        $yyidx = $this->yyidx;
1185
        do {
1186
            $yyact = $this->yy_find_shift_action($token);
1187
            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
1188
                // reduce action
1189
                $done = 0;
1190
                do {
1191
                    if ($done ++ == 100) {
1192
                        $this->yyidx = $yyidx;
1193
                        $this->yystack = $stack;
1194
                        // too much recursion prevents proper detection
1195
                        // so give up
1196
                        return true;
1197
                    }
1198
                    $yyruleno = $yyact - self::YYNSTATE;
1199
                    $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
1200
                    $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno,
1201
                                                              self::$yyRuleInfo[ $yyruleno ][ 0 ]);
1202
                    if (isset($res2[ $nextstate ][ $token ])) {
1203
                        if ($res2[ $nextstate ][ $token ]) {
1204
                            $this->yyidx = $yyidx;
1205
                            $this->yystack = $stack;
1206
                            return true;
1207
                        }
1208
                    } else {
1209
                        if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ]) &&
1210
                                                             in_array($token, self::$yyExpectedTokens[ $nextstate ],
1211
                                                                      true))
1212
                        ) {
1213
                            $this->yyidx = $yyidx;
1214
                            $this->yystack = $stack;
1215
                            return true;
1216
                        }
1217
                    }
1218
                    if ($nextstate < self::YYNSTATE) {
1219
                        // we need to shift a non-terminal
1220
                        $this->yyidx ++;
1221
                        $x = new TP_yyStackEntry;
1222
                        $x->stateno = $nextstate;
1223
                        $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
1224
                        $this->yystack[ $this->yyidx ] = $x;
1225
                        continue 2;
1226
                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
1227
                        $this->yyidx = $yyidx;
1228
                        $this->yystack = $stack;
1229
                        if (!$token) {
1230
                            // end of input: this is valid
1231
                            return true;
1232
                        }
1233
                        // the last token was just ignored, we can't accept
1234
                        // by ignoring input, this is in essence ignoring a
1235
                        // syntax error!
1236
                        return false;
1237
                    } elseif ($nextstate === self::YY_NO_ACTION) {
1238
                        $this->yyidx = $yyidx;
1239
                        $this->yystack = $stack;
1240
                        // input accepted, but not shifted (I guess)
1241
                        return true;
1242
                    } else {
1243
                        $yyact = $nextstate;
1244
                    }
1245
                }
1246
                while (true);
1247
            }
1248
            break;
1249
        }
1250
        while (true);
1251
        $this->yyidx = $yyidx;
1252
        $this->yystack = $stack;
1253
1254
        return true;
1255
    }
1256
1257
    public function yy_find_shift_action($iLookAhead)
1258
    {
1259
        $stateno = $this->yystack[ $this->yyidx ]->stateno;
1260
1261
        /* if ($this->yyidx < 0) return self::YY_NO_ACTION;  */
0 ignored issues
show
Unused Code Comprehensibility introduced by
53% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1262
        if (!isset(self::$yy_shift_ofst[ $stateno ])) {
1263
            // no shift actions
1264
            return self::$yy_default[ $stateno ];
1265
        }
1266
        $i = self::$yy_shift_ofst[ $stateno ];
1267
        if ($i === self::YY_SHIFT_USE_DFLT) {
1268
            return self::$yy_default[ $stateno ];
1269
        }
1270
        if ($iLookAhead == self::YYNOCODE) {
1271
            return self::YY_NO_ACTION;
1272
        }
1273
        $i += $iLookAhead;
1274
        if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) {
1275
            if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) &&
1276
                ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0
1277
            ) {
1278
                if ($this->yyTraceFILE) {
1279
                    fwrite($this->yyTraceFILE,
1280
                           $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[ $iLookAhead ] . " => " .
1281
                           $this->yyTokenName[ $iFallback ] . "\n");
1282
                }
1283
1284
                return $this->yy_find_shift_action($iFallback);
1285
            }
1286
1287
            return self::$yy_default[ $stateno ];
1288
        } else {
1289
            return self::$yy_action[ $i ];
1290
        }
1291
    }
1292
1293
    public function yy_find_reduce_action($stateno, $iLookAhead)
1294
    {
1295
        /* $stateno = $this->yystack[$this->yyidx]->stateno; */
0 ignored issues
show
Unused Code Comprehensibility introduced by
57% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1296
1297
        if (!isset(self::$yy_reduce_ofst[ $stateno ])) {
1298
            return self::$yy_default[ $stateno ];
1299
        }
1300
        $i = self::$yy_reduce_ofst[ $stateno ];
1301
        if ($i == self::YY_REDUCE_USE_DFLT) {
1302
            return self::$yy_default[ $stateno ];
1303
        }
1304
        if ($iLookAhead == self::YYNOCODE) {
1305
            return self::YY_NO_ACTION;
1306
        }
1307
        $i += $iLookAhead;
1308
        if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) {
1309
            return self::$yy_default[ $stateno ];
1310
        } else {
1311
            return self::$yy_action[ $i ];
1312
        }
1313
    }
1314
1315
    public function yy_shift($yyNewState, $yyMajor, $yypMinor)
1316
    {
1317
        $this->yyidx ++;
1318
        if ($this->yyidx >= self::YYSTACKDEPTH) {
1319
            $this->yyidx --;
1320
            if ($this->yyTraceFILE) {
1321
                fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
1322
            }
1323
            while ($this->yyidx >= 0) {
1324
                $this->yy_pop_parser_stack();
1325
            }
1326
            #line 207 "../smarty/lexer/smarty_internal_templateparser.y"
1327
1328
            $this->internalError = true;
1329
            $this->compiler->trigger_template_error("Stack overflow in template parser");
1330
1331
            return;
1332
        }
1333
        $yytos = new TP_yyStackEntry;
1334
        $yytos->stateno = $yyNewState;
1335
        $yytos->major = $yyMajor;
1336
        $yytos->minor = $yypMinor;
1337
        $this->yystack[] = $yytos;
1338
        if ($this->yyTraceFILE && $this->yyidx > 0) {
1339
            fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState);
1340
            fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
1341
            for ($i = 1; $i <= $this->yyidx; $i ++) {
1342
                fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[ $this->yystack[ $i ]->major ]);
1343
            }
1344
            fwrite($this->yyTraceFILE, "\n");
1345
        }
1346
    }
1347
1348
    public static $yyRuleInfo = array(array(0 => 62, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 2),
1349
                                      array(0 => 63, 1 => 0), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1),
1350
                                      array(0 => 64, 1 => 1), array(0 => 64, 1 => 1), array(0 => 67, 1 => 1),
1351
                                      array(0 => 67, 1 => 2), array(0 => 64, 1 => 1), array(0 => 64, 1 => 1),
1352
                                      array(0 => 66, 1 => 2), array(0 => 66, 1 => 3), array(0 => 68, 1 => 2),
1353
                                      array(0 => 68, 1 => 0), array(0 => 69, 1 => 1), array(0 => 69, 1 => 1),
1354
                                      array(0 => 65, 1 => 2), array(0 => 65, 1 => 1), array(0 => 70, 1 => 2),
1355
                                      array(0 => 70, 1 => 3), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3),
1356
                                      array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4),
1357
                                      array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 70, 1 => 5),
1358
                                      array(0 => 65, 1 => 1), array(0 => 70, 1 => 3), array(0 => 70, 1 => 2),
1359
                                      array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 70, 1 => 6),
1360
                                      array(0 => 70, 1 => 2), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3),
1361
                                      array(0 => 70, 1 => 2), array(0 => 70, 1 => 3), array(0 => 70, 1 => 8),
1362
                                      array(0 => 79, 1 => 2), array(0 => 79, 1 => 1), array(0 => 70, 1 => 5),
1363
                                      array(0 => 70, 1 => 7), array(0 => 70, 1 => 2), array(0 => 70, 1 => 6),
1364
                                      array(0 => 70, 1 => 8), array(0 => 70, 1 => 6), array(0 => 70, 1 => 8),
1365
                                      array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 70, 1 => 2),
1366
                                      array(0 => 65, 1 => 1), array(0 => 70, 1 => 2), array(0 => 70, 1 => 3),
1367
                                      array(0 => 70, 1 => 4), array(0 => 70, 1 => 5), array(0 => 72, 1 => 2),
1368
                                      array(0 => 72, 1 => 1), array(0 => 72, 1 => 0), array(0 => 82, 1 => 4),
1369
                                      array(0 => 82, 1 => 2), array(0 => 82, 1 => 2), array(0 => 82, 1 => 2),
1370
                                      array(0 => 82, 1 => 2), array(0 => 82, 1 => 2), array(0 => 82, 1 => 4),
1371
                                      array(0 => 78, 1 => 1), array(0 => 78, 1 => 3), array(0 => 77, 1 => 3),
1372
                                      array(0 => 77, 1 => 3), array(0 => 77, 1 => 3), array(0 => 77, 1 => 3),
1373
                                      array(0 => 74, 1 => 1), array(0 => 74, 1 => 1), array(0 => 74, 1 => 3),
1374
                                      array(0 => 74, 1 => 3), array(0 => 74, 1 => 3), array(0 => 74, 1 => 1),
1375
                                      array(0 => 74, 1 => 2), array(0 => 74, 1 => 3), array(0 => 74, 1 => 3),
1376
                                      array(0 => 74, 1 => 2), array(0 => 74, 1 => 3), array(0 => 74, 1 => 3),
1377
                                      array(0 => 83, 1 => 7), array(0 => 83, 1 => 7), array(0 => 73, 1 => 1),
1378
                                      array(0 => 73, 1 => 2), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2),
1379
                                      array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 1),
1380
                                      array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), array(0 => 73, 1 => 2),
1381
                                      array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3),
1382
                                      array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1),
1383
                                      array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1),
1384
                                      array(0 => 73, 1 => 2), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3),
1385
                                      array(0 => 89, 1 => 1), array(0 => 89, 1 => 1), array(0 => 71, 1 => 1),
1386
                                      array(0 => 71, 1 => 1), array(0 => 71, 1 => 3), array(0 => 71, 1 => 1),
1387
                                      array(0 => 71, 1 => 3), array(0 => 71, 1 => 4), array(0 => 71, 1 => 3),
1388
                                      array(0 => 71, 1 => 4), array(0 => 75, 1 => 2), array(0 => 75, 1 => 2),
1389
                                      array(0 => 93, 1 => 2), array(0 => 93, 1 => 0), array(0 => 94, 1 => 2),
1390
                                      array(0 => 94, 1 => 2), array(0 => 94, 1 => 4), array(0 => 94, 1 => 2),
1391
                                      array(0 => 94, 1 => 2), array(0 => 94, 1 => 4), array(0 => 94, 1 => 3),
1392
                                      array(0 => 94, 1 => 5), array(0 => 94, 1 => 3), array(0 => 94, 1 => 3),
1393
                                      array(0 => 94, 1 => 3), array(0 => 94, 1 => 3), array(0 => 94, 1 => 3),
1394
                                      array(0 => 94, 1 => 3), array(0 => 94, 1 => 2), array(0 => 80, 1 => 1),
1395
                                      array(0 => 80, 1 => 1), array(0 => 80, 1 => 2), array(0 => 95, 1 => 1),
1396
                                      array(0 => 95, 1 => 1), array(0 => 95, 1 => 3), array(0 => 92, 1 => 2),
1397
                                      array(0 => 96, 1 => 1), array(0 => 96, 1 => 2), array(0 => 97, 1 => 3),
1398
                                      array(0 => 97, 1 => 3), array(0 => 97, 1 => 5), array(0 => 97, 1 => 6),
1399
                                      array(0 => 97, 1 => 2), array(0 => 88, 1 => 4), array(0 => 98, 1 => 4),
1400
                                      array(0 => 98, 1 => 4), array(0 => 99, 1 => 3), array(0 => 99, 1 => 1),
1401
                                      array(0 => 99, 1 => 0), array(0 => 76, 1 => 3), array(0 => 76, 1 => 2),
1402
                                      array(0 => 100, 1 => 3), array(0 => 100, 1 => 2), array(0 => 81, 1 => 2),
1403
                                      array(0 => 81, 1 => 0), array(0 => 101, 1 => 2), array(0 => 101, 1 => 2),
1404
                                      array(0 => 91, 1 => 1), array(0 => 91, 1 => 2), array(0 => 91, 1 => 1),
1405
                                      array(0 => 91, 1 => 2), array(0 => 91, 1 => 3), array(0 => 86, 1 => 1),
1406
                                      array(0 => 86, 1 => 1), array(0 => 85, 1 => 1), array(0 => 87, 1 => 1),
1407
                                      array(0 => 84, 1 => 3), array(0 => 102, 1 => 1), array(0 => 102, 1 => 3),
1408
                                      array(0 => 102, 1 => 0), array(0 => 103, 1 => 3), array(0 => 103, 1 => 3),
1409
                                      array(0 => 103, 1 => 1), array(0 => 90, 1 => 2), array(0 => 90, 1 => 3),
1410
                                      array(0 => 104, 1 => 2), array(0 => 104, 1 => 1), array(0 => 105, 1 => 3),
1411
                                      array(0 => 105, 1 => 3), array(0 => 105, 1 => 1), array(0 => 105, 1 => 3),
1412
                                      array(0 => 105, 1 => 3), array(0 => 105, 1 => 1), array(0 => 105, 1 => 1),);
1413
1414
    public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 16 => 8, 17 => 8,
1415
                                       43 => 8, 66 => 8, 67 => 8, 75 => 8, 76 => 8, 80 => 8, 89 => 8, 94 => 8, 95 => 8,
1416
                                       100 => 8, 104 => 8, 105 => 8, 109 => 8, 111 => 8, 116 => 8, 178 => 8, 183 => 8,
1417
                                       9 => 9, 10 => 10, 11 => 11, 12 => 12, 15 => 12, 13 => 13, 74 => 13, 14 => 14,
1418
                                       90 => 14, 92 => 14, 93 => 14, 123 => 14, 18 => 18, 19 => 19, 20 => 20, 22 => 20,
1419
                                       24 => 20, 21 => 21, 23 => 21, 25 => 21, 26 => 26, 27 => 26, 28 => 28, 29 => 29,
1420
                                       30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36, 37 => 37,
1421
                                       38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45, 46 => 46,
1422
                                       47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53, 54 => 54,
1423
                                       55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60, 158 => 60,
1424
                                       162 => 60, 166 => 60, 167 => 60, 61 => 61, 159 => 61, 165 => 61, 62 => 62,
1425
                                       63 => 63, 64 => 63, 65 => 65, 143 => 65, 68 => 68, 70 => 70, 71 => 71, 72 => 71,
1426
                                       73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 108 => 81, 82 => 82, 83 => 83,
1427
                                       84 => 84, 85 => 85, 86 => 86, 87 => 87, 88 => 88, 91 => 91, 96 => 96, 97 => 97,
1428
                                       98 => 98, 99 => 99, 101 => 101, 102 => 102, 103 => 102, 106 => 106, 107 => 107,
1429
                                       110 => 110, 112 => 112, 113 => 113, 114 => 114, 115 => 115, 117 => 117,
1430
                                       118 => 118, 119 => 119, 120 => 120, 121 => 121, 122 => 122, 124 => 124,
1431
                                       180 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128, 129 => 129,
1432
                                       130 => 130, 138 => 130, 131 => 131, 132 => 132, 133 => 133, 134 => 133,
1433
                                       136 => 133, 137 => 133, 135 => 135, 139 => 139, 140 => 140, 141 => 141,
1434
                                       184 => 141, 142 => 142, 144 => 144, 145 => 145, 146 => 146, 147 => 147,
1435
                                       148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152, 153 => 153,
1436
                                       154 => 154, 155 => 155, 156 => 156, 157 => 157, 160 => 160, 161 => 161,
1437
                                       163 => 163, 164 => 164, 168 => 168, 169 => 169, 170 => 170, 171 => 171,
1438
                                       172 => 172, 173 => 173, 174 => 174, 175 => 175, 176 => 176, 177 => 177,
1439
                                       179 => 179, 181 => 181, 182 => 182, 185 => 185, 186 => 186, 187 => 187,
1440
                                       188 => 188, 189 => 188, 191 => 188, 190 => 190, 192 => 192, 193 => 193,
1441
                                       194 => 194,);
1442
1443
    #line 218 "../smarty/lexer/smarty_internal_templateparser.y"
1444
    function yy_r0()
1445
    {
1446
        $this->root_buffer->prepend_array($this, $this->template_prefix);
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Smarty_Internal_ParseTree as the method prepend_array() does only exist in the following sub-classes of Smarty_Internal_ParseTree: Smarty_Internal_ParseTree_Template. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
1447
        $this->root_buffer->append_array($this, $this->template_postfix);
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Smarty_Internal_ParseTree as the method append_array() does only exist in the following sub-classes of Smarty_Internal_ParseTree: Smarty_Internal_ParseTree_Template. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
1448
        $this->_retvalue = $this->root_buffer->to_smarty_php($this);
1449
    }
1450
1451
    #line 228 "../smarty/lexer/smarty_internal_templateparser.y"
1452
    function yy_r1()
1453
    {
1454
        if ($this->yystack[ $this->yyidx + 0 ]->minor != null) {
1455
            $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Smarty_Internal_ParseTree as the method append_subtree() does only exist in the following sub-classes of Smarty_Internal_ParseTree: Smarty_Internal_ParseTree_Dq, Smarty_Internal_ParseTree_Template. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
1456
        }
1457
    }
1458
1459
    #line 235 "../smarty/lexer/smarty_internal_templateparser.y"
1460
    function yy_r2()
1461
    {
1462
        if ($this->yystack[ $this->yyidx + 0 ]->minor != null) {
1463
            // because of possible code injection
1464
            $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Smarty_Internal_ParseTree as the method append_subtree() does only exist in the following sub-classes of Smarty_Internal_ParseTree: Smarty_Internal_ParseTree_Dq, Smarty_Internal_ParseTree_Template. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
1465
        }
1466
    }
1467
1468
    #line 249 "../smarty/lexer/smarty_internal_templateparser.y"
1469
    function yy_r4()
1470
    {
1471
        if ($this->compiler->has_code) {
1472
            $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor);
1473
        } else {
1474
            $this->_retvalue = null;
1475
        }
1476
        $this->compiler->has_variable_string = false;
1477
        $this->block_nesting_level = count($this->compiler->_tag_stack);
1478
    }
1479
1480
    #line 260 "../smarty/lexer/smarty_internal_templateparser.y"
1481
    function yy_r5()
1482
    {
1483
        $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor);
1484
    }
1485
1486
    #line 264 "../smarty/lexer/smarty_internal_templateparser.y"
1487
    function yy_r6()
1488
    {
1489
        $code = $this->compiler->compileTag('private_php',
1490
                                            array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor),
1491
                                                  array('type' => $this->lex->phpType)), array());
1492
        if ($this->compiler->has_code && !empty($code)) {
1493
            $tmp = '';
1494
            foreach ($this->compiler->prefix_code as $code) {
1495
                $tmp .= $code;
1496
            }
1497
            $this->compiler->prefix_code = array();
1498
            $this->_retvalue =
1499
                new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true));
1500
        } else {
1501
            $this->_retvalue = null;
1502
        }
1503
    }
1504
1505
    #line 275 "../smarty/lexer/smarty_internal_templateparser.y"
1506
    function yy_r7()
1507
    {
1508
        $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor);
1509
    }
1510
1511
    #line 279 "../smarty/lexer/smarty_internal_templateparser.y"
1512
    function yy_r8()
1513
    {
1514
        $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
1515
    }
1516
1517
    #line 283 "../smarty/lexer/smarty_internal_templateparser.y"
1518
    function yy_r9()
1519
    {
1520
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
1521
    }
1522
1523
    #line 288 "../smarty/lexer/smarty_internal_templateparser.y"
1524
    function yy_r10()
1525
    {
1526
        $this->strip = true;
1527
    }
1528
1529
    #line 292 "../smarty/lexer/smarty_internal_templateparser.y"
1530
    function yy_r11()
1531
    {
1532
        $this->strip = false;
1533
    }
1534
1535
    #line 297 "../smarty/lexer/smarty_internal_templateparser.y"
1536
    function yy_r12()
1537
    {
1538
        $this->_retvalue = '';
1539
    }
1540
1541
    #line 301 "../smarty/lexer/smarty_internal_templateparser.y"
1542
    function yy_r13()
1543
    {
1544
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
1545
    }
1546
1547
    #line 305 "../smarty/lexer/smarty_internal_templateparser.y"
1548
    function yy_r14()
1549
    {
1550
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
1551
    }
1552
1553
    #line 321 "../smarty/lexer/smarty_internal_templateparser.y"
1554
    function yy_r18()
1555
    {
1556
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
1557
    }
1558
1559
    #line 327 "../smarty/lexer/smarty_internal_templateparser.y"
1560
    function yy_r19()
1561
    {
1562
        $var =
1563
            trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
1564
                 ' $');
1565
        if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
1566
            $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'),
1567
                                                           array('value' => $this->compiler->compileVariable('\'' .
1568
                                                                                                             $match[ 1 ] .
1569
                                                                                                             '\'')));
1570
        } else {
1571
            $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
1572
                                                           array('value' => $this->compiler->compileVariable('\'' .
1573
                                                                                                             $var .
1574
                                                                                                             '\'')));
1575
        }
1576
    }
1577
1578
    #line 337 "../smarty/lexer/smarty_internal_templateparser.y"
1579
    function yy_r20()
1580
    {
1581
        $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
1582
                                                       array('value' => $this->yystack[ $this->yyidx + 0 ]->minor));
1583
    }
1584
1585
    #line 341 "../smarty/lexer/smarty_internal_templateparser.y"
1586
    function yy_r21()
1587
    {
1588
        $this->_retvalue =
1589
            $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
1590
                                        array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor));
1591
    }
1592
1593
    #line 364 "../smarty/lexer/smarty_internal_templateparser.y"
1594
    function yy_r26()
1595
    {
1596
        $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx +
1597
                                                                                                        0 ]->minor),
1598
                                                                       array('var' => '\'' .
1599
                                                                                      substr($this->yystack[ $this->yyidx +
1600
                                                                                                             - 2 ]->minor,
1601
                                                                                             1) . '\'')));
1602
    }
1603
1604
    #line 372 "../smarty/lexer/smarty_internal_templateparser.y"
1605
    function yy_r28()
1606
    {
1607
        $this->_retvalue = $this->compiler->compileTag('assign',
1608
                                                       array_merge(array(array('value' => $this->yystack[ $this->yyidx +
1609
                                                                                                          - 1 ]->minor),
1610
                                                                         array('var' => '\'' .
1611
                                                                                        substr($this->yystack[ $this->yyidx +
1612
                                                                                                               - 3 ]->minor,
1613
                                                                                               1) . '\'')),
1614
                                                                   $this->yystack[ $this->yyidx + 0 ]->minor));
1615
    }
1616
1617
    #line 376 "../smarty/lexer/smarty_internal_templateparser.y"
1618
    function yy_r29()
1619
    {
1620
        $this->_retvalue = $this->compiler->compileTag('assign',
1621
                                                       array_merge(array(array('value' => $this->yystack[ $this->yyidx +
1622
                                                                                                          - 1 ]->minor),
1623
                                                                         array('var' => $this->yystack[ $this->yyidx +
1624
                                                                                                        - 3 ]->minor[ 'var' ])),
1625
                                                                   $this->yystack[ $this->yyidx + 0 ]->minor),
1626
                                                       array('smarty_internal_index' => $this->yystack[ $this->yyidx +
1627
                                                                                                        - 3 ]->minor[ 'smarty_internal_index' ]));
1628
    }
1629
1630
    #line 381 "../smarty/lexer/smarty_internal_templateparser.y"
1631
    function yy_r30()
1632
    {
1633
        $tag =
1634
            trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length));
1635
        if ($tag == 'strip') {
1636
            $this->strip = true;
1637
            $this->_retvalue = null;;
1638
        } else {
1639
            if (defined($tag)) {
1640
                if ($this->security) {
1641
                    $this->security->isTrustedConstant($tag, $this->compiler);
1642
                }
1643
                $this->_retvalue =
1644
                    $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag));
1645
            } else {
1646
                if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
1647
                    $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array("'nocache'"));
1648
                } else {
1649
                    $this->_retvalue = $this->compiler->compileTag($tag, array());
1650
                }
1651
            }
1652
        }
1653
    }
1654
1655
    #line 403 "../smarty/lexer/smarty_internal_templateparser.y"
1656
    function yy_r31()
1657
    {
1658
        if (defined($this->yystack[ $this->yyidx + - 1 ]->minor)) {
1659
            if ($this->security) {
1660
                $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 1 ]->minor, $this->compiler);
1661
            }
1662
            $this->_retvalue =
1663
                $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
1664
                                            array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor));
1665
        } else {
1666
            $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor,
1667
                                                           $this->yystack[ $this->yyidx + 0 ]->minor);
1668
        }
1669
    }
1670
1671
    #line 413 "../smarty/lexer/smarty_internal_templateparser.y"
1672
    function yy_r32()
1673
    {
1674
        if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
1675
            if ($this->security) {
1676
                $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
1677
            }
1678
            $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(),
1679
                                                           array('value' => $this->yystack[ $this->yyidx + 0 ]->minor));
1680
        } else {
1681
            $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor, array());
1682
        }
1683
    }
1684
1685
    #line 426 "../smarty/lexer/smarty_internal_templateparser.y"
1686
    function yy_r33()
1687
    {
1688
        if (defined($this->yystack[ $this->yyidx + - 2 ]->minor)) {
1689
            if ($this->security) {
1690
                $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 2 ]->minor, $this->compiler);
1691
            }
1692
            $this->_retvalue =
1693
                $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
1694
                                            array('value' => $this->yystack[ $this->yyidx + - 2 ]->minor,
1695
                                                  'modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor));
1696
        } else {
1697
            $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor,
1698
                                                           $this->yystack[ $this->yyidx + 0 ]->minor,
1699
                                                           array('modifierlist' => $this->yystack[ $this->yyidx +
1700
                                                                                                   - 1 ]->minor));
1701
        }
1702
    }
1703
1704
    #line 438 "../smarty/lexer/smarty_internal_templateparser.y"
1705
    function yy_r34()
1706
    {
1707
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor,
1708
                                                       $this->yystack[ $this->yyidx + 0 ]->minor,
1709
                                                       array('object_method' => $this->yystack[ $this->yyidx +
1710
                                                                                                - 1 ]->minor));
1711
    }
1712
1713
    #line 443 "../smarty/lexer/smarty_internal_templateparser.y"
1714
    function yy_r35()
1715
    {
1716
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 4 ]->minor,
1717
                                                       $this->yystack[ $this->yyidx + 0 ]->minor,
1718
                                                       array('modifierlist' => $this->yystack[ $this->yyidx +
1719
                                                                                               - 1 ]->minor,
1720
                                                             'object_method' => $this->yystack[ $this->yyidx +
1721
                                                                                                - 2 ]->minor));
1722
    }
1723
1724
    #line 448 "../smarty/lexer/smarty_internal_templateparser.y"
1725
    function yy_r36()
1726
    {
1727
        $this->_retvalue = $this->compiler->compileTag('make_nocache', array(array('var' => '\'' .
1728
                                                                                            substr($this->yystack[ $this->yyidx +
1729
                                                                                                                   0 ]->minor,
1730
                                                                                                   1) . '\'')));
1731
    }
1732
1733
    #line 453 "../smarty/lexer/smarty_internal_templateparser.y"
1734
    function yy_r37()
1735
    {
1736
        $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length));
1737
        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(),
1738
                                                       array('if condition' => $this->yystack[ $this->yyidx +
1739
                                                                                               0 ]->minor));
1740
    }
1741
1742
    #line 458 "../smarty/lexer/smarty_internal_templateparser.y"
1743
    function yy_r38()
1744
    {
1745
        $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length));
1746
        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag,
1747
                                                       $this->yystack[ $this->yyidx + 0 ]->minor,
1748
                                                       array('if condition' => $this->yystack[ $this->yyidx +
1749
                                                                                               - 1 ]->minor));
1750
    }
1751
1752
    #line 463 "../smarty/lexer/smarty_internal_templateparser.y"
1753
    function yy_r39()
1754
    {
1755
        $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length));
1756
        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(),
1757
                                                       array('if condition' => $this->yystack[ $this->yyidx +
1758
                                                                                               0 ]->minor));
1759
    }
1760
1761
    #line 474 "../smarty/lexer/smarty_internal_templateparser.y"
1762
    function yy_r41()
1763
    {
1764
        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
1765
                                                                          array(array('start' => $this->yystack[ $this->yyidx +
1766
                                                                                                                 - 6 ]->minor),
1767
                                                                                array('ifexp' => $this->yystack[ $this->yyidx +
1768
                                                                                                                 - 4 ]->minor),
1769
                                                                                array('var' => $this->yystack[ $this->yyidx +
1770
                                                                                                               - 2 ]->minor),
1771
                                                                                array('step' => $this->yystack[ $this->yyidx +
1772
                                                                                                                - 1 ]->minor))),
1773
                                                       1);
0 ignored issues
show
Documentation introduced by
1 is of type integer, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1774
    }
1775
1776
    #line 478 "../smarty/lexer/smarty_internal_templateparser.y"
1777
    function yy_r42()
1778
    {
1779
        $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor;
1780
    }
1781
1782
    #line 486 "../smarty/lexer/smarty_internal_templateparser.y"
1783
    function yy_r44()
1784
    {
1785
        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
1786
                                                                          array(array('start' => $this->yystack[ $this->yyidx +
1787
                                                                                                                 - 3 ]->minor),
1788
                                                                                array('to' => $this->yystack[ $this->yyidx +
1789
                                                                                                              - 1 ]->minor))),
1790
                                                       0);
0 ignored issues
show
Documentation introduced by
0 is of type integer, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1791
    }
1792
1793
    #line 490 "../smarty/lexer/smarty_internal_templateparser.y"
1794
    function yy_r45()
1795
    {
1796
        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
1797
                                                                          array(array('start' => $this->yystack[ $this->yyidx +
1798
                                                                                                                 - 5 ]->minor),
1799
                                                                                array('to' => $this->yystack[ $this->yyidx +
1800
                                                                                                              - 3 ]->minor),
1801
                                                                                array('step' => $this->yystack[ $this->yyidx +
1802
                                                                                                                - 1 ]->minor))),
1803
                                                       0);
0 ignored issues
show
Documentation introduced by
0 is of type integer, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1804
    }
1805
1806
    #line 495 "../smarty/lexer/smarty_internal_templateparser.y"
1807
    function yy_r46()
1808
    {
1809
        $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor);
1810
    }
1811
1812
    #line 500 "../smarty/lexer/smarty_internal_templateparser.y"
1813
    function yy_r47()
1814
    {
1815
        $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
1816
                                                                              array(array('from' => $this->yystack[ $this->yyidx +
1817
                                                                                                                    - 3 ]->minor),
1818
                                                                                    array('item' => $this->yystack[ $this->yyidx +
1819
                                                                                                                    - 1 ]->minor))));
1820
    }
1821
1822
    #line 504 "../smarty/lexer/smarty_internal_templateparser.y"
1823
    function yy_r48()
1824
    {
1825
        $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor,
1826
                                                                              array(array('from' => $this->yystack[ $this->yyidx +
1827
                                                                                                                    - 5 ]->minor),
1828
                                                                                    array('item' => $this->yystack[ $this->yyidx +
1829
                                                                                                                    - 1 ]->minor),
1830
                                                                                    array('key' => $this->yystack[ $this->yyidx +
1831
                                                                                                                   - 3 ]->minor))));
1832
    }
1833
1834
    #line 517 "../smarty/lexer/smarty_internal_templateparser.y"
1835
    function yy_r51()
1836
    {
1837
        $this->_retvalue = $this->compiler->compileTag('setfilter', array(),
1838
                                                       array('modifier_list' => array(array_merge(array($this->yystack[ $this->yyidx +
1839
                                                                                                                        - 1 ]->minor),
1840
                                                                                                  $this->yystack[ $this->yyidx +
1841
                                                                                                                  0 ]->minor))));
1842
    }
1843
1844
    #line 521 "../smarty/lexer/smarty_internal_templateparser.y"
1845
    function yy_r52()
1846
    {
1847
        $this->_retvalue = $this->compiler->compileTag('setfilter', array(),
1848
                                                       array('modifier_list' => array_merge(array(array_merge(array($this->yystack[ $this->yyidx +
1849
                                                                                                                                    - 2 ]->minor),
1850
                                                                                                              $this->yystack[ $this->yyidx +
1851
                                                                                                                              - 1 ]->minor)),
1852
                                                                                            $this->yystack[ $this->yyidx +
1853
                                                                                                            0 ]->minor)));
1854
    }
1855
1856
    #line 526 "../smarty/lexer/smarty_internal_templateparser.y"
1857
    function yy_r53()
1858
    {
1859
        $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.');
1860
        if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') {
1861
            // {$smarty.block.child}
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1862
            $this->_retvalue = $this->compiler->compileTag('block_child', array());;
1863
        } else {
1864
            // {$smarty.block.parent}
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1865
            $this->_retvalue = $this->compiler->compileTag('block_parent', array());;
1866
        }
1867
    }
1868
1869
    #line 539 "../smarty/lexer/smarty_internal_templateparser.y"
1870
    function yy_r54()
1871
    {
1872
        $tag =
1873
            trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
1874
                 ' /');
1875
        if ($tag == 'strip') {
1876
            $this->strip = false;
1877
            $this->_retvalue = null;
1878
        } else {
1879
            $this->_retvalue = $this->compiler->compileTag($tag . 'close', array());
1880
        }
1881
    }
1882
1883
    #line 548 "../smarty/lexer/smarty_internal_templateparser.y"
1884
    function yy_r55()
1885
    {
1886
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array());
1887
    }
1888
1889
    #line 552 "../smarty/lexer/smarty_internal_templateparser.y"
1890
    function yy_r56()
1891
    {
1892
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(),
1893
                                                       array('modifier_list' => $this->yystack[ $this->yyidx +
1894
                                                                                                0 ]->minor));
1895
    }
1896
1897
    #line 557 "../smarty/lexer/smarty_internal_templateparser.y"
1898
    function yy_r57()
1899
    {
1900
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(),
1901
                                                       array('object_method' => $this->yystack[ $this->yyidx +
1902
                                                                                                0 ]->minor));
1903
    }
1904
1905
    #line 561 "../smarty/lexer/smarty_internal_templateparser.y"
1906
    function yy_r58()
1907
    {
1908
        $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor . 'close', array(),
1909
                                                       array('object_method' => $this->yystack[ $this->yyidx +
1910
                                                                                                - 1 ]->minor,
1911
                                                             'modifier_list' => $this->yystack[ $this->yyidx +
1912
                                                                                                0 ]->minor));
1913
    }
1914
1915
    #line 569 "../smarty/lexer/smarty_internal_templateparser.y"
1916
    function yy_r59()
1917
    {
1918
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
1919
        $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor;
1920
    }
1921
1922
    #line 575 "../smarty/lexer/smarty_internal_templateparser.y"
1923
    function yy_r60()
1924
    {
1925
        $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
1926
    }
1927
1928
    #line 580 "../smarty/lexer/smarty_internal_templateparser.y"
1929
    function yy_r61()
1930
    {
1931
        $this->_retvalue = array();
1932
    }
1933
1934
    #line 585 "../smarty/lexer/smarty_internal_templateparser.y"
1935
    function yy_r62()
1936
    {
1937
        if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
1938
            if ($this->security) {
1939
                $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
1940
            }
1941
            $this->_retvalue =
1942
                array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
1943
        } else {
1944
            $this->_retvalue =
1945
                array($this->yystack[ $this->yyidx + - 2 ]->minor => '\'' . $this->yystack[ $this->yyidx + 0 ]->minor .
1946
                                                                     '\'');
1947
        }
1948
    }
1949
1950
    #line 596 "../smarty/lexer/smarty_internal_templateparser.y"
1951
    function yy_r63()
1952
    {
1953
        $this->_retvalue =
1954
            array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx +
1955
                                                                                                   0 ]->minor);
1956
    }
1957
1958
    #line 604 "../smarty/lexer/smarty_internal_templateparser.y"
1959
    function yy_r65()
1960
    {
1961
        $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
1962
    }
1963
1964
    #line 616 "../smarty/lexer/smarty_internal_templateparser.y"
1965
    function yy_r68()
1966
    {
1967
        $this->_retvalue =
1968
            array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
1969
    }
1970
1971
    #line 629 "../smarty/lexer/smarty_internal_templateparser.y"
1972
    function yy_r70()
1973
    {
1974
        $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor;
1975
        $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor;
1976
    }
1977
1978
    #line 634 "../smarty/lexer/smarty_internal_templateparser.y"
1979
    function yy_r71()
1980
    {
1981
        $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'',
1982
                                 'value' => $this->yystack[ $this->yyidx + 0 ]->minor);
1983
    }
1984
1985
    #line 641 "../smarty/lexer/smarty_internal_templateparser.y"
1986
    function yy_r73()
1987
    {
1988
        $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor,
1989
                                 'value' => $this->yystack[ $this->yyidx + 0 ]->minor);
1990
    }
1991
1992
    #line 665 "../smarty/lexer/smarty_internal_templateparser.y"
1993
    function yy_r77()
1994
    {
1995
        $this->_retvalue =
1996
            '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' .
1997
            $this->yystack[ $this->yyidx + 0 ]->minor . '\')';
1998
    }
1999
2000
    #line 670 "../smarty/lexer/smarty_internal_templateparser.y"
2001
    function yy_r78()
2002
    {
2003
        $this->_retvalue =
2004
            $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) .
2005
            $this->yystack[ $this->yyidx + 0 ]->minor;
2006
    }
2007
2008
    #line 684 "../smarty/lexer/smarty_internal_templateparser.y"
2009
    function yy_r81()
2010
    {
2011
        $this->_retvalue = $this->compiler->compileTag('private_modifier', array(),
2012
                                                       array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor,
2013
                                                             'modifierlist' => $this->yystack[ $this->yyidx +
2014
                                                                                               0 ]->minor));
2015
    }
2016
2017
    #line 690 "../smarty/lexer/smarty_internal_templateparser.y"
2018
    function yy_r82()
2019
    {
2020
        $this->_retvalue =
2021
            $this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ] . $this->yystack[ $this->yyidx + - 2 ]->minor .
2022
            $this->yystack[ $this->yyidx + - 1 ]->minor[ 'op' ] . $this->yystack[ $this->yyidx + 0 ]->minor . ')';
2023
    }
2024
2025
    #line 694 "../smarty/lexer/smarty_internal_templateparser.y"
2026
    function yy_r83()
2027
    {
2028
        $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor .
2029
                           $this->yystack[ $this->yyidx + 0 ]->minor;
2030
    }
2031
2032
    #line 698 "../smarty/lexer/smarty_internal_templateparser.y"
2033
    function yy_r84()
2034
    {
2035
        $this->_retvalue =
2036
            $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
2037
    }
2038
2039
    #line 702 "../smarty/lexer/smarty_internal_templateparser.y"
2040
    function yy_r85()
2041
    {
2042
        $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' .
2043
                           $this->yystack[ $this->yyidx + 0 ]->minor . ')';
2044
    }
2045
2046
    #line 706 "../smarty/lexer/smarty_internal_templateparser.y"
2047
    function yy_r86()
2048
    {
2049
        $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' .
2050
                           $this->yystack[ $this->yyidx + 0 ]->minor . ')';
2051
    }
2052
2053
    #line 714 "../smarty/lexer/smarty_internal_templateparser.y"
2054
    function yy_r87()
2055
    {
2056
        $this->_retvalue = $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->compiler->compileVariable('\'' .
2057
                                                                                                                  substr($this->yystack[ $this->yyidx +
2058
                                                                                                                                         - 2 ]->minor,
2059
                                                                                                                         1) .
2060
                                                                                                                  '\'') .
2061
                           ' : ' . $this->yystack[ $this->yyidx + 0 ]->minor;
2062
    }
2063
2064
    #line 718 "../smarty/lexer/smarty_internal_templateparser.y"
2065
    function yy_r88()
2066
    {
2067
        $this->_retvalue =
2068
            $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' .
2069
            $this->yystack[ $this->yyidx + 0 ]->minor;
2070
    }
2071
2072
    #line 733 "../smarty/lexer/smarty_internal_templateparser.y"
2073
    function yy_r91()
2074
    {
2075
        $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor;
2076
    }
2077
2078
    #line 754 "../smarty/lexer/smarty_internal_templateparser.y"
2079
    function yy_r96()
2080
    {
2081
        $this->_retvalue =
2082
            $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
2083
    }
2084
2085
    #line 758 "../smarty/lexer/smarty_internal_templateparser.y"
2086
    function yy_r97()
2087
    {
2088
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.';
2089
    }
2090
2091
    #line 762 "../smarty/lexer/smarty_internal_templateparser.y"
2092
    function yy_r98()
2093
    {
2094
        $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
2095
    }
2096
2097
    #line 767 "../smarty/lexer/smarty_internal_templateparser.y"
2098
    function yy_r99()
2099
    {
2100
        if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
2101
            if ($this->security) {
2102
                $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
2103
            }
2104
            $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
2105
        } else {
2106
            $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
2107
        }
2108
    }
2109
2110
    #line 784 "../smarty/lexer/smarty_internal_templateparser.y"
2111
    function yy_r101()
2112
    {
2113
        $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")";
2114
    }
2115
2116
    #line 788 "../smarty/lexer/smarty_internal_templateparser.y"
2117
    function yy_r102()
2118
    {
2119
        $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor .
2120
                           $this->yystack[ $this->yyidx + 0 ]->minor;
2121
    }
2122
2123
    #line 806 "../smarty/lexer/smarty_internal_templateparser.y"
2124
    function yy_r106()
2125
    {
2126
        $prefixVar = $this->compiler->getNewPrefixVariable();
2127
        if ($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ] == '\'smarty\'') {
2128
            $this->compiler->appendPrefixCode("<?php $prefixVar" . ' = ' .
2129
                                              $this->compiler->compileTag('private_special_variable', array(),
2130
                                                                          $this->yystack[ $this->yyidx +
2131
                                                                                          - 2 ]->minor[ 'smarty_internal_index' ]) .
2132
                                              ';?>');
2133
        } else {
2134
            $this->compiler->appendPrefixCode("<?php $prefixVar" . ' = ' .
2135
                                              $this->compiler->compileVariable($this->yystack[ $this->yyidx +
2136
                                                                                               - 2 ]->minor[ 'var' ]) .
2137
                                              $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ] .
2138
                                              ';?>');
2139
        }
2140
        $this->_retvalue = $prefixVar . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] .
2141
                           $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
2142
    }
2143
2144
    #line 817 "../smarty/lexer/smarty_internal_templateparser.y"
2145
    function yy_r107()
2146
    {
2147
        $prefixVar = $this->compiler->getNewPrefixVariable();
2148
        $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[ $this->yyidx + 0 ]->minor);
2149
        $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php $prefixVar" . '=ob_get_clean();?>'));
2150
        $this->_retvalue = $prefixVar;
2151
    }
2152
2153
    #line 834 "../smarty/lexer/smarty_internal_templateparser.y"
2154
    function yy_r110()
2155
    {
2156
        if (!in_array(strtolower($this->yystack[ $this->yyidx + - 2 ]->minor), array('self', 'parent')) &&
2157
            (!$this->security ||
2158
             $this->security->isTrustedStaticClassAccess($this->yystack[ $this->yyidx + - 2 ]->minor,
2159
                                                         $this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler))
2160
        ) {
2161
            if (isset($this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ])) {
2162
                $this->_retvalue =
2163
                    $this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ] . '::' .
2164
                    $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
2165
            } else {
2166
                $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '::' .
2167
                                   $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] .
2168
                                   $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
2169
            }
2170
        } else {
2171
            $this->compiler->trigger_template_error("static class '" . $this->yystack[ $this->yyidx + - 2 ]->minor .
2172
                                                    "' is undefined or not allowed by security setting");
2173
        }
2174
    }
2175
2176
    #line 853 "../smarty/lexer/smarty_internal_templateparser.y"
2177
    function yy_r112()
2178
    {
2179
        $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
2180
    }
2181
2182
    #line 864 "../smarty/lexer/smarty_internal_templateparser.y"
2183
    function yy_r113()
2184
    {
2185
        $this->_retvalue =
2186
            $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'');
2187
    }
2188
2189
    #line 867 "../smarty/lexer/smarty_internal_templateparser.y"
2190
    function yy_r114()
2191
    {
2192
        if ($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ] == '\'smarty\'') {
2193
            $smarty_var = $this->compiler->compileTag('private_special_variable', array(),
2194
                                                      $this->yystack[ $this->yyidx +
2195
                                                                      0 ]->minor[ 'smarty_internal_index' ]);
2196
            $this->_retvalue = $smarty_var;
2197
        } else {
2198
            // used for array reset,next,prev,end,current
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
2199
            $this->last_variable = $this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ];
2200
            $this->last_index = $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ];
2201
            $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]) .
2202
                               $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ];
2203
        }
2204
    }
2205
2206
    #line 880 "../smarty/lexer/smarty_internal_templateparser.y"
2207
    function yy_r115()
2208
    {
2209
        $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' .
2210
                           $this->yystack[ $this->yyidx + 0 ]->minor;
2211
    }
2212
2213
    #line 890 "../smarty/lexer/smarty_internal_templateparser.y"
2214
    function yy_r117()
2215
    {
2216
        $this->_retvalue =
2217
            $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'");
2218
    }
2219
2220
    #line 894 "../smarty/lexer/smarty_internal_templateparser.y"
2221
    function yy_r118()
2222
    {
2223
        $this->_retvalue = '(is_array($tmp = ' .
2224
                           $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 2 ]->minor .
2225
                                                                  "'") . ') ? $tmp' .
2226
                           $this->yystack[ $this->yyidx + 0 ]->minor . ' :null)';
2227
    }
2228
2229
    #line 898 "../smarty/lexer/smarty_internal_templateparser.y"
2230
    function yy_r119()
2231
    {
2232
        $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor);
2233
    }
2234
2235
    #line 902 "../smarty/lexer/smarty_internal_templateparser.y"
2236
    function yy_r120()
2237
    {
2238
        $this->_retvalue =
2239
            '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 2 ]->minor) .
2240
            ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' : null)';
2241
    }
2242
2243
    #line 906 "../smarty/lexer/smarty_internal_templateparser.y"
2244
    function yy_r121()
2245
    {
2246
        $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'',
2247
                                 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor);
2248
    }
2249
2250
    #line 909 "../smarty/lexer/smarty_internal_templateparser.y"
2251
    function yy_r122()
2252
    {
2253
        $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor,
2254
                                 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor);
2255
    }
2256
2257
    #line 922 "../smarty/lexer/smarty_internal_templateparser.y"
2258
    function yy_r124()
2259
    {
2260
        return;
2261
    }
2262
2263
    #line 928 "../smarty/lexer/smarty_internal_templateparser.y"
2264
    function yy_r125()
2265
    {
2266
        $this->_retvalue =
2267
            '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') .
2268
            ']';
2269
    }
2270
2271
    #line 931 "../smarty/lexer/smarty_internal_templateparser.y"
2272
    function yy_r126()
2273
    {
2274
        $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']';
2275
    }
2276
2277
    #line 935 "../smarty/lexer/smarty_internal_templateparser.y"
2278
    function yy_r127()
2279
    {
2280
        $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' .
2281
                           $this->yystack[ $this->yyidx + 0 ]->minor . ']';
2282
    }
2283
2284
    #line 939 "../smarty/lexer/smarty_internal_templateparser.y"
2285
    function yy_r128()
2286
    {
2287
        $this->_retvalue = "['" . $this->yystack[ $this->yyidx + 0 ]->minor . "']";
2288
    }
2289
2290
    #line 943 "../smarty/lexer/smarty_internal_templateparser.y"
2291
    function yy_r129()
2292
    {
2293
        $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']';
2294
    }
2295
2296
    #line 948 "../smarty/lexer/smarty_internal_templateparser.y"
2297
    function yy_r130()
2298
    {
2299
        $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']';
2300
    }
2301
2302
    #line 953 "../smarty/lexer/smarty_internal_templateparser.y"
2303
    function yy_r131()
2304
    {
2305
        $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' .
0 ignored issues
show
Documentation introduced by
'[\'section\'][\'' . $th...inor . '\'][\'index\']' is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2306
                                                                                                  $this->yystack[ $this->yyidx +
2307
                                                                                                                  - 1 ]->minor .
2308
                                                                                                  '\'][\'index\']') .
2309
                           ']';
2310
    }
2311
2312
    #line 957 "../smarty/lexer/smarty_internal_templateparser.y"
2313
    function yy_r132()
2314
    {
2315
        $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' .
0 ignored issues
show
Documentation introduced by
'[\'section\'][\'' . $th...dx + -1]->minor . '\']' is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2316
                                                                                                  $this->yystack[ $this->yyidx +
2317
                                                                                                                  - 3 ]->minor .
2318
                                                                                                  '\'][\'' .
2319
                                                                                                  $this->yystack[ $this->yyidx +
2320
                                                                                                                  - 1 ]->minor .
2321
                                                                                                  '\']') . ']';
2322
    }
2323
2324
    #line 960 "../smarty/lexer/smarty_internal_templateparser.y"
2325
    function yy_r133()
2326
    {
2327
        $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']';
2328
    }
2329
2330
    #line 966 "../smarty/lexer/smarty_internal_templateparser.y"
2331
    function yy_r135()
2332
    {
2333
        $this->_retvalue = '[' . $this->compiler->compileVariable('\'' .
2334
                                                                  substr($this->yystack[ $this->yyidx + - 1 ]->minor,
2335
                                                                         1) . '\'') . ']';;
2336
    }
2337
2338
    #line 982 "../smarty/lexer/smarty_internal_templateparser.y"
2339
    function yy_r139()
2340
    {
2341
        $this->_retvalue = '[]';
2342
    }
2343
2344
    #line 992 "../smarty/lexer/smarty_internal_templateparser.y"
2345
    function yy_r140()
2346
    {
2347
        $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'';
2348
    }
2349
2350
    #line 996 "../smarty/lexer/smarty_internal_templateparser.y"
2351
    function yy_r141()
2352
    {
2353
        $this->_retvalue = "''";
2354
    }
2355
2356
    #line 1001 "../smarty/lexer/smarty_internal_templateparser.y"
2357
    function yy_r142()
2358
    {
2359
        $this->_retvalue =
2360
            $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
2361
    }
2362
2363
    #line 1009 "../smarty/lexer/smarty_internal_templateparser.y"
2364
    function yy_r144()
2365
    {
2366
        $var =
2367
            trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length),
2368
                 ' $');
2369
        $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\'');
2370
    }
2371
2372
    #line 1015 "../smarty/lexer/smarty_internal_templateparser.y"
2373
    function yy_r145()
2374
    {
2375
        $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
2376
    }
2377
2378
    #line 1022 "../smarty/lexer/smarty_internal_templateparser.y"
2379
    function yy_r146()
2380
    {
2381
        if ($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ] == '\'smarty\'') {
2382
            $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(),
2383
                                                           $this->yystack[ $this->yyidx +
2384
                                                                           - 1 ]->minor[ 'smarty_internal_index' ]) .
2385
                               $this->yystack[ $this->yyidx + 0 ]->minor;
2386
        } else {
2387
            $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ]) .
2388
                               $this->yystack[ $this->yyidx + - 1 ]->minor[ 'smarty_internal_index' ] .
2389
                               $this->yystack[ $this->yyidx + 0 ]->minor;
2390
        }
2391
    }
2392
2393
    #line 1031 "../smarty/lexer/smarty_internal_templateparser.y"
2394
    function yy_r147()
2395
    {
2396
        $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
2397
    }
2398
2399
    #line 1036 "../smarty/lexer/smarty_internal_templateparser.y"
2400
    function yy_r148()
2401
    {
2402
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
2403
    }
2404
2405
    #line 1041 "../smarty/lexer/smarty_internal_templateparser.y"
2406
    function yy_r149()
2407
    {
2408
        if ($this->security && substr($this->yystack[ $this->yyidx + - 1 ]->minor, 0, 1) == '_') {
2409
            $this->compiler->trigger_template_error(self::Err1);
2410
        }
2411
        $this->_retvalue =
2412
            '->' . $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
2413
    }
2414
2415
    #line 1048 "../smarty/lexer/smarty_internal_templateparser.y"
2416
    function yy_r150()
2417
    {
2418
        if ($this->security) {
2419
            $this->compiler->trigger_template_error(self::Err2);
2420
        }
2421
        $this->_retvalue = '->{' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor) .
2422
                           $this->yystack[ $this->yyidx + 0 ]->minor . '}';
2423
    }
2424
2425
    #line 1055 "../smarty/lexer/smarty_internal_templateparser.y"
2426
    function yy_r151()
2427
    {
2428
        if ($this->security) {
2429
            $this->compiler->trigger_template_error(self::Err2);
2430
        }
2431
        $this->_retvalue =
2432
            '->{' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}';
2433
    }
2434
2435
    #line 1062 "../smarty/lexer/smarty_internal_templateparser.y"
2436
    function yy_r152()
2437
    {
2438
        if ($this->security) {
2439
            $this->compiler->trigger_template_error(self::Err2);
2440
        }
2441
        $this->_retvalue = '->{\'' . $this->yystack[ $this->yyidx + - 4 ]->minor . '\'.' .
2442
                           $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor .
2443
                           '}';
2444
    }
2445
2446
    #line 1070 "../smarty/lexer/smarty_internal_templateparser.y"
2447
    function yy_r153()
2448
    {
2449
        $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor;
2450
    }
2451
2452
    #line 1078 "../smarty/lexer/smarty_internal_templateparser.y"
2453
    function yy_r154()
2454
    {
2455
        $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[ $this->yyidx + - 3 ]->minor,
2456
                                                                   $this->yystack[ $this->yyidx + - 1 ]->minor);
2457
    }
2458
2459
    #line 1086 "../smarty/lexer/smarty_internal_templateparser.y"
2460
    function yy_r155()
2461
    {
2462
        if ($this->security && substr($this->yystack[ $this->yyidx + - 3 ]->minor, 0, 1) == '_') {
2463
            $this->compiler->trigger_template_error(self::Err1);
2464
        }
2465
        $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" .
2466
                           implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")";
2467
    }
2468
2469
    #line 1093 "../smarty/lexer/smarty_internal_templateparser.y"
2470
    function yy_r156()
2471
    {
2472
        if ($this->security) {
2473
            $this->compiler->trigger_template_error(self::Err2);
2474
        }
2475
        $prefixVar = $this->compiler->getNewPrefixVariable();
2476
        $this->compiler->appendPrefixCode("<?php $prefixVar" . '=' . $this->compiler->compileVariable('\'' .
2477
                                                                                                      substr($this->yystack[ $this->yyidx +
2478
                                                                                                                             - 3 ]->minor,
2479
                                                                                                             1) .
2480
                                                                                                      '\'') . ';?>');
2481
        $this->_retvalue = $prefixVar . '(' . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ')';
2482
    }
2483
2484
    #line 1104 "../smarty/lexer/smarty_internal_templateparser.y"
2485
    function yy_r157()
2486
    {
2487
        $this->_retvalue =
2488
            array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
2489
    }
2490
2491
    #line 1121 "../smarty/lexer/smarty_internal_templateparser.y"
2492
    function yy_r160()
2493
    {
2494
        $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 2 ]->minor,
2495
                                       array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor,
2496
                                                         $this->yystack[ $this->yyidx + 0 ]->minor)));
2497
    }
2498
2499
    #line 1125 "../smarty/lexer/smarty_internal_templateparser.y"
2500
    function yy_r161()
2501
    {
2502
        $this->_retvalue =
2503
            array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor));
2504
    }
2505
2506
    #line 1133 "../smarty/lexer/smarty_internal_templateparser.y"
2507
    function yy_r163()
2508
    {
2509
        $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
2510
    }
2511
2512
    #line 1141 "../smarty/lexer/smarty_internal_templateparser.y"
2513
    function yy_r164()
2514
    {
2515
        $this->_retvalue =
2516
            array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
2517
    }
2518
2519
    #line 1160 "../smarty/lexer/smarty_internal_templateparser.y"
2520
    function yy_r168()
2521
    {
2522
        $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method');
2523
    }
2524
2525
    #line 1165 "../smarty/lexer/smarty_internal_templateparser.y"
2526
    function yy_r169()
2527
    {
2528
        $this->_retvalue =
2529
            array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method');
2530
    }
2531
2532
    #line 1170 "../smarty/lexer/smarty_internal_templateparser.y"
2533
    function yy_r170()
2534
    {
2535
        $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '');
2536
    }
2537
2538
    #line 1175 "../smarty/lexer/smarty_internal_templateparser.y"
2539
    function yy_r171()
2540
    {
2541
        $this->_retvalue =
2542
            array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property');
2543
    }
2544
2545
    #line 1180 "../smarty/lexer/smarty_internal_templateparser.y"
2546
    function yy_r172()
2547
    {
2548
        $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor,
2549
                                 $this->yystack[ $this->yyidx + - 1 ]->minor .
2550
                                 $this->yystack[ $this->yyidx + 0 ]->minor, 'property');
2551
    }
2552
2553
    #line 1186 "../smarty/lexer/smarty_internal_templateparser.y"
2554
    function yy_r173()
2555
    {
2556
        $this->_retvalue = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' ';
2557
    }
2558
2559
    #line 1190 "../smarty/lexer/smarty_internal_templateparser.y"
2560
    function yy_r174()
2561
    {
2562
        static $lops =
2563
            array('eq' => ' == ', 'ne' => ' != ', 'neq' => ' != ', 'gt' => ' > ', 'ge' => ' >= ', 'gte' => ' >= ',
2564
                  'lt' => ' < ', 'le' => ' <= ', 'lte' => ' <= ', 'mod' => ' % ', 'and' => ' && ', 'or' => ' || ',
2565
                  'xor' => ' xor ',);
2566
        $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor));
2567
        $this->_retvalue = $lops[ $op ];
2568
    }
2569
2570
    #line 1209 "../smarty/lexer/smarty_internal_templateparser.y"
2571
    function yy_r175()
2572
    {
2573
        static $tlops =
2574
            array('isdivby' => array('op' => ' % ', 'pre' => '!('), 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
2575
                  'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
2576
                  'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
2577
                  'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
2578
                  'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),);
2579
        $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor));
2580
        $this->_retvalue = $tlops[ $op ];
2581
    }
2582
2583
    #line 1222 "../smarty/lexer/smarty_internal_templateparser.y"
2584
    function yy_r176()
2585
    {
2586
        static $scond =
2587
            array('iseven' => '!(1 & ', 'isnoteven' => '(1 & ', 'isodd' => '(1 & ', 'isnotodd' => '!(1 & ',);
2588
        $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor));
2589
        $this->_retvalue = $scond[ $op ];
2590
    }
2591
2592
    #line 1236 "../smarty/lexer/smarty_internal_templateparser.y"
2593
    function yy_r177()
2594
    {
2595
        $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')';
2596
    }
2597
2598
    #line 1244 "../smarty/lexer/smarty_internal_templateparser.y"
2599
    function yy_r179()
2600
    {
2601
        $this->_retvalue =
2602
            $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor;
2603
    }
2604
2605
    #line 1252 "../smarty/lexer/smarty_internal_templateparser.y"
2606
    function yy_r181()
2607
    {
2608
        $this->_retvalue =
2609
            $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
2610
    }
2611
2612
    #line 1256 "../smarty/lexer/smarty_internal_templateparser.y"
2613
    function yy_r182()
2614
    {
2615
        $this->_retvalue =
2616
            '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
2617
    }
2618
2619
    #line 1272 "../smarty/lexer/smarty_internal_templateparser.y"
2620
    function yy_r185()
2621
    {
2622
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this);
2623
    }
2624
2625
    #line 1277 "../smarty/lexer/smarty_internal_templateparser.y"
2626
    function yy_r186()
2627
    {
2628
        $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
2629
        $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
2630
    }
2631
2632
    #line 1282 "../smarty/lexer/smarty_internal_templateparser.y"
2633
    function yy_r187()
2634
    {
2635
        $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor);
2636
    }
2637
2638
    #line 1286 "../smarty/lexer/smarty_internal_templateparser.y"
2639
    function yy_r188()
2640
    {
2641
        $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor);
2642
    }
2643
2644
    #line 1294 "../smarty/lexer/smarty_internal_templateparser.y"
2645
    function yy_r190()
2646
    {
2647
        $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' .
2648
                                                              substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) .
2649
                                                              '\']->value');
2650
    }
2651
2652
    #line 1302 "../smarty/lexer/smarty_internal_templateparser.y"
2653
    function yy_r192()
2654
    {
2655
        $this->_retvalue =
2656
            new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')');
2657
    }
2658
2659
    #line 1306 "../smarty/lexer/smarty_internal_templateparser.y"
2660
    function yy_r193()
2661
    {
2662
        $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor);
2663
    }
2664
2665
    #line 1310 "../smarty/lexer/smarty_internal_templateparser.y"
2666
    function yy_r194()
2667
    {
2668
        $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor);
2669
    }
2670
2671
    private $_retvalue;
2672
2673
    public function yy_reduce($yyruleno)
2674
    {
2675
        if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) {
2676
            fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno,
2677
                    self::$yyRuleName[ $yyruleno ]);
2678
        }
2679
2680
        $this->_retvalue = $yy_lefthand_side = null;
2681
        if (isset(self::$yyReduceMap[ $yyruleno ])) {
2682
            // call the action
2683
            $this->_retvalue = null;
2684
            $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}();
2685
            $yy_lefthand_side = $this->_retvalue;
2686
        }
2687
        $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ];
2688
        $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
2689
        $this->yyidx -= $yysize;
2690
        for ($i = $yysize; $i; $i --) {
2691
            // pop all of the right-hand side parameters
2692
            array_pop($this->yystack);
2693
        }
2694
        $yyact = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, $yygoto);
2695
        if ($yyact < self::YYNSTATE) {
2696
            if (!$this->yyTraceFILE && $yysize) {
2697
                $this->yyidx ++;
2698
                $x = new TP_yyStackEntry;
2699
                $x->stateno = $yyact;
2700
                $x->major = $yygoto;
2701
                $x->minor = $yy_lefthand_side;
2702
                $this->yystack[ $this->yyidx ] = $x;
2703
            } else {
2704
                $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
2705
            }
2706
        } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) {
2707
            $this->yy_accept();
2708
        }
2709
    }
2710
2711
    public function yy_parse_failed()
2712
    {
2713
        if ($this->yyTraceFILE) {
2714
            fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
2715
        }
2716
        while ($this->yyidx >= 0) {
2717
            $this->yy_pop_parser_stack();
2718
        }
2719
    }
2720
2721
    public function yy_syntax_error($yymajor, $TOKEN)
0 ignored issues
show
Unused Code introduced by
The parameter $TOKEN is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2722
    {
2723
        #line 200 "../smarty/lexer/smarty_internal_templateparser.y"
2724
2725
        $this->internalError = true;
2726
        $this->yymajor = $yymajor;
2727
        $this->compiler->trigger_template_error();
2728
    }
2729
2730
    public function yy_accept()
2731
    {
2732
        if ($this->yyTraceFILE) {
2733
            fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
2734
        }
2735
        while ($this->yyidx >= 0) {
2736
            $this->yy_pop_parser_stack();
2737
        }
2738
        #line 193 "../smarty/lexer/smarty_internal_templateparser.y"
2739
2740
        $this->successful = !$this->internalError;
2741
        $this->internalError = false;
2742
        $this->retvalue = $this->_retvalue;
2743
    }
2744
2745
    public function doParse($yymajor, $yytokenvalue)
2746
    {
2747
        $yyerrorhit = 0;   /* True if yymajor has invoked an error */
2748
2749
        if ($this->yyidx === null || $this->yyidx < 0) {
2750
            $this->yyidx = 0;
2751
            $this->yyerrcnt = - 1;
2752
            $x = new TP_yyStackEntry;
2753
            $x->stateno = 0;
2754
            $x->major = 0;
2755
            $this->yystack = array();
2756
            $this->yystack[] = $x;
2757
        }
2758
        $yyendofinput = ($yymajor == 0);
2759
2760
        if ($this->yyTraceFILE) {
2761
            fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]);
2762
        }
2763
2764
        do {
2765
            $yyact = $this->yy_find_shift_action($yymajor);
2766
            if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) {
2767
                // force a syntax error
2768
                $yyact = self::YY_ERROR_ACTION;
2769
            }
2770
            if ($yyact < self::YYNSTATE) {
2771
                $this->yy_shift($yyact, $yymajor, $yytokenvalue);
2772
                $this->yyerrcnt --;
2773
                if ($yyendofinput && $this->yyidx >= 0) {
2774
                    $yymajor = 0;
2775
                } else {
2776
                    $yymajor = self::YYNOCODE;
2777
                }
2778
            } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
2779
                $this->yy_reduce($yyact - self::YYNSTATE);
2780
            } elseif ($yyact == self::YY_ERROR_ACTION) {
2781
                if ($this->yyTraceFILE) {
2782
                    fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt);
2783
                }
2784
                if (self::YYERRORSYMBOL) {
2785
                    if ($this->yyerrcnt < 0) {
2786
                        $this->yy_syntax_error($yymajor, $yytokenvalue);
2787
                    }
2788
                    $yymx = $this->yystack[ $this->yyidx ]->major;
2789
                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) {
2790
                        if ($this->yyTraceFILE) {
2791
                            fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt,
2792
                                    $this->yyTokenName[ $yymajor ]);
2793
                        }
2794
                        $this->yy_destructor($yymajor, $yytokenvalue);
0 ignored issues
show
Unused Code introduced by
The call to the method Smarty_Internal_Templateparser::yy_destructor() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
2795
                        $yymajor = self::YYNOCODE;
2796
                    } else {
2797
                        while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL &&
2798
                               ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) {
2799
                            $this->yy_pop_parser_stack();
2800
                        }
2801
                        if ($this->yyidx < 0 || $yymajor == 0) {
2802
                            $this->yy_destructor($yymajor, $yytokenvalue);
0 ignored issues
show
Unused Code introduced by
The call to the method Smarty_Internal_Templateparser::yy_destructor() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
2803
                            $this->yy_parse_failed();
2804
                            $yymajor = self::YYNOCODE;
2805
                        } elseif ($yymx != self::YYERRORSYMBOL) {
2806
                            $u2 = 0;
2807
                            $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
2808
                        }
2809
                    }
2810
                    $this->yyerrcnt = 3;
2811
                    $yyerrorhit = 1;
2812
                } else {
2813
                    if ($this->yyerrcnt <= 0) {
2814
                        $this->yy_syntax_error($yymajor, $yytokenvalue);
2815
                    }
2816
                    $this->yyerrcnt = 3;
2817
                    $this->yy_destructor($yymajor, $yytokenvalue);
0 ignored issues
show
Unused Code introduced by
The call to the method Smarty_Internal_Templateparser::yy_destructor() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
2818
                    if ($yyendofinput) {
2819
                        $this->yy_parse_failed();
2820
                    }
2821
                    $yymajor = self::YYNOCODE;
2822
                }
2823
            } else {
2824
                $this->yy_accept();
2825
                $yymajor = self::YYNOCODE;
2826
            }
2827
        }
2828
        while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
2829
    }
2830
}
2831
2832