Completed
Branch master (8e512a)
by
unknown
17:03 queued 09:20
created
vendor/sebastian/type/src/type/MixedType.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -11,31 +11,31 @@
 block discarded – undo
11 11
 
12 12
 final class MixedType extends Type
13 13
 {
14
-    public function isAssignable(Type $other): bool
15
-    {
16
-        return !$other instanceof VoidType;
17
-    }
14
+	public function isAssignable(Type $other): bool
15
+	{
16
+		return !$other instanceof VoidType;
17
+	}
18 18
 
19
-    public function asString(): string
20
-    {
21
-        return 'mixed';
22
-    }
19
+	public function asString(): string
20
+	{
21
+		return 'mixed';
22
+	}
23 23
 
24
-    public function name(): string
25
-    {
26
-        return 'mixed';
27
-    }
24
+	public function name(): string
25
+	{
26
+		return 'mixed';
27
+	}
28 28
 
29
-    public function allowsNull(): bool
30
-    {
31
-        return true;
32
-    }
29
+	public function allowsNull(): bool
30
+	{
31
+		return true;
32
+	}
33 33
 
34
-    /**
35
-     * @psalm-assert-if-true MixedType $this
36
-     */
37
-    public function isMixed(): bool
38
-    {
39
-        return true;
40
-    }
34
+	/**
35
+	 * @psalm-assert-if-true MixedType $this
36
+	 */
37
+	public function isMixed(): bool
38
+	{
39
+		return true;
40
+	}
41 41
 }
Please login to merge, or discard this patch.
vendor/sebastian/type/src/type/IterableType.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -17,68 +17,68 @@
 block discarded – undo
17 17
 
18 18
 final class IterableType extends Type
19 19
 {
20
-    /**
21
-     * @var bool
22
-     */
23
-    private $allowsNull;
20
+	/**
21
+	 * @var bool
22
+	 */
23
+	private $allowsNull;
24 24
 
25
-    public function __construct(bool $nullable)
26
-    {
27
-        $this->allowsNull = $nullable;
28
-    }
25
+	public function __construct(bool $nullable)
26
+	{
27
+		$this->allowsNull = $nullable;
28
+	}
29 29
 
30
-    /**
31
-     * @throws RuntimeException
32
-     */
33
-    public function isAssignable(Type $other): bool
34
-    {
35
-        if ($this->allowsNull && $other instanceof NullType) {
36
-            return true;
37
-        }
30
+	/**
31
+	 * @throws RuntimeException
32
+	 */
33
+	public function isAssignable(Type $other): bool
34
+	{
35
+		if ($this->allowsNull && $other instanceof NullType) {
36
+			return true;
37
+		}
38 38
 
39
-        if ($other instanceof self) {
40
-            return true;
41
-        }
39
+		if ($other instanceof self) {
40
+			return true;
41
+		}
42 42
 
43
-        if ($other instanceof SimpleType) {
44
-            return is_iterable($other->value());
45
-        }
43
+		if ($other instanceof SimpleType) {
44
+			return is_iterable($other->value());
45
+		}
46 46
 
47
-        if ($other instanceof ObjectType) {
48
-            $className = $other->className()->qualifiedName();
49
-            assert(class_exists($className));
47
+		if ($other instanceof ObjectType) {
48
+			$className = $other->className()->qualifiedName();
49
+			assert(class_exists($className));
50 50
 
51
-            try {
52
-                return (new ReflectionClass($className))->isIterable();
53
-                // @codeCoverageIgnoreStart
54
-            } catch (ReflectionException $e) {
55
-                throw new RuntimeException(
56
-                    $e->getMessage(),
57
-                    (int) $e->getCode(),
58
-                    $e
59
-                );
60
-                // @codeCoverageIgnoreEnd
61
-            }
62
-        }
51
+			try {
52
+				return (new ReflectionClass($className))->isIterable();
53
+				// @codeCoverageIgnoreStart
54
+			} catch (ReflectionException $e) {
55
+				throw new RuntimeException(
56
+					$e->getMessage(),
57
+					(int) $e->getCode(),
58
+					$e
59
+				);
60
+				// @codeCoverageIgnoreEnd
61
+			}
62
+		}
63 63
 
64
-        return false;
65
-    }
64
+		return false;
65
+	}
66 66
 
67
-    public function name(): string
68
-    {
69
-        return 'iterable';
70
-    }
67
+	public function name(): string
68
+	{
69
+		return 'iterable';
70
+	}
71 71
 
72
-    public function allowsNull(): bool
73
-    {
74
-        return $this->allowsNull;
75
-    }
72
+	public function allowsNull(): bool
73
+	{
74
+		return $this->allowsNull;
75
+	}
76 76
 
77
-    /**
78
-     * @psalm-assert-if-true IterableType $this
79
-     */
80
-    public function isIterable(): bool
81
-    {
82
-        return true;
83
-    }
77
+	/**
78
+	 * @psalm-assert-if-true IterableType $this
79
+	 */
80
+	public function isIterable(): bool
81
+	{
82
+		return true;
83
+	}
84 84
 }
Please login to merge, or discard this patch.
vendor/autoload.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -2,6 +2,6 @@
 block discarded – undo
2 2
 
3 3
 // autoload.php @generated by Composer
4 4
 
5
-require_once __DIR__ . '/composer/autoload_real.php';
5
+require_once __DIR__.'/composer/autoload_real.php';
6 6
 
7 7
 return ComposerAutoloaderInit6123c47c90042b2e0bad3774215cb7d4::getLoader();
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php 2 patches
Indentation   +961 added lines, -961 removed lines patch added patch discarded remove patch
@@ -26,413 +26,413 @@  discard block
 block discarded – undo
26 26
 
27 27
 abstract class ParserAbstract implements Parser
28 28
 {
29
-    const SYMBOL_NONE = -1;
29
+	const SYMBOL_NONE = -1;
30 30
 
31
-    /*
31
+	/*
32 32
      * The following members will be filled with generated parsing data:
33 33
      */
34 34
 
35
-    /** @var int Size of $tokenToSymbol map */
36
-    protected $tokenToSymbolMapSize;
37
-    /** @var int Size of $action table */
38
-    protected $actionTableSize;
39
-    /** @var int Size of $goto table */
40
-    protected $gotoTableSize;
41
-
42
-    /** @var int Symbol number signifying an invalid token */
43
-    protected $invalidSymbol;
44
-    /** @var int Symbol number of error recovery token */
45
-    protected $errorSymbol;
46
-    /** @var int Action number signifying default action */
47
-    protected $defaultAction;
48
-    /** @var int Rule number signifying that an unexpected token was encountered */
49
-    protected $unexpectedTokenRule;
50
-
51
-    protected $YY2TBLSTATE;
52
-    /** @var int Number of non-leaf states */
53
-    protected $numNonLeafStates;
54
-
55
-    /** @var int[] Map of lexer tokens to internal symbols */
56
-    protected $tokenToSymbol;
57
-    /** @var string[] Map of symbols to their names */
58
-    protected $symbolToName;
59
-    /** @var array Names of the production rules (only necessary for debugging) */
60
-    protected $productions;
61
-
62
-    /** @var int[] Map of states to a displacement into the $action table. The corresponding action for this
63
-     *             state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the
64
-     *             action is defaulted, i.e. $actionDefault[$state] should be used instead. */
65
-    protected $actionBase;
66
-    /** @var int[] Table of actions. Indexed according to $actionBase comment. */
67
-    protected $action;
68
-    /** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol
69
-     *             then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */
70
-    protected $actionCheck;
71
-    /** @var int[] Map of states to their default action */
72
-    protected $actionDefault;
73
-    /** @var callable[] Semantic action callbacks */
74
-    protected $reduceCallbacks;
75
-
76
-    /** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this
77
-     *             non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */
78
-    protected $gotoBase;
79
-    /** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */
80
-    protected $goto;
81
-    /** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal
82
-     *             then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */
83
-    protected $gotoCheck;
84
-    /** @var int[] Map of non-terminals to the default state to goto after their reduction */
85
-    protected $gotoDefault;
86
-
87
-    /** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for
88
-     *             determining the state to goto after reduction. */
89
-    protected $ruleToNonTerminal;
90
-    /** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to
91
-     *             be popped from the stack(s) on reduction. */
92
-    protected $ruleToLength;
93
-
94
-    /*
35
+	/** @var int Size of $tokenToSymbol map */
36
+	protected $tokenToSymbolMapSize;
37
+	/** @var int Size of $action table */
38
+	protected $actionTableSize;
39
+	/** @var int Size of $goto table */
40
+	protected $gotoTableSize;
41
+
42
+	/** @var int Symbol number signifying an invalid token */
43
+	protected $invalidSymbol;
44
+	/** @var int Symbol number of error recovery token */
45
+	protected $errorSymbol;
46
+	/** @var int Action number signifying default action */
47
+	protected $defaultAction;
48
+	/** @var int Rule number signifying that an unexpected token was encountered */
49
+	protected $unexpectedTokenRule;
50
+
51
+	protected $YY2TBLSTATE;
52
+	/** @var int Number of non-leaf states */
53
+	protected $numNonLeafStates;
54
+
55
+	/** @var int[] Map of lexer tokens to internal symbols */
56
+	protected $tokenToSymbol;
57
+	/** @var string[] Map of symbols to their names */
58
+	protected $symbolToName;
59
+	/** @var array Names of the production rules (only necessary for debugging) */
60
+	protected $productions;
61
+
62
+	/** @var int[] Map of states to a displacement into the $action table. The corresponding action for this
63
+	 *             state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the
64
+	 *             action is defaulted, i.e. $actionDefault[$state] should be used instead. */
65
+	protected $actionBase;
66
+	/** @var int[] Table of actions. Indexed according to $actionBase comment. */
67
+	protected $action;
68
+	/** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol
69
+	 *             then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */
70
+	protected $actionCheck;
71
+	/** @var int[] Map of states to their default action */
72
+	protected $actionDefault;
73
+	/** @var callable[] Semantic action callbacks */
74
+	protected $reduceCallbacks;
75
+
76
+	/** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this
77
+	 *             non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */
78
+	protected $gotoBase;
79
+	/** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */
80
+	protected $goto;
81
+	/** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal
82
+	 *             then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */
83
+	protected $gotoCheck;
84
+	/** @var int[] Map of non-terminals to the default state to goto after their reduction */
85
+	protected $gotoDefault;
86
+
87
+	/** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for
88
+	 *             determining the state to goto after reduction. */
89
+	protected $ruleToNonTerminal;
90
+	/** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to
91
+	 *             be popped from the stack(s) on reduction. */
92
+	protected $ruleToLength;
93
+
94
+	/*
95 95
      * The following members are part of the parser state:
96 96
      */
97 97
 
98
-    /** @var Lexer Lexer that is used when parsing */
99
-    protected $lexer;
100
-    /** @var mixed Temporary value containing the result of last semantic action (reduction) */
101
-    protected $semValue;
102
-    /** @var array Semantic value stack (contains values of tokens and semantic action results) */
103
-    protected $semStack;
104
-    /** @var array[] Start attribute stack */
105
-    protected $startAttributeStack;
106
-    /** @var array[] End attribute stack */
107
-    protected $endAttributeStack;
108
-    /** @var array End attributes of last *shifted* token */
109
-    protected $endAttributes;
110
-    /** @var array Start attributes of last *read* token */
111
-    protected $lookaheadStartAttributes;
112
-
113
-    /** @var ErrorHandler Error handler */
114
-    protected $errorHandler;
115
-    /** @var int Error state, used to avoid error floods */
116
-    protected $errorState;
117
-
118
-    /**
119
-     * Initialize $reduceCallbacks map.
120
-     */
121
-    abstract protected function initReduceCallbacks();
122
-
123
-    /**
124
-     * Creates a parser instance.
125
-     *
126
-     * Options: Currently none.
127
-     *
128
-     * @param Lexer $lexer A lexer
129
-     * @param array $options Options array.
130
-     */
131
-    public function __construct(Lexer $lexer, array $options = []) {
132
-        $this->lexer = $lexer;
133
-
134
-        if (isset($options['throwOnError'])) {
135
-            throw new \LogicException(
136
-                '"throwOnError" is no longer supported, use "errorHandler" instead');
137
-        }
138
-
139
-        $this->initReduceCallbacks();
140
-    }
141
-
142
-    /**
143
-     * Parses PHP code into a node tree.
144
-     *
145
-     * If a non-throwing error handler is used, the parser will continue parsing after an error
146
-     * occurred and attempt to build a partial AST.
147
-     *
148
-     * @param string $code The source code to parse
149
-     * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults
150
-     *                                        to ErrorHandler\Throwing.
151
-     *
152
-     * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
153
-     *                          the parser was unable to recover from an error).
154
-     */
155
-    public function parse(string $code, ErrorHandler $errorHandler = null) {
156
-        $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing;
157
-
158
-        $this->lexer->startLexing($code, $this->errorHandler);
159
-        $result = $this->doParse();
160
-
161
-        // Clear out some of the interior state, so we don't hold onto unnecessary
162
-        // memory between uses of the parser
163
-        $this->startAttributeStack = [];
164
-        $this->endAttributeStack = [];
165
-        $this->semStack = [];
166
-        $this->semValue = null;
167
-
168
-        return $result;
169
-    }
170
-
171
-    protected function doParse() {
172
-        // We start off with no lookahead-token
173
-        $symbol = self::SYMBOL_NONE;
174
-
175
-        // The attributes for a node are taken from the first and last token of the node.
176
-        // From the first token only the startAttributes are taken and from the last only
177
-        // the endAttributes. Both are merged using the array union operator (+).
178
-        $startAttributes = [];
179
-        $endAttributes = [];
180
-        $this->endAttributes = $endAttributes;
181
-
182
-        // Keep stack of start and end attributes
183
-        $this->startAttributeStack = [];
184
-        $this->endAttributeStack = [$endAttributes];
185
-
186
-        // Start off in the initial state and keep a stack of previous states
187
-        $state = 0;
188
-        $stateStack = [$state];
189
-
190
-        // Semantic value stack (contains values of tokens and semantic action results)
191
-        $this->semStack = [];
192
-
193
-        // Current position in the stack(s)
194
-        $stackPos = 0;
195
-
196
-        $this->errorState = 0;
197
-
198
-        for (;;) {
199
-            //$this->traceNewState($state, $symbol);
200
-
201
-            if ($this->actionBase[$state] === 0) {
202
-                $rule = $this->actionDefault[$state];
203
-            } else {
204
-                if ($symbol === self::SYMBOL_NONE) {
205
-                    // Fetch the next token id from the lexer and fetch additional info by-ref.
206
-                    // The end attributes are fetched into a temporary variable and only set once the token is really
207
-                    // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is
208
-                    // reduced after a token was read but not yet shifted.
209
-                    $tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes);
210
-
211
-                    // map the lexer token id to the internally used symbols
212
-                    $symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize
213
-                        ? $this->tokenToSymbol[$tokenId]
214
-                        : $this->invalidSymbol;
215
-
216
-                    if ($symbol === $this->invalidSymbol) {
217
-                        throw new \RangeException(sprintf(
218
-                            'The lexer returned an invalid token (id=%d, value=%s)',
219
-                            $tokenId, $tokenValue
220
-                        ));
221
-                    }
222
-
223
-                    // Allow productions to access the start attributes of the lookahead token.
224
-                    $this->lookaheadStartAttributes = $startAttributes;
225
-
226
-                    //$this->traceRead($symbol);
227
-                }
228
-
229
-                $idx = $this->actionBase[$state] + $symbol;
230
-                if ((($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol)
231
-                     || ($state < $this->YY2TBLSTATE
232
-                         && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
233
-                         && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol))
234
-                    && ($action = $this->action[$idx]) !== $this->defaultAction) {
235
-                    /*
98
+	/** @var Lexer Lexer that is used when parsing */
99
+	protected $lexer;
100
+	/** @var mixed Temporary value containing the result of last semantic action (reduction) */
101
+	protected $semValue;
102
+	/** @var array Semantic value stack (contains values of tokens and semantic action results) */
103
+	protected $semStack;
104
+	/** @var array[] Start attribute stack */
105
+	protected $startAttributeStack;
106
+	/** @var array[] End attribute stack */
107
+	protected $endAttributeStack;
108
+	/** @var array End attributes of last *shifted* token */
109
+	protected $endAttributes;
110
+	/** @var array Start attributes of last *read* token */
111
+	protected $lookaheadStartAttributes;
112
+
113
+	/** @var ErrorHandler Error handler */
114
+	protected $errorHandler;
115
+	/** @var int Error state, used to avoid error floods */
116
+	protected $errorState;
117
+
118
+	/**
119
+	 * Initialize $reduceCallbacks map.
120
+	 */
121
+	abstract protected function initReduceCallbacks();
122
+
123
+	/**
124
+	 * Creates a parser instance.
125
+	 *
126
+	 * Options: Currently none.
127
+	 *
128
+	 * @param Lexer $lexer A lexer
129
+	 * @param array $options Options array.
130
+	 */
131
+	public function __construct(Lexer $lexer, array $options = []) {
132
+		$this->lexer = $lexer;
133
+
134
+		if (isset($options['throwOnError'])) {
135
+			throw new \LogicException(
136
+				'"throwOnError" is no longer supported, use "errorHandler" instead');
137
+		}
138
+
139
+		$this->initReduceCallbacks();
140
+	}
141
+
142
+	/**
143
+	 * Parses PHP code into a node tree.
144
+	 *
145
+	 * If a non-throwing error handler is used, the parser will continue parsing after an error
146
+	 * occurred and attempt to build a partial AST.
147
+	 *
148
+	 * @param string $code The source code to parse
149
+	 * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults
150
+	 *                                        to ErrorHandler\Throwing.
151
+	 *
152
+	 * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
153
+	 *                          the parser was unable to recover from an error).
154
+	 */
155
+	public function parse(string $code, ErrorHandler $errorHandler = null) {
156
+		$this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing;
157
+
158
+		$this->lexer->startLexing($code, $this->errorHandler);
159
+		$result = $this->doParse();
160
+
161
+		// Clear out some of the interior state, so we don't hold onto unnecessary
162
+		// memory between uses of the parser
163
+		$this->startAttributeStack = [];
164
+		$this->endAttributeStack = [];
165
+		$this->semStack = [];
166
+		$this->semValue = null;
167
+
168
+		return $result;
169
+	}
170
+
171
+	protected function doParse() {
172
+		// We start off with no lookahead-token
173
+		$symbol = self::SYMBOL_NONE;
174
+
175
+		// The attributes for a node are taken from the first and last token of the node.
176
+		// From the first token only the startAttributes are taken and from the last only
177
+		// the endAttributes. Both are merged using the array union operator (+).
178
+		$startAttributes = [];
179
+		$endAttributes = [];
180
+		$this->endAttributes = $endAttributes;
181
+
182
+		// Keep stack of start and end attributes
183
+		$this->startAttributeStack = [];
184
+		$this->endAttributeStack = [$endAttributes];
185
+
186
+		// Start off in the initial state and keep a stack of previous states
187
+		$state = 0;
188
+		$stateStack = [$state];
189
+
190
+		// Semantic value stack (contains values of tokens and semantic action results)
191
+		$this->semStack = [];
192
+
193
+		// Current position in the stack(s)
194
+		$stackPos = 0;
195
+
196
+		$this->errorState = 0;
197
+
198
+		for (;;) {
199
+			//$this->traceNewState($state, $symbol);
200
+
201
+			if ($this->actionBase[$state] === 0) {
202
+				$rule = $this->actionDefault[$state];
203
+			} else {
204
+				if ($symbol === self::SYMBOL_NONE) {
205
+					// Fetch the next token id from the lexer and fetch additional info by-ref.
206
+					// The end attributes are fetched into a temporary variable and only set once the token is really
207
+					// shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is
208
+					// reduced after a token was read but not yet shifted.
209
+					$tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes);
210
+
211
+					// map the lexer token id to the internally used symbols
212
+					$symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize
213
+						? $this->tokenToSymbol[$tokenId]
214
+						: $this->invalidSymbol;
215
+
216
+					if ($symbol === $this->invalidSymbol) {
217
+						throw new \RangeException(sprintf(
218
+							'The lexer returned an invalid token (id=%d, value=%s)',
219
+							$tokenId, $tokenValue
220
+						));
221
+					}
222
+
223
+					// Allow productions to access the start attributes of the lookahead token.
224
+					$this->lookaheadStartAttributes = $startAttributes;
225
+
226
+					//$this->traceRead($symbol);
227
+				}
228
+
229
+				$idx = $this->actionBase[$state] + $symbol;
230
+				if ((($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol)
231
+					 || ($state < $this->YY2TBLSTATE
232
+						 && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
233
+						 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol))
234
+					&& ($action = $this->action[$idx]) !== $this->defaultAction) {
235
+					/*
236 236
                      * >= numNonLeafStates: shift and reduce
237 237
                      * > 0: shift
238 238
                      * = 0: accept
239 239
                      * < 0: reduce
240 240
                      * = -YYUNEXPECTED: error
241 241
                      */
242
-                    if ($action > 0) {
243
-                        /* shift */
244
-                        //$this->traceShift($symbol);
245
-
246
-                        ++$stackPos;
247
-                        $stateStack[$stackPos] = $state = $action;
248
-                        $this->semStack[$stackPos] = $tokenValue;
249
-                        $this->startAttributeStack[$stackPos] = $startAttributes;
250
-                        $this->endAttributeStack[$stackPos] = $endAttributes;
251
-                        $this->endAttributes = $endAttributes;
252
-                        $symbol = self::SYMBOL_NONE;
253
-
254
-                        if ($this->errorState) {
255
-                            --$this->errorState;
256
-                        }
257
-
258
-                        if ($action < $this->numNonLeafStates) {
259
-                            continue;
260
-                        }
261
-
262
-                        /* $yyn >= numNonLeafStates means shift-and-reduce */
263
-                        $rule = $action - $this->numNonLeafStates;
264
-                    } else {
265
-                        $rule = -$action;
266
-                    }
267
-                } else {
268
-                    $rule = $this->actionDefault[$state];
269
-                }
270
-            }
271
-
272
-            for (;;) {
273
-                if ($rule === 0) {
274
-                    /* accept */
275
-                    //$this->traceAccept();
276
-                    return $this->semValue;
277
-                } elseif ($rule !== $this->unexpectedTokenRule) {
278
-                    /* reduce */
279
-                    //$this->traceReduce($rule);
280
-
281
-                    try {
282
-                        $this->reduceCallbacks[$rule]($stackPos);
283
-                    } catch (Error $e) {
284
-                        if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) {
285
-                            $e->setStartLine($startAttributes['startLine']);
286
-                        }
287
-
288
-                        $this->emitError($e);
289
-                        // Can't recover from this type of error
290
-                        return null;
291
-                    }
292
-
293
-                    /* Goto - shift nonterminal */
294
-                    $lastEndAttributes = $this->endAttributeStack[$stackPos];
295
-                    $ruleLength = $this->ruleToLength[$rule];
296
-                    $stackPos -= $ruleLength;
297
-                    $nonTerminal = $this->ruleToNonTerminal[$rule];
298
-                    $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos];
299
-                    if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) {
300
-                        $state = $this->goto[$idx];
301
-                    } else {
302
-                        $state = $this->gotoDefault[$nonTerminal];
303
-                    }
304
-
305
-                    ++$stackPos;
306
-                    $stateStack[$stackPos]     = $state;
307
-                    $this->semStack[$stackPos] = $this->semValue;
308
-                    $this->endAttributeStack[$stackPos] = $lastEndAttributes;
309
-                    if ($ruleLength === 0) {
310
-                        // Empty productions use the start attributes of the lookahead token.
311
-                        $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes;
312
-                    }
313
-                } else {
314
-                    /* error */
315
-                    switch ($this->errorState) {
316
-                        case 0:
317
-                            $msg = $this->getErrorMessage($symbol, $state);
318
-                            $this->emitError(new Error($msg, $startAttributes + $endAttributes));
319
-                            // Break missing intentionally
320
-                        case 1:
321
-                        case 2:
322
-                            $this->errorState = 3;
323
-
324
-                            // Pop until error-expecting state uncovered
325
-                            while (!(
326
-                                (($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0
327
-                                    && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
328
-                                || ($state < $this->YY2TBLSTATE
329
-                                    && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0
330
-                                    && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
331
-                            ) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this
332
-                                if ($stackPos <= 0) {
333
-                                    // Could not recover from error
334
-                                    return null;
335
-                                }
336
-                                $state = $stateStack[--$stackPos];
337
-                                //$this->tracePop($state);
338
-                            }
339
-
340
-                            //$this->traceShift($this->errorSymbol);
341
-                            ++$stackPos;
342
-                            $stateStack[$stackPos] = $state = $action;
343
-
344
-                            // We treat the error symbol as being empty, so we reset the end attributes
345
-                            // to the end attributes of the last non-error symbol
346
-                            $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes;
347
-                            $this->endAttributeStack[$stackPos] = $this->endAttributeStack[$stackPos - 1];
348
-                            $this->endAttributes = $this->endAttributeStack[$stackPos - 1];
349
-                            break;
350
-
351
-                        case 3:
352
-                            if ($symbol === 0) {
353
-                                // Reached EOF without recovering from error
354
-                                return null;
355
-                            }
356
-
357
-                            //$this->traceDiscard($symbol);
358
-                            $symbol = self::SYMBOL_NONE;
359
-                            break 2;
360
-                    }
361
-                }
362
-
363
-                if ($state < $this->numNonLeafStates) {
364
-                    break;
365
-                }
366
-
367
-                /* >= numNonLeafStates means shift-and-reduce */
368
-                $rule = $state - $this->numNonLeafStates;
369
-            }
370
-        }
371
-
372
-        throw new \RuntimeException('Reached end of parser loop');
373
-    }
374
-
375
-    protected function emitError(Error $error) {
376
-        $this->errorHandler->handleError($error);
377
-    }
378
-
379
-    /**
380
-     * Format error message including expected tokens.
381
-     *
382
-     * @param int $symbol Unexpected symbol
383
-     * @param int $state  State at time of error
384
-     *
385
-     * @return string Formatted error message
386
-     */
387
-    protected function getErrorMessage(int $symbol, int $state) : string {
388
-        $expectedString = '';
389
-        if ($expected = $this->getExpectedTokens($state)) {
390
-            $expectedString = ', expecting ' . implode(' or ', $expected);
391
-        }
392
-
393
-        return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString;
394
-    }
395
-
396
-    /**
397
-     * Get limited number of expected tokens in given state.
398
-     *
399
-     * @param int $state State
400
-     *
401
-     * @return string[] Expected tokens. If too many, an empty array is returned.
402
-     */
403
-    protected function getExpectedTokens(int $state) : array {
404
-        $expected = [];
405
-
406
-        $base = $this->actionBase[$state];
407
-        foreach ($this->symbolToName as $symbol => $name) {
408
-            $idx = $base + $symbol;
409
-            if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
410
-                || $state < $this->YY2TBLSTATE
411
-                && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
412
-                && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
413
-            ) {
414
-                if ($this->action[$idx] !== $this->unexpectedTokenRule
415
-                    && $this->action[$idx] !== $this->defaultAction
416
-                    && $symbol !== $this->errorSymbol
417
-                ) {
418
-                    if (count($expected) === 4) {
419
-                        /* Too many expected tokens */
420
-                        return [];
421
-                    }
422
-
423
-                    $expected[] = $name;
424
-                }
425
-            }
426
-        }
427
-
428
-        return $expected;
429
-    }
430
-
431
-    /*
242
+					if ($action > 0) {
243
+						/* shift */
244
+						//$this->traceShift($symbol);
245
+
246
+						++$stackPos;
247
+						$stateStack[$stackPos] = $state = $action;
248
+						$this->semStack[$stackPos] = $tokenValue;
249
+						$this->startAttributeStack[$stackPos] = $startAttributes;
250
+						$this->endAttributeStack[$stackPos] = $endAttributes;
251
+						$this->endAttributes = $endAttributes;
252
+						$symbol = self::SYMBOL_NONE;
253
+
254
+						if ($this->errorState) {
255
+							--$this->errorState;
256
+						}
257
+
258
+						if ($action < $this->numNonLeafStates) {
259
+							continue;
260
+						}
261
+
262
+						/* $yyn >= numNonLeafStates means shift-and-reduce */
263
+						$rule = $action - $this->numNonLeafStates;
264
+					} else {
265
+						$rule = -$action;
266
+					}
267
+				} else {
268
+					$rule = $this->actionDefault[$state];
269
+				}
270
+			}
271
+
272
+			for (;;) {
273
+				if ($rule === 0) {
274
+					/* accept */
275
+					//$this->traceAccept();
276
+					return $this->semValue;
277
+				} elseif ($rule !== $this->unexpectedTokenRule) {
278
+					/* reduce */
279
+					//$this->traceReduce($rule);
280
+
281
+					try {
282
+						$this->reduceCallbacks[$rule]($stackPos);
283
+					} catch (Error $e) {
284
+						if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) {
285
+							$e->setStartLine($startAttributes['startLine']);
286
+						}
287
+
288
+						$this->emitError($e);
289
+						// Can't recover from this type of error
290
+						return null;
291
+					}
292
+
293
+					/* Goto - shift nonterminal */
294
+					$lastEndAttributes = $this->endAttributeStack[$stackPos];
295
+					$ruleLength = $this->ruleToLength[$rule];
296
+					$stackPos -= $ruleLength;
297
+					$nonTerminal = $this->ruleToNonTerminal[$rule];
298
+					$idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos];
299
+					if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) {
300
+						$state = $this->goto[$idx];
301
+					} else {
302
+						$state = $this->gotoDefault[$nonTerminal];
303
+					}
304
+
305
+					++$stackPos;
306
+					$stateStack[$stackPos]     = $state;
307
+					$this->semStack[$stackPos] = $this->semValue;
308
+					$this->endAttributeStack[$stackPos] = $lastEndAttributes;
309
+					if ($ruleLength === 0) {
310
+						// Empty productions use the start attributes of the lookahead token.
311
+						$this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes;
312
+					}
313
+				} else {
314
+					/* error */
315
+					switch ($this->errorState) {
316
+						case 0:
317
+							$msg = $this->getErrorMessage($symbol, $state);
318
+							$this->emitError(new Error($msg, $startAttributes + $endAttributes));
319
+							// Break missing intentionally
320
+						case 1:
321
+						case 2:
322
+							$this->errorState = 3;
323
+
324
+							// Pop until error-expecting state uncovered
325
+							while (!(
326
+								(($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0
327
+									&& $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
328
+								|| ($state < $this->YY2TBLSTATE
329
+									&& ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0
330
+									&& $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
331
+							) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this
332
+								if ($stackPos <= 0) {
333
+									// Could not recover from error
334
+									return null;
335
+								}
336
+								$state = $stateStack[--$stackPos];
337
+								//$this->tracePop($state);
338
+							}
339
+
340
+							//$this->traceShift($this->errorSymbol);
341
+							++$stackPos;
342
+							$stateStack[$stackPos] = $state = $action;
343
+
344
+							// We treat the error symbol as being empty, so we reset the end attributes
345
+							// to the end attributes of the last non-error symbol
346
+							$this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes;
347
+							$this->endAttributeStack[$stackPos] = $this->endAttributeStack[$stackPos - 1];
348
+							$this->endAttributes = $this->endAttributeStack[$stackPos - 1];
349
+							break;
350
+
351
+						case 3:
352
+							if ($symbol === 0) {
353
+								// Reached EOF without recovering from error
354
+								return null;
355
+							}
356
+
357
+							//$this->traceDiscard($symbol);
358
+							$symbol = self::SYMBOL_NONE;
359
+							break 2;
360
+					}
361
+				}
362
+
363
+				if ($state < $this->numNonLeafStates) {
364
+					break;
365
+				}
366
+
367
+				/* >= numNonLeafStates means shift-and-reduce */
368
+				$rule = $state - $this->numNonLeafStates;
369
+			}
370
+		}
371
+
372
+		throw new \RuntimeException('Reached end of parser loop');
373
+	}
374
+
375
+	protected function emitError(Error $error) {
376
+		$this->errorHandler->handleError($error);
377
+	}
378
+
379
+	/**
380
+	 * Format error message including expected tokens.
381
+	 *
382
+	 * @param int $symbol Unexpected symbol
383
+	 * @param int $state  State at time of error
384
+	 *
385
+	 * @return string Formatted error message
386
+	 */
387
+	protected function getErrorMessage(int $symbol, int $state) : string {
388
+		$expectedString = '';
389
+		if ($expected = $this->getExpectedTokens($state)) {
390
+			$expectedString = ', expecting ' . implode(' or ', $expected);
391
+		}
392
+
393
+		return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString;
394
+	}
395
+
396
+	/**
397
+	 * Get limited number of expected tokens in given state.
398
+	 *
399
+	 * @param int $state State
400
+	 *
401
+	 * @return string[] Expected tokens. If too many, an empty array is returned.
402
+	 */
403
+	protected function getExpectedTokens(int $state) : array {
404
+		$expected = [];
405
+
406
+		$base = $this->actionBase[$state];
407
+		foreach ($this->symbolToName as $symbol => $name) {
408
+			$idx = $base + $symbol;
409
+			if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
410
+				|| $state < $this->YY2TBLSTATE
411
+				&& ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
412
+				&& $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
413
+			) {
414
+				if ($this->action[$idx] !== $this->unexpectedTokenRule
415
+					&& $this->action[$idx] !== $this->defaultAction
416
+					&& $symbol !== $this->errorSymbol
417
+				) {
418
+					if (count($expected) === 4) {
419
+						/* Too many expected tokens */
420
+						return [];
421
+					}
422
+
423
+					$expected[] = $name;
424
+				}
425
+			}
426
+		}
427
+
428
+		return $expected;
429
+	}
430
+
431
+	/*
432 432
      * Tracing functions used for debugging the parser.
433 433
      */
434 434
 
435
-    /*
435
+	/*
436 436
     protected function traceNewState($state, $symbol) {
437 437
         echo '% State ' . $state
438 438
             . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n";
@@ -463,577 +463,577 @@  discard block
 block discarded – undo
463 463
     }
464 464
     */
465 465
 
466
-    /*
466
+	/*
467 467
      * Helper functions invoked by semantic actions
468 468
      */
469 469
 
470
-    /**
471
-     * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions.
472
-     *
473
-     * @param Node\Stmt[] $stmts
474
-     * @return Node\Stmt[]
475
-     */
476
-    protected function handleNamespaces(array $stmts) : array {
477
-        $hasErrored = false;
478
-        $style = $this->getNamespacingStyle($stmts);
479
-        if (null === $style) {
480
-            // not namespaced, nothing to do
481
-            return $stmts;
482
-        } elseif ('brace' === $style) {
483
-            // For braced namespaces we only have to check that there are no invalid statements between the namespaces
484
-            $afterFirstNamespace = false;
485
-            foreach ($stmts as $stmt) {
486
-                if ($stmt instanceof Node\Stmt\Namespace_) {
487
-                    $afterFirstNamespace = true;
488
-                } elseif (!$stmt instanceof Node\Stmt\HaltCompiler
489
-                        && !$stmt instanceof Node\Stmt\Nop
490
-                        && $afterFirstNamespace && !$hasErrored) {
491
-                    $this->emitError(new Error(
492
-                        'No code may exist outside of namespace {}', $stmt->getAttributes()));
493
-                    $hasErrored = true; // Avoid one error for every statement
494
-                }
495
-            }
496
-            return $stmts;
497
-        } else {
498
-            // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts
499
-            $resultStmts = [];
500
-            $targetStmts =& $resultStmts;
501
-            $lastNs = null;
502
-            foreach ($stmts as $stmt) {
503
-                if ($stmt instanceof Node\Stmt\Namespace_) {
504
-                    if ($lastNs !== null) {
505
-                        $this->fixupNamespaceAttributes($lastNs);
506
-                    }
507
-                    if ($stmt->stmts === null) {
508
-                        $stmt->stmts = [];
509
-                        $targetStmts =& $stmt->stmts;
510
-                        $resultStmts[] = $stmt;
511
-                    } else {
512
-                        // This handles the invalid case of mixed style namespaces
513
-                        $resultStmts[] = $stmt;
514
-                        $targetStmts =& $resultStmts;
515
-                    }
516
-                    $lastNs = $stmt;
517
-                } elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
518
-                    // __halt_compiler() is not moved into the namespace
519
-                    $resultStmts[] = $stmt;
520
-                } else {
521
-                    $targetStmts[] = $stmt;
522
-                }
523
-            }
524
-            if ($lastNs !== null) {
525
-                $this->fixupNamespaceAttributes($lastNs);
526
-            }
527
-            return $resultStmts;
528
-        }
529
-    }
530
-
531
-    private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt) {
532
-        // We moved the statements into the namespace node, as such the end of the namespace node
533
-        // needs to be extended to the end of the statements.
534
-        if (empty($stmt->stmts)) {
535
-            return;
536
-        }
537
-
538
-        // We only move the builtin end attributes here. This is the best we can do with the
539
-        // knowledge we have.
540
-        $endAttributes = ['endLine', 'endFilePos', 'endTokenPos'];
541
-        $lastStmt = $stmt->stmts[count($stmt->stmts) - 1];
542
-        foreach ($endAttributes as $endAttribute) {
543
-            if ($lastStmt->hasAttribute($endAttribute)) {
544
-                $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute));
545
-            }
546
-        }
547
-    }
548
-
549
-    /**
550
-     * Determine namespacing style (semicolon or brace)
551
-     *
552
-     * @param Node[] $stmts Top-level statements.
553
-     *
554
-     * @return null|string One of "semicolon", "brace" or null (no namespaces)
555
-     */
556
-    private function getNamespacingStyle(array $stmts) {
557
-        $style = null;
558
-        $hasNotAllowedStmts = false;
559
-        foreach ($stmts as $i => $stmt) {
560
-            if ($stmt instanceof Node\Stmt\Namespace_) {
561
-                $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace';
562
-                if (null === $style) {
563
-                    $style = $currentStyle;
564
-                    if ($hasNotAllowedStmts) {
565
-                        $this->emitError(new Error(
566
-                            'Namespace declaration statement has to be the very first statement in the script',
567
-                            $stmt->getLine() // Avoid marking the entire namespace as an error
568
-                        ));
569
-                    }
570
-                } elseif ($style !== $currentStyle) {
571
-                    $this->emitError(new Error(
572
-                        'Cannot mix bracketed namespace declarations with unbracketed namespace declarations',
573
-                        $stmt->getLine() // Avoid marking the entire namespace as an error
574
-                    ));
575
-                    // Treat like semicolon style for namespace normalization
576
-                    return 'semicolon';
577
-                }
578
-                continue;
579
-            }
580
-
581
-            /* declare(), __halt_compiler() and nops can be used before a namespace declaration */
582
-            if ($stmt instanceof Node\Stmt\Declare_
583
-                || $stmt instanceof Node\Stmt\HaltCompiler
584
-                || $stmt instanceof Node\Stmt\Nop) {
585
-                continue;
586
-            }
587
-
588
-            /* There may be a hashbang line at the very start of the file */
589
-            if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) {
590
-                continue;
591
-            }
592
-
593
-            /* Everything else if forbidden before namespace declarations */
594
-            $hasNotAllowedStmts = true;
595
-        }
596
-        return $style;
597
-    }
598
-
599
-    /**
600
-     * Fix up parsing of static property calls in PHP 5.
601
-     *
602
-     * In PHP 5 A::$b[c][d] and A::$b[c][d]() have very different interpretation. The former is
603
-     * interpreted as (A::$b)[c][d], while the latter is the same as A::{$b[c][d]}(). We parse the
604
-     * latter as the former initially and this method fixes the AST into the correct form when we
605
-     * encounter the "()".
606
-     *
607
-     * @param  Node\Expr\StaticPropertyFetch|Node\Expr\ArrayDimFetch $prop
608
-     * @param  Node\Arg[] $args
609
-     * @param  array      $attributes
610
-     *
611
-     * @return Expr\StaticCall
612
-     */
613
-    protected function fixupPhp5StaticPropCall($prop, array $args, array $attributes) : Expr\StaticCall {
614
-        if ($prop instanceof Node\Expr\StaticPropertyFetch) {
615
-            $name = $prop->name instanceof VarLikeIdentifier
616
-                ? $prop->name->toString() : $prop->name;
617
-            $var = new Expr\Variable($name, $prop->name->getAttributes());
618
-            return new Expr\StaticCall($prop->class, $var, $args, $attributes);
619
-        } elseif ($prop instanceof Node\Expr\ArrayDimFetch) {
620
-            $tmp = $prop;
621
-            while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
622
-                $tmp = $tmp->var;
623
-            }
624
-
625
-            /** @var Expr\StaticPropertyFetch $staticProp */
626
-            $staticProp = $tmp->var;
627
-
628
-            // Set start attributes to attributes of innermost node
629
-            $tmp = $prop;
630
-            $this->fixupStartAttributes($tmp, $staticProp->name);
631
-            while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
632
-                $tmp = $tmp->var;
633
-                $this->fixupStartAttributes($tmp, $staticProp->name);
634
-            }
635
-
636
-            $name = $staticProp->name instanceof VarLikeIdentifier
637
-                ? $staticProp->name->toString() : $staticProp->name;
638
-            $tmp->var = new Expr\Variable($name, $staticProp->name->getAttributes());
639
-            return new Expr\StaticCall($staticProp->class, $prop, $args, $attributes);
640
-        } else {
641
-            throw new \Exception;
642
-        }
643
-    }
644
-
645
-    protected function fixupStartAttributes(Node $to, Node $from) {
646
-        $startAttributes = ['startLine', 'startFilePos', 'startTokenPos'];
647
-        foreach ($startAttributes as $startAttribute) {
648
-            if ($from->hasAttribute($startAttribute)) {
649
-                $to->setAttribute($startAttribute, $from->getAttribute($startAttribute));
650
-            }
651
-        }
652
-    }
653
-
654
-    protected function handleBuiltinTypes(Name $name) {
655
-        $builtinTypes = [
656
-            'bool'     => true,
657
-            'int'      => true,
658
-            'float'    => true,
659
-            'string'   => true,
660
-            'iterable' => true,
661
-            'void'     => true,
662
-            'object'   => true,
663
-            'null'     => true,
664
-            'false'    => true,
665
-            'mixed'    => true,
666
-            'never'    => true,
667
-            'true'     => true,
668
-        ];
669
-
670
-        if (!$name->isUnqualified()) {
671
-            return $name;
672
-        }
673
-
674
-        $lowerName = $name->toLowerString();
675
-        if (!isset($builtinTypes[$lowerName])) {
676
-            return $name;
677
-        }
678
-
679
-        return new Node\Identifier($lowerName, $name->getAttributes());
680
-    }
681
-
682
-    /**
683
-     * Get combined start and end attributes at a stack location
684
-     *
685
-     * @param int $pos Stack location
686
-     *
687
-     * @return array Combined start and end attributes
688
-     */
689
-    protected function getAttributesAt(int $pos) : array {
690
-        return $this->startAttributeStack[$pos] + $this->endAttributeStack[$pos];
691
-    }
692
-
693
-    protected function getFloatCastKind(string $cast): int
694
-    {
695
-        $cast = strtolower($cast);
696
-        if (strpos($cast, 'float') !== false) {
697
-            return Double::KIND_FLOAT;
698
-        }
699
-
700
-        if (strpos($cast, 'real') !== false) {
701
-            return Double::KIND_REAL;
702
-        }
703
-
704
-        return Double::KIND_DOUBLE;
705
-    }
706
-
707
-    protected function parseLNumber($str, $attributes, $allowInvalidOctal = false) {
708
-        try {
709
-            return LNumber::fromString($str, $attributes, $allowInvalidOctal);
710
-        } catch (Error $error) {
711
-            $this->emitError($error);
712
-            // Use dummy value
713
-            return new LNumber(0, $attributes);
714
-        }
715
-    }
716
-
717
-    /**
718
-     * Parse a T_NUM_STRING token into either an integer or string node.
719
-     *
720
-     * @param string $str        Number string
721
-     * @param array  $attributes Attributes
722
-     *
723
-     * @return LNumber|String_ Integer or string node.
724
-     */
725
-    protected function parseNumString(string $str, array $attributes) {
726
-        if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) {
727
-            return new String_($str, $attributes);
728
-        }
729
-
730
-        $num = +$str;
731
-        if (!is_int($num)) {
732
-            return new String_($str, $attributes);
733
-        }
734
-
735
-        return new LNumber($num, $attributes);
736
-    }
737
-
738
-    protected function stripIndentation(
739
-        string $string, int $indentLen, string $indentChar,
740
-        bool $newlineAtStart, bool $newlineAtEnd, array $attributes
741
-    ) {
742
-        if ($indentLen === 0) {
743
-            return $string;
744
-        }
745
-
746
-        $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)';
747
-        $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])';
748
-        $regex = '/' . $start . '([ \t]*)(' . $end . ')?/';
749
-        return preg_replace_callback(
750
-            $regex,
751
-            function ($matches) use ($indentLen, $indentChar, $attributes) {
752
-                $prefix = substr($matches[1], 0, $indentLen);
753
-                if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) {
754
-                    $this->emitError(new Error(
755
-                        'Invalid indentation - tabs and spaces cannot be mixed', $attributes
756
-                    ));
757
-                } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) {
758
-                    $this->emitError(new Error(
759
-                        'Invalid body indentation level ' .
760
-                        '(expecting an indentation level of at least ' . $indentLen . ')',
761
-                        $attributes
762
-                    ));
763
-                }
764
-                return substr($matches[0], strlen($prefix));
765
-            },
766
-            $string
767
-        );
768
-    }
769
-
770
-    protected function parseDocString(
771
-        string $startToken, $contents, string $endToken,
772
-        array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape
773
-    ) {
774
-        $kind = strpos($startToken, "'") === false
775
-            ? String_::KIND_HEREDOC : String_::KIND_NOWDOC;
776
-
777
-        $regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/';
778
-        $result = preg_match($regex, $startToken, $matches);
779
-        assert($result === 1);
780
-        $label = $matches[1];
781
-
782
-        $result = preg_match('/\A[ \t]*/', $endToken, $matches);
783
-        assert($result === 1);
784
-        $indentation = $matches[0];
785
-
786
-        $attributes['kind'] = $kind;
787
-        $attributes['docLabel'] = $label;
788
-        $attributes['docIndentation'] = $indentation;
789
-
790
-        $indentHasSpaces = false !== strpos($indentation, " ");
791
-        $indentHasTabs = false !== strpos($indentation, "\t");
792
-        if ($indentHasSpaces && $indentHasTabs) {
793
-            $this->emitError(new Error(
794
-                'Invalid indentation - tabs and spaces cannot be mixed',
795
-                $endTokenAttributes
796
-            ));
797
-
798
-            // Proceed processing as if this doc string is not indented
799
-            $indentation = '';
800
-        }
801
-
802
-        $indentLen = \strlen($indentation);
803
-        $indentChar = $indentHasSpaces ? " " : "\t";
804
-
805
-        if (\is_string($contents)) {
806
-            if ($contents === '') {
807
-                return new String_('', $attributes);
808
-            }
809
-
810
-            $contents = $this->stripIndentation(
811
-                $contents, $indentLen, $indentChar, true, true, $attributes
812
-            );
813
-            $contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents);
814
-
815
-            if ($kind === String_::KIND_HEREDOC) {
816
-                $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape);
817
-            }
818
-
819
-            return new String_($contents, $attributes);
820
-        } else {
821
-            assert(count($contents) > 0);
822
-            if (!$contents[0] instanceof Node\Scalar\EncapsedStringPart) {
823
-                // If there is no leading encapsed string part, pretend there is an empty one
824
-                $this->stripIndentation(
825
-                    '', $indentLen, $indentChar, true, false, $contents[0]->getAttributes()
826
-                );
827
-            }
828
-
829
-            $newContents = [];
830
-            foreach ($contents as $i => $part) {
831
-                if ($part instanceof Node\Scalar\EncapsedStringPart) {
832
-                    $isLast = $i === \count($contents) - 1;
833
-                    $part->value = $this->stripIndentation(
834
-                        $part->value, $indentLen, $indentChar,
835
-                        $i === 0, $isLast, $part->getAttributes()
836
-                    );
837
-                    $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape);
838
-                    if ($isLast) {
839
-                        $part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value);
840
-                    }
841
-                    if ('' === $part->value) {
842
-                        continue;
843
-                    }
844
-                }
845
-                $newContents[] = $part;
846
-            }
847
-            return new Encapsed($newContents, $attributes);
848
-        }
849
-    }
850
-
851
-    /**
852
-     * Create attributes for a zero-length common-capturing nop.
853
-     *
854
-     * @param Comment[] $comments
855
-     * @return array
856
-     */
857
-    protected function createCommentNopAttributes(array $comments) {
858
-        $comment = $comments[count($comments) - 1];
859
-        $commentEndLine = $comment->getEndLine();
860
-        $commentEndFilePos = $comment->getEndFilePos();
861
-        $commentEndTokenPos = $comment->getEndTokenPos();
862
-
863
-        $attributes = ['comments' => $comments];
864
-        if (-1 !== $commentEndLine) {
865
-            $attributes['startLine'] = $commentEndLine;
866
-            $attributes['endLine'] = $commentEndLine;
867
-        }
868
-        if (-1 !== $commentEndFilePos) {
869
-            $attributes['startFilePos'] = $commentEndFilePos + 1;
870
-            $attributes['endFilePos'] = $commentEndFilePos;
871
-        }
872
-        if (-1 !== $commentEndTokenPos) {
873
-            $attributes['startTokenPos'] = $commentEndTokenPos + 1;
874
-            $attributes['endTokenPos'] = $commentEndTokenPos;
875
-        }
876
-        return $attributes;
877
-    }
878
-
879
-    protected function checkClassModifier($a, $b, $modifierPos) {
880
-        try {
881
-            Class_::verifyClassModifier($a, $b);
882
-        } catch (Error $error) {
883
-            $error->setAttributes($this->getAttributesAt($modifierPos));
884
-            $this->emitError($error);
885
-        }
886
-    }
887
-
888
-    protected function checkModifier($a, $b, $modifierPos) {
889
-        // Jumping through some hoops here because verifyModifier() is also used elsewhere
890
-        try {
891
-            Class_::verifyModifier($a, $b);
892
-        } catch (Error $error) {
893
-            $error->setAttributes($this->getAttributesAt($modifierPos));
894
-            $this->emitError($error);
895
-        }
896
-    }
897
-
898
-    protected function checkParam(Param $node) {
899
-        if ($node->variadic && null !== $node->default) {
900
-            $this->emitError(new Error(
901
-                'Variadic parameter cannot have a default value',
902
-                $node->default->getAttributes()
903
-            ));
904
-        }
905
-    }
906
-
907
-    protected function checkTryCatch(TryCatch $node) {
908
-        if (empty($node->catches) && null === $node->finally) {
909
-            $this->emitError(new Error(
910
-                'Cannot use try without catch or finally', $node->getAttributes()
911
-            ));
912
-        }
913
-    }
914
-
915
-    protected function checkNamespace(Namespace_ $node) {
916
-        if (null !== $node->stmts) {
917
-            foreach ($node->stmts as $stmt) {
918
-                if ($stmt instanceof Namespace_) {
919
-                    $this->emitError(new Error(
920
-                        'Namespace declarations cannot be nested', $stmt->getAttributes()
921
-                    ));
922
-                }
923
-            }
924
-        }
925
-    }
926
-
927
-    private function checkClassName($name, $namePos) {
928
-        if (null !== $name && $name->isSpecialClassName()) {
929
-            $this->emitError(new Error(
930
-                sprintf('Cannot use \'%s\' as class name as it is reserved', $name),
931
-                $this->getAttributesAt($namePos)
932
-            ));
933
-        }
934
-    }
935
-
936
-    private function checkImplementedInterfaces(array $interfaces) {
937
-        foreach ($interfaces as $interface) {
938
-            if ($interface->isSpecialClassName()) {
939
-                $this->emitError(new Error(
940
-                    sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface),
941
-                    $interface->getAttributes()
942
-                ));
943
-            }
944
-        }
945
-    }
946
-
947
-    protected function checkClass(Class_ $node, $namePos) {
948
-        $this->checkClassName($node->name, $namePos);
949
-
950
-        if ($node->extends && $node->extends->isSpecialClassName()) {
951
-            $this->emitError(new Error(
952
-                sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends),
953
-                $node->extends->getAttributes()
954
-            ));
955
-        }
956
-
957
-        $this->checkImplementedInterfaces($node->implements);
958
-    }
959
-
960
-    protected function checkInterface(Interface_ $node, $namePos) {
961
-        $this->checkClassName($node->name, $namePos);
962
-        $this->checkImplementedInterfaces($node->extends);
963
-    }
964
-
965
-    protected function checkEnum(Enum_ $node, $namePos) {
966
-        $this->checkClassName($node->name, $namePos);
967
-        $this->checkImplementedInterfaces($node->implements);
968
-    }
969
-
970
-    protected function checkClassMethod(ClassMethod $node, $modifierPos) {
971
-        if ($node->flags & Class_::MODIFIER_STATIC) {
972
-            switch ($node->name->toLowerString()) {
973
-                case '__construct':
974
-                    $this->emitError(new Error(
975
-                        sprintf('Constructor %s() cannot be static', $node->name),
976
-                        $this->getAttributesAt($modifierPos)));
977
-                    break;
978
-                case '__destruct':
979
-                    $this->emitError(new Error(
980
-                        sprintf('Destructor %s() cannot be static', $node->name),
981
-                        $this->getAttributesAt($modifierPos)));
982
-                    break;
983
-                case '__clone':
984
-                    $this->emitError(new Error(
985
-                        sprintf('Clone method %s() cannot be static', $node->name),
986
-                        $this->getAttributesAt($modifierPos)));
987
-                    break;
988
-            }
989
-        }
990
-
991
-        if ($node->flags & Class_::MODIFIER_READONLY) {
992
-            $this->emitError(new Error(
993
-                sprintf('Method %s() cannot be readonly', $node->name),
994
-                $this->getAttributesAt($modifierPos)));
995
-        }
996
-    }
997
-
998
-    protected function checkClassConst(ClassConst $node, $modifierPos) {
999
-        if ($node->flags & Class_::MODIFIER_STATIC) {
1000
-            $this->emitError(new Error(
1001
-                "Cannot use 'static' as constant modifier",
1002
-                $this->getAttributesAt($modifierPos)));
1003
-        }
1004
-        if ($node->flags & Class_::MODIFIER_ABSTRACT) {
1005
-            $this->emitError(new Error(
1006
-                "Cannot use 'abstract' as constant modifier",
1007
-                $this->getAttributesAt($modifierPos)));
1008
-        }
1009
-        if ($node->flags & Class_::MODIFIER_READONLY) {
1010
-            $this->emitError(new Error(
1011
-                "Cannot use 'readonly' as constant modifier",
1012
-                $this->getAttributesAt($modifierPos)));
1013
-        }
1014
-    }
1015
-
1016
-    protected function checkProperty(Property $node, $modifierPos) {
1017
-        if ($node->flags & Class_::MODIFIER_ABSTRACT) {
1018
-            $this->emitError(new Error('Properties cannot be declared abstract',
1019
-                $this->getAttributesAt($modifierPos)));
1020
-        }
1021
-
1022
-        if ($node->flags & Class_::MODIFIER_FINAL) {
1023
-            $this->emitError(new Error('Properties cannot be declared final',
1024
-                $this->getAttributesAt($modifierPos)));
1025
-        }
1026
-    }
1027
-
1028
-    protected function checkUseUse(UseUse $node, $namePos) {
1029
-        if ($node->alias && $node->alias->isSpecialClassName()) {
1030
-            $this->emitError(new Error(
1031
-                sprintf(
1032
-                    'Cannot use %s as %s because \'%2$s\' is a special class name',
1033
-                    $node->name, $node->alias
1034
-                ),
1035
-                $this->getAttributesAt($namePos)
1036
-            ));
1037
-        }
1038
-    }
470
+	/**
471
+	 * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions.
472
+	 *
473
+	 * @param Node\Stmt[] $stmts
474
+	 * @return Node\Stmt[]
475
+	 */
476
+	protected function handleNamespaces(array $stmts) : array {
477
+		$hasErrored = false;
478
+		$style = $this->getNamespacingStyle($stmts);
479
+		if (null === $style) {
480
+			// not namespaced, nothing to do
481
+			return $stmts;
482
+		} elseif ('brace' === $style) {
483
+			// For braced namespaces we only have to check that there are no invalid statements between the namespaces
484
+			$afterFirstNamespace = false;
485
+			foreach ($stmts as $stmt) {
486
+				if ($stmt instanceof Node\Stmt\Namespace_) {
487
+					$afterFirstNamespace = true;
488
+				} elseif (!$stmt instanceof Node\Stmt\HaltCompiler
489
+						&& !$stmt instanceof Node\Stmt\Nop
490
+						&& $afterFirstNamespace && !$hasErrored) {
491
+					$this->emitError(new Error(
492
+						'No code may exist outside of namespace {}', $stmt->getAttributes()));
493
+					$hasErrored = true; // Avoid one error for every statement
494
+				}
495
+			}
496
+			return $stmts;
497
+		} else {
498
+			// For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts
499
+			$resultStmts = [];
500
+			$targetStmts =& $resultStmts;
501
+			$lastNs = null;
502
+			foreach ($stmts as $stmt) {
503
+				if ($stmt instanceof Node\Stmt\Namespace_) {
504
+					if ($lastNs !== null) {
505
+						$this->fixupNamespaceAttributes($lastNs);
506
+					}
507
+					if ($stmt->stmts === null) {
508
+						$stmt->stmts = [];
509
+						$targetStmts =& $stmt->stmts;
510
+						$resultStmts[] = $stmt;
511
+					} else {
512
+						// This handles the invalid case of mixed style namespaces
513
+						$resultStmts[] = $stmt;
514
+						$targetStmts =& $resultStmts;
515
+					}
516
+					$lastNs = $stmt;
517
+				} elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
518
+					// __halt_compiler() is not moved into the namespace
519
+					$resultStmts[] = $stmt;
520
+				} else {
521
+					$targetStmts[] = $stmt;
522
+				}
523
+			}
524
+			if ($lastNs !== null) {
525
+				$this->fixupNamespaceAttributes($lastNs);
526
+			}
527
+			return $resultStmts;
528
+		}
529
+	}
530
+
531
+	private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt) {
532
+		// We moved the statements into the namespace node, as such the end of the namespace node
533
+		// needs to be extended to the end of the statements.
534
+		if (empty($stmt->stmts)) {
535
+			return;
536
+		}
537
+
538
+		// We only move the builtin end attributes here. This is the best we can do with the
539
+		// knowledge we have.
540
+		$endAttributes = ['endLine', 'endFilePos', 'endTokenPos'];
541
+		$lastStmt = $stmt->stmts[count($stmt->stmts) - 1];
542
+		foreach ($endAttributes as $endAttribute) {
543
+			if ($lastStmt->hasAttribute($endAttribute)) {
544
+				$stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute));
545
+			}
546
+		}
547
+	}
548
+
549
+	/**
550
+	 * Determine namespacing style (semicolon or brace)
551
+	 *
552
+	 * @param Node[] $stmts Top-level statements.
553
+	 *
554
+	 * @return null|string One of "semicolon", "brace" or null (no namespaces)
555
+	 */
556
+	private function getNamespacingStyle(array $stmts) {
557
+		$style = null;
558
+		$hasNotAllowedStmts = false;
559
+		foreach ($stmts as $i => $stmt) {
560
+			if ($stmt instanceof Node\Stmt\Namespace_) {
561
+				$currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace';
562
+				if (null === $style) {
563
+					$style = $currentStyle;
564
+					if ($hasNotAllowedStmts) {
565
+						$this->emitError(new Error(
566
+							'Namespace declaration statement has to be the very first statement in the script',
567
+							$stmt->getLine() // Avoid marking the entire namespace as an error
568
+						));
569
+					}
570
+				} elseif ($style !== $currentStyle) {
571
+					$this->emitError(new Error(
572
+						'Cannot mix bracketed namespace declarations with unbracketed namespace declarations',
573
+						$stmt->getLine() // Avoid marking the entire namespace as an error
574
+					));
575
+					// Treat like semicolon style for namespace normalization
576
+					return 'semicolon';
577
+				}
578
+				continue;
579
+			}
580
+
581
+			/* declare(), __halt_compiler() and nops can be used before a namespace declaration */
582
+			if ($stmt instanceof Node\Stmt\Declare_
583
+				|| $stmt instanceof Node\Stmt\HaltCompiler
584
+				|| $stmt instanceof Node\Stmt\Nop) {
585
+				continue;
586
+			}
587
+
588
+			/* There may be a hashbang line at the very start of the file */
589
+			if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) {
590
+				continue;
591
+			}
592
+
593
+			/* Everything else if forbidden before namespace declarations */
594
+			$hasNotAllowedStmts = true;
595
+		}
596
+		return $style;
597
+	}
598
+
599
+	/**
600
+	 * Fix up parsing of static property calls in PHP 5.
601
+	 *
602
+	 * In PHP 5 A::$b[c][d] and A::$b[c][d]() have very different interpretation. The former is
603
+	 * interpreted as (A::$b)[c][d], while the latter is the same as A::{$b[c][d]}(). We parse the
604
+	 * latter as the former initially and this method fixes the AST into the correct form when we
605
+	 * encounter the "()".
606
+	 *
607
+	 * @param  Node\Expr\StaticPropertyFetch|Node\Expr\ArrayDimFetch $prop
608
+	 * @param  Node\Arg[] $args
609
+	 * @param  array      $attributes
610
+	 *
611
+	 * @return Expr\StaticCall
612
+	 */
613
+	protected function fixupPhp5StaticPropCall($prop, array $args, array $attributes) : Expr\StaticCall {
614
+		if ($prop instanceof Node\Expr\StaticPropertyFetch) {
615
+			$name = $prop->name instanceof VarLikeIdentifier
616
+				? $prop->name->toString() : $prop->name;
617
+			$var = new Expr\Variable($name, $prop->name->getAttributes());
618
+			return new Expr\StaticCall($prop->class, $var, $args, $attributes);
619
+		} elseif ($prop instanceof Node\Expr\ArrayDimFetch) {
620
+			$tmp = $prop;
621
+			while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
622
+				$tmp = $tmp->var;
623
+			}
624
+
625
+			/** @var Expr\StaticPropertyFetch $staticProp */
626
+			$staticProp = $tmp->var;
627
+
628
+			// Set start attributes to attributes of innermost node
629
+			$tmp = $prop;
630
+			$this->fixupStartAttributes($tmp, $staticProp->name);
631
+			while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
632
+				$tmp = $tmp->var;
633
+				$this->fixupStartAttributes($tmp, $staticProp->name);
634
+			}
635
+
636
+			$name = $staticProp->name instanceof VarLikeIdentifier
637
+				? $staticProp->name->toString() : $staticProp->name;
638
+			$tmp->var = new Expr\Variable($name, $staticProp->name->getAttributes());
639
+			return new Expr\StaticCall($staticProp->class, $prop, $args, $attributes);
640
+		} else {
641
+			throw new \Exception;
642
+		}
643
+	}
644
+
645
+	protected function fixupStartAttributes(Node $to, Node $from) {
646
+		$startAttributes = ['startLine', 'startFilePos', 'startTokenPos'];
647
+		foreach ($startAttributes as $startAttribute) {
648
+			if ($from->hasAttribute($startAttribute)) {
649
+				$to->setAttribute($startAttribute, $from->getAttribute($startAttribute));
650
+			}
651
+		}
652
+	}
653
+
654
+	protected function handleBuiltinTypes(Name $name) {
655
+		$builtinTypes = [
656
+			'bool'     => true,
657
+			'int'      => true,
658
+			'float'    => true,
659
+			'string'   => true,
660
+			'iterable' => true,
661
+			'void'     => true,
662
+			'object'   => true,
663
+			'null'     => true,
664
+			'false'    => true,
665
+			'mixed'    => true,
666
+			'never'    => true,
667
+			'true'     => true,
668
+		];
669
+
670
+		if (!$name->isUnqualified()) {
671
+			return $name;
672
+		}
673
+
674
+		$lowerName = $name->toLowerString();
675
+		if (!isset($builtinTypes[$lowerName])) {
676
+			return $name;
677
+		}
678
+
679
+		return new Node\Identifier($lowerName, $name->getAttributes());
680
+	}
681
+
682
+	/**
683
+	 * Get combined start and end attributes at a stack location
684
+	 *
685
+	 * @param int $pos Stack location
686
+	 *
687
+	 * @return array Combined start and end attributes
688
+	 */
689
+	protected function getAttributesAt(int $pos) : array {
690
+		return $this->startAttributeStack[$pos] + $this->endAttributeStack[$pos];
691
+	}
692
+
693
+	protected function getFloatCastKind(string $cast): int
694
+	{
695
+		$cast = strtolower($cast);
696
+		if (strpos($cast, 'float') !== false) {
697
+			return Double::KIND_FLOAT;
698
+		}
699
+
700
+		if (strpos($cast, 'real') !== false) {
701
+			return Double::KIND_REAL;
702
+		}
703
+
704
+		return Double::KIND_DOUBLE;
705
+	}
706
+
707
+	protected function parseLNumber($str, $attributes, $allowInvalidOctal = false) {
708
+		try {
709
+			return LNumber::fromString($str, $attributes, $allowInvalidOctal);
710
+		} catch (Error $error) {
711
+			$this->emitError($error);
712
+			// Use dummy value
713
+			return new LNumber(0, $attributes);
714
+		}
715
+	}
716
+
717
+	/**
718
+	 * Parse a T_NUM_STRING token into either an integer or string node.
719
+	 *
720
+	 * @param string $str        Number string
721
+	 * @param array  $attributes Attributes
722
+	 *
723
+	 * @return LNumber|String_ Integer or string node.
724
+	 */
725
+	protected function parseNumString(string $str, array $attributes) {
726
+		if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) {
727
+			return new String_($str, $attributes);
728
+		}
729
+
730
+		$num = +$str;
731
+		if (!is_int($num)) {
732
+			return new String_($str, $attributes);
733
+		}
734
+
735
+		return new LNumber($num, $attributes);
736
+	}
737
+
738
+	protected function stripIndentation(
739
+		string $string, int $indentLen, string $indentChar,
740
+		bool $newlineAtStart, bool $newlineAtEnd, array $attributes
741
+	) {
742
+		if ($indentLen === 0) {
743
+			return $string;
744
+		}
745
+
746
+		$start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)';
747
+		$end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])';
748
+		$regex = '/' . $start . '([ \t]*)(' . $end . ')?/';
749
+		return preg_replace_callback(
750
+			$regex,
751
+			function ($matches) use ($indentLen, $indentChar, $attributes) {
752
+				$prefix = substr($matches[1], 0, $indentLen);
753
+				if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) {
754
+					$this->emitError(new Error(
755
+						'Invalid indentation - tabs and spaces cannot be mixed', $attributes
756
+					));
757
+				} elseif (strlen($prefix) < $indentLen && !isset($matches[2])) {
758
+					$this->emitError(new Error(
759
+						'Invalid body indentation level ' .
760
+						'(expecting an indentation level of at least ' . $indentLen . ')',
761
+						$attributes
762
+					));
763
+				}
764
+				return substr($matches[0], strlen($prefix));
765
+			},
766
+			$string
767
+		);
768
+	}
769
+
770
+	protected function parseDocString(
771
+		string $startToken, $contents, string $endToken,
772
+		array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape
773
+	) {
774
+		$kind = strpos($startToken, "'") === false
775
+			? String_::KIND_HEREDOC : String_::KIND_NOWDOC;
776
+
777
+		$regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/';
778
+		$result = preg_match($regex, $startToken, $matches);
779
+		assert($result === 1);
780
+		$label = $matches[1];
781
+
782
+		$result = preg_match('/\A[ \t]*/', $endToken, $matches);
783
+		assert($result === 1);
784
+		$indentation = $matches[0];
785
+
786
+		$attributes['kind'] = $kind;
787
+		$attributes['docLabel'] = $label;
788
+		$attributes['docIndentation'] = $indentation;
789
+
790
+		$indentHasSpaces = false !== strpos($indentation, " ");
791
+		$indentHasTabs = false !== strpos($indentation, "\t");
792
+		if ($indentHasSpaces && $indentHasTabs) {
793
+			$this->emitError(new Error(
794
+				'Invalid indentation - tabs and spaces cannot be mixed',
795
+				$endTokenAttributes
796
+			));
797
+
798
+			// Proceed processing as if this doc string is not indented
799
+			$indentation = '';
800
+		}
801
+
802
+		$indentLen = \strlen($indentation);
803
+		$indentChar = $indentHasSpaces ? " " : "\t";
804
+
805
+		if (\is_string($contents)) {
806
+			if ($contents === '') {
807
+				return new String_('', $attributes);
808
+			}
809
+
810
+			$contents = $this->stripIndentation(
811
+				$contents, $indentLen, $indentChar, true, true, $attributes
812
+			);
813
+			$contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents);
814
+
815
+			if ($kind === String_::KIND_HEREDOC) {
816
+				$contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape);
817
+			}
818
+
819
+			return new String_($contents, $attributes);
820
+		} else {
821
+			assert(count($contents) > 0);
822
+			if (!$contents[0] instanceof Node\Scalar\EncapsedStringPart) {
823
+				// If there is no leading encapsed string part, pretend there is an empty one
824
+				$this->stripIndentation(
825
+					'', $indentLen, $indentChar, true, false, $contents[0]->getAttributes()
826
+				);
827
+			}
828
+
829
+			$newContents = [];
830
+			foreach ($contents as $i => $part) {
831
+				if ($part instanceof Node\Scalar\EncapsedStringPart) {
832
+					$isLast = $i === \count($contents) - 1;
833
+					$part->value = $this->stripIndentation(
834
+						$part->value, $indentLen, $indentChar,
835
+						$i === 0, $isLast, $part->getAttributes()
836
+					);
837
+					$part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape);
838
+					if ($isLast) {
839
+						$part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value);
840
+					}
841
+					if ('' === $part->value) {
842
+						continue;
843
+					}
844
+				}
845
+				$newContents[] = $part;
846
+			}
847
+			return new Encapsed($newContents, $attributes);
848
+		}
849
+	}
850
+
851
+	/**
852
+	 * Create attributes for a zero-length common-capturing nop.
853
+	 *
854
+	 * @param Comment[] $comments
855
+	 * @return array
856
+	 */
857
+	protected function createCommentNopAttributes(array $comments) {
858
+		$comment = $comments[count($comments) - 1];
859
+		$commentEndLine = $comment->getEndLine();
860
+		$commentEndFilePos = $comment->getEndFilePos();
861
+		$commentEndTokenPos = $comment->getEndTokenPos();
862
+
863
+		$attributes = ['comments' => $comments];
864
+		if (-1 !== $commentEndLine) {
865
+			$attributes['startLine'] = $commentEndLine;
866
+			$attributes['endLine'] = $commentEndLine;
867
+		}
868
+		if (-1 !== $commentEndFilePos) {
869
+			$attributes['startFilePos'] = $commentEndFilePos + 1;
870
+			$attributes['endFilePos'] = $commentEndFilePos;
871
+		}
872
+		if (-1 !== $commentEndTokenPos) {
873
+			$attributes['startTokenPos'] = $commentEndTokenPos + 1;
874
+			$attributes['endTokenPos'] = $commentEndTokenPos;
875
+		}
876
+		return $attributes;
877
+	}
878
+
879
+	protected function checkClassModifier($a, $b, $modifierPos) {
880
+		try {
881
+			Class_::verifyClassModifier($a, $b);
882
+		} catch (Error $error) {
883
+			$error->setAttributes($this->getAttributesAt($modifierPos));
884
+			$this->emitError($error);
885
+		}
886
+	}
887
+
888
+	protected function checkModifier($a, $b, $modifierPos) {
889
+		// Jumping through some hoops here because verifyModifier() is also used elsewhere
890
+		try {
891
+			Class_::verifyModifier($a, $b);
892
+		} catch (Error $error) {
893
+			$error->setAttributes($this->getAttributesAt($modifierPos));
894
+			$this->emitError($error);
895
+		}
896
+	}
897
+
898
+	protected function checkParam(Param $node) {
899
+		if ($node->variadic && null !== $node->default) {
900
+			$this->emitError(new Error(
901
+				'Variadic parameter cannot have a default value',
902
+				$node->default->getAttributes()
903
+			));
904
+		}
905
+	}
906
+
907
+	protected function checkTryCatch(TryCatch $node) {
908
+		if (empty($node->catches) && null === $node->finally) {
909
+			$this->emitError(new Error(
910
+				'Cannot use try without catch or finally', $node->getAttributes()
911
+			));
912
+		}
913
+	}
914
+
915
+	protected function checkNamespace(Namespace_ $node) {
916
+		if (null !== $node->stmts) {
917
+			foreach ($node->stmts as $stmt) {
918
+				if ($stmt instanceof Namespace_) {
919
+					$this->emitError(new Error(
920
+						'Namespace declarations cannot be nested', $stmt->getAttributes()
921
+					));
922
+				}
923
+			}
924
+		}
925
+	}
926
+
927
+	private function checkClassName($name, $namePos) {
928
+		if (null !== $name && $name->isSpecialClassName()) {
929
+			$this->emitError(new Error(
930
+				sprintf('Cannot use \'%s\' as class name as it is reserved', $name),
931
+				$this->getAttributesAt($namePos)
932
+			));
933
+		}
934
+	}
935
+
936
+	private function checkImplementedInterfaces(array $interfaces) {
937
+		foreach ($interfaces as $interface) {
938
+			if ($interface->isSpecialClassName()) {
939
+				$this->emitError(new Error(
940
+					sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface),
941
+					$interface->getAttributes()
942
+				));
943
+			}
944
+		}
945
+	}
946
+
947
+	protected function checkClass(Class_ $node, $namePos) {
948
+		$this->checkClassName($node->name, $namePos);
949
+
950
+		if ($node->extends && $node->extends->isSpecialClassName()) {
951
+			$this->emitError(new Error(
952
+				sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends),
953
+				$node->extends->getAttributes()
954
+			));
955
+		}
956
+
957
+		$this->checkImplementedInterfaces($node->implements);
958
+	}
959
+
960
+	protected function checkInterface(Interface_ $node, $namePos) {
961
+		$this->checkClassName($node->name, $namePos);
962
+		$this->checkImplementedInterfaces($node->extends);
963
+	}
964
+
965
+	protected function checkEnum(Enum_ $node, $namePos) {
966
+		$this->checkClassName($node->name, $namePos);
967
+		$this->checkImplementedInterfaces($node->implements);
968
+	}
969
+
970
+	protected function checkClassMethod(ClassMethod $node, $modifierPos) {
971
+		if ($node->flags & Class_::MODIFIER_STATIC) {
972
+			switch ($node->name->toLowerString()) {
973
+				case '__construct':
974
+					$this->emitError(new Error(
975
+						sprintf('Constructor %s() cannot be static', $node->name),
976
+						$this->getAttributesAt($modifierPos)));
977
+					break;
978
+				case '__destruct':
979
+					$this->emitError(new Error(
980
+						sprintf('Destructor %s() cannot be static', $node->name),
981
+						$this->getAttributesAt($modifierPos)));
982
+					break;
983
+				case '__clone':
984
+					$this->emitError(new Error(
985
+						sprintf('Clone method %s() cannot be static', $node->name),
986
+						$this->getAttributesAt($modifierPos)));
987
+					break;
988
+			}
989
+		}
990
+
991
+		if ($node->flags & Class_::MODIFIER_READONLY) {
992
+			$this->emitError(new Error(
993
+				sprintf('Method %s() cannot be readonly', $node->name),
994
+				$this->getAttributesAt($modifierPos)));
995
+		}
996
+	}
997
+
998
+	protected function checkClassConst(ClassConst $node, $modifierPos) {
999
+		if ($node->flags & Class_::MODIFIER_STATIC) {
1000
+			$this->emitError(new Error(
1001
+				"Cannot use 'static' as constant modifier",
1002
+				$this->getAttributesAt($modifierPos)));
1003
+		}
1004
+		if ($node->flags & Class_::MODIFIER_ABSTRACT) {
1005
+			$this->emitError(new Error(
1006
+				"Cannot use 'abstract' as constant modifier",
1007
+				$this->getAttributesAt($modifierPos)));
1008
+		}
1009
+		if ($node->flags & Class_::MODIFIER_READONLY) {
1010
+			$this->emitError(new Error(
1011
+				"Cannot use 'readonly' as constant modifier",
1012
+				$this->getAttributesAt($modifierPos)));
1013
+		}
1014
+	}
1015
+
1016
+	protected function checkProperty(Property $node, $modifierPos) {
1017
+		if ($node->flags & Class_::MODIFIER_ABSTRACT) {
1018
+			$this->emitError(new Error('Properties cannot be declared abstract',
1019
+				$this->getAttributesAt($modifierPos)));
1020
+		}
1021
+
1022
+		if ($node->flags & Class_::MODIFIER_FINAL) {
1023
+			$this->emitError(new Error('Properties cannot be declared final',
1024
+				$this->getAttributesAt($modifierPos)));
1025
+		}
1026
+	}
1027
+
1028
+	protected function checkUseUse(UseUse $node, $namePos) {
1029
+		if ($node->alias && $node->alias->isSpecialClassName()) {
1030
+			$this->emitError(new Error(
1031
+				sprintf(
1032
+					'Cannot use %s as %s because \'%2$s\' is a special class name',
1033
+					$node->name, $node->alias
1034
+				),
1035
+				$this->getAttributesAt($namePos)
1036
+			));
1037
+		}
1038
+	}
1039 1039
 }
Please login to merge, or discard this patch.
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -322,7 +322,7 @@  discard block
 block discarded – undo
322 322
                             $this->errorState = 3;
323 323
 
324 324
                             // Pop until error-expecting state uncovered
325
-                            while (!(
325
+                            while ( ! (
326 326
                                 (($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0
327 327
                                     && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
328 328
                                 || ($state < $this->YY2TBLSTATE
@@ -387,10 +387,10 @@  discard block
 block discarded – undo
387 387
     protected function getErrorMessage(int $symbol, int $state) : string {
388 388
         $expectedString = '';
389 389
         if ($expected = $this->getExpectedTokens($state)) {
390
-            $expectedString = ', expecting ' . implode(' or ', $expected);
390
+            $expectedString = ', expecting '.implode(' or ', $expected);
391 391
         }
392 392
 
393
-        return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString;
393
+        return 'Syntax error, unexpected '.$this->symbolToName[$symbol].$expectedString;
394 394
     }
395 395
 
396 396
     /**
@@ -485,9 +485,9 @@  discard block
 block discarded – undo
485 485
             foreach ($stmts as $stmt) {
486 486
                 if ($stmt instanceof Node\Stmt\Namespace_) {
487 487
                     $afterFirstNamespace = true;
488
-                } elseif (!$stmt instanceof Node\Stmt\HaltCompiler
489
-                        && !$stmt instanceof Node\Stmt\Nop
490
-                        && $afterFirstNamespace && !$hasErrored) {
488
+                } elseif ( ! $stmt instanceof Node\Stmt\HaltCompiler
489
+                        && ! $stmt instanceof Node\Stmt\Nop
490
+                        && $afterFirstNamespace && ! $hasErrored) {
491 491
                     $this->emitError(new Error(
492 492
                         'No code may exist outside of namespace {}', $stmt->getAttributes()));
493 493
                     $hasErrored = true; // Avoid one error for every statement
@@ -497,7 +497,7 @@  discard block
 block discarded – undo
497 497
         } else {
498 498
             // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts
499 499
             $resultStmts = [];
500
-            $targetStmts =& $resultStmts;
500
+            $targetStmts = & $resultStmts;
501 501
             $lastNs = null;
502 502
             foreach ($stmts as $stmt) {
503 503
                 if ($stmt instanceof Node\Stmt\Namespace_) {
@@ -506,12 +506,12 @@  discard block
 block discarded – undo
506 506
                     }
507 507
                     if ($stmt->stmts === null) {
508 508
                         $stmt->stmts = [];
509
-                        $targetStmts =& $stmt->stmts;
509
+                        $targetStmts = & $stmt->stmts;
510 510
                         $resultStmts[] = $stmt;
511 511
                     } else {
512 512
                         // This handles the invalid case of mixed style namespaces
513 513
                         $resultStmts[] = $stmt;
514
-                        $targetStmts =& $resultStmts;
514
+                        $targetStmts = & $resultStmts;
515 515
                     }
516 516
                     $lastNs = $stmt;
517 517
                 } elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
@@ -667,12 +667,12 @@  discard block
 block discarded – undo
667 667
             'true'     => true,
668 668
         ];
669 669
 
670
-        if (!$name->isUnqualified()) {
670
+        if ( ! $name->isUnqualified()) {
671 671
             return $name;
672 672
         }
673 673
 
674 674
         $lowerName = $name->toLowerString();
675
-        if (!isset($builtinTypes[$lowerName])) {
675
+        if ( ! isset($builtinTypes[$lowerName])) {
676 676
             return $name;
677 677
         }
678 678
 
@@ -723,12 +723,12 @@  discard block
 block discarded – undo
723 723
      * @return LNumber|String_ Integer or string node.
724 724
      */
725 725
     protected function parseNumString(string $str, array $attributes) {
726
-        if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) {
726
+        if ( ! preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) {
727 727
             return new String_($str, $attributes);
728 728
         }
729 729
 
730 730
         $num = +$str;
731
-        if (!is_int($num)) {
731
+        if ( ! is_int($num)) {
732 732
             return new String_($str, $attributes);
733 733
         }
734 734
 
@@ -745,19 +745,19 @@  discard block
 block discarded – undo
745 745
 
746 746
         $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)';
747 747
         $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])';
748
-        $regex = '/' . $start . '([ \t]*)(' . $end . ')?/';
748
+        $regex = '/'.$start.'([ \t]*)('.$end.')?/';
749 749
         return preg_replace_callback(
750 750
             $regex,
751
-            function ($matches) use ($indentLen, $indentChar, $attributes) {
751
+            function($matches) use ($indentLen, $indentChar, $attributes) {
752 752
                 $prefix = substr($matches[1], 0, $indentLen);
753 753
                 if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) {
754 754
                     $this->emitError(new Error(
755 755
                         'Invalid indentation - tabs and spaces cannot be mixed', $attributes
756 756
                     ));
757
-                } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) {
757
+                } elseif (strlen($prefix) < $indentLen && ! isset($matches[2])) {
758 758
                     $this->emitError(new Error(
759
-                        'Invalid body indentation level ' .
760
-                        '(expecting an indentation level of at least ' . $indentLen . ')',
759
+                        'Invalid body indentation level '.
760
+                        '(expecting an indentation level of at least '.$indentLen.')',
761 761
                         $attributes
762 762
                     ));
763 763
                 }
@@ -819,7 +819,7 @@  discard block
 block discarded – undo
819 819
             return new String_($contents, $attributes);
820 820
         } else {
821 821
             assert(count($contents) > 0);
822
-            if (!$contents[0] instanceof Node\Scalar\EncapsedStringPart) {
822
+            if ( ! $contents[0] instanceof Node\Scalar\EncapsedStringPart) {
823 823
                 // If there is no leading encapsed string part, pretend there is an empty one
824 824
                 $this->stripIndentation(
825 825
                     '', $indentLen, $indentChar, true, false, $contents[0]->getAttributes()
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php 1 patch
Indentation   +151 added lines, -151 removed lines patch added patch discarded remove patch
@@ -7,155 +7,155 @@
 block discarded – undo
7 7
 
8 8
 class ClassMethod extends Node\Stmt implements FunctionLike
9 9
 {
10
-    /** @var int Flags */
11
-    public $flags;
12
-    /** @var bool Whether to return by reference */
13
-    public $byRef;
14
-    /** @var Node\Identifier Name */
15
-    public $name;
16
-    /** @var Node\Param[] Parameters */
17
-    public $params;
18
-    /** @var null|Node\Identifier|Node\Name|Node\ComplexType Return type */
19
-    public $returnType;
20
-    /** @var Node\Stmt[]|null Statements */
21
-    public $stmts;
22
-    /** @var Node\AttributeGroup[] PHP attribute groups */
23
-    public $attrGroups;
24
-
25
-    private static $magicNames = [
26
-        '__construct'   => true,
27
-        '__destruct'    => true,
28
-        '__call'        => true,
29
-        '__callstatic'  => true,
30
-        '__get'         => true,
31
-        '__set'         => true,
32
-        '__isset'       => true,
33
-        '__unset'       => true,
34
-        '__sleep'       => true,
35
-        '__wakeup'      => true,
36
-        '__tostring'    => true,
37
-        '__set_state'   => true,
38
-        '__clone'       => true,
39
-        '__invoke'      => true,
40
-        '__debuginfo'   => true,
41
-        '__serialize'   => true,
42
-        '__unserialize' => true,
43
-    ];
44
-
45
-    /**
46
-     * Constructs a class method node.
47
-     *
48
-     * @param string|Node\Identifier $name Name
49
-     * @param array $subNodes   Array of the following optional subnodes:
50
-     *                          'flags       => MODIFIER_PUBLIC: Flags
51
-     *                          'byRef'      => false          : Whether to return by reference
52
-     *                          'params'     => array()        : Parameters
53
-     *                          'returnType' => null           : Return type
54
-     *                          'stmts'      => array()        : Statements
55
-     *                          'attrGroups' => array()        : PHP attribute groups
56
-     * @param array $attributes Additional attributes
57
-     */
58
-    public function __construct($name, array $subNodes = [], array $attributes = []) {
59
-        $this->attributes = $attributes;
60
-        $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
61
-        $this->byRef = $subNodes['byRef'] ?? false;
62
-        $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
63
-        $this->params = $subNodes['params'] ?? [];
64
-        $returnType = $subNodes['returnType'] ?? null;
65
-        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
66
-        $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
67
-        $this->attrGroups = $subNodes['attrGroups'] ?? [];
68
-    }
69
-
70
-    public function getSubNodeNames() : array {
71
-        return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
72
-    }
73
-
74
-    public function returnsByRef() : bool {
75
-        return $this->byRef;
76
-    }
77
-
78
-    public function getParams() : array {
79
-        return $this->params;
80
-    }
81
-
82
-    public function getReturnType() {
83
-        return $this->returnType;
84
-    }
85
-
86
-    public function getStmts() {
87
-        return $this->stmts;
88
-    }
89
-
90
-    public function getAttrGroups() : array {
91
-        return $this->attrGroups;
92
-    }
93
-
94
-    /**
95
-     * Whether the method is explicitly or implicitly public.
96
-     *
97
-     * @return bool
98
-     */
99
-    public function isPublic() : bool {
100
-        return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
101
-            || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
102
-    }
103
-
104
-    /**
105
-     * Whether the method is protected.
106
-     *
107
-     * @return bool
108
-     */
109
-    public function isProtected() : bool {
110
-        return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
111
-    }
112
-
113
-    /**
114
-     * Whether the method is private.
115
-     *
116
-     * @return bool
117
-     */
118
-    public function isPrivate() : bool {
119
-        return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
120
-    }
121
-
122
-    /**
123
-     * Whether the method is abstract.
124
-     *
125
-     * @return bool
126
-     */
127
-    public function isAbstract() : bool {
128
-        return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT);
129
-    }
130
-
131
-    /**
132
-     * Whether the method is final.
133
-     *
134
-     * @return bool
135
-     */
136
-    public function isFinal() : bool {
137
-        return (bool) ($this->flags & Class_::MODIFIER_FINAL);
138
-    }
139
-
140
-    /**
141
-     * Whether the method is static.
142
-     *
143
-     * @return bool
144
-     */
145
-    public function isStatic() : bool {
146
-        return (bool) ($this->flags & Class_::MODIFIER_STATIC);
147
-    }
148
-
149
-    /**
150
-     * Whether the method is magic.
151
-     *
152
-     * @return bool
153
-     */
154
-    public function isMagic() : bool {
155
-        return isset(self::$magicNames[$this->name->toLowerString()]);
156
-    }
157
-
158
-    public function getType() : string {
159
-        return 'Stmt_ClassMethod';
160
-    }
10
+	/** @var int Flags */
11
+	public $flags;
12
+	/** @var bool Whether to return by reference */
13
+	public $byRef;
14
+	/** @var Node\Identifier Name */
15
+	public $name;
16
+	/** @var Node\Param[] Parameters */
17
+	public $params;
18
+	/** @var null|Node\Identifier|Node\Name|Node\ComplexType Return type */
19
+	public $returnType;
20
+	/** @var Node\Stmt[]|null Statements */
21
+	public $stmts;
22
+	/** @var Node\AttributeGroup[] PHP attribute groups */
23
+	public $attrGroups;
24
+
25
+	private static $magicNames = [
26
+		'__construct'   => true,
27
+		'__destruct'    => true,
28
+		'__call'        => true,
29
+		'__callstatic'  => true,
30
+		'__get'         => true,
31
+		'__set'         => true,
32
+		'__isset'       => true,
33
+		'__unset'       => true,
34
+		'__sleep'       => true,
35
+		'__wakeup'      => true,
36
+		'__tostring'    => true,
37
+		'__set_state'   => true,
38
+		'__clone'       => true,
39
+		'__invoke'      => true,
40
+		'__debuginfo'   => true,
41
+		'__serialize'   => true,
42
+		'__unserialize' => true,
43
+	];
44
+
45
+	/**
46
+	 * Constructs a class method node.
47
+	 *
48
+	 * @param string|Node\Identifier $name Name
49
+	 * @param array $subNodes   Array of the following optional subnodes:
50
+	 *                          'flags       => MODIFIER_PUBLIC: Flags
51
+	 *                          'byRef'      => false          : Whether to return by reference
52
+	 *                          'params'     => array()        : Parameters
53
+	 *                          'returnType' => null           : Return type
54
+	 *                          'stmts'      => array()        : Statements
55
+	 *                          'attrGroups' => array()        : PHP attribute groups
56
+	 * @param array $attributes Additional attributes
57
+	 */
58
+	public function __construct($name, array $subNodes = [], array $attributes = []) {
59
+		$this->attributes = $attributes;
60
+		$this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
61
+		$this->byRef = $subNodes['byRef'] ?? false;
62
+		$this->name = \is_string($name) ? new Node\Identifier($name) : $name;
63
+		$this->params = $subNodes['params'] ?? [];
64
+		$returnType = $subNodes['returnType'] ?? null;
65
+		$this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
66
+		$this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
67
+		$this->attrGroups = $subNodes['attrGroups'] ?? [];
68
+	}
69
+
70
+	public function getSubNodeNames() : array {
71
+		return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
72
+	}
73
+
74
+	public function returnsByRef() : bool {
75
+		return $this->byRef;
76
+	}
77
+
78
+	public function getParams() : array {
79
+		return $this->params;
80
+	}
81
+
82
+	public function getReturnType() {
83
+		return $this->returnType;
84
+	}
85
+
86
+	public function getStmts() {
87
+		return $this->stmts;
88
+	}
89
+
90
+	public function getAttrGroups() : array {
91
+		return $this->attrGroups;
92
+	}
93
+
94
+	/**
95
+	 * Whether the method is explicitly or implicitly public.
96
+	 *
97
+	 * @return bool
98
+	 */
99
+	public function isPublic() : bool {
100
+		return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
101
+			|| ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
102
+	}
103
+
104
+	/**
105
+	 * Whether the method is protected.
106
+	 *
107
+	 * @return bool
108
+	 */
109
+	public function isProtected() : bool {
110
+		return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
111
+	}
112
+
113
+	/**
114
+	 * Whether the method is private.
115
+	 *
116
+	 * @return bool
117
+	 */
118
+	public function isPrivate() : bool {
119
+		return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
120
+	}
121
+
122
+	/**
123
+	 * Whether the method is abstract.
124
+	 *
125
+	 * @return bool
126
+	 */
127
+	public function isAbstract() : bool {
128
+		return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT);
129
+	}
130
+
131
+	/**
132
+	 * Whether the method is final.
133
+	 *
134
+	 * @return bool
135
+	 */
136
+	public function isFinal() : bool {
137
+		return (bool) ($this->flags & Class_::MODIFIER_FINAL);
138
+	}
139
+
140
+	/**
141
+	 * Whether the method is static.
142
+	 *
143
+	 * @return bool
144
+	 */
145
+	public function isStatic() : bool {
146
+		return (bool) ($this->flags & Class_::MODIFIER_STATIC);
147
+	}
148
+
149
+	/**
150
+	 * Whether the method is magic.
151
+	 *
152
+	 * @return bool
153
+	 */
154
+	public function isMagic() : bool {
155
+		return isset(self::$magicNames[$this->name->toLowerString()]);
156
+	}
157
+
158
+	public function getType() : string {
159
+		return 'Stmt_ClassMethod';
160
+	}
161 161
 }
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -4,25 +4,25 @@
 block discarded – undo
4 4
 
5 5
 class UnionType extends ComplexType
6 6
 {
7
-    /** @var (Identifier|Name)[] Types */
8
-    public $types;
7
+	/** @var (Identifier|Name)[] Types */
8
+	public $types;
9 9
 
10
-    /**
11
-     * Constructs a union type.
12
-     *
13
-     * @param (Identifier|Name|IntersectionType)[] $types      Types
14
-     * @param array               $attributes Additional attributes
15
-     */
16
-    public function __construct(array $types, array $attributes = []) {
17
-        $this->attributes = $attributes;
18
-        $this->types = $types;
19
-    }
10
+	/**
11
+	 * Constructs a union type.
12
+	 *
13
+	 * @param (Identifier|Name|IntersectionType)[] $types      Types
14
+	 * @param array               $attributes Additional attributes
15
+	 */
16
+	public function __construct(array $types, array $attributes = []) {
17
+		$this->attributes = $attributes;
18
+		$this->types = $types;
19
+	}
20 20
 
21
-    public function getSubNodeNames() : array {
22
-        return ['types'];
23
-    }
21
+	public function getSubNodeNames() : array {
22
+		return ['types'];
23
+	}
24 24
     
25
-    public function getType() : string {
26
-        return 'UnionType';
27
-    }
25
+	public function getType() : string {
26
+		return 'UnionType';
27
+	}
28 28
 }
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/Node/Name.php 1 patch
Indentation   +233 added lines, -233 removed lines patch added patch discarded remove patch
@@ -6,237 +6,237 @@
 block discarded – undo
6 6
 
7 7
 class Name extends NodeAbstract
8 8
 {
9
-    /** @var string[] Parts of the name */
10
-    public $parts;
11
-
12
-    private static $specialClassNames = [
13
-        'self'   => true,
14
-        'parent' => true,
15
-        'static' => true,
16
-    ];
17
-
18
-    /**
19
-     * Constructs a name node.
20
-     *
21
-     * @param string|string[]|self $name       Name as string, part array or Name instance (copy ctor)
22
-     * @param array                $attributes Additional attributes
23
-     */
24
-    public function __construct($name, array $attributes = []) {
25
-        $this->attributes = $attributes;
26
-        $this->parts = self::prepareName($name);
27
-    }
28
-
29
-    public function getSubNodeNames() : array {
30
-        return ['parts'];
31
-    }
32
-
33
-    /**
34
-     * Gets the first part of the name, i.e. everything before the first namespace separator.
35
-     *
36
-     * @return string First part of the name
37
-     */
38
-    public function getFirst() : string {
39
-        return $this->parts[0];
40
-    }
41
-
42
-    /**
43
-     * Gets the last part of the name, i.e. everything after the last namespace separator.
44
-     *
45
-     * @return string Last part of the name
46
-     */
47
-    public function getLast() : string {
48
-        return $this->parts[count($this->parts) - 1];
49
-    }
50
-
51
-    /**
52
-     * Checks whether the name is unqualified. (E.g. Name)
53
-     *
54
-     * @return bool Whether the name is unqualified
55
-     */
56
-    public function isUnqualified() : bool {
57
-        return 1 === count($this->parts);
58
-    }
59
-
60
-    /**
61
-     * Checks whether the name is qualified. (E.g. Name\Name)
62
-     *
63
-     * @return bool Whether the name is qualified
64
-     */
65
-    public function isQualified() : bool {
66
-        return 1 < count($this->parts);
67
-    }
68
-
69
-    /**
70
-     * Checks whether the name is fully qualified. (E.g. \Name)
71
-     *
72
-     * @return bool Whether the name is fully qualified
73
-     */
74
-    public function isFullyQualified() : bool {
75
-        return false;
76
-    }
77
-
78
-    /**
79
-     * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
80
-     *
81
-     * @return bool Whether the name is relative
82
-     */
83
-    public function isRelative() : bool {
84
-        return false;
85
-    }
86
-
87
-    /**
88
-     * Returns a string representation of the name itself, without taking the name type into
89
-     * account (e.g., not including a leading backslash for fully qualified names).
90
-     *
91
-     * @return string String representation
92
-     */
93
-    public function toString() : string {
94
-        return implode('\\', $this->parts);
95
-    }
96
-
97
-    /**
98
-     * Returns a string representation of the name as it would occur in code (e.g., including
99
-     * leading backslash for fully qualified names.
100
-     *
101
-     * @return string String representation
102
-     */
103
-    public function toCodeString() : string {
104
-        return $this->toString();
105
-    }
106
-
107
-    /**
108
-     * Returns lowercased string representation of the name, without taking the name type into
109
-     * account (e.g., no leading backslash for fully qualified names).
110
-     *
111
-     * @return string Lowercased string representation
112
-     */
113
-    public function toLowerString() : string {
114
-        return strtolower(implode('\\', $this->parts));
115
-    }
116
-
117
-    /**
118
-     * Checks whether the identifier is a special class name (self, parent or static).
119
-     *
120
-     * @return bool Whether identifier is a special class name
121
-     */
122
-    public function isSpecialClassName() : bool {
123
-        return count($this->parts) === 1
124
-            && isset(self::$specialClassNames[strtolower($this->parts[0])]);
125
-    }
126
-
127
-    /**
128
-     * Returns a string representation of the name by imploding the namespace parts with the
129
-     * namespace separator.
130
-     *
131
-     * @return string String representation
132
-     */
133
-    public function __toString() : string {
134
-        return implode('\\', $this->parts);
135
-    }
136
-
137
-    /**
138
-     * Gets a slice of a name (similar to array_slice).
139
-     *
140
-     * This method returns a new instance of the same type as the original and with the same
141
-     * attributes.
142
-     *
143
-     * If the slice is empty, null is returned. The null value will be correctly handled in
144
-     * concatenations using concat().
145
-     *
146
-     * Offset and length have the same meaning as in array_slice().
147
-     *
148
-     * @param int      $offset Offset to start the slice at (may be negative)
149
-     * @param int|null $length Length of the slice (may be negative)
150
-     *
151
-     * @return static|null Sliced name
152
-     */
153
-    public function slice(int $offset, int $length = null) {
154
-        $numParts = count($this->parts);
155
-
156
-        $realOffset = $offset < 0 ? $offset + $numParts : $offset;
157
-        if ($realOffset < 0 || $realOffset > $numParts) {
158
-            throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset));
159
-        }
160
-
161
-        if (null === $length) {
162
-            $realLength = $numParts - $realOffset;
163
-        } else {
164
-            $realLength = $length < 0 ? $length + $numParts - $realOffset : $length;
165
-            if ($realLength < 0 || $realLength > $numParts - $realOffset) {
166
-                throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length));
167
-            }
168
-        }
169
-
170
-        if ($realLength === 0) {
171
-            // Empty slice is represented as null
172
-            return null;
173
-        }
174
-
175
-        return new static(array_slice($this->parts, $realOffset, $realLength), $this->attributes);
176
-    }
177
-
178
-    /**
179
-     * Concatenate two names, yielding a new Name instance.
180
-     *
181
-     * The type of the generated instance depends on which class this method is called on, for
182
-     * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance.
183
-     *
184
-     * If one of the arguments is null, a new instance of the other name will be returned. If both
185
-     * arguments are null, null will be returned. As such, writing
186
-     *     Name::concat($namespace, $shortName)
187
-     * where $namespace is a Name node or null will work as expected.
188
-     *
189
-     * @param string|string[]|self|null $name1      The first name
190
-     * @param string|string[]|self|null $name2      The second name
191
-     * @param array                     $attributes Attributes to assign to concatenated name
192
-     *
193
-     * @return static|null Concatenated name
194
-     */
195
-    public static function concat($name1, $name2, array $attributes = []) {
196
-        if (null === $name1 && null === $name2) {
197
-            return null;
198
-        } elseif (null === $name1) {
199
-            return new static(self::prepareName($name2), $attributes);
200
-        } elseif (null === $name2) {
201
-            return new static(self::prepareName($name1), $attributes);
202
-        } else {
203
-            return new static(
204
-                array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes
205
-            );
206
-        }
207
-    }
208
-
209
-    /**
210
-     * Prepares a (string, array or Name node) name for use in name changing methods by converting
211
-     * it to an array.
212
-     *
213
-     * @param string|string[]|self $name Name to prepare
214
-     *
215
-     * @return string[] Prepared name
216
-     */
217
-    private static function prepareName($name) : array {
218
-        if (\is_string($name)) {
219
-            if ('' === $name) {
220
-                throw new \InvalidArgumentException('Name cannot be empty');
221
-            }
222
-
223
-            return explode('\\', $name);
224
-        } elseif (\is_array($name)) {
225
-            if (empty($name)) {
226
-                throw new \InvalidArgumentException('Name cannot be empty');
227
-            }
228
-
229
-            return $name;
230
-        } elseif ($name instanceof self) {
231
-            return $name->parts;
232
-        }
233
-
234
-        throw new \InvalidArgumentException(
235
-            'Expected string, array of parts or Name instance'
236
-        );
237
-    }
238
-
239
-    public function getType() : string {
240
-        return 'Name';
241
-    }
9
+	/** @var string[] Parts of the name */
10
+	public $parts;
11
+
12
+	private static $specialClassNames = [
13
+		'self'   => true,
14
+		'parent' => true,
15
+		'static' => true,
16
+	];
17
+
18
+	/**
19
+	 * Constructs a name node.
20
+	 *
21
+	 * @param string|string[]|self $name       Name as string, part array or Name instance (copy ctor)
22
+	 * @param array                $attributes Additional attributes
23
+	 */
24
+	public function __construct($name, array $attributes = []) {
25
+		$this->attributes = $attributes;
26
+		$this->parts = self::prepareName($name);
27
+	}
28
+
29
+	public function getSubNodeNames() : array {
30
+		return ['parts'];
31
+	}
32
+
33
+	/**
34
+	 * Gets the first part of the name, i.e. everything before the first namespace separator.
35
+	 *
36
+	 * @return string First part of the name
37
+	 */
38
+	public function getFirst() : string {
39
+		return $this->parts[0];
40
+	}
41
+
42
+	/**
43
+	 * Gets the last part of the name, i.e. everything after the last namespace separator.
44
+	 *
45
+	 * @return string Last part of the name
46
+	 */
47
+	public function getLast() : string {
48
+		return $this->parts[count($this->parts) - 1];
49
+	}
50
+
51
+	/**
52
+	 * Checks whether the name is unqualified. (E.g. Name)
53
+	 *
54
+	 * @return bool Whether the name is unqualified
55
+	 */
56
+	public function isUnqualified() : bool {
57
+		return 1 === count($this->parts);
58
+	}
59
+
60
+	/**
61
+	 * Checks whether the name is qualified. (E.g. Name\Name)
62
+	 *
63
+	 * @return bool Whether the name is qualified
64
+	 */
65
+	public function isQualified() : bool {
66
+		return 1 < count($this->parts);
67
+	}
68
+
69
+	/**
70
+	 * Checks whether the name is fully qualified. (E.g. \Name)
71
+	 *
72
+	 * @return bool Whether the name is fully qualified
73
+	 */
74
+	public function isFullyQualified() : bool {
75
+		return false;
76
+	}
77
+
78
+	/**
79
+	 * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
80
+	 *
81
+	 * @return bool Whether the name is relative
82
+	 */
83
+	public function isRelative() : bool {
84
+		return false;
85
+	}
86
+
87
+	/**
88
+	 * Returns a string representation of the name itself, without taking the name type into
89
+	 * account (e.g., not including a leading backslash for fully qualified names).
90
+	 *
91
+	 * @return string String representation
92
+	 */
93
+	public function toString() : string {
94
+		return implode('\\', $this->parts);
95
+	}
96
+
97
+	/**
98
+	 * Returns a string representation of the name as it would occur in code (e.g., including
99
+	 * leading backslash for fully qualified names.
100
+	 *
101
+	 * @return string String representation
102
+	 */
103
+	public function toCodeString() : string {
104
+		return $this->toString();
105
+	}
106
+
107
+	/**
108
+	 * Returns lowercased string representation of the name, without taking the name type into
109
+	 * account (e.g., no leading backslash for fully qualified names).
110
+	 *
111
+	 * @return string Lowercased string representation
112
+	 */
113
+	public function toLowerString() : string {
114
+		return strtolower(implode('\\', $this->parts));
115
+	}
116
+
117
+	/**
118
+	 * Checks whether the identifier is a special class name (self, parent or static).
119
+	 *
120
+	 * @return bool Whether identifier is a special class name
121
+	 */
122
+	public function isSpecialClassName() : bool {
123
+		return count($this->parts) === 1
124
+			&& isset(self::$specialClassNames[strtolower($this->parts[0])]);
125
+	}
126
+
127
+	/**
128
+	 * Returns a string representation of the name by imploding the namespace parts with the
129
+	 * namespace separator.
130
+	 *
131
+	 * @return string String representation
132
+	 */
133
+	public function __toString() : string {
134
+		return implode('\\', $this->parts);
135
+	}
136
+
137
+	/**
138
+	 * Gets a slice of a name (similar to array_slice).
139
+	 *
140
+	 * This method returns a new instance of the same type as the original and with the same
141
+	 * attributes.
142
+	 *
143
+	 * If the slice is empty, null is returned. The null value will be correctly handled in
144
+	 * concatenations using concat().
145
+	 *
146
+	 * Offset and length have the same meaning as in array_slice().
147
+	 *
148
+	 * @param int      $offset Offset to start the slice at (may be negative)
149
+	 * @param int|null $length Length of the slice (may be negative)
150
+	 *
151
+	 * @return static|null Sliced name
152
+	 */
153
+	public function slice(int $offset, int $length = null) {
154
+		$numParts = count($this->parts);
155
+
156
+		$realOffset = $offset < 0 ? $offset + $numParts : $offset;
157
+		if ($realOffset < 0 || $realOffset > $numParts) {
158
+			throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset));
159
+		}
160
+
161
+		if (null === $length) {
162
+			$realLength = $numParts - $realOffset;
163
+		} else {
164
+			$realLength = $length < 0 ? $length + $numParts - $realOffset : $length;
165
+			if ($realLength < 0 || $realLength > $numParts - $realOffset) {
166
+				throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length));
167
+			}
168
+		}
169
+
170
+		if ($realLength === 0) {
171
+			// Empty slice is represented as null
172
+			return null;
173
+		}
174
+
175
+		return new static(array_slice($this->parts, $realOffset, $realLength), $this->attributes);
176
+	}
177
+
178
+	/**
179
+	 * Concatenate two names, yielding a new Name instance.
180
+	 *
181
+	 * The type of the generated instance depends on which class this method is called on, for
182
+	 * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance.
183
+	 *
184
+	 * If one of the arguments is null, a new instance of the other name will be returned. If both
185
+	 * arguments are null, null will be returned. As such, writing
186
+	 *     Name::concat($namespace, $shortName)
187
+	 * where $namespace is a Name node or null will work as expected.
188
+	 *
189
+	 * @param string|string[]|self|null $name1      The first name
190
+	 * @param string|string[]|self|null $name2      The second name
191
+	 * @param array                     $attributes Attributes to assign to concatenated name
192
+	 *
193
+	 * @return static|null Concatenated name
194
+	 */
195
+	public static function concat($name1, $name2, array $attributes = []) {
196
+		if (null === $name1 && null === $name2) {
197
+			return null;
198
+		} elseif (null === $name1) {
199
+			return new static(self::prepareName($name2), $attributes);
200
+		} elseif (null === $name2) {
201
+			return new static(self::prepareName($name1), $attributes);
202
+		} else {
203
+			return new static(
204
+				array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes
205
+			);
206
+		}
207
+	}
208
+
209
+	/**
210
+	 * Prepares a (string, array or Name node) name for use in name changing methods by converting
211
+	 * it to an array.
212
+	 *
213
+	 * @param string|string[]|self $name Name to prepare
214
+	 *
215
+	 * @return string[] Prepared name
216
+	 */
217
+	private static function prepareName($name) : array {
218
+		if (\is_string($name)) {
219
+			if ('' === $name) {
220
+				throw new \InvalidArgumentException('Name cannot be empty');
221
+			}
222
+
223
+			return explode('\\', $name);
224
+		} elseif (\is_array($name)) {
225
+			if (empty($name)) {
226
+				throw new \InvalidArgumentException('Name cannot be empty');
227
+			}
228
+
229
+			return $name;
230
+		} elseif ($name instanceof self) {
231
+			return $name->parts;
232
+		}
233
+
234
+		throw new \InvalidArgumentException(
235
+			'Expected string, array of parts or Name instance'
236
+		);
237
+	}
238
+
239
+	public function getType() : string {
240
+		return 'Name';
241
+	}
242 242
 }
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php 3 patches
Indentation   +2817 added lines, -2817 removed lines patch added patch discarded remove patch
@@ -17,2840 +17,2840 @@
 block discarded – undo
17 17
  */
18 18
 class Php7 extends \PhpParser\ParserAbstract
19 19
 {
20
-    protected $tokenToSymbolMapSize = 396;
21
-    protected $actionTableSize = 1217;
22
-    protected $gotoTableSize = 604;
20
+	protected $tokenToSymbolMapSize = 396;
21
+	protected $actionTableSize = 1217;
22
+	protected $gotoTableSize = 604;
23 23
 
24
-    protected $invalidSymbol = 168;
25
-    protected $errorSymbol = 1;
26
-    protected $defaultAction = -32766;
27
-    protected $unexpectedTokenRule = 32767;
24
+	protected $invalidSymbol = 168;
25
+	protected $errorSymbol = 1;
26
+	protected $defaultAction = -32766;
27
+	protected $unexpectedTokenRule = 32767;
28 28
 
29
-    protected $YY2TBLSTATE = 429;
30
-    protected $numNonLeafStates = 717;
29
+	protected $YY2TBLSTATE = 429;
30
+	protected $numNonLeafStates = 717;
31 31
 
32
-    protected $symbolToName = array(
33
-        "EOF",
34
-        "error",
35
-        "T_THROW",
36
-        "T_INCLUDE",
37
-        "T_INCLUDE_ONCE",
38
-        "T_EVAL",
39
-        "T_REQUIRE",
40
-        "T_REQUIRE_ONCE",
41
-        "','",
42
-        "T_LOGICAL_OR",
43
-        "T_LOGICAL_XOR",
44
-        "T_LOGICAL_AND",
45
-        "T_PRINT",
46
-        "T_YIELD",
47
-        "T_DOUBLE_ARROW",
48
-        "T_YIELD_FROM",
49
-        "'='",
50
-        "T_PLUS_EQUAL",
51
-        "T_MINUS_EQUAL",
52
-        "T_MUL_EQUAL",
53
-        "T_DIV_EQUAL",
54
-        "T_CONCAT_EQUAL",
55
-        "T_MOD_EQUAL",
56
-        "T_AND_EQUAL",
57
-        "T_OR_EQUAL",
58
-        "T_XOR_EQUAL",
59
-        "T_SL_EQUAL",
60
-        "T_SR_EQUAL",
61
-        "T_POW_EQUAL",
62
-        "T_COALESCE_EQUAL",
63
-        "'?'",
64
-        "':'",
65
-        "T_COALESCE",
66
-        "T_BOOLEAN_OR",
67
-        "T_BOOLEAN_AND",
68
-        "'|'",
69
-        "'^'",
70
-        "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG",
71
-        "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG",
72
-        "T_IS_EQUAL",
73
-        "T_IS_NOT_EQUAL",
74
-        "T_IS_IDENTICAL",
75
-        "T_IS_NOT_IDENTICAL",
76
-        "T_SPACESHIP",
77
-        "'<'",
78
-        "T_IS_SMALLER_OR_EQUAL",
79
-        "'>'",
80
-        "T_IS_GREATER_OR_EQUAL",
81
-        "T_SL",
82
-        "T_SR",
83
-        "'+'",
84
-        "'-'",
85
-        "'.'",
86
-        "'*'",
87
-        "'/'",
88
-        "'%'",
89
-        "'!'",
90
-        "T_INSTANCEOF",
91
-        "'~'",
92
-        "T_INC",
93
-        "T_DEC",
94
-        "T_INT_CAST",
95
-        "T_DOUBLE_CAST",
96
-        "T_STRING_CAST",
97
-        "T_ARRAY_CAST",
98
-        "T_OBJECT_CAST",
99
-        "T_BOOL_CAST",
100
-        "T_UNSET_CAST",
101
-        "'@'",
102
-        "T_POW",
103
-        "'['",
104
-        "T_NEW",
105
-        "T_CLONE",
106
-        "T_EXIT",
107
-        "T_IF",
108
-        "T_ELSEIF",
109
-        "T_ELSE",
110
-        "T_ENDIF",
111
-        "T_LNUMBER",
112
-        "T_DNUMBER",
113
-        "T_STRING",
114
-        "T_STRING_VARNAME",
115
-        "T_VARIABLE",
116
-        "T_NUM_STRING",
117
-        "T_INLINE_HTML",
118
-        "T_ENCAPSED_AND_WHITESPACE",
119
-        "T_CONSTANT_ENCAPSED_STRING",
120
-        "T_ECHO",
121
-        "T_DO",
122
-        "T_WHILE",
123
-        "T_ENDWHILE",
124
-        "T_FOR",
125
-        "T_ENDFOR",
126
-        "T_FOREACH",
127
-        "T_ENDFOREACH",
128
-        "T_DECLARE",
129
-        "T_ENDDECLARE",
130
-        "T_AS",
131
-        "T_SWITCH",
132
-        "T_MATCH",
133
-        "T_ENDSWITCH",
134
-        "T_CASE",
135
-        "T_DEFAULT",
136
-        "T_BREAK",
137
-        "T_CONTINUE",
138
-        "T_GOTO",
139
-        "T_FUNCTION",
140
-        "T_FN",
141
-        "T_CONST",
142
-        "T_RETURN",
143
-        "T_TRY",
144
-        "T_CATCH",
145
-        "T_FINALLY",
146
-        "T_USE",
147
-        "T_INSTEADOF",
148
-        "T_GLOBAL",
149
-        "T_STATIC",
150
-        "T_ABSTRACT",
151
-        "T_FINAL",
152
-        "T_PRIVATE",
153
-        "T_PROTECTED",
154
-        "T_PUBLIC",
155
-        "T_READONLY",
156
-        "T_VAR",
157
-        "T_UNSET",
158
-        "T_ISSET",
159
-        "T_EMPTY",
160
-        "T_HALT_COMPILER",
161
-        "T_CLASS",
162
-        "T_TRAIT",
163
-        "T_INTERFACE",
164
-        "T_ENUM",
165
-        "T_EXTENDS",
166
-        "T_IMPLEMENTS",
167
-        "T_OBJECT_OPERATOR",
168
-        "T_NULLSAFE_OBJECT_OPERATOR",
169
-        "T_LIST",
170
-        "T_ARRAY",
171
-        "T_CALLABLE",
172
-        "T_CLASS_C",
173
-        "T_TRAIT_C",
174
-        "T_METHOD_C",
175
-        "T_FUNC_C",
176
-        "T_LINE",
177
-        "T_FILE",
178
-        "T_START_HEREDOC",
179
-        "T_END_HEREDOC",
180
-        "T_DOLLAR_OPEN_CURLY_BRACES",
181
-        "T_CURLY_OPEN",
182
-        "T_PAAMAYIM_NEKUDOTAYIM",
183
-        "T_NAMESPACE",
184
-        "T_NS_C",
185
-        "T_DIR",
186
-        "T_NS_SEPARATOR",
187
-        "T_ELLIPSIS",
188
-        "T_NAME_FULLY_QUALIFIED",
189
-        "T_NAME_QUALIFIED",
190
-        "T_NAME_RELATIVE",
191
-        "T_ATTRIBUTE",
192
-        "';'",
193
-        "']'",
194
-        "'{'",
195
-        "'}'",
196
-        "'('",
197
-        "')'",
198
-        "'`'",
199
-        "'\"'",
200
-        "'$'"
201
-    );
32
+	protected $symbolToName = array(
33
+		"EOF",
34
+		"error",
35
+		"T_THROW",
36
+		"T_INCLUDE",
37
+		"T_INCLUDE_ONCE",
38
+		"T_EVAL",
39
+		"T_REQUIRE",
40
+		"T_REQUIRE_ONCE",
41
+		"','",
42
+		"T_LOGICAL_OR",
43
+		"T_LOGICAL_XOR",
44
+		"T_LOGICAL_AND",
45
+		"T_PRINT",
46
+		"T_YIELD",
47
+		"T_DOUBLE_ARROW",
48
+		"T_YIELD_FROM",
49
+		"'='",
50
+		"T_PLUS_EQUAL",
51
+		"T_MINUS_EQUAL",
52
+		"T_MUL_EQUAL",
53
+		"T_DIV_EQUAL",
54
+		"T_CONCAT_EQUAL",
55
+		"T_MOD_EQUAL",
56
+		"T_AND_EQUAL",
57
+		"T_OR_EQUAL",
58
+		"T_XOR_EQUAL",
59
+		"T_SL_EQUAL",
60
+		"T_SR_EQUAL",
61
+		"T_POW_EQUAL",
62
+		"T_COALESCE_EQUAL",
63
+		"'?'",
64
+		"':'",
65
+		"T_COALESCE",
66
+		"T_BOOLEAN_OR",
67
+		"T_BOOLEAN_AND",
68
+		"'|'",
69
+		"'^'",
70
+		"T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG",
71
+		"T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG",
72
+		"T_IS_EQUAL",
73
+		"T_IS_NOT_EQUAL",
74
+		"T_IS_IDENTICAL",
75
+		"T_IS_NOT_IDENTICAL",
76
+		"T_SPACESHIP",
77
+		"'<'",
78
+		"T_IS_SMALLER_OR_EQUAL",
79
+		"'>'",
80
+		"T_IS_GREATER_OR_EQUAL",
81
+		"T_SL",
82
+		"T_SR",
83
+		"'+'",
84
+		"'-'",
85
+		"'.'",
86
+		"'*'",
87
+		"'/'",
88
+		"'%'",
89
+		"'!'",
90
+		"T_INSTANCEOF",
91
+		"'~'",
92
+		"T_INC",
93
+		"T_DEC",
94
+		"T_INT_CAST",
95
+		"T_DOUBLE_CAST",
96
+		"T_STRING_CAST",
97
+		"T_ARRAY_CAST",
98
+		"T_OBJECT_CAST",
99
+		"T_BOOL_CAST",
100
+		"T_UNSET_CAST",
101
+		"'@'",
102
+		"T_POW",
103
+		"'['",
104
+		"T_NEW",
105
+		"T_CLONE",
106
+		"T_EXIT",
107
+		"T_IF",
108
+		"T_ELSEIF",
109
+		"T_ELSE",
110
+		"T_ENDIF",
111
+		"T_LNUMBER",
112
+		"T_DNUMBER",
113
+		"T_STRING",
114
+		"T_STRING_VARNAME",
115
+		"T_VARIABLE",
116
+		"T_NUM_STRING",
117
+		"T_INLINE_HTML",
118
+		"T_ENCAPSED_AND_WHITESPACE",
119
+		"T_CONSTANT_ENCAPSED_STRING",
120
+		"T_ECHO",
121
+		"T_DO",
122
+		"T_WHILE",
123
+		"T_ENDWHILE",
124
+		"T_FOR",
125
+		"T_ENDFOR",
126
+		"T_FOREACH",
127
+		"T_ENDFOREACH",
128
+		"T_DECLARE",
129
+		"T_ENDDECLARE",
130
+		"T_AS",
131
+		"T_SWITCH",
132
+		"T_MATCH",
133
+		"T_ENDSWITCH",
134
+		"T_CASE",
135
+		"T_DEFAULT",
136
+		"T_BREAK",
137
+		"T_CONTINUE",
138
+		"T_GOTO",
139
+		"T_FUNCTION",
140
+		"T_FN",
141
+		"T_CONST",
142
+		"T_RETURN",
143
+		"T_TRY",
144
+		"T_CATCH",
145
+		"T_FINALLY",
146
+		"T_USE",
147
+		"T_INSTEADOF",
148
+		"T_GLOBAL",
149
+		"T_STATIC",
150
+		"T_ABSTRACT",
151
+		"T_FINAL",
152
+		"T_PRIVATE",
153
+		"T_PROTECTED",
154
+		"T_PUBLIC",
155
+		"T_READONLY",
156
+		"T_VAR",
157
+		"T_UNSET",
158
+		"T_ISSET",
159
+		"T_EMPTY",
160
+		"T_HALT_COMPILER",
161
+		"T_CLASS",
162
+		"T_TRAIT",
163
+		"T_INTERFACE",
164
+		"T_ENUM",
165
+		"T_EXTENDS",
166
+		"T_IMPLEMENTS",
167
+		"T_OBJECT_OPERATOR",
168
+		"T_NULLSAFE_OBJECT_OPERATOR",
169
+		"T_LIST",
170
+		"T_ARRAY",
171
+		"T_CALLABLE",
172
+		"T_CLASS_C",
173
+		"T_TRAIT_C",
174
+		"T_METHOD_C",
175
+		"T_FUNC_C",
176
+		"T_LINE",
177
+		"T_FILE",
178
+		"T_START_HEREDOC",
179
+		"T_END_HEREDOC",
180
+		"T_DOLLAR_OPEN_CURLY_BRACES",
181
+		"T_CURLY_OPEN",
182
+		"T_PAAMAYIM_NEKUDOTAYIM",
183
+		"T_NAMESPACE",
184
+		"T_NS_C",
185
+		"T_DIR",
186
+		"T_NS_SEPARATOR",
187
+		"T_ELLIPSIS",
188
+		"T_NAME_FULLY_QUALIFIED",
189
+		"T_NAME_QUALIFIED",
190
+		"T_NAME_RELATIVE",
191
+		"T_ATTRIBUTE",
192
+		"';'",
193
+		"']'",
194
+		"'{'",
195
+		"'}'",
196
+		"'('",
197
+		"')'",
198
+		"'`'",
199
+		"'\"'",
200
+		"'$'"
201
+	);
202 202
 
203
-    protected $tokenToSymbol = array(
204
-            0,  168,  168,  168,  168,  168,  168,  168,  168,  168,
205
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
206
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
207
-          168,  168,  168,   56,  166,  168,  167,   55,  168,  168,
208
-          163,  164,   53,   50,    8,   51,   52,   54,  168,  168,
209
-          168,  168,  168,  168,  168,  168,  168,  168,   31,  159,
210
-           44,   16,   46,   30,   68,  168,  168,  168,  168,  168,
211
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
212
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
213
-          168,   70,  168,  160,   36,  168,  165,  168,  168,  168,
214
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
215
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
216
-          168,  168,  168,  161,   35,  162,   58,  168,  168,  168,
217
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
218
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
219
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
220
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
221
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
222
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
223
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
224
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
225
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
226
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
227
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
228
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
229
-          168,  168,  168,  168,  168,  168,    1,    2,    3,    4,
230
-            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
231
-           17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
232
-           27,   28,   29,   32,   33,   34,   37,   38,   39,   40,
233
-           41,   42,   43,   45,   47,   48,   49,   57,   59,   60,
234
-           61,   62,   63,   64,   65,   66,   67,   69,   71,   72,
235
-           73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
236
-           83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
237
-           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
238
-          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
239
-          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
240
-          123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
241
-          133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
242
-          143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
243
-          153,  154,  155,  156,  157,  158
244
-    );
203
+	protected $tokenToSymbol = array(
204
+			0,  168,  168,  168,  168,  168,  168,  168,  168,  168,
205
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
206
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
207
+		  168,  168,  168,   56,  166,  168,  167,   55,  168,  168,
208
+		  163,  164,   53,   50,    8,   51,   52,   54,  168,  168,
209
+		  168,  168,  168,  168,  168,  168,  168,  168,   31,  159,
210
+		   44,   16,   46,   30,   68,  168,  168,  168,  168,  168,
211
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
212
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
213
+		  168,   70,  168,  160,   36,  168,  165,  168,  168,  168,
214
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
215
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
216
+		  168,  168,  168,  161,   35,  162,   58,  168,  168,  168,
217
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
218
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
219
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
220
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
221
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
222
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
223
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
224
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
225
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
226
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
227
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
228
+		  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
229
+		  168,  168,  168,  168,  168,  168,    1,    2,    3,    4,
230
+			5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
231
+		   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
232
+		   27,   28,   29,   32,   33,   34,   37,   38,   39,   40,
233
+		   41,   42,   43,   45,   47,   48,   49,   57,   59,   60,
234
+		   61,   62,   63,   64,   65,   66,   67,   69,   71,   72,
235
+		   73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
236
+		   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
237
+		   93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
238
+		  103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
239
+		  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
240
+		  123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
241
+		  133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
242
+		  143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
243
+		  153,  154,  155,  156,  157,  158
244
+	);
245 245
 
246
-    protected $action = array(
247
-          132,  133,  134,  570,  135,  136,    0,  729,  730,  731,
248
-          137,   37,  929,  450,  451,  452,-32766,-32766,-32766,-32767,
249
-        -32767,-32767,-32767,  101,  102,  103,  104,  105, 1085, 1086,
250
-         1087, 1084, 1083, 1082, 1088,  723,  722,-32766, 1275,-32766,
251
-        -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
252
-        -32767,  373,  374,  918,    2,  732,-32766,-32766,-32766, 1001,
253
-          472,  417,  150,-32766,-32766,-32766,  375,  374,   12,  267,
254
-          138,  399,  736,  737,  738,  739,  417,-32766,  423,-32766,
255
-        -32766,-32766,-32766,-32766,-32766,  740,  741,  742,  743,  744,
256
-          745,  746,  747,  748,  749,  750,  770,  571,  771,  772,
257
-          773,  774,  762,  763,  339,  340,  765,  766,  751,  752,
258
-          753,  755,  756,  757,  349,  797,  798,  799,  800,  801,
259
-          802,  758,  759,  572,  573,  791,  782,  780,  781,  794,
260
-          777,  778,  323,  423,  574,  575,  776,  576,  577,  578,
261
-          579,  580,  581, -324, -585,  810,   34,  805,  779,  582,
262
-          583, -585,  139,-32766,-32766,-32766,  132,  133,  134,  570,
263
-          135,  136, 1034,  729,  730,  731,  137,   37,-32766,-32766,
264
-        -32766,  544,  814,  126,-32766, 1310,-32766,-32766,-32766,-32766,
265
-        -32766,-32766,-32766, 1085, 1086, 1087, 1084, 1083, 1082, 1088,
266
-          473,  723,  722,-32766,-32766,-32766,  458,  459,   81,-32766,
267
-        -32766,-32766, -193, -192,  322,  898,  240,  599, 1210, 1209,
268
-         1211,  732,  816,  703,-32766, 1063,-32766,-32766,-32766,-32766,
269
-        -32766,  811,-32766,-32766,-32766,  267,  138,  399,  736,  737,
270
-          738,  739, 1247, 1295,  423,  694, 1320,   35,  249, 1321,
271
-         1294,  740,  741,  742,  743,  744,  745,  746,  747,  748,
272
-          749,  750,  770,  571,  771,  772,  773,  774,  762,  763,
273
-          339,  340,  765,  766,  751,  752,  753,  755,  756,  757,
274
-          349,  797,  798,  799,  800,  801,  802,  758,  759,  572,
275
-          573,  791,  782,  780,  781,  794,  777,  778,  888,  593,
276
-          574,  575,  776,  576,  577,  578,  579,  580,  581, -324,
277
-           82,   83,   84, -585,  779,  582,  583, -585,  148,  754,
278
-          724,  725,  726,  727,  728, -582,  729,  730,  731,  767,
279
-          768,   36, -582,   85,   86,   87,   88,   89,   90,   91,
280
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
281
-          102,  103,  104,  105,  106,  107,  108, -362,  271, -362,
282
-        -32766,-32766,-32766,  106,  107,  108, -268,  271, -193, -192,
283
-          109,  933,  934,  900,  732,  689,  935,   14,  288,  109,
284
-          815,-32766, 1061,-32766,-32766,  964,  -86,  288,  733,  734,
285
-          735,  736,  737,  738,  739,  239,  384,  803,   11, 1077,
286
-         -539,-32766,-32766,-32766,  740,  741,  742,  743,  744,  745,
287
-          746,  747,  748,  749,  750,  770,  793,  771,  772,  773,
288
-          774,  762,  763,  764,  792,  765,  766,  751,  752,  753,
289
-          755,  756,  757,  796,  797,  798,  799,  800,  801,  802,
290
-          758,  759,  760,  761,  791,  782,  780,  781,  794,  777,
291
-          778,  128,  -86,  769,  775,  776,  783,  784,  786,  785,
292
-          787,  788, -576,  144, -539, -539, -576,  779,  790,  789,
293
-           49,   50,   51,  503,   52,   53,  997,  996,  995,  998,
294
-           54,   55, -111,   56, -582, 1033, 1010, -111, -582, -111,
295
-         1291, -539,-32766,-32766,  302, 1010, 1010, -111, -111, -111,
296
-         -111, -111, -111, -111, -111, 1208,  841,  898,  842,  253,
297
-          807,  287,  306,  965,  284,  898,  723,  722,   57,   58,
298
-          287,  287, 1007, -536,   59,  308,   60,  246,  247,   61,
299
-           62,   63,   64,   65,   66,   67,   68,  695,   27,  269,
300
-           69,  439,  504, -338, 1010,  696, 1241, 1242,  505,  898,
301
-          814,  640,   25,  898, 1239,   41,   24,  506,  320,  507,
302
-         1235,  508, 1009,  509,  149,  402,  510,  511,  841,  805,
303
-          842,   43,   44,  440,  370,  369,  898,   45,  512,  698,
304
-         1210, 1209, 1211,  361,  335, 1215,  809, -536, -536,  336,
305
-          888,  691,  513,  514,  515, 1215, 1007, 1062,  888,  715,
306
-         1007,  337, -536,  363,  516,  517,  705, 1229, 1230, 1231,
307
-         1232, 1226, 1227,  294, -536,  -16, -542,  813, 1010, 1233,
308
-         1228,  367, 1010, 1210, 1209, 1211,  295, -153, -153, -153,
309
-          382,   70,  888,  318,  319,  322,  888,  659,  660, -535,
310
-         1206,  814, -153,  279, -153,  435, -153,  279, -153,  436,
311
-          141,  103,  104,  105,  632,  633,  322,  437,  368,  888,
312
-        -32766,-32766,  371,  372,  438,  900,  814,  689,  820, -111,
313
-         -111,  376,  377,  950, -111,  689,  814,  -88,  151,  874,
314
-         -111, -111, -111, -111,   31,  110,  111,  112,  113,  114,
315
-          115,  116,  117,  118,  119,  120,  121,  122,  723,  722,
316
-         1206,  153,  154, -535, -535,  155,  898,  900,  157,  689,
317
-         1206,  900, -111,  689, -153,   32,  123,  898, -535,  124,
318
-          140,-32766, -537,  129,  130,  143,  322, 1122, 1124,  158,
319
-         -535,-32766, -541, -534,  900,-32766,  689,  159, -534,  723,
320
-          722, 1208,  295,  160,  161,  -79,  -75,   74,-32766,-32766,
321
-        -32766,  322,-32766,  -73,-32766, -298,-32766,   74, -294,-32766,
322
-          -72,  322,  -71,  -70,-32766,-32766,-32766,  -69,  -68,  -67,
323
-        -32766,-32766,   27,  -66,  -47, 1215,-32766,  414,  -18,  147,
324
-          275,  270,  281,  704,  814,-32766, -537, -537, 1239,  888,
325
-          707,  897,  146,  276,   48,   -4,  898, -534, -534,  282,
326
-          888, -537, -534, -534,  283, -246, -246, -246,  329,  285,
327
-          271,  368, -534, -537,  286,   73,  289, -534, 1206,   47,
328
-          723,  722, -111, -111, -534,  290,  109, -111,  914, -534,
329
-          550,  669,  874, -111, -111, -111, -111,  145,  516,  517,
330
-        -32766, 1229, 1230, 1231, 1232, 1226, 1227,  814,  805, 1322,
331
-          662,  300, 1092, 1233, 1228,  682,  814,-32766,  298,  299,
332
-          546,  641,  647, 1208,  900,   72,  689, -246,  319,  322,
333
-        -32766,-32766,-32766,  366,-32766,  900,-32766,  689,-32766,  888,
334
-          646,-32766,   13,  296,  297,  127,-32766,-32766,-32766,  455,
335
-         1206,  -51,-32766,-32766,  483,  630,  663,  556,-32766,  414,
336
-          303,  368, -111,  430,  434,   39,  930,-32766,  293,    0,
337
-          125,-32766, -111, -111,  301,    0,    0, -111, 1010,  307,
338
-            0,    0,  833, -111, -111, -111, -111,    0,-32766,  131,
339
-            0,    0,  295,    0,-32766, 1246,    0,   74,    0, 1248,
340
-         1208,  322,    0, -500,    0,    9,    0,-32766,-32766,-32766,
341
-         -490,-32766,    7,-32766,  900,-32766,  689,   -4,-32766,   16,
342
-          365,  597,  813,-32766,-32766,-32766,  916,  295,  709,-32766,
343
-        -32766, 1240,-32766,   40,  712,-32766,  414,  713, 1208,  879,
344
-          898,  974,  951,  958,-32766,-32766,-32766,-32766,  948,-32766,
345
-          959,-32766,  877,-32766,  946, 1066,-32766, 1069, 1070, 1067,
346
-         1068,-32766,-32766,-32766,-32766, 1074,   33,-32766,-32766, 1236,
347
-         1208,  825, 1261,-32766,  414, 1279, 1313,-32766,-32766,-32766,
348
-          317,-32766,-32766,-32766,  635,-32766,  364,  690,-32766,  693,
349
-          697,  699,  478,-32766,-32766,-32766,-32766,  700,  701,-32766,
350
-        -32766,  702, 1208,  562,  706,-32766,  414,  692, -570,-32766,
351
-        -32766,-32766,  875,-32766,-32766,-32766, 1317,-32766, 1319,  836,
352
-        -32766,  835,  844,  888,  923,-32766,-32766,-32766,  966,  843,
353
-         1318,-32766,-32766,  922,  924,  921, 1194,-32766,  414, -245,
354
-         -245, -245,  907,  917,  905,  368,-32766,  956,  957, 1316,
355
-         1273, 1262,    0, 1280, 1286, 1289, -111, -111, -568,   27,
356
-         -542, -111, -541, -540,    1,   28,  874, -111, -111, -111,
357
-         -111,  814,   29,-32766,   38, 1239,   42,   46,   71, 1208,
358
-           75,   76,   77,   78,   79,    0,-32766,-32766,-32766,   80,
359
-        -32766,  142,-32766,  152,-32766,  156,  245,-32766,  900,  324,
360
-          689, -245,-32766,-32766,-32766, 1206,  350,  351,-32766,-32766,
361
-          352,  353,  354,  355,-32766,  414,  356,  357,  358,  359,
362
-          360,  362,  431,-32766, -271, -269,  517, -268, 1229, 1230,
363
-         1231, 1232, 1226, 1227,   18,   19,   20,   21,   23,  401,
364
-         1233, 1228,  474,  475,  482,  485,  486,  487,  488,  492,
365
-          493,  494,   72, -504,  501,  319,  322,  676, 1219, 1162,
366
-         1237, 1036, 1035,    0, 1016, 1198, 1012, -273, -103,   17,
367
-           22,   26,  292,  400,  590,  594,  621,  681, 1166, 1214,
368
-         1163, 1292,    0, 1179,    0,    0,  322
369
-    );
246
+	protected $action = array(
247
+		  132,  133,  134,  570,  135,  136,    0,  729,  730,  731,
248
+		  137,   37,  929,  450,  451,  452,-32766,-32766,-32766,-32767,
249
+		-32767,-32767,-32767,  101,  102,  103,  104,  105, 1085, 1086,
250
+		 1087, 1084, 1083, 1082, 1088,  723,  722,-32766, 1275,-32766,
251
+		-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
252
+		-32767,  373,  374,  918,    2,  732,-32766,-32766,-32766, 1001,
253
+		  472,  417,  150,-32766,-32766,-32766,  375,  374,   12,  267,
254
+		  138,  399,  736,  737,  738,  739,  417,-32766,  423,-32766,
255
+		-32766,-32766,-32766,-32766,-32766,  740,  741,  742,  743,  744,
256
+		  745,  746,  747,  748,  749,  750,  770,  571,  771,  772,
257
+		  773,  774,  762,  763,  339,  340,  765,  766,  751,  752,
258
+		  753,  755,  756,  757,  349,  797,  798,  799,  800,  801,
259
+		  802,  758,  759,  572,  573,  791,  782,  780,  781,  794,
260
+		  777,  778,  323,  423,  574,  575,  776,  576,  577,  578,
261
+		  579,  580,  581, -324, -585,  810,   34,  805,  779,  582,
262
+		  583, -585,  139,-32766,-32766,-32766,  132,  133,  134,  570,
263
+		  135,  136, 1034,  729,  730,  731,  137,   37,-32766,-32766,
264
+		-32766,  544,  814,  126,-32766, 1310,-32766,-32766,-32766,-32766,
265
+		-32766,-32766,-32766, 1085, 1086, 1087, 1084, 1083, 1082, 1088,
266
+		  473,  723,  722,-32766,-32766,-32766,  458,  459,   81,-32766,
267
+		-32766,-32766, -193, -192,  322,  898,  240,  599, 1210, 1209,
268
+		 1211,  732,  816,  703,-32766, 1063,-32766,-32766,-32766,-32766,
269
+		-32766,  811,-32766,-32766,-32766,  267,  138,  399,  736,  737,
270
+		  738,  739, 1247, 1295,  423,  694, 1320,   35,  249, 1321,
271
+		 1294,  740,  741,  742,  743,  744,  745,  746,  747,  748,
272
+		  749,  750,  770,  571,  771,  772,  773,  774,  762,  763,
273
+		  339,  340,  765,  766,  751,  752,  753,  755,  756,  757,
274
+		  349,  797,  798,  799,  800,  801,  802,  758,  759,  572,
275
+		  573,  791,  782,  780,  781,  794,  777,  778,  888,  593,
276
+		  574,  575,  776,  576,  577,  578,  579,  580,  581, -324,
277
+		   82,   83,   84, -585,  779,  582,  583, -585,  148,  754,
278
+		  724,  725,  726,  727,  728, -582,  729,  730,  731,  767,
279
+		  768,   36, -582,   85,   86,   87,   88,   89,   90,   91,
280
+		   92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
281
+		  102,  103,  104,  105,  106,  107,  108, -362,  271, -362,
282
+		-32766,-32766,-32766,  106,  107,  108, -268,  271, -193, -192,
283
+		  109,  933,  934,  900,  732,  689,  935,   14,  288,  109,
284
+		  815,-32766, 1061,-32766,-32766,  964,  -86,  288,  733,  734,
285
+		  735,  736,  737,  738,  739,  239,  384,  803,   11, 1077,
286
+		 -539,-32766,-32766,-32766,  740,  741,  742,  743,  744,  745,
287
+		  746,  747,  748,  749,  750,  770,  793,  771,  772,  773,
288
+		  774,  762,  763,  764,  792,  765,  766,  751,  752,  753,
289
+		  755,  756,  757,  796,  797,  798,  799,  800,  801,  802,
290
+		  758,  759,  760,  761,  791,  782,  780,  781,  794,  777,
291
+		  778,  128,  -86,  769,  775,  776,  783,  784,  786,  785,
292
+		  787,  788, -576,  144, -539, -539, -576,  779,  790,  789,
293
+		   49,   50,   51,  503,   52,   53,  997,  996,  995,  998,
294
+		   54,   55, -111,   56, -582, 1033, 1010, -111, -582, -111,
295
+		 1291, -539,-32766,-32766,  302, 1010, 1010, -111, -111, -111,
296
+		 -111, -111, -111, -111, -111, 1208,  841,  898,  842,  253,
297
+		  807,  287,  306,  965,  284,  898,  723,  722,   57,   58,
298
+		  287,  287, 1007, -536,   59,  308,   60,  246,  247,   61,
299
+		   62,   63,   64,   65,   66,   67,   68,  695,   27,  269,
300
+		   69,  439,  504, -338, 1010,  696, 1241, 1242,  505,  898,
301
+		  814,  640,   25,  898, 1239,   41,   24,  506,  320,  507,
302
+		 1235,  508, 1009,  509,  149,  402,  510,  511,  841,  805,
303
+		  842,   43,   44,  440,  370,  369,  898,   45,  512,  698,
304
+		 1210, 1209, 1211,  361,  335, 1215,  809, -536, -536,  336,
305
+		  888,  691,  513,  514,  515, 1215, 1007, 1062,  888,  715,
306
+		 1007,  337, -536,  363,  516,  517,  705, 1229, 1230, 1231,
307
+		 1232, 1226, 1227,  294, -536,  -16, -542,  813, 1010, 1233,
308
+		 1228,  367, 1010, 1210, 1209, 1211,  295, -153, -153, -153,
309
+		  382,   70,  888,  318,  319,  322,  888,  659,  660, -535,
310
+		 1206,  814, -153,  279, -153,  435, -153,  279, -153,  436,
311
+		  141,  103,  104,  105,  632,  633,  322,  437,  368,  888,
312
+		-32766,-32766,  371,  372,  438,  900,  814,  689,  820, -111,
313
+		 -111,  376,  377,  950, -111,  689,  814,  -88,  151,  874,
314
+		 -111, -111, -111, -111,   31,  110,  111,  112,  113,  114,
315
+		  115,  116,  117,  118,  119,  120,  121,  122,  723,  722,
316
+		 1206,  153,  154, -535, -535,  155,  898,  900,  157,  689,
317
+		 1206,  900, -111,  689, -153,   32,  123,  898, -535,  124,
318
+		  140,-32766, -537,  129,  130,  143,  322, 1122, 1124,  158,
319
+		 -535,-32766, -541, -534,  900,-32766,  689,  159, -534,  723,
320
+		  722, 1208,  295,  160,  161,  -79,  -75,   74,-32766,-32766,
321
+		-32766,  322,-32766,  -73,-32766, -298,-32766,   74, -294,-32766,
322
+		  -72,  322,  -71,  -70,-32766,-32766,-32766,  -69,  -68,  -67,
323
+		-32766,-32766,   27,  -66,  -47, 1215,-32766,  414,  -18,  147,
324
+		  275,  270,  281,  704,  814,-32766, -537, -537, 1239,  888,
325
+		  707,  897,  146,  276,   48,   -4,  898, -534, -534,  282,
326
+		  888, -537, -534, -534,  283, -246, -246, -246,  329,  285,
327
+		  271,  368, -534, -537,  286,   73,  289, -534, 1206,   47,
328
+		  723,  722, -111, -111, -534,  290,  109, -111,  914, -534,
329
+		  550,  669,  874, -111, -111, -111, -111,  145,  516,  517,
330
+		-32766, 1229, 1230, 1231, 1232, 1226, 1227,  814,  805, 1322,
331
+		  662,  300, 1092, 1233, 1228,  682,  814,-32766,  298,  299,
332
+		  546,  641,  647, 1208,  900,   72,  689, -246,  319,  322,
333
+		-32766,-32766,-32766,  366,-32766,  900,-32766,  689,-32766,  888,
334
+		  646,-32766,   13,  296,  297,  127,-32766,-32766,-32766,  455,
335
+		 1206,  -51,-32766,-32766,  483,  630,  663,  556,-32766,  414,
336
+		  303,  368, -111,  430,  434,   39,  930,-32766,  293,    0,
337
+		  125,-32766, -111, -111,  301,    0,    0, -111, 1010,  307,
338
+			0,    0,  833, -111, -111, -111, -111,    0,-32766,  131,
339
+			0,    0,  295,    0,-32766, 1246,    0,   74,    0, 1248,
340
+		 1208,  322,    0, -500,    0,    9,    0,-32766,-32766,-32766,
341
+		 -490,-32766,    7,-32766,  900,-32766,  689,   -4,-32766,   16,
342
+		  365,  597,  813,-32766,-32766,-32766,  916,  295,  709,-32766,
343
+		-32766, 1240,-32766,   40,  712,-32766,  414,  713, 1208,  879,
344
+		  898,  974,  951,  958,-32766,-32766,-32766,-32766,  948,-32766,
345
+		  959,-32766,  877,-32766,  946, 1066,-32766, 1069, 1070, 1067,
346
+		 1068,-32766,-32766,-32766,-32766, 1074,   33,-32766,-32766, 1236,
347
+		 1208,  825, 1261,-32766,  414, 1279, 1313,-32766,-32766,-32766,
348
+		  317,-32766,-32766,-32766,  635,-32766,  364,  690,-32766,  693,
349
+		  697,  699,  478,-32766,-32766,-32766,-32766,  700,  701,-32766,
350
+		-32766,  702, 1208,  562,  706,-32766,  414,  692, -570,-32766,
351
+		-32766,-32766,  875,-32766,-32766,-32766, 1317,-32766, 1319,  836,
352
+		-32766,  835,  844,  888,  923,-32766,-32766,-32766,  966,  843,
353
+		 1318,-32766,-32766,  922,  924,  921, 1194,-32766,  414, -245,
354
+		 -245, -245,  907,  917,  905,  368,-32766,  956,  957, 1316,
355
+		 1273, 1262,    0, 1280, 1286, 1289, -111, -111, -568,   27,
356
+		 -542, -111, -541, -540,    1,   28,  874, -111, -111, -111,
357
+		 -111,  814,   29,-32766,   38, 1239,   42,   46,   71, 1208,
358
+		   75,   76,   77,   78,   79,    0,-32766,-32766,-32766,   80,
359
+		-32766,  142,-32766,  152,-32766,  156,  245,-32766,  900,  324,
360
+		  689, -245,-32766,-32766,-32766, 1206,  350,  351,-32766,-32766,
361
+		  352,  353,  354,  355,-32766,  414,  356,  357,  358,  359,
362
+		  360,  362,  431,-32766, -271, -269,  517, -268, 1229, 1230,
363
+		 1231, 1232, 1226, 1227,   18,   19,   20,   21,   23,  401,
364
+		 1233, 1228,  474,  475,  482,  485,  486,  487,  488,  492,
365
+		  493,  494,   72, -504,  501,  319,  322,  676, 1219, 1162,
366
+		 1237, 1036, 1035,    0, 1016, 1198, 1012, -273, -103,   17,
367
+		   22,   26,  292,  400,  590,  594,  621,  681, 1166, 1214,
368
+		 1163, 1292,    0, 1179,    0,    0,  322
369
+	);
370 370
 
371
-    protected $actionCheck = array(
372
-            2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
373
-           12,   13,  128,  129,  130,  131,    9,   10,   11,   44,
374
-           45,   46,   47,   48,   49,   50,   51,   52,  116,  117,
375
-          118,  119,  120,  121,  122,   37,   38,   30,    1,   32,
376
-           33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
377
-           43,  106,  107,    1,    8,   57,    9,   10,   11,    1,
378
-           31,  116,   14,    9,   10,   11,  106,  107,    8,   71,
379
-           72,   73,   74,   75,   76,   77,  116,   30,   80,   32,
380
-           33,   34,   35,   36,   30,   87,   88,   89,   90,   91,
381
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
382
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
383
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
384
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
385
-          132,  133,   70,   80,  136,  137,  138,  139,  140,  141,
386
-          142,  143,  144,    8,    1,   80,    8,   80,  150,  151,
387
-          152,    8,  154,    9,   10,   11,    2,    3,    4,    5,
388
-            6,    7,  164,    9,   10,   11,   12,   13,    9,   10,
389
-           11,   85,   82,   14,   30,   85,   32,   33,   34,   35,
390
-           36,   37,   38,  116,  117,  118,  119,  120,  121,  122,
391
-          161,   37,   38,    9,   10,   11,  134,  135,  161,    9,
392
-           10,   11,    8,    8,  167,    1,   14,   51,  155,  156,
393
-          157,   57,    1,  161,   30,  162,   32,   33,   34,   35,
394
-           30,  156,   32,   33,   34,   71,   72,   73,   74,   75,
395
-           76,   77,  146,    1,   80,   31,   80,  147,  148,   83,
396
-            8,   87,   88,   89,   90,   91,   92,   93,   94,   95,
397
-           96,   97,   98,   99,  100,  101,  102,  103,  104,  105,
398
-          106,  107,  108,  109,  110,  111,  112,  113,  114,  115,
399
-          116,  117,  118,  119,  120,  121,  122,  123,  124,  125,
400
-          126,  127,  128,  129,  130,  131,  132,  133,   84,    1,
401
-          136,  137,  138,  139,  140,  141,  142,  143,  144,  164,
402
-            9,   10,   11,  160,  150,  151,  152,  164,  154,    2,
403
-            3,    4,    5,    6,    7,    1,    9,   10,   11,   12,
404
-           13,   30,    8,   32,   33,   34,   35,   36,   37,   38,
405
-           39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
406
-           49,   50,   51,   52,   53,   54,   55,  106,   57,  108,
407
-            9,   10,   11,   53,   54,   55,  164,   57,  164,  164,
408
-           69,  117,  118,  159,   57,  161,  122,  101,   30,   69,
409
-          159,   30,    1,   32,   33,   31,   31,   30,   71,   72,
410
-           73,   74,   75,   76,   77,   97,  106,   80,  108,  123,
411
-           70,    9,   10,   11,   87,   88,   89,   90,   91,   92,
412
-           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
413
-          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
414
-          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
415
-          123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
416
-          133,    8,   97,  136,  137,  138,  139,  140,  141,  142,
417
-          143,  144,  160,    8,  134,  135,  164,  150,  151,  152,
418
-            2,    3,    4,    5,    6,    7,  119,  120,  121,  122,
419
-           12,   13,  101,   15,  160,    1,  138,  106,  164,  108,
420
-            1,  161,    9,   10,  113,  138,  138,  116,  117,  118,
421
-          119,  120,  121,  122,  123,   80,  106,    1,  108,    8,
422
-           80,  163,    8,  159,   30,    1,   37,   38,   50,   51,
423
-          163,  163,  116,   70,   56,    8,   58,   59,   60,   61,
424
-           62,   63,   64,   65,   66,   67,   68,   31,   70,   71,
425
-           72,   73,   74,  162,  138,   31,   78,   79,   80,    1,
426
-           82,   75,   76,    1,   86,   87,   88,   89,    8,   91,
427
-            1,   93,  137,   95,  101,  102,   98,   99,  106,   80,
428
-          108,  103,  104,  105,  106,  107,    1,  109,  110,   31,
429
-          155,  156,  157,  115,  116,    1,  156,  134,  135,    8,
430
-           84,  161,  124,  125,  126,    1,  116,  159,   84,  161,
431
-          116,    8,  149,    8,  136,  137,   31,  139,  140,  141,
432
-          142,  143,  144,  145,  161,   31,  163,  155,  138,  151,
433
-          152,    8,  138,  155,  156,  157,  158,   75,   76,   77,
434
-            8,  163,   84,  165,  166,  167,   84,   75,   76,   70,
435
-          116,   82,   90,  163,   92,    8,   94,  163,   96,    8,
436
-          161,   50,   51,   52,  111,  112,  167,    8,  106,   84,
437
-            9,  137,  106,  107,    8,  159,   82,  161,    8,  117,
438
-          118,  106,  107,  159,  122,  161,   82,   31,   14,  127,
439
-          128,  129,  130,  131,   16,   17,   18,   19,   20,   21,
440
-           22,   23,   24,   25,   26,   27,   28,   29,   37,   38,
441
-          116,   14,   14,  134,  135,   14,    1,  159,   14,  161,
442
-          116,  159,  128,  161,  162,   14,   16,    1,  149,   16,
443
-          161,  137,   70,   16,   16,   16,  167,   59,   60,   16,
444
-          161,  137,  163,   70,  159,   74,  161,   16,   70,   37,
445
-           38,   80,  158,   16,   16,   31,   31,  163,   87,   88,
446
-           89,  167,   91,   31,   93,   35,   95,  163,   35,   98,
447
-           31,  167,   31,   31,  103,  104,  105,   31,   31,   31,
448
-          109,  110,   70,   31,   31,    1,  115,  116,   31,   31,
449
-           35,   31,   31,   31,   82,  124,  134,  135,   86,   84,
450
-           31,   31,   31,   35,   70,    0,    1,  134,  135,   35,
451
-           84,  149,  134,  135,   35,  100,  101,  102,   35,   37,
452
-           57,  106,  149,  161,   37,  154,   37,  149,  116,   70,
453
-           37,   38,  117,  118,  161,   37,   69,  122,   38,  161,
454
-           89,   77,  127,  128,  129,  130,  131,   70,  136,  137,
455
-           85,  139,  140,  141,  142,  143,  144,   82,   80,   83,
456
-           94,  132,   82,  151,  152,   92,   82,   74,  134,  135,
457
-           85,   90,  100,   80,  159,  163,  161,  162,  166,  167,
458
-           87,   88,   89,  149,   91,  159,   93,  161,   95,   84,
459
-           96,   98,   97,  134,  135,  161,  103,  104,  105,   97,
460
-          116,   31,  109,  110,   97,  113,  100,  153,  115,  116,
461
-          114,  106,  128,  108,  128,  159,  128,  124,  113,   -1,
462
-          161,  137,  117,  118,  133,   -1,   -1,  122,  138,  132,
463
-           -1,   -1,  127,  128,  129,  130,  131,   -1,  137,   31,
464
-           -1,   -1,  158,   -1,   74,  146,   -1,  163,   -1,  146,
465
-           80,  167,   -1,  149,   -1,  150,   -1,   87,   88,   89,
466
-          149,   91,  149,   93,  159,   95,  161,  162,   98,  149,
467
-          149,  153,  155,  103,  104,  105,  154,  158,  162,  109,
468
-          110,  166,   74,  159,  159,  115,  116,  159,   80,  159,
469
-            1,  159,  159,  159,  124,   87,   88,   89,  159,   91,
470
-          159,   93,  159,   95,  159,  159,   98,  159,  159,  159,
471
-          159,  103,  104,  105,   74,  159,  161,  109,  110,  160,
472
-           80,  160,  160,  115,  116,  160,  160,   87,   88,   89,
473
-          161,   91,  124,   93,  160,   95,  161,  161,   98,  161,
474
-          161,  161,  102,  103,  104,  105,   74,  161,  161,  109,
475
-          110,  161,   80,   81,  161,  115,  116,  161,  163,   87,
476
-           88,   89,  162,   91,  124,   93,  162,   95,  162,  162,
477
-           98,  162,  162,   84,  162,  103,  104,  105,  162,  162,
478
-          162,  109,  110,  162,  162,  162,  162,  115,  116,  100,
479
-          101,  102,  162,  162,  162,  106,  124,  162,  162,  162,
480
-          162,  162,   -1,  162,  162,  162,  117,  118,  163,   70,
481
-          163,  122,  163,  163,  163,  163,  127,  128,  129,  130,
482
-          131,   82,  163,   74,  163,   86,  163,  163,  163,   80,
483
-          163,  163,  163,  163,  163,   -1,   87,   88,   89,  163,
484
-           91,  163,   93,  163,   95,  163,  163,   98,  159,  163,
485
-          161,  162,  103,  104,  105,  116,  163,  163,  109,  110,
486
-          163,  163,  163,  163,  115,  116,  163,  163,  163,  163,
487
-          163,  163,  163,  124,  164,  164,  137,  164,  139,  140,
488
-          141,  142,  143,  144,  164,  164,  164,  164,  164,  164,
489
-          151,  152,  164,  164,  164,  164,  164,  164,  164,  164,
490
-          164,  164,  163,  165,  164,  166,  167,  164,  164,  164,
491
-          164,  164,  164,   -1,  164,  164,  164,  164,  164,  164,
492
-          164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
493
-          164,  164,   -1,  165,   -1,   -1,  167
494
-    );
371
+	protected $actionCheck = array(
372
+			2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
373
+		   12,   13,  128,  129,  130,  131,    9,   10,   11,   44,
374
+		   45,   46,   47,   48,   49,   50,   51,   52,  116,  117,
375
+		  118,  119,  120,  121,  122,   37,   38,   30,    1,   32,
376
+		   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
377
+		   43,  106,  107,    1,    8,   57,    9,   10,   11,    1,
378
+		   31,  116,   14,    9,   10,   11,  106,  107,    8,   71,
379
+		   72,   73,   74,   75,   76,   77,  116,   30,   80,   32,
380
+		   33,   34,   35,   36,   30,   87,   88,   89,   90,   91,
381
+		   92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
382
+		  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
383
+		  112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
384
+		  122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
385
+		  132,  133,   70,   80,  136,  137,  138,  139,  140,  141,
386
+		  142,  143,  144,    8,    1,   80,    8,   80,  150,  151,
387
+		  152,    8,  154,    9,   10,   11,    2,    3,    4,    5,
388
+			6,    7,  164,    9,   10,   11,   12,   13,    9,   10,
389
+		   11,   85,   82,   14,   30,   85,   32,   33,   34,   35,
390
+		   36,   37,   38,  116,  117,  118,  119,  120,  121,  122,
391
+		  161,   37,   38,    9,   10,   11,  134,  135,  161,    9,
392
+		   10,   11,    8,    8,  167,    1,   14,   51,  155,  156,
393
+		  157,   57,    1,  161,   30,  162,   32,   33,   34,   35,
394
+		   30,  156,   32,   33,   34,   71,   72,   73,   74,   75,
395
+		   76,   77,  146,    1,   80,   31,   80,  147,  148,   83,
396
+			8,   87,   88,   89,   90,   91,   92,   93,   94,   95,
397
+		   96,   97,   98,   99,  100,  101,  102,  103,  104,  105,
398
+		  106,  107,  108,  109,  110,  111,  112,  113,  114,  115,
399
+		  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,
400
+		  126,  127,  128,  129,  130,  131,  132,  133,   84,    1,
401
+		  136,  137,  138,  139,  140,  141,  142,  143,  144,  164,
402
+			9,   10,   11,  160,  150,  151,  152,  164,  154,    2,
403
+			3,    4,    5,    6,    7,    1,    9,   10,   11,   12,
404
+		   13,   30,    8,   32,   33,   34,   35,   36,   37,   38,
405
+		   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
406
+		   49,   50,   51,   52,   53,   54,   55,  106,   57,  108,
407
+			9,   10,   11,   53,   54,   55,  164,   57,  164,  164,
408
+		   69,  117,  118,  159,   57,  161,  122,  101,   30,   69,
409
+		  159,   30,    1,   32,   33,   31,   31,   30,   71,   72,
410
+		   73,   74,   75,   76,   77,   97,  106,   80,  108,  123,
411
+		   70,    9,   10,   11,   87,   88,   89,   90,   91,   92,
412
+		   93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
413
+		  103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
414
+		  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
415
+		  123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
416
+		  133,    8,   97,  136,  137,  138,  139,  140,  141,  142,
417
+		  143,  144,  160,    8,  134,  135,  164,  150,  151,  152,
418
+			2,    3,    4,    5,    6,    7,  119,  120,  121,  122,
419
+		   12,   13,  101,   15,  160,    1,  138,  106,  164,  108,
420
+			1,  161,    9,   10,  113,  138,  138,  116,  117,  118,
421
+		  119,  120,  121,  122,  123,   80,  106,    1,  108,    8,
422
+		   80,  163,    8,  159,   30,    1,   37,   38,   50,   51,
423
+		  163,  163,  116,   70,   56,    8,   58,   59,   60,   61,
424
+		   62,   63,   64,   65,   66,   67,   68,   31,   70,   71,
425
+		   72,   73,   74,  162,  138,   31,   78,   79,   80,    1,
426
+		   82,   75,   76,    1,   86,   87,   88,   89,    8,   91,
427
+			1,   93,  137,   95,  101,  102,   98,   99,  106,   80,
428
+		  108,  103,  104,  105,  106,  107,    1,  109,  110,   31,
429
+		  155,  156,  157,  115,  116,    1,  156,  134,  135,    8,
430
+		   84,  161,  124,  125,  126,    1,  116,  159,   84,  161,
431
+		  116,    8,  149,    8,  136,  137,   31,  139,  140,  141,
432
+		  142,  143,  144,  145,  161,   31,  163,  155,  138,  151,
433
+		  152,    8,  138,  155,  156,  157,  158,   75,   76,   77,
434
+			8,  163,   84,  165,  166,  167,   84,   75,   76,   70,
435
+		  116,   82,   90,  163,   92,    8,   94,  163,   96,    8,
436
+		  161,   50,   51,   52,  111,  112,  167,    8,  106,   84,
437
+			9,  137,  106,  107,    8,  159,   82,  161,    8,  117,
438
+		  118,  106,  107,  159,  122,  161,   82,   31,   14,  127,
439
+		  128,  129,  130,  131,   16,   17,   18,   19,   20,   21,
440
+		   22,   23,   24,   25,   26,   27,   28,   29,   37,   38,
441
+		  116,   14,   14,  134,  135,   14,    1,  159,   14,  161,
442
+		  116,  159,  128,  161,  162,   14,   16,    1,  149,   16,
443
+		  161,  137,   70,   16,   16,   16,  167,   59,   60,   16,
444
+		  161,  137,  163,   70,  159,   74,  161,   16,   70,   37,
445
+		   38,   80,  158,   16,   16,   31,   31,  163,   87,   88,
446
+		   89,  167,   91,   31,   93,   35,   95,  163,   35,   98,
447
+		   31,  167,   31,   31,  103,  104,  105,   31,   31,   31,
448
+		  109,  110,   70,   31,   31,    1,  115,  116,   31,   31,
449
+		   35,   31,   31,   31,   82,  124,  134,  135,   86,   84,
450
+		   31,   31,   31,   35,   70,    0,    1,  134,  135,   35,
451
+		   84,  149,  134,  135,   35,  100,  101,  102,   35,   37,
452
+		   57,  106,  149,  161,   37,  154,   37,  149,  116,   70,
453
+		   37,   38,  117,  118,  161,   37,   69,  122,   38,  161,
454
+		   89,   77,  127,  128,  129,  130,  131,   70,  136,  137,
455
+		   85,  139,  140,  141,  142,  143,  144,   82,   80,   83,
456
+		   94,  132,   82,  151,  152,   92,   82,   74,  134,  135,
457
+		   85,   90,  100,   80,  159,  163,  161,  162,  166,  167,
458
+		   87,   88,   89,  149,   91,  159,   93,  161,   95,   84,
459
+		   96,   98,   97,  134,  135,  161,  103,  104,  105,   97,
460
+		  116,   31,  109,  110,   97,  113,  100,  153,  115,  116,
461
+		  114,  106,  128,  108,  128,  159,  128,  124,  113,   -1,
462
+		  161,  137,  117,  118,  133,   -1,   -1,  122,  138,  132,
463
+		   -1,   -1,  127,  128,  129,  130,  131,   -1,  137,   31,
464
+		   -1,   -1,  158,   -1,   74,  146,   -1,  163,   -1,  146,
465
+		   80,  167,   -1,  149,   -1,  150,   -1,   87,   88,   89,
466
+		  149,   91,  149,   93,  159,   95,  161,  162,   98,  149,
467
+		  149,  153,  155,  103,  104,  105,  154,  158,  162,  109,
468
+		  110,  166,   74,  159,  159,  115,  116,  159,   80,  159,
469
+			1,  159,  159,  159,  124,   87,   88,   89,  159,   91,
470
+		  159,   93,  159,   95,  159,  159,   98,  159,  159,  159,
471
+		  159,  103,  104,  105,   74,  159,  161,  109,  110,  160,
472
+		   80,  160,  160,  115,  116,  160,  160,   87,   88,   89,
473
+		  161,   91,  124,   93,  160,   95,  161,  161,   98,  161,
474
+		  161,  161,  102,  103,  104,  105,   74,  161,  161,  109,
475
+		  110,  161,   80,   81,  161,  115,  116,  161,  163,   87,
476
+		   88,   89,  162,   91,  124,   93,  162,   95,  162,  162,
477
+		   98,  162,  162,   84,  162,  103,  104,  105,  162,  162,
478
+		  162,  109,  110,  162,  162,  162,  162,  115,  116,  100,
479
+		  101,  102,  162,  162,  162,  106,  124,  162,  162,  162,
480
+		  162,  162,   -1,  162,  162,  162,  117,  118,  163,   70,
481
+		  163,  122,  163,  163,  163,  163,  127,  128,  129,  130,
482
+		  131,   82,  163,   74,  163,   86,  163,  163,  163,   80,
483
+		  163,  163,  163,  163,  163,   -1,   87,   88,   89,  163,
484
+		   91,  163,   93,  163,   95,  163,  163,   98,  159,  163,
485
+		  161,  162,  103,  104,  105,  116,  163,  163,  109,  110,
486
+		  163,  163,  163,  163,  115,  116,  163,  163,  163,  163,
487
+		  163,  163,  163,  124,  164,  164,  137,  164,  139,  140,
488
+		  141,  142,  143,  144,  164,  164,  164,  164,  164,  164,
489
+		  151,  152,  164,  164,  164,  164,  164,  164,  164,  164,
490
+		  164,  164,  163,  165,  164,  166,  167,  164,  164,  164,
491
+		  164,  164,  164,   -1,  164,  164,  164,  164,  164,  164,
492
+		  164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
493
+		  164,  164,   -1,  165,   -1,   -1,  167
494
+	);
495 495
 
496
-    protected $actionBase = array(
497
-            0,   -2,  154,  542,  785,  695,  969,  549,   53,  420,
498
-          831,  307,  307,   67,  307,  307,  307,  496,  538,  538,
499
-          565,  538,  204,  504,  706,  706,  706,  651,  651,  651,
500
-          651,  773,  773,  920,  920,  952,  888,  850, 1029, 1029,
501
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
502
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
503
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
504
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
505
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
506
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
507
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
508
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
509
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
510
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
511
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
512
-         1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
513
-         1029, 1029,  211,  344,  288,  691, 1038, 1044, 1040, 1045,
514
-         1036, 1035, 1039, 1041, 1046,  917,  918,  751,  919,  921,
515
-          922,  923, 1042,  854, 1037, 1043,  291,  291,  291,  291,
516
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
517
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
518
-          291,  291,  641,  159,  473,  382,  382,  382,  382,  382,
519
-          382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
520
-          382,  382,  382,  382,  382,   54,   54,   54,  341,  692,
521
-          692,  190,  184,  658,   47, 1019, 1019, 1019, 1019, 1019,
522
-         1019, 1019, 1019, 1019, 1019,  144,  144,    7,    7,    7,
523
-            7,    7,  371,  -25,  -25,  -25,  -25,  574,  347,  764,
524
-          474,  584,  266,  241,  338,  470,  470,  591,  591,  396,
525
-         -116,  396,  348,  348,  396,  396,  396,  770,  770,  770,
526
-          770,  443,  559,  452,   86,  514,  479,  479,  479,  479,
527
-          514,  514,  514,  514,  783,  795,  514,  514,  514,  642,
528
-          653,  653,  714,  300,  300,  300,  653,  390,  765,   90,
529
-          390,   90,   37,  156,  781,  -55,  -40,  292,  768,  781,
530
-          320,  739,  314,  143,  797,  546,  797, 1034,  745,  733,
531
-          705,  836,  876, 1047,  752,  915,  786,  916,   62,  704,
532
-         1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
533
-         1033, 1049,  469, 1034,   65, 1049, 1049, 1049,  469,  469,
534
-          469,  469,  469,  469,  469,  469,  469,  469,  533,   65,
535
-          466,  552,   65,  763,  469,  211,  791,  211,  211,  211,
536
-          211,  973,  211,  211,  211,  211,  211,  211,  980,  737,
537
-           29,  211,  344,   52,   52,  428,   58,   52,   52,   52,
538
-           52,  211,  211,  211,  546,  743,  734,  555,  798,  195,
539
-          743,  743,  743,  345,  135,  192,  194,  710,  713,  280,
540
-          758,  758,  760,  931,  931,  758,  755,  758,  760,  944,
541
-          758,  931,  799,  433,  627,  571,  603,  631,  931,  494,
542
-          758,  758,  758,  758,  639,  758,  491,  445,  758,  758,
543
-          709,  741,  777,   46,  931,  931,  931,  777,  585,  771,
544
-          771,  771,  805,  808,  772,  740,  540,  507,  650,  138,
545
-          780,  740,  740,  758,  612,  772,  740,  772,  740,  802,
546
-          740,  740,  740,  772,  740,  755,  583,  740,  703,  646,
547
-           60,  740,    6,  945,  947,  636,  948,  941,  949,  989,
548
-          950,  951,  856,  963,  943,  956,  939,  932,  750,  690,
549
-          693,  793,  784,  930,  747,  747,  747,  927,  747,  747,
550
-          747,  747,  747,  747,  747,  747,  690,  839,  801,  766,
551
-          731,  974,  697,  698,  779,  880, 1018, 1048,  973, 1024,
552
-          958,  736,  699, 1004,  977,  796,  849,  978,  979, 1005,
553
-         1025, 1026,  884,  757,  886,  887,  841,  983,  858,  747,
554
-          945,  951,  943,  956,  939,  932,  732,  728,  726,  727,
555
-          722,  721,  712,  719,  738, 1027,  925,  875,  842,  980,
556
-          929,  690,  845, 1000,  835, 1008, 1009,  855,  782,  756,
557
-          846,  889,  984,  985,  986,  859, 1028,  804, 1001,  990,
558
-         1010,  787,  890, 1011, 1012, 1013, 1014,  892,  860,  866,
559
-          867,  810,  761,  991,  774,  896,   48,  754,  759,  778,
560
-          988,  654,  966,  870,  897,  898, 1015, 1016, 1017,  901,
561
-          960,  812, 1002,  746, 1003,  993,  813,  814,  677,  769,
562
-         1030,  735,  748,  767,  678,  681,  902,  903,  904,  962,
563
-          742,  744,  819,  821, 1031,  762, 1032,  910,  684,  823,
564
-          711,  911, 1023,  717,  718,  753,  873,  800,  776,  775,
565
-          987,  749,  825,  912,  826,  828,  829, 1020,  830,    0,
566
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
567
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
568
-            0,    0,    0,    0,    0,    0,    0,    0,  458,  458,
569
-          458,  458,  458,  458,  307,  307,  307,  307,    0,    0,
570
-          307,    0,    0,    0,  458,  458,  458,  458,  458,  458,
571
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
572
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
573
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
574
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
575
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
576
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
577
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
578
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
579
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
580
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
581
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
582
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
583
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
584
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  291,
585
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
586
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
587
-          291,  291,  291,    0,    0,    0,    0,    0,    0,    0,
588
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
589
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  291,
590
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
591
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
592
-          291,  291,  291,  291,  291,  291,  415,  415,  291,  291,
593
-            0,  291,  415,  415,  415,  415,  415,  415,  415,  415,
594
-          415,  415,  291,  291,  291,  291,  291,  291,  291,  799,
595
-          300,  300,  300,  300,  415,  415,  415,  415,  415,  -88,
596
-          -88,  415,  415,  415,  300,  300,  415,  244,  415,  415,
597
-          415,  415,  415,  415,  415,  415,  415,  415,    0,    0,
598
-           65,   90,  415,  755,  755,  755,  755,  415,  415,  415,
599
-          415,   90,   90,  415,  415,  415,    0,    0,    0,    0,
600
-            0,    0,    0,    0,   65,   90,    0,   65,    0,  755,
601
-          755,  415,  799,  799,  232,  244,  415,    0,    0,    0,
602
-            0,   65,  755,   65,  469,   90,  469,  469,   52,  211,
603
-          232,  453,  453,  453,  453,    0,  546,  799,  799,  799,
604
-          799,  799,  799,  799,  799,  799,  799,  799,  755,    0,
605
-          799,    0,  755,  755,  755,    0,    0,    0,    0,    0,
606
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
607
-          755,    0,    0,  931,    0,    0,    0,    0,  758,    0,
608
-            0,    0,    0,    0,    0,  758,  944,    0,    0,    0,
609
-            0,    0,    0,  755,    0,    0,    0,    0,    0,    0,
610
-            0,    0,  747,  782,    0,  782,    0,  747,  747,  747,
611
-            0,    0,    0,    0,  769,  762
612
-    );
496
+	protected $actionBase = array(
497
+			0,   -2,  154,  542,  785,  695,  969,  549,   53,  420,
498
+		  831,  307,  307,   67,  307,  307,  307,  496,  538,  538,
499
+		  565,  538,  204,  504,  706,  706,  706,  651,  651,  651,
500
+		  651,  773,  773,  920,  920,  952,  888,  850, 1029, 1029,
501
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
502
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
503
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
504
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
505
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
506
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
507
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
508
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
509
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
510
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
511
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
512
+		 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
513
+		 1029, 1029,  211,  344,  288,  691, 1038, 1044, 1040, 1045,
514
+		 1036, 1035, 1039, 1041, 1046,  917,  918,  751,  919,  921,
515
+		  922,  923, 1042,  854, 1037, 1043,  291,  291,  291,  291,
516
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
517
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
518
+		  291,  291,  641,  159,  473,  382,  382,  382,  382,  382,
519
+		  382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
520
+		  382,  382,  382,  382,  382,   54,   54,   54,  341,  692,
521
+		  692,  190,  184,  658,   47, 1019, 1019, 1019, 1019, 1019,
522
+		 1019, 1019, 1019, 1019, 1019,  144,  144,    7,    7,    7,
523
+			7,    7,  371,  -25,  -25,  -25,  -25,  574,  347,  764,
524
+		  474,  584,  266,  241,  338,  470,  470,  591,  591,  396,
525
+		 -116,  396,  348,  348,  396,  396,  396,  770,  770,  770,
526
+		  770,  443,  559,  452,   86,  514,  479,  479,  479,  479,
527
+		  514,  514,  514,  514,  783,  795,  514,  514,  514,  642,
528
+		  653,  653,  714,  300,  300,  300,  653,  390,  765,   90,
529
+		  390,   90,   37,  156,  781,  -55,  -40,  292,  768,  781,
530
+		  320,  739,  314,  143,  797,  546,  797, 1034,  745,  733,
531
+		  705,  836,  876, 1047,  752,  915,  786,  916,   62,  704,
532
+		 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
533
+		 1033, 1049,  469, 1034,   65, 1049, 1049, 1049,  469,  469,
534
+		  469,  469,  469,  469,  469,  469,  469,  469,  533,   65,
535
+		  466,  552,   65,  763,  469,  211,  791,  211,  211,  211,
536
+		  211,  973,  211,  211,  211,  211,  211,  211,  980,  737,
537
+		   29,  211,  344,   52,   52,  428,   58,   52,   52,   52,
538
+		   52,  211,  211,  211,  546,  743,  734,  555,  798,  195,
539
+		  743,  743,  743,  345,  135,  192,  194,  710,  713,  280,
540
+		  758,  758,  760,  931,  931,  758,  755,  758,  760,  944,
541
+		  758,  931,  799,  433,  627,  571,  603,  631,  931,  494,
542
+		  758,  758,  758,  758,  639,  758,  491,  445,  758,  758,
543
+		  709,  741,  777,   46,  931,  931,  931,  777,  585,  771,
544
+		  771,  771,  805,  808,  772,  740,  540,  507,  650,  138,
545
+		  780,  740,  740,  758,  612,  772,  740,  772,  740,  802,
546
+		  740,  740,  740,  772,  740,  755,  583,  740,  703,  646,
547
+		   60,  740,    6,  945,  947,  636,  948,  941,  949,  989,
548
+		  950,  951,  856,  963,  943,  956,  939,  932,  750,  690,
549
+		  693,  793,  784,  930,  747,  747,  747,  927,  747,  747,
550
+		  747,  747,  747,  747,  747,  747,  690,  839,  801,  766,
551
+		  731,  974,  697,  698,  779,  880, 1018, 1048,  973, 1024,
552
+		  958,  736,  699, 1004,  977,  796,  849,  978,  979, 1005,
553
+		 1025, 1026,  884,  757,  886,  887,  841,  983,  858,  747,
554
+		  945,  951,  943,  956,  939,  932,  732,  728,  726,  727,
555
+		  722,  721,  712,  719,  738, 1027,  925,  875,  842,  980,
556
+		  929,  690,  845, 1000,  835, 1008, 1009,  855,  782,  756,
557
+		  846,  889,  984,  985,  986,  859, 1028,  804, 1001,  990,
558
+		 1010,  787,  890, 1011, 1012, 1013, 1014,  892,  860,  866,
559
+		  867,  810,  761,  991,  774,  896,   48,  754,  759,  778,
560
+		  988,  654,  966,  870,  897,  898, 1015, 1016, 1017,  901,
561
+		  960,  812, 1002,  746, 1003,  993,  813,  814,  677,  769,
562
+		 1030,  735,  748,  767,  678,  681,  902,  903,  904,  962,
563
+		  742,  744,  819,  821, 1031,  762, 1032,  910,  684,  823,
564
+		  711,  911, 1023,  717,  718,  753,  873,  800,  776,  775,
565
+		  987,  749,  825,  912,  826,  828,  829, 1020,  830,    0,
566
+			0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
567
+			0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
568
+			0,    0,    0,    0,    0,    0,    0,    0,  458,  458,
569
+		  458,  458,  458,  458,  307,  307,  307,  307,    0,    0,
570
+		  307,    0,    0,    0,  458,  458,  458,  458,  458,  458,
571
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
572
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
573
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
574
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
575
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
576
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
577
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
578
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
579
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
580
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
581
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
582
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
583
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
584
+		  458,  458,  458,  458,  458,  458,  458,  458,  458,  291,
585
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
586
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
587
+		  291,  291,  291,    0,    0,    0,    0,    0,    0,    0,
588
+			0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
589
+			0,    0,    0,    0,    0,    0,    0,    0,    0,  291,
590
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
591
+		  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
592
+		  291,  291,  291,  291,  291,  291,  415,  415,  291,  291,
593
+			0,  291,  415,  415,  415,  415,  415,  415,  415,  415,
594
+		  415,  415,  291,  291,  291,  291,  291,  291,  291,  799,
595
+		  300,  300,  300,  300,  415,  415,  415,  415,  415,  -88,
596
+		  -88,  415,  415,  415,  300,  300,  415,  244,  415,  415,
597
+		  415,  415,  415,  415,  415,  415,  415,  415,    0,    0,
598
+		   65,   90,  415,  755,  755,  755,  755,  415,  415,  415,
599
+		  415,   90,   90,  415,  415,  415,    0,    0,    0,    0,
600
+			0,    0,    0,    0,   65,   90,    0,   65,    0,  755,
601
+		  755,  415,  799,  799,  232,  244,  415,    0,    0,    0,
602
+			0,   65,  755,   65,  469,   90,  469,  469,   52,  211,
603
+		  232,  453,  453,  453,  453,    0,  546,  799,  799,  799,
604
+		  799,  799,  799,  799,  799,  799,  799,  799,  755,    0,
605
+		  799,    0,  755,  755,  755,    0,    0,    0,    0,    0,
606
+			0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
607
+		  755,    0,    0,  931,    0,    0,    0,    0,  758,    0,
608
+			0,    0,    0,    0,    0,  758,  944,    0,    0,    0,
609
+			0,    0,    0,  755,    0,    0,    0,    0,    0,    0,
610
+			0,    0,  747,  782,    0,  782,    0,  747,  747,  747,
611
+			0,    0,    0,    0,  769,  762
612
+	);
613 613
 
614
-    protected $actionDefault = array(
615
-            3,32767,  103,32767,32767,32767,32767,32767,32767,32767,
616
-        32767,32767,  101,32767,32767,32767,32767,32767,32767,32767,
617
-        32767,32767,32767,32767,32767,32767,32767,  588,  588,  588,
618
-          588,32767,32767,  250,  103,32767,32767,  464,  382,  382,
619
-          382,32767,32767,  532,  532,  532,  532,  532,  532,32767,
620
-        32767,32767,32767,32767,32767,  464,32767,32767,32767,32767,
621
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
622
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
623
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
624
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
625
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
626
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
627
-        32767,32767,32767,32767,32767,32767,32767,32767,  101,32767,
628
-        32767,32767,   37,    7,    8,   10,   11,   50,   17,  320,
629
-        32767,32767,32767,32767,  103,32767,32767,32767,32767,32767,
630
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
631
-        32767,32767,32767,32767,32767,  581,32767,32767,32767,32767,
632
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
633
-        32767,32767,32767,32767,32767,32767,  468,  447,  448,  450,
634
-          451,  381,  533,  587,  323,  584,  380,  146,  335,  325,
635
-          238,  326,  254,  469,  255,  470,  473,  474,  211,  283,
636
-          377,  150,  411,  465,  413,  463,  467,  412,  387,  392,
637
-          393,  394,  395,  396,  397,  398,  399,  400,  401,  402,
638
-          403,  404,  385,  386,  466,  444,  443,  442,  409,32767,
639
-        32767,  410,  414,  384,  417,32767,32767,32767,32767,32767,
640
-        32767,32767,32767,  103,32767,  415,  416,  433,  434,  431,
641
-          432,  435,32767,  436,  437,  438,  439,32767,  312,32767,
642
-        32767,32767,  361,  359,  312,32767,32767,  424,  425,32767,
643
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
644
-        32767,  526,  441,32767,32767,32767,32767,32767,32767,32767,
645
-        32767,32767,32767,32767,32767,32767,  103,32767,  101,  528,
646
-          406,  408,  496,  419,  420,  418,  388,32767,  503,32767,
647
-          103,  505,32767,32767,32767,  112,32767,32767,32767,32767,
648
-          527,32767,  534,  534,32767,  489,  101,  194,32767,  194,
649
-          194,32767,32767,32767,32767,32767,32767,32767,  595,  489,
650
-          111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
651
-          111,32767,  194,  111,32767,32767,32767,  101,  194,  194,
652
-          194,  194,  194,  194,  194,  194,  194,  194,  189,32767,
653
-          264,  266,  103,  549,  194,32767,  508,32767,32767,32767,
654
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  501,
655
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
656
-        32767,32767,32767,32767,  489,  429,  139,32767,  139,  534,
657
-          421,  422,  423,  491,  534,  534,  534,  308,  285,32767,
658
-        32767,32767,32767,  506,  506,  101,  101,  101,  101,  501,
659
-        32767,32767,  112,  100,  100,  100,  100,  100,  104,  102,
660
-        32767,32767,32767,32767,  100,32767,  102,  102,32767,32767,
661
-          221,  208,  219,  102,32767,  553,  554,  219,  102,  223,
662
-          223,  223,  243,  243,  480,  314,  102,  100,  102,  102,
663
-          196,  314,  314,32767,  102,  480,  314,  480,  314,  198,
664
-          314,  314,  314,  480,  314,32767,  102,  314,  210,  100,
665
-          100,  314,32767,32767,32767,  491,32767,32767,32767,32767,
666
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
667
-          521,32767,  538,  551,  427,  428,  430,  536,  452,  453,
668
-          454,  455,  456,  457,  458,  460,  583,32767,  495,32767,
669
-        32767,32767,32767,  334,  593,32767,  593,32767,32767,32767,
670
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
671
-        32767,32767,  594,32767,  534,32767,32767,32767,32767,  426,
672
-            9,   76,   43,   44,   52,   58,  512,  513,  514,  515,
673
-          509,  510,  516,  511,32767,32767,  517,  559,32767,32767,
674
-          535,  586,32767,32767,32767,32767,32767,32767,  139,32767,
675
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  521,
676
-        32767,  137,32767,32767,32767,32767,32767,32767,32767,32767,
677
-        32767,32767,32767,  534,32767,32767,32767,32767,  310,  307,
678
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
679
-        32767,32767,32767,32767,32767,  534,32767,32767,32767,32767,
680
-        32767,  287,32767,  304,32767,32767,32767,32767,32767,32767,
681
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
682
-          282,32767,32767,  376,32767,32767,32767,32767,  355,32767,
683
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  152,
684
-          152,    3,    3,  337,  152,  152,  152,  337,  152,  337,
685
-          337,  337,  152,  152,  152,  152,  152,  152,  276,  184,
686
-          258,  261,  243,  243,  152,  347,  152
687
-    );
614
+	protected $actionDefault = array(
615
+			3,32767,  103,32767,32767,32767,32767,32767,32767,32767,
616
+		32767,32767,  101,32767,32767,32767,32767,32767,32767,32767,
617
+		32767,32767,32767,32767,32767,32767,32767,  588,  588,  588,
618
+		  588,32767,32767,  250,  103,32767,32767,  464,  382,  382,
619
+		  382,32767,32767,  532,  532,  532,  532,  532,  532,32767,
620
+		32767,32767,32767,32767,32767,  464,32767,32767,32767,32767,
621
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
622
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
623
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
624
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
625
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
626
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
627
+		32767,32767,32767,32767,32767,32767,32767,32767,  101,32767,
628
+		32767,32767,   37,    7,    8,   10,   11,   50,   17,  320,
629
+		32767,32767,32767,32767,  103,32767,32767,32767,32767,32767,
630
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
631
+		32767,32767,32767,32767,32767,  581,32767,32767,32767,32767,
632
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
633
+		32767,32767,32767,32767,32767,32767,  468,  447,  448,  450,
634
+		  451,  381,  533,  587,  323,  584,  380,  146,  335,  325,
635
+		  238,  326,  254,  469,  255,  470,  473,  474,  211,  283,
636
+		  377,  150,  411,  465,  413,  463,  467,  412,  387,  392,
637
+		  393,  394,  395,  396,  397,  398,  399,  400,  401,  402,
638
+		  403,  404,  385,  386,  466,  444,  443,  442,  409,32767,
639
+		32767,  410,  414,  384,  417,32767,32767,32767,32767,32767,
640
+		32767,32767,32767,  103,32767,  415,  416,  433,  434,  431,
641
+		  432,  435,32767,  436,  437,  438,  439,32767,  312,32767,
642
+		32767,32767,  361,  359,  312,32767,32767,  424,  425,32767,
643
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
644
+		32767,  526,  441,32767,32767,32767,32767,32767,32767,32767,
645
+		32767,32767,32767,32767,32767,32767,  103,32767,  101,  528,
646
+		  406,  408,  496,  419,  420,  418,  388,32767,  503,32767,
647
+		  103,  505,32767,32767,32767,  112,32767,32767,32767,32767,
648
+		  527,32767,  534,  534,32767,  489,  101,  194,32767,  194,
649
+		  194,32767,32767,32767,32767,32767,32767,32767,  595,  489,
650
+		  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
651
+		  111,32767,  194,  111,32767,32767,32767,  101,  194,  194,
652
+		  194,  194,  194,  194,  194,  194,  194,  194,  189,32767,
653
+		  264,  266,  103,  549,  194,32767,  508,32767,32767,32767,
654
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,  501,
655
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
656
+		32767,32767,32767,32767,  489,  429,  139,32767,  139,  534,
657
+		  421,  422,  423,  491,  534,  534,  534,  308,  285,32767,
658
+		32767,32767,32767,  506,  506,  101,  101,  101,  101,  501,
659
+		32767,32767,  112,  100,  100,  100,  100,  100,  104,  102,
660
+		32767,32767,32767,32767,  100,32767,  102,  102,32767,32767,
661
+		  221,  208,  219,  102,32767,  553,  554,  219,  102,  223,
662
+		  223,  223,  243,  243,  480,  314,  102,  100,  102,  102,
663
+		  196,  314,  314,32767,  102,  480,  314,  480,  314,  198,
664
+		  314,  314,  314,  480,  314,32767,  102,  314,  210,  100,
665
+		  100,  314,32767,32767,32767,  491,32767,32767,32767,32767,
666
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
667
+		  521,32767,  538,  551,  427,  428,  430,  536,  452,  453,
668
+		  454,  455,  456,  457,  458,  460,  583,32767,  495,32767,
669
+		32767,32767,32767,  334,  593,32767,  593,32767,32767,32767,
670
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
671
+		32767,32767,  594,32767,  534,32767,32767,32767,32767,  426,
672
+			9,   76,   43,   44,   52,   58,  512,  513,  514,  515,
673
+		  509,  510,  516,  511,32767,32767,  517,  559,32767,32767,
674
+		  535,  586,32767,32767,32767,32767,32767,32767,  139,32767,
675
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,  521,
676
+		32767,  137,32767,32767,32767,32767,32767,32767,32767,32767,
677
+		32767,32767,32767,  534,32767,32767,32767,32767,  310,  307,
678
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
679
+		32767,32767,32767,32767,32767,  534,32767,32767,32767,32767,
680
+		32767,  287,32767,  304,32767,32767,32767,32767,32767,32767,
681
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
682
+		  282,32767,32767,  376,32767,32767,32767,32767,  355,32767,
683
+		32767,32767,32767,32767,32767,32767,32767,32767,32767,  152,
684
+		  152,    3,    3,  337,  152,  152,  152,  337,  152,  337,
685
+		  337,  337,  152,  152,  152,  152,  152,  152,  276,  184,
686
+		  258,  261,  243,  243,  152,  347,  152
687
+	);
688 688
 
689
-    protected $goto = array(
690
-          194,  194,  677,  466, 1281, 1282,  345,  428,  325,  325,
691
-          325,  325,  536,  536,  536,  536,  665,  591,  926, 1039,
692
-          685, 1003, 1019, 1020, 1080, 1081,  165,  165,  165,  165,
693
-          218,  195,  191,  191,  175,  177,  213,  191,  191,  191,
694
-          191,  191,  192,  192,  192,  192,  192,  192,  186,  187,
695
-          188,  189,  190,  215,  213,  216,  524,  525,  415,  526,
696
-          528,  529,  530,  531,  532,  533,  534,  535, 1108,  166,
697
-          167,  168,  193,  169,  170,  171,  164,  172,  173,  174,
698
-          176,  212,  214,  217,  235,  238,  241,  242,  244,  255,
699
-          256,  257,  258,  259,  260,  261,  263,  264,  265,  266,
700
-          277,  278,  313,  314,  315,  420,  421,  422,  569,  219,
701
-          220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
702
-          230,  231,  232,  233,  178,  234,  179,  196,  197,  198,
703
-          236,  186,  187,  188,  189,  190,  215, 1108,  199,  180,
704
-          181,  182,  200,  196,  183,  237,  201,  199,  163,  202,
705
-          203,  184,  204,  205,  206,  185,  207,  208,  209,  210,
706
-          211,  834,  587,  425,  645,  548,  541,  830,  831,  419,
707
-          310,  311,  332,  564,  316,  424,  333,  426,  623,  832,
708
-          973,  947,  947,  945,  947,  710,  808,  540,  982,  977,
709
-          827,  827,  607,  642,  391,  541,  548,  557,  558,  398,
710
-          567,  589,  603,  604,  839,  865,  887,  882,  883,  896,
711
-           15,  840,  884,  837,  885,  886,  838,  457,  457,  639,
712
-          890,  656,  657,  658,  987,  987,  457,  609,  609,  806,
713
-         1060, 1056, 1057, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
714
-         1238, 1238, 1238, 1256, 1256,  346,  347,  812,  949, 1256,
715
-         1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1014,
716
-         1013, 1207, 1008, 1207, 1008, 1207,  561,  442, 1008, 1008,
717
-         1008,  343,  442, 1008,  442, 1008, 1008, 1008, 1008, 1008,
718
-         1008, 1008, 1008, 1008, 1008,  251,  251, 1296,  812, 1207,
719
-          812, 1307, 1307,  970, 1207, 1207, 1207, 1207, 1017, 1018,
720
-         1207, 1207, 1207, 1288, 1288, 1288, 1288,  827, 1307,  321,
721
-          305,  248,  248,  248,  248,  250,  252,  387,  903, 1254,
722
-         1254,  619,  620,  904, 1203, 1254, 1254, 1254, 1254, 1254,
723
-         1254, 1254, 1254, 1254, 1254,  527,  527,  280,  280,  280,
724
-          280,  527,  527,  527,  527,  527,  527,  527,  527,  527,
725
-          527,  941,  405,  684,  560,  442,  442,  442,  442,  442,
726
-          442,  442,  442,  442,  442,  442,  348,  644,  442,  389,
727
-          393,  549,  588,  592,  847, 1157,  348,  348,  538, 1204,
728
-          538,  891,  538,  892,  432,  418,  822,  598,  666,  859,
729
-          348,  348,  846,  348,    5, 1323,    6,  824,  554, 1283,
730
-         1284,  650, 1205, 1264, 1265,  602,  448,  543,  565,  601,
731
-          348,  943,  943,  943,  943,  334,  932,  448,  937,  944,
732
-          403,  404, 1278,  852, 1278,  654, 1278,  655,  397,  407,
733
-          408,  409, 1200,  668,  849, 1045,  410,  542,  552,  992,
734
-          341,  490,  542,  491,  552,  714,  467,  390,  861,  497,
735
-         1049, 1290, 1290, 1290, 1290, 1267,  954,  568,  460,  461,
736
-          462, 1091,  857,  471,    0, 1314, 1315,  555,    0,    0,
737
-            0,  711,  622,  624,    0,  643,    0, 1274,  670,  667,
738
-          671,  984,  675,  683,  980,    0,    0,    0,    0,    0,
739
-          855,  596,  610,  613,  614,  615,  616,  636,  637,  638,
740
-          687,  860,  848, 1044, 1048,  908, 1096,    0,  543,    0,
741
-            0,  952,  606, 1306, 1306,    0, 1047,  989,    0,    0,
742
-         1276, 1276, 1047,  254,  254,  851,    0,  648,  968,  427,
743
-         1306,    0,    0,  845,  942,  427,    0,    0,    0,    0,
744
-            0,    0,    0, 1015, 1015, 1199,    0, 1309,  649, 1026,
745
-         1022, 1023,    0,    0,    0,    0, 1089,  864,    0,    0,
746
-            0,  586, 1073,    0,  688,  674,  674, 1202,  498,  680,
747
-         1071, 1188,  919,    0,    0, 1189, 1192,  920, 1193,    0,
748
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
749
-            0,    0,    0,    0,    0,    0,  272,    0,    0,    0,
750
-            0,  539,    0,  539
751
-    );
689
+	protected $goto = array(
690
+		  194,  194,  677,  466, 1281, 1282,  345,  428,  325,  325,
691
+		  325,  325,  536,  536,  536,  536,  665,  591,  926, 1039,
692
+		  685, 1003, 1019, 1020, 1080, 1081,  165,  165,  165,  165,
693
+		  218,  195,  191,  191,  175,  177,  213,  191,  191,  191,
694
+		  191,  191,  192,  192,  192,  192,  192,  192,  186,  187,
695
+		  188,  189,  190,  215,  213,  216,  524,  525,  415,  526,
696
+		  528,  529,  530,  531,  532,  533,  534,  535, 1108,  166,
697
+		  167,  168,  193,  169,  170,  171,  164,  172,  173,  174,
698
+		  176,  212,  214,  217,  235,  238,  241,  242,  244,  255,
699
+		  256,  257,  258,  259,  260,  261,  263,  264,  265,  266,
700
+		  277,  278,  313,  314,  315,  420,  421,  422,  569,  219,
701
+		  220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
702
+		  230,  231,  232,  233,  178,  234,  179,  196,  197,  198,
703
+		  236,  186,  187,  188,  189,  190,  215, 1108,  199,  180,
704
+		  181,  182,  200,  196,  183,  237,  201,  199,  163,  202,
705
+		  203,  184,  204,  205,  206,  185,  207,  208,  209,  210,
706
+		  211,  834,  587,  425,  645,  548,  541,  830,  831,  419,
707
+		  310,  311,  332,  564,  316,  424,  333,  426,  623,  832,
708
+		  973,  947,  947,  945,  947,  710,  808,  540,  982,  977,
709
+		  827,  827,  607,  642,  391,  541,  548,  557,  558,  398,
710
+		  567,  589,  603,  604,  839,  865,  887,  882,  883,  896,
711
+		   15,  840,  884,  837,  885,  886,  838,  457,  457,  639,
712
+		  890,  656,  657,  658,  987,  987,  457,  609,  609,  806,
713
+		 1060, 1056, 1057, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
714
+		 1238, 1238, 1238, 1256, 1256,  346,  347,  812,  949, 1256,
715
+		 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1014,
716
+		 1013, 1207, 1008, 1207, 1008, 1207,  561,  442, 1008, 1008,
717
+		 1008,  343,  442, 1008,  442, 1008, 1008, 1008, 1008, 1008,
718
+		 1008, 1008, 1008, 1008, 1008,  251,  251, 1296,  812, 1207,
719
+		  812, 1307, 1307,  970, 1207, 1207, 1207, 1207, 1017, 1018,
720
+		 1207, 1207, 1207, 1288, 1288, 1288, 1288,  827, 1307,  321,
721
+		  305,  248,  248,  248,  248,  250,  252,  387,  903, 1254,
722
+		 1254,  619,  620,  904, 1203, 1254, 1254, 1254, 1254, 1254,
723
+		 1254, 1254, 1254, 1254, 1254,  527,  527,  280,  280,  280,
724
+		  280,  527,  527,  527,  527,  527,  527,  527,  527,  527,
725
+		  527,  941,  405,  684,  560,  442,  442,  442,  442,  442,
726
+		  442,  442,  442,  442,  442,  442,  348,  644,  442,  389,
727
+		  393,  549,  588,  592,  847, 1157,  348,  348,  538, 1204,
728
+		  538,  891,  538,  892,  432,  418,  822,  598,  666,  859,
729
+		  348,  348,  846,  348,    5, 1323,    6,  824,  554, 1283,
730
+		 1284,  650, 1205, 1264, 1265,  602,  448,  543,  565,  601,
731
+		  348,  943,  943,  943,  943,  334,  932,  448,  937,  944,
732
+		  403,  404, 1278,  852, 1278,  654, 1278,  655,  397,  407,
733
+		  408,  409, 1200,  668,  849, 1045,  410,  542,  552,  992,
734
+		  341,  490,  542,  491,  552,  714,  467,  390,  861,  497,
735
+		 1049, 1290, 1290, 1290, 1290, 1267,  954,  568,  460,  461,
736
+		  462, 1091,  857,  471,    0, 1314, 1315,  555,    0,    0,
737
+			0,  711,  622,  624,    0,  643,    0, 1274,  670,  667,
738
+		  671,  984,  675,  683,  980,    0,    0,    0,    0,    0,
739
+		  855,  596,  610,  613,  614,  615,  616,  636,  637,  638,
740
+		  687,  860,  848, 1044, 1048,  908, 1096,    0,  543,    0,
741
+			0,  952,  606, 1306, 1306,    0, 1047,  989,    0,    0,
742
+		 1276, 1276, 1047,  254,  254,  851,    0,  648,  968,  427,
743
+		 1306,    0,    0,  845,  942,  427,    0,    0,    0,    0,
744
+			0,    0,    0, 1015, 1015, 1199,    0, 1309,  649, 1026,
745
+		 1022, 1023,    0,    0,    0,    0, 1089,  864,    0,    0,
746
+			0,  586, 1073,    0,  688,  674,  674, 1202,  498,  680,
747
+		 1071, 1188,  919,    0,    0, 1189, 1192,  920, 1193,    0,
748
+			0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
749
+			0,    0,    0,    0,    0,    0,  272,    0,    0,    0,
750
+			0,  539,    0,  539
751
+	);
752 752
 
753
-    protected $gotoCheck = array(
754
-           42,   42,   72,  172,  172,  172,   95,   87,   23,   23,
755
-           23,   23,  105,  105,  105,  105,   87,  105,   87,  125,
756
-            9,   87,   87,   87,  142,  142,   42,   42,   42,   42,
757
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
758
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
759
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
760
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
761
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
762
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
763
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
764
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
765
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
766
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
767
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
768
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
769
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
770
-           42,   15,  128,   65,   65,   75,   75,   25,   26,   65,
771
-           65,   65,   65,   65,   65,   65,   65,   65,   65,   27,
772
-           25,   25,   25,   25,   25,   25,    7,   25,   25,   25,
773
-           22,   22,   55,   55,   75,   75,   75,   75,   75,   75,
774
-           75,   75,   75,   75,   15,   45,   15,   15,   15,   15,
775
-           75,   15,   15,   15,   15,   15,   15,  147,  147,   84,
776
-           15,   84,   84,   84,  105,  105,  147,  106,  106,    6,
777
-           15,   15,   15,  106,  106,  106,  106,  106,  106,  106,
778
-          106,  106,  106,  166,  166,   95,   95,   12,   49,  166,
779
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  116,
780
-          116,   72,   72,   72,   72,   72,  168,   23,   72,   72,
781
-           72,  175,   23,   72,   23,   72,   72,   72,   72,   72,
782
-           72,   72,   72,   72,   72,    5,    5,  177,   12,   72,
783
-           12,  179,  179,  101,   72,   72,   72,   72,  117,  117,
784
-           72,   72,   72,    9,    9,    9,    9,   22,  179,  165,
785
-          165,    5,    5,    5,    5,    5,    5,   61,   72,  167,
786
-          167,   83,   83,   72,   20,  167,  167,  167,  167,  167,
787
-          167,  167,  167,  167,  167,  169,  169,   24,   24,   24,
788
-           24,  169,  169,  169,  169,  169,  169,  169,  169,  169,
789
-          169,   91,   91,   91,  102,   23,   23,   23,   23,   23,
790
-           23,   23,   23,   23,   23,   23,   14,   63,   23,   58,
791
-           58,   58,   58,   58,   35,  149,   14,   14,   19,   20,
792
-           19,   64,   19,   64,  111,   13,   20,   13,  114,   35,
793
-           14,   14,   35,   14,   46,   14,   46,   18,    9,  174,
794
-          174,  118,   20,   20,   20,    9,   19,   14,    2,    2,
795
-           14,   19,   19,   19,   19,   29,   90,   19,   19,   19,
796
-           80,   80,  128,   39,  128,   80,  128,   80,   28,   80,
797
-           80,   80,  158,   80,   37,  127,   80,    9,    9,  108,
798
-           80,  153,    9,  153,    9,   97,  155,    9,   41,  153,
799
-          130,  128,  128,  128,  128,   14,   94,    9,    9,    9,
800
-            9,  145,    9,   82,   -1,    9,    9,   48,   -1,   -1,
801
-           -1,   48,   48,   48,   -1,   48,   -1,  128,   14,   48,
802
-           48,   48,   48,   48,   48,   -1,   -1,   -1,   -1,   -1,
803
-            9,   79,   79,   79,   79,   79,   79,   79,   79,   79,
804
-           79,   16,   16,   16,   16,   17,   17,   -1,   14,   -1,
805
-           -1,   16,   17,  178,  178,   -1,  128,   17,   -1,   -1,
806
-          128,  128,  128,    5,    5,   17,   -1,   17,   17,  115,
807
-          178,   -1,   -1,   17,   16,  115,   -1,   -1,   -1,   -1,
808
-           -1,   -1,   -1,  115,  115,   17,   -1,  178,  115,  115,
809
-          115,  115,   -1,   -1,   -1,   -1,   16,   16,   -1,   -1,
810
-           -1,    8,    8,   -1,    8,    8,    8,   14,    8,    8,
811
-            8,   78,   78,   -1,   -1,   78,   78,   78,   78,   -1,
812
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
813
-           -1,   -1,   -1,   -1,   -1,   -1,   24,   -1,   -1,   -1,
814
-           -1,   24,   -1,   24
815
-    );
753
+	protected $gotoCheck = array(
754
+		   42,   42,   72,  172,  172,  172,   95,   87,   23,   23,
755
+		   23,   23,  105,  105,  105,  105,   87,  105,   87,  125,
756
+			9,   87,   87,   87,  142,  142,   42,   42,   42,   42,
757
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
758
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
759
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
760
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
761
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
762
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
763
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
764
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
765
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
766
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
767
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
768
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
769
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
770
+		   42,   15,  128,   65,   65,   75,   75,   25,   26,   65,
771
+		   65,   65,   65,   65,   65,   65,   65,   65,   65,   27,
772
+		   25,   25,   25,   25,   25,   25,    7,   25,   25,   25,
773
+		   22,   22,   55,   55,   75,   75,   75,   75,   75,   75,
774
+		   75,   75,   75,   75,   15,   45,   15,   15,   15,   15,
775
+		   75,   15,   15,   15,   15,   15,   15,  147,  147,   84,
776
+		   15,   84,   84,   84,  105,  105,  147,  106,  106,    6,
777
+		   15,   15,   15,  106,  106,  106,  106,  106,  106,  106,
778
+		  106,  106,  106,  166,  166,   95,   95,   12,   49,  166,
779
+		  166,  166,  166,  166,  166,  166,  166,  166,  166,  116,
780
+		  116,   72,   72,   72,   72,   72,  168,   23,   72,   72,
781
+		   72,  175,   23,   72,   23,   72,   72,   72,   72,   72,
782
+		   72,   72,   72,   72,   72,    5,    5,  177,   12,   72,
783
+		   12,  179,  179,  101,   72,   72,   72,   72,  117,  117,
784
+		   72,   72,   72,    9,    9,    9,    9,   22,  179,  165,
785
+		  165,    5,    5,    5,    5,    5,    5,   61,   72,  167,
786
+		  167,   83,   83,   72,   20,  167,  167,  167,  167,  167,
787
+		  167,  167,  167,  167,  167,  169,  169,   24,   24,   24,
788
+		   24,  169,  169,  169,  169,  169,  169,  169,  169,  169,
789
+		  169,   91,   91,   91,  102,   23,   23,   23,   23,   23,
790
+		   23,   23,   23,   23,   23,   23,   14,   63,   23,   58,
791
+		   58,   58,   58,   58,   35,  149,   14,   14,   19,   20,
792
+		   19,   64,   19,   64,  111,   13,   20,   13,  114,   35,
793
+		   14,   14,   35,   14,   46,   14,   46,   18,    9,  174,
794
+		  174,  118,   20,   20,   20,    9,   19,   14,    2,    2,
795
+		   14,   19,   19,   19,   19,   29,   90,   19,   19,   19,
796
+		   80,   80,  128,   39,  128,   80,  128,   80,   28,   80,
797
+		   80,   80,  158,   80,   37,  127,   80,    9,    9,  108,
798
+		   80,  153,    9,  153,    9,   97,  155,    9,   41,  153,
799
+		  130,  128,  128,  128,  128,   14,   94,    9,    9,    9,
800
+			9,  145,    9,   82,   -1,    9,    9,   48,   -1,   -1,
801
+		   -1,   48,   48,   48,   -1,   48,   -1,  128,   14,   48,
802
+		   48,   48,   48,   48,   48,   -1,   -1,   -1,   -1,   -1,
803
+			9,   79,   79,   79,   79,   79,   79,   79,   79,   79,
804
+		   79,   16,   16,   16,   16,   17,   17,   -1,   14,   -1,
805
+		   -1,   16,   17,  178,  178,   -1,  128,   17,   -1,   -1,
806
+		  128,  128,  128,    5,    5,   17,   -1,   17,   17,  115,
807
+		  178,   -1,   -1,   17,   16,  115,   -1,   -1,   -1,   -1,
808
+		   -1,   -1,   -1,  115,  115,   17,   -1,  178,  115,  115,
809
+		  115,  115,   -1,   -1,   -1,   -1,   16,   16,   -1,   -1,
810
+		   -1,    8,    8,   -1,    8,    8,    8,   14,    8,    8,
811
+			8,   78,   78,   -1,   -1,   78,   78,   78,   78,   -1,
812
+		   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
813
+		   -1,   -1,   -1,   -1,   -1,   -1,   24,   -1,   -1,   -1,
814
+		   -1,   24,   -1,   24
815
+	);
816 816
 
817
-    protected $gotoBase = array(
818
-            0,    0, -283,    0,    0,  284,  216,  177,  554,    7,
819
-            0,    0,  -46,   51,   72, -181,   57,   49,   91,  111,
820
-          -62,    0, -135,    5,  334,  163,  164,  175,   94,  122,
821
-            0,    0,    0,    0,    0,   10,    0,   98,    0,  103,
822
-            0,   13,   -1,    0,    0,  193, -320,    0, -223,  225,
823
-            0,    0,    0,    0,    0,  153,    0,    0,  325,    0,
824
-            0,  276,    0,  127,  362,  -76,    0,    0,    0,    0,
825
-            0,    0,   -6,    0,    0, -174,    0,    0,  168,  140,
826
-          -61,    0,   -4, -149, -478,    0,    0, -263,    0,    0,
827
-           88,   50,    0,    0,   19, -467,    0,   43,    0,    0,
828
-            0,  259,  312,    0,    0,  -15,  -12,    0,   76,    0,
829
-            0,  110,    0,    0,  109,  261,  -16,   16,  114,    0,
830
-            0,    0,    0,    0,    0,   17,    0,   68,  155,    0,
831
-           14,    0,    0,    0,    0,    0,    0,    0,    0,    0,
832
-            0,    0, -248,    0,    0,   23,    0,  184,    0,  104,
833
-            0,    0,    0,  -44,    0,   12,    0,    0,   70,    0,
834
-            0,    0,    0,    0,    0,   -9,    4,   80,  238,   96,
835
-            0,    0, -294,    0,   34,  242,    0,  257,  209,  -13,
836
-            0,    0
837
-    );
817
+	protected $gotoBase = array(
818
+			0,    0, -283,    0,    0,  284,  216,  177,  554,    7,
819
+			0,    0,  -46,   51,   72, -181,   57,   49,   91,  111,
820
+		  -62,    0, -135,    5,  334,  163,  164,  175,   94,  122,
821
+			0,    0,    0,    0,    0,   10,    0,   98,    0,  103,
822
+			0,   13,   -1,    0,    0,  193, -320,    0, -223,  225,
823
+			0,    0,    0,    0,    0,  153,    0,    0,  325,    0,
824
+			0,  276,    0,  127,  362,  -76,    0,    0,    0,    0,
825
+			0,    0,   -6,    0,    0, -174,    0,    0,  168,  140,
826
+		  -61,    0,   -4, -149, -478,    0,    0, -263,    0,    0,
827
+		   88,   50,    0,    0,   19, -467,    0,   43,    0,    0,
828
+			0,  259,  312,    0,    0,  -15,  -12,    0,   76,    0,
829
+			0,  110,    0,    0,  109,  261,  -16,   16,  114,    0,
830
+			0,    0,    0,    0,    0,   17,    0,   68,  155,    0,
831
+		   14,    0,    0,    0,    0,    0,    0,    0,    0,    0,
832
+			0,    0, -248,    0,    0,   23,    0,  184,    0,  104,
833
+			0,    0,    0,  -44,    0,   12,    0,    0,   70,    0,
834
+			0,    0,    0,    0,    0,   -9,    4,   80,  238,   96,
835
+			0,    0, -294,    0,   34,  242,    0,  257,  209,  -13,
836
+			0,    0
837
+	);
838 838
 
839
-    protected $gotoDefault = array(
840
-        -32768,  502,  718,    4,  719,  912,  795,  804,  584,  518,
841
-          686,  342,  611,  416, 1272,  889, 1095,  566,  823, 1216,
842
-         1224,  449,  826,  326,  708,  871,  872,  873,  394,  379,
843
-          385,  392,  634,  612,  484,  858,  445,  850,  476,  853,
844
-          444,  862,  162,  413,  500,  866,    3,  868,  545,  899,
845
-          380,  876,  381,  661,  878,  551,  880,  881,  388,  395,
846
-          396, 1100,  559,  608,  893,  243,  553,  894,  378,  895,
847
-          902,  383,  386,  672,  456,  495,  489,  406, 1075,  595,
848
-          631,  453,  470,  618,  617,  605,  469, 1011,  411,  328,
849
-          931,  939,  477,  454,  953,  344,  961,  716, 1107,  625,
850
-          479,  969,  626,  976,  979,  519,  520,  468,  991,  268,
851
-          994,  480, 1032,  651, 1005, 1006,  652,  627, 1028,  628,
852
-          653,  629, 1030,  463,  585, 1038,  446, 1046, 1260,  447,
853
-         1050,  262, 1053,  274,  412,  429, 1058, 1059,    8, 1065,
854
-          678,  679,   10,  273,  499, 1090,  673,  443, 1106,  433,
855
-         1176, 1178,  547,  481, 1196, 1195,  664,  496, 1201, 1263,
856
-          441,  521,  464,  312,  522,  304,  330,  309,  537,  291,
857
-          331,  523,  465, 1269, 1277,  327,   30, 1297, 1308,  338,
858
-          563,  600
859
-    );
839
+	protected $gotoDefault = array(
840
+		-32768,  502,  718,    4,  719,  912,  795,  804,  584,  518,
841
+		  686,  342,  611,  416, 1272,  889, 1095,  566,  823, 1216,
842
+		 1224,  449,  826,  326,  708,  871,  872,  873,  394,  379,
843
+		  385,  392,  634,  612,  484,  858,  445,  850,  476,  853,
844
+		  444,  862,  162,  413,  500,  866,    3,  868,  545,  899,
845
+		  380,  876,  381,  661,  878,  551,  880,  881,  388,  395,
846
+		  396, 1100,  559,  608,  893,  243,  553,  894,  378,  895,
847
+		  902,  383,  386,  672,  456,  495,  489,  406, 1075,  595,
848
+		  631,  453,  470,  618,  617,  605,  469, 1011,  411,  328,
849
+		  931,  939,  477,  454,  953,  344,  961,  716, 1107,  625,
850
+		  479,  969,  626,  976,  979,  519,  520,  468,  991,  268,
851
+		  994,  480, 1032,  651, 1005, 1006,  652,  627, 1028,  628,
852
+		  653,  629, 1030,  463,  585, 1038,  446, 1046, 1260,  447,
853
+		 1050,  262, 1053,  274,  412,  429, 1058, 1059,    8, 1065,
854
+		  678,  679,   10,  273,  499, 1090,  673,  443, 1106,  433,
855
+		 1176, 1178,  547,  481, 1196, 1195,  664,  496, 1201, 1263,
856
+		  441,  521,  464,  312,  522,  304,  330,  309,  537,  291,
857
+		  331,  523,  465, 1269, 1277,  327,   30, 1297, 1308,  338,
858
+		  563,  600
859
+	);
860 860
 
861
-    protected $ruleToNonTerminal = array(
862
-            0,    1,    3,    3,    2,    5,    5,    6,    6,    6,
863
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
864
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
865
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
866
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
867
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
868
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
869
-            6,    6,    6,    6,    6,    6,    6,    6,    7,    7,
870
-            7,    7,    7,    7,    7,    7,    8,    8,    9,   10,
871
-           11,   11,   11,   12,   12,   13,   13,   14,   15,   15,
872
-           16,   16,   17,   17,   18,   18,   21,   21,   22,   23,
873
-           23,   24,   24,    4,    4,    4,    4,    4,    4,    4,
874
-            4,    4,    4,    4,   29,   29,   30,   30,   32,   34,
875
-           34,   28,   36,   36,   33,   38,   38,   35,   35,   37,
876
-           37,   39,   39,   31,   40,   40,   41,   43,   44,   44,
877
-           45,   46,   46,   48,   47,   47,   47,   47,   49,   49,
878
-           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
879
-           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
880
-           49,   49,   25,   25,   68,   68,   71,   71,   70,   69,
881
-           69,   62,   74,   74,   75,   75,   76,   76,   77,   77,
882
-           78,   78,   26,   26,   27,   27,   27,   27,   86,   86,
883
-           88,   88,   81,   81,   89,   89,   90,   90,   90,   82,
884
-           82,   85,   85,   83,   83,   91,   92,   92,   56,   56,
885
-           64,   64,   67,   67,   67,   66,   93,   93,   94,   57,
886
-           57,   57,   57,   95,   95,   96,   96,   97,   97,   98,
887
-           99,   99,  100,  100,  101,  101,   54,   54,   50,   50,
888
-          103,   52,   52,  104,   51,   51,   53,   53,   63,   63,
889
-           63,   63,   79,   79,  107,  107,  109,  109,  110,  110,
890
-          110,  110,  108,  108,  108,  112,  112,  112,  112,   87,
891
-           87,  115,  115,  115,  116,  116,  113,  113,  117,  117,
892
-          119,  119,  120,  120,  114,  121,  121,  118,  122,  122,
893
-          122,  122,  111,  111,   80,   80,   80,   20,   20,   20,
894
-          124,  123,  123,  125,  125,  125,  125,   59,  126,  126,
895
-          127,   60,  129,  129,  130,  130,  131,  131,   84,  132,
896
-          132,  132,  132,  132,  132,  137,  137,  138,  138,  139,
897
-          139,  139,  139,  139,  140,  141,  141,  136,  136,  133,
898
-          133,  135,  135,  143,  143,  142,  142,  142,  142,  142,
899
-          142,  142,  134,  144,  144,  146,  145,  145,   61,  102,
900
-          147,  147,   55,   55,   42,   42,   42,   42,   42,   42,
901
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
902
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
903
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
904
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
905
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
906
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
907
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
908
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
909
-           42,   42,   42,   42,   42,   42,   42,  154,  148,  148,
910
-          153,  153,  156,  157,  157,  158,  159,  159,  159,   19,
911
-           19,   72,   72,   72,   72,  149,  149,  149,  149,  161,
912
-          161,  150,  150,  152,  152,  152,  155,  155,  166,  166,
913
-          166,  166,  166,  166,  166,  166,  166,  167,  167,  106,
914
-          169,  169,  169,  169,  151,  151,  151,  151,  151,  151,
915
-          151,  151,   58,   58,  164,  164,  164,  164,  170,  170,
916
-          160,  160,  160,  171,  171,  171,  171,  171,  171,   73,
917
-           73,   65,   65,   65,   65,  128,  128,  128,  128,  174,
918
-          173,  163,  163,  163,  163,  163,  163,  163,  162,  162,
919
-          162,  172,  172,  172,  172,  105,  168,  176,  176,  175,
920
-          175,  177,  177,  177,  177,  177,  177,  177,  177,  165,
921
-          165,  165,  165,  179,  180,  178,  178,  178,  178,  178,
922
-          178,  178,  178,  181,  181,  181,  181
923
-    );
861
+	protected $ruleToNonTerminal = array(
862
+			0,    1,    3,    3,    2,    5,    5,    6,    6,    6,
863
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
864
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
865
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
866
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
867
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
868
+			6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
869
+			6,    6,    6,    6,    6,    6,    6,    6,    7,    7,
870
+			7,    7,    7,    7,    7,    7,    8,    8,    9,   10,
871
+		   11,   11,   11,   12,   12,   13,   13,   14,   15,   15,
872
+		   16,   16,   17,   17,   18,   18,   21,   21,   22,   23,
873
+		   23,   24,   24,    4,    4,    4,    4,    4,    4,    4,
874
+			4,    4,    4,    4,   29,   29,   30,   30,   32,   34,
875
+		   34,   28,   36,   36,   33,   38,   38,   35,   35,   37,
876
+		   37,   39,   39,   31,   40,   40,   41,   43,   44,   44,
877
+		   45,   46,   46,   48,   47,   47,   47,   47,   49,   49,
878
+		   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
879
+		   49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
880
+		   49,   49,   25,   25,   68,   68,   71,   71,   70,   69,
881
+		   69,   62,   74,   74,   75,   75,   76,   76,   77,   77,
882
+		   78,   78,   26,   26,   27,   27,   27,   27,   86,   86,
883
+		   88,   88,   81,   81,   89,   89,   90,   90,   90,   82,
884
+		   82,   85,   85,   83,   83,   91,   92,   92,   56,   56,
885
+		   64,   64,   67,   67,   67,   66,   93,   93,   94,   57,
886
+		   57,   57,   57,   95,   95,   96,   96,   97,   97,   98,
887
+		   99,   99,  100,  100,  101,  101,   54,   54,   50,   50,
888
+		  103,   52,   52,  104,   51,   51,   53,   53,   63,   63,
889
+		   63,   63,   79,   79,  107,  107,  109,  109,  110,  110,
890
+		  110,  110,  108,  108,  108,  112,  112,  112,  112,   87,
891
+		   87,  115,  115,  115,  116,  116,  113,  113,  117,  117,
892
+		  119,  119,  120,  120,  114,  121,  121,  118,  122,  122,
893
+		  122,  122,  111,  111,   80,   80,   80,   20,   20,   20,
894
+		  124,  123,  123,  125,  125,  125,  125,   59,  126,  126,
895
+		  127,   60,  129,  129,  130,  130,  131,  131,   84,  132,
896
+		  132,  132,  132,  132,  132,  137,  137,  138,  138,  139,
897
+		  139,  139,  139,  139,  140,  141,  141,  136,  136,  133,
898
+		  133,  135,  135,  143,  143,  142,  142,  142,  142,  142,
899
+		  142,  142,  134,  144,  144,  146,  145,  145,   61,  102,
900
+		  147,  147,   55,   55,   42,   42,   42,   42,   42,   42,
901
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
902
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
903
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
904
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
905
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
906
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
907
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
908
+		   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
909
+		   42,   42,   42,   42,   42,   42,   42,  154,  148,  148,
910
+		  153,  153,  156,  157,  157,  158,  159,  159,  159,   19,
911
+		   19,   72,   72,   72,   72,  149,  149,  149,  149,  161,
912
+		  161,  150,  150,  152,  152,  152,  155,  155,  166,  166,
913
+		  166,  166,  166,  166,  166,  166,  166,  167,  167,  106,
914
+		  169,  169,  169,  169,  151,  151,  151,  151,  151,  151,
915
+		  151,  151,   58,   58,  164,  164,  164,  164,  170,  170,
916
+		  160,  160,  160,  171,  171,  171,  171,  171,  171,   73,
917
+		   73,   65,   65,   65,   65,  128,  128,  128,  128,  174,
918
+		  173,  163,  163,  163,  163,  163,  163,  163,  162,  162,
919
+		  162,  172,  172,  172,  172,  105,  168,  176,  176,  175,
920
+		  175,  177,  177,  177,  177,  177,  177,  177,  177,  165,
921
+		  165,  165,  165,  179,  180,  178,  178,  178,  178,  178,
922
+		  178,  178,  178,  181,  181,  181,  181
923
+	);
924 924
 
925
-    protected $ruleToLength = array(
926
-            1,    1,    2,    0,    1,    1,    1,    1,    1,    1,
927
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
928
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
929
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
930
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
931
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
932
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
933
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
934
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
935
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
936
-            0,    1,    0,    1,    1,    2,    1,    3,    4,    1,
937
-            2,    0,    1,    1,    1,    1,    1,    3,    5,    4,
938
-            3,    4,    2,    3,    1,    1,    7,    6,    2,    3,
939
-            1,    2,    3,    1,    2,    3,    1,    1,    3,    1,
940
-            3,    1,    2,    2,    3,    1,    3,    2,    3,    1,
941
-            3,    2,    0,    1,    1,    1,    1,    1,    3,    7,
942
-           10,    5,    7,    9,    5,    3,    3,    3,    3,    3,
943
-            3,    1,    2,    5,    7,    9,    6,    5,    6,    3,
944
-            2,    1,    1,    1,    0,    2,    1,    3,    8,    0,
945
-            4,    2,    1,    3,    0,    1,    0,    1,    0,    1,
946
-            3,    1,    8,    9,    8,    7,    6,    8,    0,    2,
947
-            0,    2,    1,    2,    1,    2,    1,    1,    1,    0,
948
-            2,    0,    2,    0,    2,    2,    1,    3,    1,    4,
949
-            1,    4,    1,    1,    4,    2,    1,    3,    3,    3,
950
-            4,    4,    5,    0,    2,    4,    3,    1,    1,    7,
951
-            0,    2,    1,    3,    3,    4,    1,    4,    0,    2,
952
-            5,    0,    2,    6,    0,    2,    0,    3,    1,    2,
953
-            1,    1,    2,    0,    1,    3,    0,    2,    1,    1,
954
-            1,    1,    6,    8,    6,    1,    2,    1,    1,    1,
955
-            1,    1,    1,    1,    1,    3,    3,    3,    1,    3,
956
-            3,    3,    3,    3,    1,    3,    3,    1,    1,    2,
957
-            1,    1,    0,    1,    0,    2,    2,    2,    4,    3,
958
-            1,    1,    3,    1,    2,    2,    3,    2,    3,    1,
959
-            1,    2,    3,    1,    1,    3,    2,    0,    1,    5,
960
-            5,   10,    3,    5,    1,    1,    3,    0,    2,    4,
961
-            5,    4,    4,    4,    3,    1,    1,    1,    1,    1,
962
-            1,    0,    1,    1,    2,    1,    1,    1,    1,    1,
963
-            1,    1,    2,    1,    3,    1,    1,    3,    2,    2,
964
-            3,    1,    0,    1,    1,    3,    3,    3,    4,    1,
965
-            1,    2,    3,    3,    3,    3,    3,    3,    3,    3,
966
-            3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
967
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
968
-            3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
969
-            2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
970
-            3,    3,    5,    4,    3,    4,    4,    2,    2,    4,
971
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
972
-            2,    1,    3,    2,    1,    2,    4,    2,    2,    8,
973
-            9,    8,    9,    9,   10,    9,   10,    8,    3,    2,
974
-            0,    4,    2,    1,    3,    2,    2,    2,    4,    1,
975
-            1,    1,    1,    1,    1,    1,    1,    3,    1,    1,
976
-            1,    0,    3,    0,    1,    1,    0,    1,    1,    1,
977
-            1,    1,    1,    1,    1,    1,    1,    3,    3,    3,
978
-            4,    1,    1,    3,    1,    1,    1,    1,    1,    3,
979
-            2,    3,    0,    1,    1,    3,    1,    1,    1,    1,
980
-            1,    3,    1,    1,    4,    4,    1,    4,    4,    0,
981
-            1,    1,    1,    3,    3,    1,    4,    2,    2,    1,
982
-            3,    1,    4,    4,    3,    3,    3,    3,    1,    3,
983
-            1,    1,    3,    1,    1,    4,    1,    1,    1,    3,
984
-            1,    1,    2,    1,    3,    4,    3,    2,    0,    2,
985
-            2,    1,    2,    1,    1,    1,    4,    3,    3,    3,
986
-            3,    6,    3,    1,    1,    2,    1
987
-    );
925
+	protected $ruleToLength = array(
926
+			1,    1,    2,    0,    1,    1,    1,    1,    1,    1,
927
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
928
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
929
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
930
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
931
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
932
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
933
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
934
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
935
+			1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
936
+			0,    1,    0,    1,    1,    2,    1,    3,    4,    1,
937
+			2,    0,    1,    1,    1,    1,    1,    3,    5,    4,
938
+			3,    4,    2,    3,    1,    1,    7,    6,    2,    3,
939
+			1,    2,    3,    1,    2,    3,    1,    1,    3,    1,
940
+			3,    1,    2,    2,    3,    1,    3,    2,    3,    1,
941
+			3,    2,    0,    1,    1,    1,    1,    1,    3,    7,
942
+		   10,    5,    7,    9,    5,    3,    3,    3,    3,    3,
943
+			3,    1,    2,    5,    7,    9,    6,    5,    6,    3,
944
+			2,    1,    1,    1,    0,    2,    1,    3,    8,    0,
945
+			4,    2,    1,    3,    0,    1,    0,    1,    0,    1,
946
+			3,    1,    8,    9,    8,    7,    6,    8,    0,    2,
947
+			0,    2,    1,    2,    1,    2,    1,    1,    1,    0,
948
+			2,    0,    2,    0,    2,    2,    1,    3,    1,    4,
949
+			1,    4,    1,    1,    4,    2,    1,    3,    3,    3,
950
+			4,    4,    5,    0,    2,    4,    3,    1,    1,    7,
951
+			0,    2,    1,    3,    3,    4,    1,    4,    0,    2,
952
+			5,    0,    2,    6,    0,    2,    0,    3,    1,    2,
953
+			1,    1,    2,    0,    1,    3,    0,    2,    1,    1,
954
+			1,    1,    6,    8,    6,    1,    2,    1,    1,    1,
955
+			1,    1,    1,    1,    1,    3,    3,    3,    1,    3,
956
+			3,    3,    3,    3,    1,    3,    3,    1,    1,    2,
957
+			1,    1,    0,    1,    0,    2,    2,    2,    4,    3,
958
+			1,    1,    3,    1,    2,    2,    3,    2,    3,    1,
959
+			1,    2,    3,    1,    1,    3,    2,    0,    1,    5,
960
+			5,   10,    3,    5,    1,    1,    3,    0,    2,    4,
961
+			5,    4,    4,    4,    3,    1,    1,    1,    1,    1,
962
+			1,    0,    1,    1,    2,    1,    1,    1,    1,    1,
963
+			1,    1,    2,    1,    3,    1,    1,    3,    2,    2,
964
+			3,    1,    0,    1,    1,    3,    3,    3,    4,    1,
965
+			1,    2,    3,    3,    3,    3,    3,    3,    3,    3,
966
+			3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
967
+			3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
968
+			3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
969
+			2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
970
+			3,    3,    5,    4,    3,    4,    4,    2,    2,    4,
971
+			2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
972
+			2,    1,    3,    2,    1,    2,    4,    2,    2,    8,
973
+			9,    8,    9,    9,   10,    9,   10,    8,    3,    2,
974
+			0,    4,    2,    1,    3,    2,    2,    2,    4,    1,
975
+			1,    1,    1,    1,    1,    1,    1,    3,    1,    1,
976
+			1,    0,    3,    0,    1,    1,    0,    1,    1,    1,
977
+			1,    1,    1,    1,    1,    1,    1,    3,    3,    3,
978
+			4,    1,    1,    3,    1,    1,    1,    1,    1,    3,
979
+			2,    3,    0,    1,    1,    3,    1,    1,    1,    1,
980
+			1,    3,    1,    1,    4,    4,    1,    4,    4,    0,
981
+			1,    1,    1,    3,    3,    1,    4,    2,    2,    1,
982
+			3,    1,    4,    4,    3,    3,    3,    3,    1,    3,
983
+			1,    1,    3,    1,    1,    4,    1,    1,    1,    3,
984
+			1,    1,    2,    1,    3,    4,    3,    2,    0,    2,
985
+			2,    1,    2,    1,    1,    1,    4,    3,    3,    3,
986
+			3,    6,    3,    1,    1,    2,    1
987
+	);
988 988
 
989
-    protected function initReduceCallbacks() {
990
-        $this->reduceCallbacks = [
991
-            0 => function ($stackPos) {
992
-                $this->semValue = $this->semStack[$stackPos];
993
-            },
994
-            1 => function ($stackPos) {
995
-                 $this->semValue = $this->handleNamespaces($this->semStack[$stackPos-(1-1)]);
996
-            },
997
-            2 => function ($stackPos) {
998
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
999
-            },
1000
-            3 => function ($stackPos) {
1001
-                 $this->semValue = array();
1002
-            },
1003
-            4 => function ($stackPos) {
1004
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1005
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1006
-            },
1007
-            5 => function ($stackPos) {
1008
-                $this->semValue = $this->semStack[$stackPos];
1009
-            },
1010
-            6 => function ($stackPos) {
1011
-                $this->semValue = $this->semStack[$stackPos];
1012
-            },
1013
-            7 => function ($stackPos) {
1014
-                $this->semValue = $this->semStack[$stackPos];
1015
-            },
1016
-            8 => function ($stackPos) {
1017
-                $this->semValue = $this->semStack[$stackPos];
1018
-            },
1019
-            9 => function ($stackPos) {
1020
-                $this->semValue = $this->semStack[$stackPos];
1021
-            },
1022
-            10 => function ($stackPos) {
1023
-                $this->semValue = $this->semStack[$stackPos];
1024
-            },
1025
-            11 => function ($stackPos) {
1026
-                $this->semValue = $this->semStack[$stackPos];
1027
-            },
1028
-            12 => function ($stackPos) {
1029
-                $this->semValue = $this->semStack[$stackPos];
1030
-            },
1031
-            13 => function ($stackPos) {
1032
-                $this->semValue = $this->semStack[$stackPos];
1033
-            },
1034
-            14 => function ($stackPos) {
1035
-                $this->semValue = $this->semStack[$stackPos];
1036
-            },
1037
-            15 => function ($stackPos) {
1038
-                $this->semValue = $this->semStack[$stackPos];
1039
-            },
1040
-            16 => function ($stackPos) {
1041
-                $this->semValue = $this->semStack[$stackPos];
1042
-            },
1043
-            17 => function ($stackPos) {
1044
-                $this->semValue = $this->semStack[$stackPos];
1045
-            },
1046
-            18 => function ($stackPos) {
1047
-                $this->semValue = $this->semStack[$stackPos];
1048
-            },
1049
-            19 => function ($stackPos) {
1050
-                $this->semValue = $this->semStack[$stackPos];
1051
-            },
1052
-            20 => function ($stackPos) {
1053
-                $this->semValue = $this->semStack[$stackPos];
1054
-            },
1055
-            21 => function ($stackPos) {
1056
-                $this->semValue = $this->semStack[$stackPos];
1057
-            },
1058
-            22 => function ($stackPos) {
1059
-                $this->semValue = $this->semStack[$stackPos];
1060
-            },
1061
-            23 => function ($stackPos) {
1062
-                $this->semValue = $this->semStack[$stackPos];
1063
-            },
1064
-            24 => function ($stackPos) {
1065
-                $this->semValue = $this->semStack[$stackPos];
1066
-            },
1067
-            25 => function ($stackPos) {
1068
-                $this->semValue = $this->semStack[$stackPos];
1069
-            },
1070
-            26 => function ($stackPos) {
1071
-                $this->semValue = $this->semStack[$stackPos];
1072
-            },
1073
-            27 => function ($stackPos) {
1074
-                $this->semValue = $this->semStack[$stackPos];
1075
-            },
1076
-            28 => function ($stackPos) {
1077
-                $this->semValue = $this->semStack[$stackPos];
1078
-            },
1079
-            29 => function ($stackPos) {
1080
-                $this->semValue = $this->semStack[$stackPos];
1081
-            },
1082
-            30 => function ($stackPos) {
1083
-                $this->semValue = $this->semStack[$stackPos];
1084
-            },
1085
-            31 => function ($stackPos) {
1086
-                $this->semValue = $this->semStack[$stackPos];
1087
-            },
1088
-            32 => function ($stackPos) {
1089
-                $this->semValue = $this->semStack[$stackPos];
1090
-            },
1091
-            33 => function ($stackPos) {
1092
-                $this->semValue = $this->semStack[$stackPos];
1093
-            },
1094
-            34 => function ($stackPos) {
1095
-                $this->semValue = $this->semStack[$stackPos];
1096
-            },
1097
-            35 => function ($stackPos) {
1098
-                $this->semValue = $this->semStack[$stackPos];
1099
-            },
1100
-            36 => function ($stackPos) {
1101
-                $this->semValue = $this->semStack[$stackPos];
1102
-            },
1103
-            37 => function ($stackPos) {
1104
-                $this->semValue = $this->semStack[$stackPos];
1105
-            },
1106
-            38 => function ($stackPos) {
1107
-                $this->semValue = $this->semStack[$stackPos];
1108
-            },
1109
-            39 => function ($stackPos) {
1110
-                $this->semValue = $this->semStack[$stackPos];
1111
-            },
1112
-            40 => function ($stackPos) {
1113
-                $this->semValue = $this->semStack[$stackPos];
1114
-            },
1115
-            41 => function ($stackPos) {
1116
-                $this->semValue = $this->semStack[$stackPos];
1117
-            },
1118
-            42 => function ($stackPos) {
1119
-                $this->semValue = $this->semStack[$stackPos];
1120
-            },
1121
-            43 => function ($stackPos) {
1122
-                $this->semValue = $this->semStack[$stackPos];
1123
-            },
1124
-            44 => function ($stackPos) {
1125
-                $this->semValue = $this->semStack[$stackPos];
1126
-            },
1127
-            45 => function ($stackPos) {
1128
-                $this->semValue = $this->semStack[$stackPos];
1129
-            },
1130
-            46 => function ($stackPos) {
1131
-                $this->semValue = $this->semStack[$stackPos];
1132
-            },
1133
-            47 => function ($stackPos) {
1134
-                $this->semValue = $this->semStack[$stackPos];
1135
-            },
1136
-            48 => function ($stackPos) {
1137
-                $this->semValue = $this->semStack[$stackPos];
1138
-            },
1139
-            49 => function ($stackPos) {
1140
-                $this->semValue = $this->semStack[$stackPos];
1141
-            },
1142
-            50 => function ($stackPos) {
1143
-                $this->semValue = $this->semStack[$stackPos];
1144
-            },
1145
-            51 => function ($stackPos) {
1146
-                $this->semValue = $this->semStack[$stackPos];
1147
-            },
1148
-            52 => function ($stackPos) {
1149
-                $this->semValue = $this->semStack[$stackPos];
1150
-            },
1151
-            53 => function ($stackPos) {
1152
-                $this->semValue = $this->semStack[$stackPos];
1153
-            },
1154
-            54 => function ($stackPos) {
1155
-                $this->semValue = $this->semStack[$stackPos];
1156
-            },
1157
-            55 => function ($stackPos) {
1158
-                $this->semValue = $this->semStack[$stackPos];
1159
-            },
1160
-            56 => function ($stackPos) {
1161
-                $this->semValue = $this->semStack[$stackPos];
1162
-            },
1163
-            57 => function ($stackPos) {
1164
-                $this->semValue = $this->semStack[$stackPos];
1165
-            },
1166
-            58 => function ($stackPos) {
1167
-                $this->semValue = $this->semStack[$stackPos];
1168
-            },
1169
-            59 => function ($stackPos) {
1170
-                $this->semValue = $this->semStack[$stackPos];
1171
-            },
1172
-            60 => function ($stackPos) {
1173
-                $this->semValue = $this->semStack[$stackPos];
1174
-            },
1175
-            61 => function ($stackPos) {
1176
-                $this->semValue = $this->semStack[$stackPos];
1177
-            },
1178
-            62 => function ($stackPos) {
1179
-                $this->semValue = $this->semStack[$stackPos];
1180
-            },
1181
-            63 => function ($stackPos) {
1182
-                $this->semValue = $this->semStack[$stackPos];
1183
-            },
1184
-            64 => function ($stackPos) {
1185
-                $this->semValue = $this->semStack[$stackPos];
1186
-            },
1187
-            65 => function ($stackPos) {
1188
-                $this->semValue = $this->semStack[$stackPos];
1189
-            },
1190
-            66 => function ($stackPos) {
1191
-                $this->semValue = $this->semStack[$stackPos];
1192
-            },
1193
-            67 => function ($stackPos) {
1194
-                $this->semValue = $this->semStack[$stackPos];
1195
-            },
1196
-            68 => function ($stackPos) {
1197
-                $this->semValue = $this->semStack[$stackPos];
1198
-            },
1199
-            69 => function ($stackPos) {
1200
-                $this->semValue = $this->semStack[$stackPos];
1201
-            },
1202
-            70 => function ($stackPos) {
1203
-                $this->semValue = $this->semStack[$stackPos];
1204
-            },
1205
-            71 => function ($stackPos) {
1206
-                $this->semValue = $this->semStack[$stackPos];
1207
-            },
1208
-            72 => function ($stackPos) {
1209
-                $this->semValue = $this->semStack[$stackPos];
1210
-            },
1211
-            73 => function ($stackPos) {
1212
-                $this->semValue = $this->semStack[$stackPos];
1213
-            },
1214
-            74 => function ($stackPos) {
1215
-                $this->semValue = $this->semStack[$stackPos];
1216
-            },
1217
-            75 => function ($stackPos) {
1218
-                $this->semValue = $this->semStack[$stackPos];
1219
-            },
1220
-            76 => function ($stackPos) {
1221
-                $this->semValue = $this->semStack[$stackPos];
1222
-            },
1223
-            77 => function ($stackPos) {
1224
-                $this->semValue = $this->semStack[$stackPos];
1225
-            },
1226
-            78 => function ($stackPos) {
1227
-                $this->semValue = $this->semStack[$stackPos];
1228
-            },
1229
-            79 => function ($stackPos) {
1230
-                $this->semValue = $this->semStack[$stackPos];
1231
-            },
1232
-            80 => function ($stackPos) {
1233
-                $this->semValue = $this->semStack[$stackPos];
1234
-            },
1235
-            81 => function ($stackPos) {
1236
-                $this->semValue = $this->semStack[$stackPos];
1237
-            },
1238
-            82 => function ($stackPos) {
1239
-                $this->semValue = $this->semStack[$stackPos];
1240
-            },
1241
-            83 => function ($stackPos) {
1242
-                $this->semValue = $this->semStack[$stackPos];
1243
-            },
1244
-            84 => function ($stackPos) {
1245
-                $this->semValue = $this->semStack[$stackPos];
1246
-            },
1247
-            85 => function ($stackPos) {
1248
-                $this->semValue = $this->semStack[$stackPos];
1249
-            },
1250
-            86 => function ($stackPos) {
1251
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1252
-            },
1253
-            87 => function ($stackPos) {
1254
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1255
-            },
1256
-            88 => function ($stackPos) {
1257
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1258
-            },
1259
-            89 => function ($stackPos) {
1260
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1261
-            },
1262
-            90 => function ($stackPos) {
1263
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1264
-            },
1265
-            91 => function ($stackPos) {
1266
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1267
-            },
1268
-            92 => function ($stackPos) {
1269
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1270
-            },
1271
-            93 => function ($stackPos) {
1272
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1273
-            },
1274
-            94 => function ($stackPos) {
1275
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1276
-            },
1277
-            95 => function ($stackPos) {
1278
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1279
-            },
1280
-            96 => function ($stackPos) {
1281
-                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1282
-            },
1283
-            97 => function ($stackPos) {
1284
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1285
-            },
1286
-            98 => function ($stackPos) {
1287
-                 /* nothing */
1288
-            },
1289
-            99 => function ($stackPos) {
1290
-                 /* nothing */
1291
-            },
1292
-            100 => function ($stackPos) {
1293
-                 /* nothing */
1294
-            },
1295
-            101 => function ($stackPos) {
1296
-                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
1297
-            },
1298
-            102 => function ($stackPos) {
1299
-                $this->semValue = $this->semStack[$stackPos];
1300
-            },
1301
-            103 => function ($stackPos) {
1302
-                $this->semValue = $this->semStack[$stackPos];
1303
-            },
1304
-            104 => function ($stackPos) {
1305
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1306
-            },
1307
-            105 => function ($stackPos) {
1308
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1309
-            },
1310
-            106 => function ($stackPos) {
1311
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1312
-            },
1313
-            107 => function ($stackPos) {
1314
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1315
-            },
1316
-            108 => function ($stackPos) {
1317
-                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1318
-            },
1319
-            109 => function ($stackPos) {
1320
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1321
-            },
1322
-            110 => function ($stackPos) {
1323
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1324
-            },
1325
-            111 => function ($stackPos) {
1326
-                 $this->semValue = [];
1327
-            },
1328
-            112 => function ($stackPos) {
1329
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1330
-            },
1331
-            113 => function ($stackPos) {
1332
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1333
-            },
1334
-            114 => function ($stackPos) {
1335
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1336
-            },
1337
-            115 => function ($stackPos) {
1338
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1339
-            },
1340
-            116 => function ($stackPos) {
1341
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1342
-            },
1343
-            117 => function ($stackPos) {
1344
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1345
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
1346
-            $this->checkNamespace($this->semValue);
1347
-            },
1348
-            118 => function ($stackPos) {
1349
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1350
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1351
-            $this->checkNamespace($this->semValue);
1352
-            },
1353
-            119 => function ($stackPos) {
1354
-                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1355
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1356
-            $this->checkNamespace($this->semValue);
1357
-            },
1358
-            120 => function ($stackPos) {
1359
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1360
-            },
1361
-            121 => function ($stackPos) {
1362
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1363
-            },
1364
-            122 => function ($stackPos) {
1365
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1366
-            },
1367
-            123 => function ($stackPos) {
1368
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1369
-            },
1370
-            124 => function ($stackPos) {
1371
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
1372
-            },
1373
-            125 => function ($stackPos) {
1374
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
1375
-            },
1376
-            126 => function ($stackPos) {
1377
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1378
-            },
1379
-            127 => function ($stackPos) {
1380
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1381
-            },
1382
-            128 => function ($stackPos) {
1383
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1384
-            },
1385
-            129 => function ($stackPos) {
1386
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1387
-            },
1388
-            130 => function ($stackPos) {
1389
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1390
-            },
1391
-            131 => function ($stackPos) {
1392
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1393
-            },
1394
-            132 => function ($stackPos) {
1395
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1396
-            },
1397
-            133 => function ($stackPos) {
1398
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1399
-            },
1400
-            134 => function ($stackPos) {
1401
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1402
-            },
1403
-            135 => function ($stackPos) {
1404
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1405
-            },
1406
-            136 => function ($stackPos) {
1407
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1408
-            },
1409
-            137 => function ($stackPos) {
1410
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1411
-            },
1412
-            138 => function ($stackPos) {
1413
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1414
-            },
1415
-            139 => function ($stackPos) {
1416
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1417
-            },
1418
-            140 => function ($stackPos) {
1419
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1420
-            },
1421
-            141 => function ($stackPos) {
1422
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
1423
-            },
1424
-            142 => function ($stackPos) {
1425
-                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
1426
-            },
1427
-            143 => function ($stackPos) {
1428
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1429
-            },
1430
-            144 => function ($stackPos) {
1431
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1432
-            },
1433
-            145 => function ($stackPos) {
1434
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1435
-            },
1436
-            146 => function ($stackPos) {
1437
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1438
-            },
1439
-            147 => function ($stackPos) {
1440
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1441
-            },
1442
-            148 => function ($stackPos) {
1443
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1444
-            },
1445
-            149 => function ($stackPos) {
1446
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1447
-            },
1448
-            150 => function ($stackPos) {
1449
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1450
-            },
1451
-            151 => function ($stackPos) {
1452
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
1453
-            },
1454
-            152 => function ($stackPos) {
1455
-                 $this->semValue = array();
1456
-            },
1457
-            153 => function ($stackPos) {
1458
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1459
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1460
-            },
1461
-            154 => function ($stackPos) {
1462
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1463
-            },
1464
-            155 => function ($stackPos) {
1465
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1466
-            },
1467
-            156 => function ($stackPos) {
1468
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1469
-            },
1470
-            157 => function ($stackPos) {
1471
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1472
-            },
1473
-            158 => function ($stackPos) {
989
+	protected function initReduceCallbacks() {
990
+		$this->reduceCallbacks = [
991
+			0 => function ($stackPos) {
992
+				$this->semValue = $this->semStack[$stackPos];
993
+			},
994
+			1 => function ($stackPos) {
995
+				 $this->semValue = $this->handleNamespaces($this->semStack[$stackPos-(1-1)]);
996
+			},
997
+			2 => function ($stackPos) {
998
+				 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
999
+			},
1000
+			3 => function ($stackPos) {
1001
+				 $this->semValue = array();
1002
+			},
1003
+			4 => function ($stackPos) {
1004
+				 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1005
+			if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1006
+			},
1007
+			5 => function ($stackPos) {
1008
+				$this->semValue = $this->semStack[$stackPos];
1009
+			},
1010
+			6 => function ($stackPos) {
1011
+				$this->semValue = $this->semStack[$stackPos];
1012
+			},
1013
+			7 => function ($stackPos) {
1014
+				$this->semValue = $this->semStack[$stackPos];
1015
+			},
1016
+			8 => function ($stackPos) {
1017
+				$this->semValue = $this->semStack[$stackPos];
1018
+			},
1019
+			9 => function ($stackPos) {
1020
+				$this->semValue = $this->semStack[$stackPos];
1021
+			},
1022
+			10 => function ($stackPos) {
1023
+				$this->semValue = $this->semStack[$stackPos];
1024
+			},
1025
+			11 => function ($stackPos) {
1026
+				$this->semValue = $this->semStack[$stackPos];
1027
+			},
1028
+			12 => function ($stackPos) {
1029
+				$this->semValue = $this->semStack[$stackPos];
1030
+			},
1031
+			13 => function ($stackPos) {
1032
+				$this->semValue = $this->semStack[$stackPos];
1033
+			},
1034
+			14 => function ($stackPos) {
1035
+				$this->semValue = $this->semStack[$stackPos];
1036
+			},
1037
+			15 => function ($stackPos) {
1038
+				$this->semValue = $this->semStack[$stackPos];
1039
+			},
1040
+			16 => function ($stackPos) {
1041
+				$this->semValue = $this->semStack[$stackPos];
1042
+			},
1043
+			17 => function ($stackPos) {
1044
+				$this->semValue = $this->semStack[$stackPos];
1045
+			},
1046
+			18 => function ($stackPos) {
1047
+				$this->semValue = $this->semStack[$stackPos];
1048
+			},
1049
+			19 => function ($stackPos) {
1050
+				$this->semValue = $this->semStack[$stackPos];
1051
+			},
1052
+			20 => function ($stackPos) {
1053
+				$this->semValue = $this->semStack[$stackPos];
1054
+			},
1055
+			21 => function ($stackPos) {
1056
+				$this->semValue = $this->semStack[$stackPos];
1057
+			},
1058
+			22 => function ($stackPos) {
1059
+				$this->semValue = $this->semStack[$stackPos];
1060
+			},
1061
+			23 => function ($stackPos) {
1062
+				$this->semValue = $this->semStack[$stackPos];
1063
+			},
1064
+			24 => function ($stackPos) {
1065
+				$this->semValue = $this->semStack[$stackPos];
1066
+			},
1067
+			25 => function ($stackPos) {
1068
+				$this->semValue = $this->semStack[$stackPos];
1069
+			},
1070
+			26 => function ($stackPos) {
1071
+				$this->semValue = $this->semStack[$stackPos];
1072
+			},
1073
+			27 => function ($stackPos) {
1074
+				$this->semValue = $this->semStack[$stackPos];
1075
+			},
1076
+			28 => function ($stackPos) {
1077
+				$this->semValue = $this->semStack[$stackPos];
1078
+			},
1079
+			29 => function ($stackPos) {
1080
+				$this->semValue = $this->semStack[$stackPos];
1081
+			},
1082
+			30 => function ($stackPos) {
1083
+				$this->semValue = $this->semStack[$stackPos];
1084
+			},
1085
+			31 => function ($stackPos) {
1086
+				$this->semValue = $this->semStack[$stackPos];
1087
+			},
1088
+			32 => function ($stackPos) {
1089
+				$this->semValue = $this->semStack[$stackPos];
1090
+			},
1091
+			33 => function ($stackPos) {
1092
+				$this->semValue = $this->semStack[$stackPos];
1093
+			},
1094
+			34 => function ($stackPos) {
1095
+				$this->semValue = $this->semStack[$stackPos];
1096
+			},
1097
+			35 => function ($stackPos) {
1098
+				$this->semValue = $this->semStack[$stackPos];
1099
+			},
1100
+			36 => function ($stackPos) {
1101
+				$this->semValue = $this->semStack[$stackPos];
1102
+			},
1103
+			37 => function ($stackPos) {
1104
+				$this->semValue = $this->semStack[$stackPos];
1105
+			},
1106
+			38 => function ($stackPos) {
1107
+				$this->semValue = $this->semStack[$stackPos];
1108
+			},
1109
+			39 => function ($stackPos) {
1110
+				$this->semValue = $this->semStack[$stackPos];
1111
+			},
1112
+			40 => function ($stackPos) {
1113
+				$this->semValue = $this->semStack[$stackPos];
1114
+			},
1115
+			41 => function ($stackPos) {
1116
+				$this->semValue = $this->semStack[$stackPos];
1117
+			},
1118
+			42 => function ($stackPos) {
1119
+				$this->semValue = $this->semStack[$stackPos];
1120
+			},
1121
+			43 => function ($stackPos) {
1122
+				$this->semValue = $this->semStack[$stackPos];
1123
+			},
1124
+			44 => function ($stackPos) {
1125
+				$this->semValue = $this->semStack[$stackPos];
1126
+			},
1127
+			45 => function ($stackPos) {
1128
+				$this->semValue = $this->semStack[$stackPos];
1129
+			},
1130
+			46 => function ($stackPos) {
1131
+				$this->semValue = $this->semStack[$stackPos];
1132
+			},
1133
+			47 => function ($stackPos) {
1134
+				$this->semValue = $this->semStack[$stackPos];
1135
+			},
1136
+			48 => function ($stackPos) {
1137
+				$this->semValue = $this->semStack[$stackPos];
1138
+			},
1139
+			49 => function ($stackPos) {
1140
+				$this->semValue = $this->semStack[$stackPos];
1141
+			},
1142
+			50 => function ($stackPos) {
1143
+				$this->semValue = $this->semStack[$stackPos];
1144
+			},
1145
+			51 => function ($stackPos) {
1146
+				$this->semValue = $this->semStack[$stackPos];
1147
+			},
1148
+			52 => function ($stackPos) {
1149
+				$this->semValue = $this->semStack[$stackPos];
1150
+			},
1151
+			53 => function ($stackPos) {
1152
+				$this->semValue = $this->semStack[$stackPos];
1153
+			},
1154
+			54 => function ($stackPos) {
1155
+				$this->semValue = $this->semStack[$stackPos];
1156
+			},
1157
+			55 => function ($stackPos) {
1158
+				$this->semValue = $this->semStack[$stackPos];
1159
+			},
1160
+			56 => function ($stackPos) {
1161
+				$this->semValue = $this->semStack[$stackPos];
1162
+			},
1163
+			57 => function ($stackPos) {
1164
+				$this->semValue = $this->semStack[$stackPos];
1165
+			},
1166
+			58 => function ($stackPos) {
1167
+				$this->semValue = $this->semStack[$stackPos];
1168
+			},
1169
+			59 => function ($stackPos) {
1170
+				$this->semValue = $this->semStack[$stackPos];
1171
+			},
1172
+			60 => function ($stackPos) {
1173
+				$this->semValue = $this->semStack[$stackPos];
1174
+			},
1175
+			61 => function ($stackPos) {
1176
+				$this->semValue = $this->semStack[$stackPos];
1177
+			},
1178
+			62 => function ($stackPos) {
1179
+				$this->semValue = $this->semStack[$stackPos];
1180
+			},
1181
+			63 => function ($stackPos) {
1182
+				$this->semValue = $this->semStack[$stackPos];
1183
+			},
1184
+			64 => function ($stackPos) {
1185
+				$this->semValue = $this->semStack[$stackPos];
1186
+			},
1187
+			65 => function ($stackPos) {
1188
+				$this->semValue = $this->semStack[$stackPos];
1189
+			},
1190
+			66 => function ($stackPos) {
1191
+				$this->semValue = $this->semStack[$stackPos];
1192
+			},
1193
+			67 => function ($stackPos) {
1194
+				$this->semValue = $this->semStack[$stackPos];
1195
+			},
1196
+			68 => function ($stackPos) {
1197
+				$this->semValue = $this->semStack[$stackPos];
1198
+			},
1199
+			69 => function ($stackPos) {
1200
+				$this->semValue = $this->semStack[$stackPos];
1201
+			},
1202
+			70 => function ($stackPos) {
1203
+				$this->semValue = $this->semStack[$stackPos];
1204
+			},
1205
+			71 => function ($stackPos) {
1206
+				$this->semValue = $this->semStack[$stackPos];
1207
+			},
1208
+			72 => function ($stackPos) {
1209
+				$this->semValue = $this->semStack[$stackPos];
1210
+			},
1211
+			73 => function ($stackPos) {
1212
+				$this->semValue = $this->semStack[$stackPos];
1213
+			},
1214
+			74 => function ($stackPos) {
1215
+				$this->semValue = $this->semStack[$stackPos];
1216
+			},
1217
+			75 => function ($stackPos) {
1218
+				$this->semValue = $this->semStack[$stackPos];
1219
+			},
1220
+			76 => function ($stackPos) {
1221
+				$this->semValue = $this->semStack[$stackPos];
1222
+			},
1223
+			77 => function ($stackPos) {
1224
+				$this->semValue = $this->semStack[$stackPos];
1225
+			},
1226
+			78 => function ($stackPos) {
1227
+				$this->semValue = $this->semStack[$stackPos];
1228
+			},
1229
+			79 => function ($stackPos) {
1230
+				$this->semValue = $this->semStack[$stackPos];
1231
+			},
1232
+			80 => function ($stackPos) {
1233
+				$this->semValue = $this->semStack[$stackPos];
1234
+			},
1235
+			81 => function ($stackPos) {
1236
+				$this->semValue = $this->semStack[$stackPos];
1237
+			},
1238
+			82 => function ($stackPos) {
1239
+				$this->semValue = $this->semStack[$stackPos];
1240
+			},
1241
+			83 => function ($stackPos) {
1242
+				$this->semValue = $this->semStack[$stackPos];
1243
+			},
1244
+			84 => function ($stackPos) {
1245
+				$this->semValue = $this->semStack[$stackPos];
1246
+			},
1247
+			85 => function ($stackPos) {
1248
+				$this->semValue = $this->semStack[$stackPos];
1249
+			},
1250
+			86 => function ($stackPos) {
1251
+				 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1252
+			},
1253
+			87 => function ($stackPos) {
1254
+				 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1255
+			},
1256
+			88 => function ($stackPos) {
1257
+				 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1258
+			},
1259
+			89 => function ($stackPos) {
1260
+				 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1261
+			},
1262
+			90 => function ($stackPos) {
1263
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1264
+			},
1265
+			91 => function ($stackPos) {
1266
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1267
+			},
1268
+			92 => function ($stackPos) {
1269
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1270
+			},
1271
+			93 => function ($stackPos) {
1272
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1273
+			},
1274
+			94 => function ($stackPos) {
1275
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1276
+			},
1277
+			95 => function ($stackPos) {
1278
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1279
+			},
1280
+			96 => function ($stackPos) {
1281
+				 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1282
+			},
1283
+			97 => function ($stackPos) {
1284
+				 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1285
+			},
1286
+			98 => function ($stackPos) {
1287
+				 /* nothing */
1288
+			},
1289
+			99 => function ($stackPos) {
1290
+				 /* nothing */
1291
+			},
1292
+			100 => function ($stackPos) {
1293
+				 /* nothing */
1294
+			},
1295
+			101 => function ($stackPos) {
1296
+				 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
1297
+			},
1298
+			102 => function ($stackPos) {
1299
+				$this->semValue = $this->semStack[$stackPos];
1300
+			},
1301
+			103 => function ($stackPos) {
1302
+				$this->semValue = $this->semStack[$stackPos];
1303
+			},
1304
+			104 => function ($stackPos) {
1305
+				 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1306
+			},
1307
+			105 => function ($stackPos) {
1308
+				 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1309
+			},
1310
+			106 => function ($stackPos) {
1311
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1312
+			},
1313
+			107 => function ($stackPos) {
1314
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1315
+			},
1316
+			108 => function ($stackPos) {
1317
+				 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1318
+			},
1319
+			109 => function ($stackPos) {
1320
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1321
+			},
1322
+			110 => function ($stackPos) {
1323
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1324
+			},
1325
+			111 => function ($stackPos) {
1326
+				 $this->semValue = [];
1327
+			},
1328
+			112 => function ($stackPos) {
1329
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1330
+			},
1331
+			113 => function ($stackPos) {
1332
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1333
+			},
1334
+			114 => function ($stackPos) {
1335
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1336
+			},
1337
+			115 => function ($stackPos) {
1338
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1339
+			},
1340
+			116 => function ($stackPos) {
1341
+				 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1342
+			},
1343
+			117 => function ($stackPos) {
1344
+				 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1345
+			$this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
1346
+			$this->checkNamespace($this->semValue);
1347
+			},
1348
+			118 => function ($stackPos) {
1349
+				 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1350
+			$this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1351
+			$this->checkNamespace($this->semValue);
1352
+			},
1353
+			119 => function ($stackPos) {
1354
+				 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1355
+			$this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1356
+			$this->checkNamespace($this->semValue);
1357
+			},
1358
+			120 => function ($stackPos) {
1359
+				 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1360
+			},
1361
+			121 => function ($stackPos) {
1362
+				 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1363
+			},
1364
+			122 => function ($stackPos) {
1365
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1366
+			},
1367
+			123 => function ($stackPos) {
1368
+				 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1369
+			},
1370
+			124 => function ($stackPos) {
1371
+				 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
1372
+			},
1373
+			125 => function ($stackPos) {
1374
+				 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
1375
+			},
1376
+			126 => function ($stackPos) {
1377
+				 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1378
+			},
1379
+			127 => function ($stackPos) {
1380
+				 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1381
+			},
1382
+			128 => function ($stackPos) {
1383
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1384
+			},
1385
+			129 => function ($stackPos) {
1386
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1387
+			},
1388
+			130 => function ($stackPos) {
1389
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1390
+			},
1391
+			131 => function ($stackPos) {
1392
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1393
+			},
1394
+			132 => function ($stackPos) {
1395
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1396
+			},
1397
+			133 => function ($stackPos) {
1398
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1399
+			},
1400
+			134 => function ($stackPos) {
1401
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1402
+			},
1403
+			135 => function ($stackPos) {
1404
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1405
+			},
1406
+			136 => function ($stackPos) {
1407
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1408
+			},
1409
+			137 => function ($stackPos) {
1410
+				 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1411
+			},
1412
+			138 => function ($stackPos) {
1413
+				 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1414
+			},
1415
+			139 => function ($stackPos) {
1416
+				 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1417
+			},
1418
+			140 => function ($stackPos) {
1419
+				 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1420
+			},
1421
+			141 => function ($stackPos) {
1422
+				 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
1423
+			},
1424
+			142 => function ($stackPos) {
1425
+				 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
1426
+			},
1427
+			143 => function ($stackPos) {
1428
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1429
+			},
1430
+			144 => function ($stackPos) {
1431
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1432
+			},
1433
+			145 => function ($stackPos) {
1434
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1435
+			},
1436
+			146 => function ($stackPos) {
1437
+				 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1438
+			},
1439
+			147 => function ($stackPos) {
1440
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1441
+			},
1442
+			148 => function ($stackPos) {
1443
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1444
+			},
1445
+			149 => function ($stackPos) {
1446
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1447
+			},
1448
+			150 => function ($stackPos) {
1449
+				 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1450
+			},
1451
+			151 => function ($stackPos) {
1452
+				 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
1453
+			},
1454
+			152 => function ($stackPos) {
1455
+				 $this->semValue = array();
1456
+			},
1457
+			153 => function ($stackPos) {
1458
+				 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1459
+			if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1460
+			},
1461
+			154 => function ($stackPos) {
1462
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1463
+			},
1464
+			155 => function ($stackPos) {
1465
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1466
+			},
1467
+			156 => function ($stackPos) {
1468
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1469
+			},
1470
+			157 => function ($stackPos) {
1471
+				 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1472
+			},
1473
+			158 => function ($stackPos) {
1474 1474
 
1475
-        if ($this->semStack[$stackPos-(3-2)]) {
1476
-            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
1477
-        } else {
1478
-            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1479
-            if (null === $this->semValue) { $this->semValue = array(); }
1480
-        }
1475
+		if ($this->semStack[$stackPos-(3-2)]) {
1476
+			$this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
1477
+		} else {
1478
+			$startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1479
+			if (null === $this->semValue) { $this->semValue = array(); }
1480
+		}
1481 1481
 
1482
-            },
1483
-            159 => function ($stackPos) {
1484
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1485
-            },
1486
-            160 => function ($stackPos) {
1487
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
1488
-            },
1489
-            161 => function ($stackPos) {
1490
-                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1491
-            },
1492
-            162 => function ($stackPos) {
1493
-                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1494
-            },
1495
-            163 => function ($stackPos) {
1496
-                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1497
-            },
1498
-            164 => function ($stackPos) {
1499
-                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1500
-            },
1501
-            165 => function ($stackPos) {
1502
-                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1503
-            },
1504
-            166 => function ($stackPos) {
1505
-                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1506
-            },
1507
-            167 => function ($stackPos) {
1508
-                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1509
-            },
1510
-            168 => function ($stackPos) {
1511
-                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1512
-            },
1513
-            169 => function ($stackPos) {
1514
-                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1515
-            },
1516
-            170 => function ($stackPos) {
1517
-                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1518
-            },
1519
-            171 => function ($stackPos) {
1520
-                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1521
-            },
1522
-            172 => function ($stackPos) {
1482
+			},
1483
+			159 => function ($stackPos) {
1484
+				 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1485
+			},
1486
+			160 => function ($stackPos) {
1487
+				 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
1488
+			},
1489
+			161 => function ($stackPos) {
1490
+				 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1491
+			},
1492
+			162 => function ($stackPos) {
1493
+				 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1494
+			},
1495
+			163 => function ($stackPos) {
1496
+				 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1497
+			},
1498
+			164 => function ($stackPos) {
1499
+				 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1500
+			},
1501
+			165 => function ($stackPos) {
1502
+				 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1503
+			},
1504
+			166 => function ($stackPos) {
1505
+				 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1506
+			},
1507
+			167 => function ($stackPos) {
1508
+				 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1509
+			},
1510
+			168 => function ($stackPos) {
1511
+				 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1512
+			},
1513
+			169 => function ($stackPos) {
1514
+				 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1515
+			},
1516
+			170 => function ($stackPos) {
1517
+				 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1518
+			},
1519
+			171 => function ($stackPos) {
1520
+				 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1521
+			},
1522
+			172 => function ($stackPos) {
1523 1523
 
1524
-        $e = $this->semStack[$stackPos-(2-1)];
1525
-        if ($e instanceof Expr\Throw_) {
1526
-            // For backwards-compatibility reasons, convert throw in statement position into
1527
-            // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
1528
-            $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1529
-        } else {
1530
-            $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1531
-        }
1524
+		$e = $this->semStack[$stackPos-(2-1)];
1525
+		if ($e instanceof Expr\Throw_) {
1526
+			// For backwards-compatibility reasons, convert throw in statement position into
1527
+			// Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
1528
+			$this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1529
+		} else {
1530
+			$this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1531
+		}
1532 1532
 
1533
-            },
1534
-            173 => function ($stackPos) {
1535
-                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1536
-            },
1537
-            174 => function ($stackPos) {
1538
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1539
-            },
1540
-            175 => function ($stackPos) {
1541
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1542
-            },
1543
-            176 => function ($stackPos) {
1544
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1545
-            },
1546
-            177 => function ($stackPos) {
1547
-                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1548
-            },
1549
-            178 => function ($stackPos) {
1550
-                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
1551
-            },
1552
-            179 => function ($stackPos) {
1553
-                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1554
-            },
1555
-            180 => function ($stackPos) {
1556
-                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1557
-            },
1558
-            181 => function ($stackPos) {
1559
-                 $this->semValue = array(); /* means: no statement */
1560
-            },
1561
-            182 => function ($stackPos) {
1562
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1563
-            },
1564
-            183 => function ($stackPos) {
1565
-                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1566
-            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
1567
-            },
1568
-            184 => function ($stackPos) {
1569
-                 $this->semValue = array();
1570
-            },
1571
-            185 => function ($stackPos) {
1572
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1573
-            },
1574
-            186 => function ($stackPos) {
1575
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1576
-            },
1577
-            187 => function ($stackPos) {
1578
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1579
-            },
1580
-            188 => function ($stackPos) {
1581
-                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1582
-            },
1583
-            189 => function ($stackPos) {
1584
-                 $this->semValue = null;
1585
-            },
1586
-            190 => function ($stackPos) {
1587
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1588
-            },
1589
-            191 => function ($stackPos) {
1590
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1591
-            },
1592
-            192 => function ($stackPos) {
1593
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1594
-            },
1595
-            193 => function ($stackPos) {
1596
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1597
-            },
1598
-            194 => function ($stackPos) {
1599
-                 $this->semValue = false;
1600
-            },
1601
-            195 => function ($stackPos) {
1602
-                 $this->semValue = true;
1603
-            },
1604
-            196 => function ($stackPos) {
1605
-                 $this->semValue = false;
1606
-            },
1607
-            197 => function ($stackPos) {
1608
-                 $this->semValue = true;
1609
-            },
1610
-            198 => function ($stackPos) {
1611
-                 $this->semValue = false;
1612
-            },
1613
-            199 => function ($stackPos) {
1614
-                 $this->semValue = true;
1615
-            },
1616
-            200 => function ($stackPos) {
1617
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1618
-            },
1619
-            201 => function ($stackPos) {
1620
-                 $this->semValue = [];
1621
-            },
1622
-            202 => function ($stackPos) {
1623
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1624
-            },
1625
-            203 => function ($stackPos) {
1626
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1627
-            },
1628
-            204 => function ($stackPos) {
1629
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1630
-            $this->checkClass($this->semValue, $stackPos-(8-3));
1631
-            },
1632
-            205 => function ($stackPos) {
1633
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1634
-            $this->checkInterface($this->semValue, $stackPos-(7-3));
1635
-            },
1636
-            206 => function ($stackPos) {
1637
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1638
-            },
1639
-            207 => function ($stackPos) {
1640
-                 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1641
-            $this->checkEnum($this->semValue, $stackPos-(8-3));
1642
-            },
1643
-            208 => function ($stackPos) {
1644
-                 $this->semValue = null;
1645
-            },
1646
-            209 => function ($stackPos) {
1647
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1648
-            },
1649
-            210 => function ($stackPos) {
1650
-                 $this->semValue = null;
1651
-            },
1652
-            211 => function ($stackPos) {
1653
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1654
-            },
1655
-            212 => function ($stackPos) {
1656
-                 $this->semValue = 0;
1657
-            },
1658
-            213 => function ($stackPos) {
1659
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1660
-            },
1661
-            214 => function ($stackPos) {
1662
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1663
-            },
1664
-            215 => function ($stackPos) {
1665
-                 $this->checkClassModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1666
-            },
1667
-            216 => function ($stackPos) {
1668
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
1669
-            },
1670
-            217 => function ($stackPos) {
1671
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
1672
-            },
1673
-            218 => function ($stackPos) {
1674
-                 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1675
-            },
1676
-            219 => function ($stackPos) {
1677
-                 $this->semValue = null;
1678
-            },
1679
-            220 => function ($stackPos) {
1680
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1681
-            },
1682
-            221 => function ($stackPos) {
1683
-                 $this->semValue = array();
1684
-            },
1685
-            222 => function ($stackPos) {
1686
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1687
-            },
1688
-            223 => function ($stackPos) {
1689
-                 $this->semValue = array();
1690
-            },
1691
-            224 => function ($stackPos) {
1692
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1693
-            },
1694
-            225 => function ($stackPos) {
1695
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1696
-            },
1697
-            226 => function ($stackPos) {
1698
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1699
-            },
1700
-            227 => function ($stackPos) {
1701
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1702
-            },
1703
-            228 => function ($stackPos) {
1704
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1705
-            },
1706
-            229 => function ($stackPos) {
1707
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1708
-            },
1709
-            230 => function ($stackPos) {
1710
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1711
-            },
1712
-            231 => function ($stackPos) {
1713
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1714
-            },
1715
-            232 => function ($stackPos) {
1716
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1717
-            },
1718
-            233 => function ($stackPos) {
1719
-                 $this->semValue = null;
1720
-            },
1721
-            234 => function ($stackPos) {
1722
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1723
-            },
1724
-            235 => function ($stackPos) {
1725
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1726
-            },
1727
-            236 => function ($stackPos) {
1728
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1729
-            },
1730
-            237 => function ($stackPos) {
1731
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1732
-            },
1733
-            238 => function ($stackPos) {
1734
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1735
-            },
1736
-            239 => function ($stackPos) {
1737
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1738
-            },
1739
-            240 => function ($stackPos) {
1740
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
1741
-            },
1742
-            241 => function ($stackPos) {
1743
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1744
-            },
1745
-            242 => function ($stackPos) {
1746
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
1747
-            },
1748
-            243 => function ($stackPos) {
1749
-                 $this->semValue = array();
1750
-            },
1751
-            244 => function ($stackPos) {
1752
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1753
-            },
1754
-            245 => function ($stackPos) {
1755
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1756
-            },
1757
-            246 => function ($stackPos) {
1758
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1759
-            },
1760
-            247 => function ($stackPos) {
1761
-                $this->semValue = $this->semStack[$stackPos];
1762
-            },
1763
-            248 => function ($stackPos) {
1764
-                $this->semValue = $this->semStack[$stackPos];
1765
-            },
1766
-            249 => function ($stackPos) {
1767
-                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1768
-            },
1769
-            250 => function ($stackPos) {
1770
-                 $this->semValue = [];
1771
-            },
1772
-            251 => function ($stackPos) {
1773
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1774
-            },
1775
-            252 => function ($stackPos) {
1776
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1777
-            },
1778
-            253 => function ($stackPos) {
1779
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1780
-            },
1781
-            254 => function ($stackPos) {
1782
-                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1783
-            },
1784
-            255 => function ($stackPos) {
1785
-                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1786
-            },
1787
-            256 => function ($stackPos) {
1788
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1789
-            },
1790
-            257 => function ($stackPos) {
1791
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1792
-            },
1793
-            258 => function ($stackPos) {
1794
-                 $this->semValue = array();
1795
-            },
1796
-            259 => function ($stackPos) {
1797
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1798
-            },
1799
-            260 => function ($stackPos) {
1800
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1801
-            },
1802
-            261 => function ($stackPos) {
1803
-                 $this->semValue = array();
1804
-            },
1805
-            262 => function ($stackPos) {
1806
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1807
-            },
1808
-            263 => function ($stackPos) {
1809
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1810
-            },
1811
-            264 => function ($stackPos) {
1812
-                 $this->semValue = null;
1813
-            },
1814
-            265 => function ($stackPos) {
1815
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1816
-            },
1817
-            266 => function ($stackPos) {
1818
-                 $this->semValue = null;
1819
-            },
1820
-            267 => function ($stackPos) {
1821
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1822
-            },
1823
-            268 => function ($stackPos) {
1824
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1825
-            },
1826
-            269 => function ($stackPos) {
1827
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
1828
-            },
1829
-            270 => function ($stackPos) {
1830
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1831
-            },
1832
-            271 => function ($stackPos) {
1833
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1834
-            },
1835
-            272 => function ($stackPos) {
1836
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1837
-            },
1838
-            273 => function ($stackPos) {
1839
-                 $this->semValue = array();
1840
-            },
1841
-            274 => function ($stackPos) {
1842
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1843
-            },
1844
-            275 => function ($stackPos) {
1845
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1846
-            },
1847
-            276 => function ($stackPos) {
1848
-                 $this->semValue = 0;
1849
-            },
1850
-            277 => function ($stackPos) {
1851
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1852
-            },
1853
-            278 => function ($stackPos) {
1854
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
1855
-            },
1856
-            279 => function ($stackPos) {
1857
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
1858
-            },
1859
-            280 => function ($stackPos) {
1860
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
1861
-            },
1862
-            281 => function ($stackPos) {
1863
-                 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1864
-            },
1865
-            282 => function ($stackPos) {
1866
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1867
-            $this->checkParam($this->semValue);
1868
-            },
1869
-            283 => function ($stackPos) {
1870
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
1871
-            $this->checkParam($this->semValue);
1872
-            },
1873
-            284 => function ($stackPos) {
1874
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1875
-            },
1876
-            285 => function ($stackPos) {
1877
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1878
-            },
1879
-            286 => function ($stackPos) {
1880
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1881
-            },
1882
-            287 => function ($stackPos) {
1883
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1884
-            },
1885
-            288 => function ($stackPos) {
1886
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1887
-            },
1888
-            289 => function ($stackPos) {
1889
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1890
-            },
1891
-            290 => function ($stackPos) {
1892
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1893
-            },
1894
-            291 => function ($stackPos) {
1895
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
1896
-            },
1897
-            292 => function ($stackPos) {
1898
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1899
-            },
1900
-            293 => function ($stackPos) {
1901
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1902
-            },
1903
-            294 => function ($stackPos) {
1904
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1905
-            },
1906
-            295 => function ($stackPos) {
1907
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1908
-            },
1909
-            296 => function ($stackPos) {
1910
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1911
-            },
1912
-            297 => function ($stackPos) {
1913
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1914
-            },
1915
-            298 => function ($stackPos) {
1916
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1917
-            },
1918
-            299 => function ($stackPos) {
1919
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1920
-            },
1921
-            300 => function ($stackPos) {
1922
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1923
-            },
1924
-            301 => function ($stackPos) {
1925
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1926
-            },
1927
-            302 => function ($stackPos) {
1928
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1929
-            },
1930
-            303 => function ($stackPos) {
1931
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1932
-            },
1933
-            304 => function ($stackPos) {
1934
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1935
-            },
1936
-            305 => function ($stackPos) {
1937
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1938
-            },
1939
-            306 => function ($stackPos) {
1940
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1941
-            },
1942
-            307 => function ($stackPos) {
1943
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1944
-            },
1945
-            308 => function ($stackPos) {
1946
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1947
-            },
1948
-            309 => function ($stackPos) {
1949
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1950
-            },
1951
-            310 => function ($stackPos) {
1952
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1953
-            },
1954
-            311 => function ($stackPos) {
1955
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1956
-            },
1957
-            312 => function ($stackPos) {
1958
-                 $this->semValue = null;
1959
-            },
1960
-            313 => function ($stackPos) {
1961
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1962
-            },
1963
-            314 => function ($stackPos) {
1964
-                 $this->semValue = null;
1965
-            },
1966
-            315 => function ($stackPos) {
1967
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1968
-            },
1969
-            316 => function ($stackPos) {
1970
-                 $this->semValue = null;
1971
-            },
1972
-            317 => function ($stackPos) {
1973
-                 $this->semValue = array();
1974
-            },
1975
-            318 => function ($stackPos) {
1976
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1977
-            },
1978
-            319 => function ($stackPos) {
1979
-                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
1980
-            },
1981
-            320 => function ($stackPos) {
1982
-                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1983
-            },
1984
-            321 => function ($stackPos) {
1985
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1986
-            },
1987
-            322 => function ($stackPos) {
1988
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1989
-            },
1990
-            323 => function ($stackPos) {
1991
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1992
-            },
1993
-            324 => function ($stackPos) {
1994
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1995
-            },
1996
-            325 => function ($stackPos) {
1997
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1998
-            },
1999
-            326 => function ($stackPos) {
2000
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
2001
-            },
2002
-            327 => function ($stackPos) {
2003
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2004
-            },
2005
-            328 => function ($stackPos) {
2006
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2007
-            },
2008
-            329 => function ($stackPos) {
2009
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2010
-            },
2011
-            330 => function ($stackPos) {
2012
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2013
-            },
2014
-            331 => function ($stackPos) {
2015
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2016
-            },
2017
-            332 => function ($stackPos) {
2018
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2019
-            },
2020
-            333 => function ($stackPos) {
2021
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2022
-            },
2023
-            334 => function ($stackPos) {
2024
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2025
-            },
2026
-            335 => function ($stackPos) {
2027
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2028
-            },
2029
-            336 => function ($stackPos) {
2030
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
2031
-            },
2032
-            337 => function ($stackPos) {
2033
-                 $this->semValue = array();
2034
-            },
2035
-            338 => function ($stackPos) {
2036
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
2037
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
2038
-            },
2039
-            339 => function ($stackPos) {
2040
-                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
2041
-            $this->checkProperty($this->semValue, $stackPos-(5-2));
2042
-            },
2043
-            340 => function ($stackPos) {
2044
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
2045
-            $this->checkClassConst($this->semValue, $stackPos-(5-2));
2046
-            },
2047
-            341 => function ($stackPos) {
2048
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2049
-            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
2050
-            },
2051
-            342 => function ($stackPos) {
2052
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2053
-            },
2054
-            343 => function ($stackPos) {
2055
-                 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2056
-            },
2057
-            344 => function ($stackPos) {
2058
-                 $this->semValue = null; /* will be skipped */
2059
-            },
2060
-            345 => function ($stackPos) {
2061
-                 $this->semValue = array();
2062
-            },
2063
-            346 => function ($stackPos) {
2064
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2065
-            },
2066
-            347 => function ($stackPos) {
2067
-                 $this->semValue = array();
2068
-            },
2069
-            348 => function ($stackPos) {
2070
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2071
-            },
2072
-            349 => function ($stackPos) {
2073
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2074
-            },
2075
-            350 => function ($stackPos) {
2076
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2077
-            },
2078
-            351 => function ($stackPos) {
2079
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2080
-            },
2081
-            352 => function ($stackPos) {
2082
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2083
-            },
2084
-            353 => function ($stackPos) {
2085
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2086
-            },
2087
-            354 => function ($stackPos) {
2088
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
2089
-            },
2090
-            355 => function ($stackPos) {
2091
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2092
-            },
2093
-            356 => function ($stackPos) {
2094
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
2095
-            },
2096
-            357 => function ($stackPos) {
2097
-                 $this->semValue = null;
2098
-            },
2099
-            358 => function ($stackPos) {
2100
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2101
-            },
2102
-            359 => function ($stackPos) {
2103
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2104
-            },
2105
-            360 => function ($stackPos) {
2106
-                 $this->semValue = 0;
2107
-            },
2108
-            361 => function ($stackPos) {
2109
-                 $this->semValue = 0;
2110
-            },
2111
-            362 => function ($stackPos) {
2112
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2113
-            },
2114
-            363 => function ($stackPos) {
2115
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2116
-            },
2117
-            364 => function ($stackPos) {
2118
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
2119
-            },
2120
-            365 => function ($stackPos) {
2121
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
2122
-            },
2123
-            366 => function ($stackPos) {
2124
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
2125
-            },
2126
-            367 => function ($stackPos) {
2127
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
2128
-            },
2129
-            368 => function ($stackPos) {
2130
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
2131
-            },
2132
-            369 => function ($stackPos) {
2133
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
2134
-            },
2135
-            370 => function ($stackPos) {
2136
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
2137
-            },
2138
-            371 => function ($stackPos) {
2139
-                 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
2140
-            },
2141
-            372 => function ($stackPos) {
2142
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2143
-            },
2144
-            373 => function ($stackPos) {
2145
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2146
-            },
2147
-            374 => function ($stackPos) {
2148
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2149
-            },
2150
-            375 => function ($stackPos) {
2151
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2152
-            },
2153
-            376 => function ($stackPos) {
2154
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2155
-            },
2156
-            377 => function ($stackPos) {
2157
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2158
-            },
2159
-            378 => function ($stackPos) {
2160
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2161
-            },
2162
-            379 => function ($stackPos) {
2163
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2164
-            },
2165
-            380 => function ($stackPos) {
2166
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2167
-            },
2168
-            381 => function ($stackPos) {
2169
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2170
-            },
2171
-            382 => function ($stackPos) {
2172
-                 $this->semValue = array();
2173
-            },
2174
-            383 => function ($stackPos) {
2175
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2176
-            },
2177
-            384 => function ($stackPos) {
2178
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2179
-            },
2180
-            385 => function ($stackPos) {
2181
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2182
-            },
2183
-            386 => function ($stackPos) {
2184
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2185
-            },
2186
-            387 => function ($stackPos) {
2187
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2188
-            },
2189
-            388 => function ($stackPos) {
2190
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2191
-            },
2192
-            389 => function ($stackPos) {
2193
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2194
-            },
2195
-            390 => function ($stackPos) {
2196
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2197
-            },
2198
-            391 => function ($stackPos) {
2199
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2200
-            },
2201
-            392 => function ($stackPos) {
2202
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2203
-            },
2204
-            393 => function ($stackPos) {
2205
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2206
-            },
2207
-            394 => function ($stackPos) {
2208
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2209
-            },
2210
-            395 => function ($stackPos) {
2211
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2212
-            },
2213
-            396 => function ($stackPos) {
2214
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2215
-            },
2216
-            397 => function ($stackPos) {
2217
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2218
-            },
2219
-            398 => function ($stackPos) {
2220
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2221
-            },
2222
-            399 => function ($stackPos) {
2223
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2224
-            },
2225
-            400 => function ($stackPos) {
2226
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2227
-            },
2228
-            401 => function ($stackPos) {
2229
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2230
-            },
2231
-            402 => function ($stackPos) {
2232
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2233
-            },
2234
-            403 => function ($stackPos) {
2235
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2236
-            },
2237
-            404 => function ($stackPos) {
2238
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2239
-            },
2240
-            405 => function ($stackPos) {
2241
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2242
-            },
2243
-            406 => function ($stackPos) {
2244
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2245
-            },
2246
-            407 => function ($stackPos) {
2247
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2248
-            },
2249
-            408 => function ($stackPos) {
2250
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2251
-            },
2252
-            409 => function ($stackPos) {
2253
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2254
-            },
2255
-            410 => function ($stackPos) {
2256
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2257
-            },
2258
-            411 => function ($stackPos) {
2259
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2260
-            },
2261
-            412 => function ($stackPos) {
2262
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2263
-            },
2264
-            413 => function ($stackPos) {
2265
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2266
-            },
2267
-            414 => function ($stackPos) {
2268
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2269
-            },
2270
-            415 => function ($stackPos) {
2271
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2272
-            },
2273
-            416 => function ($stackPos) {
2274
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2275
-            },
2276
-            417 => function ($stackPos) {
2277
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2278
-            },
2279
-            418 => function ($stackPos) {
2280
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2281
-            },
2282
-            419 => function ($stackPos) {
2283
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2284
-            },
2285
-            420 => function ($stackPos) {
2286
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2287
-            },
2288
-            421 => function ($stackPos) {
2289
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2290
-            },
2291
-            422 => function ($stackPos) {
2292
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2293
-            },
2294
-            423 => function ($stackPos) {
2295
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2296
-            },
2297
-            424 => function ($stackPos) {
2298
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2299
-            },
2300
-            425 => function ($stackPos) {
2301
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2302
-            },
2303
-            426 => function ($stackPos) {
2304
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2305
-            },
2306
-            427 => function ($stackPos) {
2307
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2308
-            },
2309
-            428 => function ($stackPos) {
2310
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2311
-            },
2312
-            429 => function ($stackPos) {
2313
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2314
-            },
2315
-            430 => function ($stackPos) {
2316
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2317
-            },
2318
-            431 => function ($stackPos) {
2319
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2320
-            },
2321
-            432 => function ($stackPos) {
2322
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2323
-            },
2324
-            433 => function ($stackPos) {
2325
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2326
-            },
2327
-            434 => function ($stackPos) {
2328
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2329
-            },
2330
-            435 => function ($stackPos) {
2331
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2332
-            },
2333
-            436 => function ($stackPos) {
2334
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2335
-            },
2336
-            437 => function ($stackPos) {
2337
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2338
-            },
2339
-            438 => function ($stackPos) {
2340
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2341
-            },
2342
-            439 => function ($stackPos) {
2343
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2344
-            },
2345
-            440 => function ($stackPos) {
2346
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2347
-            },
2348
-            441 => function ($stackPos) {
2349
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2350
-            },
2351
-            442 => function ($stackPos) {
2352
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2353
-            },
2354
-            443 => function ($stackPos) {
2355
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2356
-            },
2357
-            444 => function ($stackPos) {
2358
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2359
-            },
2360
-            445 => function ($stackPos) {
2361
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2362
-            },
2363
-            446 => function ($stackPos) {
2364
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2365
-            },
2366
-            447 => function ($stackPos) {
2367
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2368
-            },
2369
-            448 => function ($stackPos) {
2370
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2371
-            },
2372
-            449 => function ($stackPos) {
2373
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2374
-            },
2375
-            450 => function ($stackPos) {
2376
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2377
-            },
2378
-            451 => function ($stackPos) {
2379
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2380
-            },
2381
-            452 => function ($stackPos) {
2382
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2383
-            },
2384
-            453 => function ($stackPos) {
2385
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2386
-            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
2387
-            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
2388
-            },
2389
-            454 => function ($stackPos) {
2390
-                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2391
-            },
2392
-            455 => function ($stackPos) {
2393
-                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2394
-            },
2395
-            456 => function ($stackPos) {
2396
-                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2397
-            },
2398
-            457 => function ($stackPos) {
2399
-                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2400
-            },
2401
-            458 => function ($stackPos) {
2402
-                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2403
-            },
2404
-            459 => function ($stackPos) {
2405
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2406
-            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
2407
-            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
2408
-            },
2409
-            460 => function ($stackPos) {
2410
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2411
-            },
2412
-            461 => function ($stackPos) {
2413
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2414
-            },
2415
-            462 => function ($stackPos) {
2416
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2417
-            },
2418
-            463 => function ($stackPos) {
2419
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2420
-            },
2421
-            464 => function ($stackPos) {
2422
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2423
-            },
2424
-            465 => function ($stackPos) {
2425
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2426
-            },
2427
-            466 => function ($stackPos) {
2428
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2429
-            },
2430
-            467 => function ($stackPos) {
2431
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2432
-            },
2433
-            468 => function ($stackPos) {
2434
-                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2435
-            },
2436
-            469 => function ($stackPos) {
2437
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2438
-            },
2439
-            470 => function ($stackPos) {
2440
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2441
-            },
2442
-            471 => function ($stackPos) {
2443
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2444
-            },
2445
-            472 => function ($stackPos) {
2446
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2447
-            },
2448
-            473 => function ($stackPos) {
2449
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2450
-            },
2451
-            474 => function ($stackPos) {
2452
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2453
-            },
2454
-            475 => function ($stackPos) {
2455
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2456
-            },
2457
-            476 => function ($stackPos) {
2458
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2459
-            },
2460
-            477 => function ($stackPos) {
2461
-                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
2462
-            $this->checkClass($this->semValue[0], -1);
2463
-            },
2464
-            478 => function ($stackPos) {
2465
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2466
-            },
2467
-            479 => function ($stackPos) {
2468
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2469
-            },
2470
-            480 => function ($stackPos) {
2471
-                 $this->semValue = array();
2472
-            },
2473
-            481 => function ($stackPos) {
2474
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
2475
-            },
2476
-            482 => function ($stackPos) {
2477
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2478
-            },
2479
-            483 => function ($stackPos) {
2480
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2481
-            },
2482
-            484 => function ($stackPos) {
2483
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2484
-            },
2485
-            485 => function ($stackPos) {
2486
-                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2487
-            },
2488
-            486 => function ($stackPos) {
2489
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2490
-            },
2491
-            487 => function ($stackPos) {
2492
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2493
-            },
2494
-            488 => function ($stackPos) {
2495
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2496
-            },
2497
-            489 => function ($stackPos) {
2498
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2499
-            },
2500
-            490 => function ($stackPos) {
2501
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2502
-            },
2503
-            491 => function ($stackPos) {
2504
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2505
-            },
2506
-            492 => function ($stackPos) {
2507
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2508
-            },
2509
-            493 => function ($stackPos) {
2510
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2511
-            },
2512
-            494 => function ($stackPos) {
2513
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2514
-            },
2515
-            495 => function ($stackPos) {
2516
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2517
-            },
2518
-            496 => function ($stackPos) {
2519
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2520
-            },
2521
-            497 => function ($stackPos) {
2522
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2523
-            },
2524
-            498 => function ($stackPos) {
2525
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2526
-            },
2527
-            499 => function ($stackPos) {
2528
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2529
-            },
2530
-            500 => function ($stackPos) {
2531
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2532
-            },
2533
-            501 => function ($stackPos) {
2534
-                 $this->semValue = null;
2535
-            },
2536
-            502 => function ($stackPos) {
2537
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2538
-            },
2539
-            503 => function ($stackPos) {
2540
-                 $this->semValue = array();
2541
-            },
2542
-            504 => function ($stackPos) {
2543
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
2544
-            },
2545
-            505 => function ($stackPos) {
2546
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
2547
-            },
2548
-            506 => function ($stackPos) {
2549
-                 $this->semValue = array();
2550
-            },
2551
-            507 => function ($stackPos) {
2552
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2553
-            },
2554
-            508 => function ($stackPos) {
2555
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2556
-            },
2557
-            509 => function ($stackPos) {
2558
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2559
-            },
2560
-            510 => function ($stackPos) {
2561
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2562
-            },
2563
-            511 => function ($stackPos) {
2564
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2565
-            },
2566
-            512 => function ($stackPos) {
2567
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2568
-            },
2569
-            513 => function ($stackPos) {
2570
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2571
-            },
2572
-            514 => function ($stackPos) {
2573
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2574
-            },
2575
-            515 => function ($stackPos) {
2576
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2577
-            },
2578
-            516 => function ($stackPos) {
2579
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2580
-            },
2581
-            517 => function ($stackPos) {
2582
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2583
-            },
2584
-            518 => function ($stackPos) {
2585
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
2586
-            },
2587
-            519 => function ($stackPos) {
2588
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
2589
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
2590
-            },
2591
-            520 => function ($stackPos) {
2592
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
2593
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
2594
-            },
2595
-            521 => function ($stackPos) {
2596
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2597
-            },
2598
-            522 => function ($stackPos) {
2599
-                 $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2600
-            },
2601
-            523 => function ($stackPos) {
2602
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
2603
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
2604
-            },
2605
-            524 => function ($stackPos) {
2606
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2607
-            },
2608
-            525 => function ($stackPos) {
2609
-                 $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2610
-            },
2611
-            526 => function ($stackPos) {
2612
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2613
-            },
2614
-            527 => function ($stackPos) {
2615
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2616
-            },
2617
-            528 => function ($stackPos) {
2618
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2619
-            },
2620
-            529 => function ($stackPos) {
2621
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2622
-            },
2623
-            530 => function ($stackPos) {
2624
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
2625
-            },
2626
-            531 => function ($stackPos) {
2627
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2628
-            },
2629
-            532 => function ($stackPos) {
2630
-                 $this->semValue = null;
2631
-            },
2632
-            533 => function ($stackPos) {
2633
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2634
-            },
2635
-            534 => function ($stackPos) {
2636
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2637
-            },
2638
-            535 => function ($stackPos) {
2639
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2640
-            },
2641
-            536 => function ($stackPos) {
2642
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2643
-            },
2644
-            537 => function ($stackPos) {
2645
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2646
-            },
2647
-            538 => function ($stackPos) {
2648
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2649
-            },
2650
-            539 => function ($stackPos) {
2651
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2652
-            },
2653
-            540 => function ($stackPos) {
2654
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2655
-            },
2656
-            541 => function ($stackPos) {
2657
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2658
-            },
2659
-            542 => function ($stackPos) {
2660
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2661
-            },
2662
-            543 => function ($stackPos) {
2663
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2664
-            },
2665
-            544 => function ($stackPos) {
2666
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2667
-            },
2668
-            545 => function ($stackPos) {
2669
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2670
-            },
2671
-            546 => function ($stackPos) {
2672
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2673
-            },
2674
-            547 => function ($stackPos) {
2675
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2676
-            },
2677
-            548 => function ($stackPos) {
2678
-                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2679
-            },
2680
-            549 => function ($stackPos) {
2681
-                 $this->semValue = null;
2682
-            },
2683
-            550 => function ($stackPos) {
2684
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2685
-            },
2686
-            551 => function ($stackPos) {
2687
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2688
-            },
2689
-            552 => function ($stackPos) {
2690
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2691
-            },
2692
-            553 => function ($stackPos) {
2693
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2694
-            },
2695
-            554 => function ($stackPos) {
2696
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2697
-            },
2698
-            555 => function ($stackPos) {
2699
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2700
-            },
2701
-            556 => function ($stackPos) {
2702
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2703
-            },
2704
-            557 => function ($stackPos) {
2705
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2706
-            },
2707
-            558 => function ($stackPos) {
2708
-                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
2709
-            },
2710
-            559 => function ($stackPos) {
2711
-                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
2712
-            },
2713
-            560 => function ($stackPos) {
2714
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2715
-            },
2716
-            561 => function ($stackPos) {
2717
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2718
-            },
2719
-            562 => function ($stackPos) {
2720
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2721
-            },
2722
-            563 => function ($stackPos) {
2723
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2724
-            },
2725
-            564 => function ($stackPos) {
2726
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2727
-            },
2728
-            565 => function ($stackPos) {
2729
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2730
-            },
2731
-            566 => function ($stackPos) {
2732
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2733
-            },
2734
-            567 => function ($stackPos) {
2735
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2736
-            },
2737
-            568 => function ($stackPos) {
2738
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2739
-            },
2740
-            569 => function ($stackPos) {
2741
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2742
-            },
2743
-            570 => function ($stackPos) {
2744
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2745
-            },
2746
-            571 => function ($stackPos) {
2747
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2748
-            },
2749
-            572 => function ($stackPos) {
2750
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2751
-            },
2752
-            573 => function ($stackPos) {
2753
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2754
-            },
2755
-            574 => function ($stackPos) {
2756
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2757
-            },
2758
-            575 => function ($stackPos) {
2759
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2760
-            },
2761
-            576 => function ($stackPos) {
2762
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
2763
-            },
2764
-            577 => function ($stackPos) {
2765
-                $this->semValue = $this->semStack[$stackPos];
2766
-            },
2767
-            578 => function ($stackPos) {
2768
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
2769
-            },
2770
-            579 => function ($stackPos) {
2771
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2772
-            },
2773
-            580 => function ($stackPos) {
2774
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2775
-            },
2776
-            581 => function ($stackPos) {
2777
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2778
-            },
2779
-            582 => function ($stackPos) {
2780
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2781
-            },
2782
-            583 => function ($stackPos) {
2783
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2784
-            },
2785
-            584 => function ($stackPos) {
2786
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2787
-            },
2788
-            585 => function ($stackPos) {
2789
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2790
-            },
2791
-            586 => function ($stackPos) {
2792
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2793
-            },
2794
-            587 => function ($stackPos) {
2795
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2796
-            },
2797
-            588 => function ($stackPos) {
2798
-                 $this->semValue = null;
2799
-            },
2800
-            589 => function ($stackPos) {
2801
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2802
-            },
2803
-            590 => function ($stackPos) {
2804
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2805
-            },
2806
-            591 => function ($stackPos) {
2807
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2808
-            },
2809
-            592 => function ($stackPos) {
2810
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
2811
-            },
2812
-            593 => function ($stackPos) {
2813
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2814
-            },
2815
-            594 => function ($stackPos) {
2816
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2817
-            },
2818
-            595 => function ($stackPos) {
2819
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2820
-            },
2821
-            596 => function ($stackPos) {
2822
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2823
-            },
2824
-            597 => function ($stackPos) {
2825
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2826
-            },
2827
-            598 => function ($stackPos) {
2828
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2829
-            },
2830
-            599 => function ($stackPos) {
2831
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2832
-            },
2833
-            600 => function ($stackPos) {
2834
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2835
-            },
2836
-            601 => function ($stackPos) {
2837
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
2838
-            },
2839
-            602 => function ($stackPos) {
2840
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2841
-            },
2842
-            603 => function ($stackPos) {
2843
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2844
-            },
2845
-            604 => function ($stackPos) {
2846
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2847
-            },
2848
-            605 => function ($stackPos) {
2849
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2850
-            },
2851
-            606 => function ($stackPos) {
2852
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2853
-            },
2854
-        ];
2855
-    }
1533
+			},
1534
+			173 => function ($stackPos) {
1535
+				 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1536
+			},
1537
+			174 => function ($stackPos) {
1538
+				 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1539
+			},
1540
+			175 => function ($stackPos) {
1541
+				 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1542
+			},
1543
+			176 => function ($stackPos) {
1544
+				 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1545
+			},
1546
+			177 => function ($stackPos) {
1547
+				 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1548
+			},
1549
+			178 => function ($stackPos) {
1550
+				 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
1551
+			},
1552
+			179 => function ($stackPos) {
1553
+				 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1554
+			},
1555
+			180 => function ($stackPos) {
1556
+				 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1557
+			},
1558
+			181 => function ($stackPos) {
1559
+				 $this->semValue = array(); /* means: no statement */
1560
+			},
1561
+			182 => function ($stackPos) {
1562
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1563
+			},
1564
+			183 => function ($stackPos) {
1565
+				 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1566
+			if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
1567
+			},
1568
+			184 => function ($stackPos) {
1569
+				 $this->semValue = array();
1570
+			},
1571
+			185 => function ($stackPos) {
1572
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1573
+			},
1574
+			186 => function ($stackPos) {
1575
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1576
+			},
1577
+			187 => function ($stackPos) {
1578
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1579
+			},
1580
+			188 => function ($stackPos) {
1581
+				 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1582
+			},
1583
+			189 => function ($stackPos) {
1584
+				 $this->semValue = null;
1585
+			},
1586
+			190 => function ($stackPos) {
1587
+				 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1588
+			},
1589
+			191 => function ($stackPos) {
1590
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1591
+			},
1592
+			192 => function ($stackPos) {
1593
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1594
+			},
1595
+			193 => function ($stackPos) {
1596
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1597
+			},
1598
+			194 => function ($stackPos) {
1599
+				 $this->semValue = false;
1600
+			},
1601
+			195 => function ($stackPos) {
1602
+				 $this->semValue = true;
1603
+			},
1604
+			196 => function ($stackPos) {
1605
+				 $this->semValue = false;
1606
+			},
1607
+			197 => function ($stackPos) {
1608
+				 $this->semValue = true;
1609
+			},
1610
+			198 => function ($stackPos) {
1611
+				 $this->semValue = false;
1612
+			},
1613
+			199 => function ($stackPos) {
1614
+				 $this->semValue = true;
1615
+			},
1616
+			200 => function ($stackPos) {
1617
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
1618
+			},
1619
+			201 => function ($stackPos) {
1620
+				 $this->semValue = [];
1621
+			},
1622
+			202 => function ($stackPos) {
1623
+				 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1624
+			},
1625
+			203 => function ($stackPos) {
1626
+				 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1627
+			},
1628
+			204 => function ($stackPos) {
1629
+				 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1630
+			$this->checkClass($this->semValue, $stackPos-(8-3));
1631
+			},
1632
+			205 => function ($stackPos) {
1633
+				 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1634
+			$this->checkInterface($this->semValue, $stackPos-(7-3));
1635
+			},
1636
+			206 => function ($stackPos) {
1637
+				 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1638
+			},
1639
+			207 => function ($stackPos) {
1640
+				 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1641
+			$this->checkEnum($this->semValue, $stackPos-(8-3));
1642
+			},
1643
+			208 => function ($stackPos) {
1644
+				 $this->semValue = null;
1645
+			},
1646
+			209 => function ($stackPos) {
1647
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1648
+			},
1649
+			210 => function ($stackPos) {
1650
+				 $this->semValue = null;
1651
+			},
1652
+			211 => function ($stackPos) {
1653
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1654
+			},
1655
+			212 => function ($stackPos) {
1656
+				 $this->semValue = 0;
1657
+			},
1658
+			213 => function ($stackPos) {
1659
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1660
+			},
1661
+			214 => function ($stackPos) {
1662
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1663
+			},
1664
+			215 => function ($stackPos) {
1665
+				 $this->checkClassModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1666
+			},
1667
+			216 => function ($stackPos) {
1668
+				 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
1669
+			},
1670
+			217 => function ($stackPos) {
1671
+				 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
1672
+			},
1673
+			218 => function ($stackPos) {
1674
+				 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1675
+			},
1676
+			219 => function ($stackPos) {
1677
+				 $this->semValue = null;
1678
+			},
1679
+			220 => function ($stackPos) {
1680
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1681
+			},
1682
+			221 => function ($stackPos) {
1683
+				 $this->semValue = array();
1684
+			},
1685
+			222 => function ($stackPos) {
1686
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1687
+			},
1688
+			223 => function ($stackPos) {
1689
+				 $this->semValue = array();
1690
+			},
1691
+			224 => function ($stackPos) {
1692
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1693
+			},
1694
+			225 => function ($stackPos) {
1695
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1696
+			},
1697
+			226 => function ($stackPos) {
1698
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1699
+			},
1700
+			227 => function ($stackPos) {
1701
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1702
+			},
1703
+			228 => function ($stackPos) {
1704
+				 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1705
+			},
1706
+			229 => function ($stackPos) {
1707
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1708
+			},
1709
+			230 => function ($stackPos) {
1710
+				 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1711
+			},
1712
+			231 => function ($stackPos) {
1713
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1714
+			},
1715
+			232 => function ($stackPos) {
1716
+				 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1717
+			},
1718
+			233 => function ($stackPos) {
1719
+				 $this->semValue = null;
1720
+			},
1721
+			234 => function ($stackPos) {
1722
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1723
+			},
1724
+			235 => function ($stackPos) {
1725
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1726
+			},
1727
+			236 => function ($stackPos) {
1728
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1729
+			},
1730
+			237 => function ($stackPos) {
1731
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1732
+			},
1733
+			238 => function ($stackPos) {
1734
+				 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1735
+			},
1736
+			239 => function ($stackPos) {
1737
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
1738
+			},
1739
+			240 => function ($stackPos) {
1740
+				 $this->semValue = $this->semStack[$stackPos-(4-3)];
1741
+			},
1742
+			241 => function ($stackPos) {
1743
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1744
+			},
1745
+			242 => function ($stackPos) {
1746
+				 $this->semValue = $this->semStack[$stackPos-(5-3)];
1747
+			},
1748
+			243 => function ($stackPos) {
1749
+				 $this->semValue = array();
1750
+			},
1751
+			244 => function ($stackPos) {
1752
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1753
+			},
1754
+			245 => function ($stackPos) {
1755
+				 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1756
+			},
1757
+			246 => function ($stackPos) {
1758
+				 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1759
+			},
1760
+			247 => function ($stackPos) {
1761
+				$this->semValue = $this->semStack[$stackPos];
1762
+			},
1763
+			248 => function ($stackPos) {
1764
+				$this->semValue = $this->semStack[$stackPos];
1765
+			},
1766
+			249 => function ($stackPos) {
1767
+				 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1768
+			},
1769
+			250 => function ($stackPos) {
1770
+				 $this->semValue = [];
1771
+			},
1772
+			251 => function ($stackPos) {
1773
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1774
+			},
1775
+			252 => function ($stackPos) {
1776
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1777
+			},
1778
+			253 => function ($stackPos) {
1779
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1780
+			},
1781
+			254 => function ($stackPos) {
1782
+				 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1783
+			},
1784
+			255 => function ($stackPos) {
1785
+				 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1786
+			},
1787
+			256 => function ($stackPos) {
1788
+				 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1789
+			},
1790
+			257 => function ($stackPos) {
1791
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1792
+			},
1793
+			258 => function ($stackPos) {
1794
+				 $this->semValue = array();
1795
+			},
1796
+			259 => function ($stackPos) {
1797
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1798
+			},
1799
+			260 => function ($stackPos) {
1800
+				 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1801
+			},
1802
+			261 => function ($stackPos) {
1803
+				 $this->semValue = array();
1804
+			},
1805
+			262 => function ($stackPos) {
1806
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1807
+			},
1808
+			263 => function ($stackPos) {
1809
+				 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1810
+			},
1811
+			264 => function ($stackPos) {
1812
+				 $this->semValue = null;
1813
+			},
1814
+			265 => function ($stackPos) {
1815
+				 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1816
+			},
1817
+			266 => function ($stackPos) {
1818
+				 $this->semValue = null;
1819
+			},
1820
+			267 => function ($stackPos) {
1821
+				 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1822
+			},
1823
+			268 => function ($stackPos) {
1824
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1825
+			},
1826
+			269 => function ($stackPos) {
1827
+				 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
1828
+			},
1829
+			270 => function ($stackPos) {
1830
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1831
+			},
1832
+			271 => function ($stackPos) {
1833
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1834
+			},
1835
+			272 => function ($stackPos) {
1836
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
1837
+			},
1838
+			273 => function ($stackPos) {
1839
+				 $this->semValue = array();
1840
+			},
1841
+			274 => function ($stackPos) {
1842
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1843
+			},
1844
+			275 => function ($stackPos) {
1845
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1846
+			},
1847
+			276 => function ($stackPos) {
1848
+				 $this->semValue = 0;
1849
+			},
1850
+			277 => function ($stackPos) {
1851
+				 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1852
+			},
1853
+			278 => function ($stackPos) {
1854
+				 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
1855
+			},
1856
+			279 => function ($stackPos) {
1857
+				 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
1858
+			},
1859
+			280 => function ($stackPos) {
1860
+				 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
1861
+			},
1862
+			281 => function ($stackPos) {
1863
+				 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1864
+			},
1865
+			282 => function ($stackPos) {
1866
+				 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1867
+			$this->checkParam($this->semValue);
1868
+			},
1869
+			283 => function ($stackPos) {
1870
+				 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
1871
+			$this->checkParam($this->semValue);
1872
+			},
1873
+			284 => function ($stackPos) {
1874
+				 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1875
+			},
1876
+			285 => function ($stackPos) {
1877
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1878
+			},
1879
+			286 => function ($stackPos) {
1880
+				 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1881
+			},
1882
+			287 => function ($stackPos) {
1883
+				 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1884
+			},
1885
+			288 => function ($stackPos) {
1886
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1887
+			},
1888
+			289 => function ($stackPos) {
1889
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1890
+			},
1891
+			290 => function ($stackPos) {
1892
+				 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1893
+			},
1894
+			291 => function ($stackPos) {
1895
+				 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
1896
+			},
1897
+			292 => function ($stackPos) {
1898
+				 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1899
+			},
1900
+			293 => function ($stackPos) {
1901
+				 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1902
+			},
1903
+			294 => function ($stackPos) {
1904
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1905
+			},
1906
+			295 => function ($stackPos) {
1907
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
1908
+			},
1909
+			296 => function ($stackPos) {
1910
+				 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1911
+			},
1912
+			297 => function ($stackPos) {
1913
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1914
+			},
1915
+			298 => function ($stackPos) {
1916
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1917
+			},
1918
+			299 => function ($stackPos) {
1919
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
1920
+			},
1921
+			300 => function ($stackPos) {
1922
+				 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1923
+			},
1924
+			301 => function ($stackPos) {
1925
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1926
+			},
1927
+			302 => function ($stackPos) {
1928
+				 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1929
+			},
1930
+			303 => function ($stackPos) {
1931
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1932
+			},
1933
+			304 => function ($stackPos) {
1934
+				 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1935
+			},
1936
+			305 => function ($stackPos) {
1937
+				 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1938
+			},
1939
+			306 => function ($stackPos) {
1940
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1941
+			},
1942
+			307 => function ($stackPos) {
1943
+				 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1944
+			},
1945
+			308 => function ($stackPos) {
1946
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1947
+			},
1948
+			309 => function ($stackPos) {
1949
+				 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1950
+			},
1951
+			310 => function ($stackPos) {
1952
+				 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1953
+			},
1954
+			311 => function ($stackPos) {
1955
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1956
+			},
1957
+			312 => function ($stackPos) {
1958
+				 $this->semValue = null;
1959
+			},
1960
+			313 => function ($stackPos) {
1961
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
1962
+			},
1963
+			314 => function ($stackPos) {
1964
+				 $this->semValue = null;
1965
+			},
1966
+			315 => function ($stackPos) {
1967
+				 $this->semValue = $this->semStack[$stackPos-(2-2)];
1968
+			},
1969
+			316 => function ($stackPos) {
1970
+				 $this->semValue = null;
1971
+			},
1972
+			317 => function ($stackPos) {
1973
+				 $this->semValue = array();
1974
+			},
1975
+			318 => function ($stackPos) {
1976
+				 $this->semValue = $this->semStack[$stackPos-(4-2)];
1977
+			},
1978
+			319 => function ($stackPos) {
1979
+				 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
1980
+			},
1981
+			320 => function ($stackPos) {
1982
+				 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1983
+			},
1984
+			321 => function ($stackPos) {
1985
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1986
+			},
1987
+			322 => function ($stackPos) {
1988
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1989
+			},
1990
+			323 => function ($stackPos) {
1991
+				 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1992
+			},
1993
+			324 => function ($stackPos) {
1994
+				 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1995
+			},
1996
+			325 => function ($stackPos) {
1997
+				 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1998
+			},
1999
+			326 => function ($stackPos) {
2000
+				 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
2001
+			},
2002
+			327 => function ($stackPos) {
2003
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2004
+			},
2005
+			328 => function ($stackPos) {
2006
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2007
+			},
2008
+			329 => function ($stackPos) {
2009
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2010
+			},
2011
+			330 => function ($stackPos) {
2012
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2013
+			},
2014
+			331 => function ($stackPos) {
2015
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2016
+			},
2017
+			332 => function ($stackPos) {
2018
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2019
+			},
2020
+			333 => function ($stackPos) {
2021
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2022
+			},
2023
+			334 => function ($stackPos) {
2024
+				 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2025
+			},
2026
+			335 => function ($stackPos) {
2027
+				 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2028
+			},
2029
+			336 => function ($stackPos) {
2030
+				 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
2031
+			},
2032
+			337 => function ($stackPos) {
2033
+				 $this->semValue = array();
2034
+			},
2035
+			338 => function ($stackPos) {
2036
+				 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
2037
+			if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
2038
+			},
2039
+			339 => function ($stackPos) {
2040
+				 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
2041
+			$this->checkProperty($this->semValue, $stackPos-(5-2));
2042
+			},
2043
+			340 => function ($stackPos) {
2044
+				 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
2045
+			$this->checkClassConst($this->semValue, $stackPos-(5-2));
2046
+			},
2047
+			341 => function ($stackPos) {
2048
+				 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2049
+			$this->checkClassMethod($this->semValue, $stackPos-(10-2));
2050
+			},
2051
+			342 => function ($stackPos) {
2052
+				 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2053
+			},
2054
+			343 => function ($stackPos) {
2055
+				 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2056
+			},
2057
+			344 => function ($stackPos) {
2058
+				 $this->semValue = null; /* will be skipped */
2059
+			},
2060
+			345 => function ($stackPos) {
2061
+				 $this->semValue = array();
2062
+			},
2063
+			346 => function ($stackPos) {
2064
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2065
+			},
2066
+			347 => function ($stackPos) {
2067
+				 $this->semValue = array();
2068
+			},
2069
+			348 => function ($stackPos) {
2070
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2071
+			},
2072
+			349 => function ($stackPos) {
2073
+				 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2074
+			},
2075
+			350 => function ($stackPos) {
2076
+				 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2077
+			},
2078
+			351 => function ($stackPos) {
2079
+				 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2080
+			},
2081
+			352 => function ($stackPos) {
2082
+				 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2083
+			},
2084
+			353 => function ($stackPos) {
2085
+				 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2086
+			},
2087
+			354 => function ($stackPos) {
2088
+				 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
2089
+			},
2090
+			355 => function ($stackPos) {
2091
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2092
+			},
2093
+			356 => function ($stackPos) {
2094
+				 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
2095
+			},
2096
+			357 => function ($stackPos) {
2097
+				 $this->semValue = null;
2098
+			},
2099
+			358 => function ($stackPos) {
2100
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2101
+			},
2102
+			359 => function ($stackPos) {
2103
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2104
+			},
2105
+			360 => function ($stackPos) {
2106
+				 $this->semValue = 0;
2107
+			},
2108
+			361 => function ($stackPos) {
2109
+				 $this->semValue = 0;
2110
+			},
2111
+			362 => function ($stackPos) {
2112
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2113
+			},
2114
+			363 => function ($stackPos) {
2115
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2116
+			},
2117
+			364 => function ($stackPos) {
2118
+				 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
2119
+			},
2120
+			365 => function ($stackPos) {
2121
+				 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
2122
+			},
2123
+			366 => function ($stackPos) {
2124
+				 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
2125
+			},
2126
+			367 => function ($stackPos) {
2127
+				 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
2128
+			},
2129
+			368 => function ($stackPos) {
2130
+				 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
2131
+			},
2132
+			369 => function ($stackPos) {
2133
+				 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
2134
+			},
2135
+			370 => function ($stackPos) {
2136
+				 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
2137
+			},
2138
+			371 => function ($stackPos) {
2139
+				 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
2140
+			},
2141
+			372 => function ($stackPos) {
2142
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2143
+			},
2144
+			373 => function ($stackPos) {
2145
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2146
+			},
2147
+			374 => function ($stackPos) {
2148
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2149
+			},
2150
+			375 => function ($stackPos) {
2151
+				 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2152
+			},
2153
+			376 => function ($stackPos) {
2154
+				 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2155
+			},
2156
+			377 => function ($stackPos) {
2157
+				 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2158
+			},
2159
+			378 => function ($stackPos) {
2160
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2161
+			},
2162
+			379 => function ($stackPos) {
2163
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2164
+			},
2165
+			380 => function ($stackPos) {
2166
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2167
+			},
2168
+			381 => function ($stackPos) {
2169
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2170
+			},
2171
+			382 => function ($stackPos) {
2172
+				 $this->semValue = array();
2173
+			},
2174
+			383 => function ($stackPos) {
2175
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2176
+			},
2177
+			384 => function ($stackPos) {
2178
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2179
+			},
2180
+			385 => function ($stackPos) {
2181
+				 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2182
+			},
2183
+			386 => function ($stackPos) {
2184
+				 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2185
+			},
2186
+			387 => function ($stackPos) {
2187
+				 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2188
+			},
2189
+			388 => function ($stackPos) {
2190
+				 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2191
+			},
2192
+			389 => function ($stackPos) {
2193
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2194
+			},
2195
+			390 => function ($stackPos) {
2196
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2197
+			},
2198
+			391 => function ($stackPos) {
2199
+				 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2200
+			},
2201
+			392 => function ($stackPos) {
2202
+				 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2203
+			},
2204
+			393 => function ($stackPos) {
2205
+				 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2206
+			},
2207
+			394 => function ($stackPos) {
2208
+				 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2209
+			},
2210
+			395 => function ($stackPos) {
2211
+				 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2212
+			},
2213
+			396 => function ($stackPos) {
2214
+				 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2215
+			},
2216
+			397 => function ($stackPos) {
2217
+				 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2218
+			},
2219
+			398 => function ($stackPos) {
2220
+				 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2221
+			},
2222
+			399 => function ($stackPos) {
2223
+				 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2224
+			},
2225
+			400 => function ($stackPos) {
2226
+				 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2227
+			},
2228
+			401 => function ($stackPos) {
2229
+				 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2230
+			},
2231
+			402 => function ($stackPos) {
2232
+				 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2233
+			},
2234
+			403 => function ($stackPos) {
2235
+				 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2236
+			},
2237
+			404 => function ($stackPos) {
2238
+				 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2239
+			},
2240
+			405 => function ($stackPos) {
2241
+				 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2242
+			},
2243
+			406 => function ($stackPos) {
2244
+				 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2245
+			},
2246
+			407 => function ($stackPos) {
2247
+				 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2248
+			},
2249
+			408 => function ($stackPos) {
2250
+				 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2251
+			},
2252
+			409 => function ($stackPos) {
2253
+				 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2254
+			},
2255
+			410 => function ($stackPos) {
2256
+				 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2257
+			},
2258
+			411 => function ($stackPos) {
2259
+				 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2260
+			},
2261
+			412 => function ($stackPos) {
2262
+				 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2263
+			},
2264
+			413 => function ($stackPos) {
2265
+				 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2266
+			},
2267
+			414 => function ($stackPos) {
2268
+				 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2269
+			},
2270
+			415 => function ($stackPos) {
2271
+				 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2272
+			},
2273
+			416 => function ($stackPos) {
2274
+				 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2275
+			},
2276
+			417 => function ($stackPos) {
2277
+				 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2278
+			},
2279
+			418 => function ($stackPos) {
2280
+				 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2281
+			},
2282
+			419 => function ($stackPos) {
2283
+				 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2284
+			},
2285
+			420 => function ($stackPos) {
2286
+				 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2287
+			},
2288
+			421 => function ($stackPos) {
2289
+				 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2290
+			},
2291
+			422 => function ($stackPos) {
2292
+				 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2293
+			},
2294
+			423 => function ($stackPos) {
2295
+				 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2296
+			},
2297
+			424 => function ($stackPos) {
2298
+				 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2299
+			},
2300
+			425 => function ($stackPos) {
2301
+				 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2302
+			},
2303
+			426 => function ($stackPos) {
2304
+				 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2305
+			},
2306
+			427 => function ($stackPos) {
2307
+				 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2308
+			},
2309
+			428 => function ($stackPos) {
2310
+				 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2311
+			},
2312
+			429 => function ($stackPos) {
2313
+				 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2314
+			},
2315
+			430 => function ($stackPos) {
2316
+				 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2317
+			},
2318
+			431 => function ($stackPos) {
2319
+				 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2320
+			},
2321
+			432 => function ($stackPos) {
2322
+				 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2323
+			},
2324
+			433 => function ($stackPos) {
2325
+				 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2326
+			},
2327
+			434 => function ($stackPos) {
2328
+				 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2329
+			},
2330
+			435 => function ($stackPos) {
2331
+				 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2332
+			},
2333
+			436 => function ($stackPos) {
2334
+				 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2335
+			},
2336
+			437 => function ($stackPos) {
2337
+				 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2338
+			},
2339
+			438 => function ($stackPos) {
2340
+				 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2341
+			},
2342
+			439 => function ($stackPos) {
2343
+				 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2344
+			},
2345
+			440 => function ($stackPos) {
2346
+				 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2347
+			},
2348
+			441 => function ($stackPos) {
2349
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2350
+			},
2351
+			442 => function ($stackPos) {
2352
+				 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2353
+			},
2354
+			443 => function ($stackPos) {
2355
+				 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2356
+			},
2357
+			444 => function ($stackPos) {
2358
+				 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2359
+			},
2360
+			445 => function ($stackPos) {
2361
+				 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2362
+			},
2363
+			446 => function ($stackPos) {
2364
+				 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2365
+			},
2366
+			447 => function ($stackPos) {
2367
+				 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2368
+			},
2369
+			448 => function ($stackPos) {
2370
+				 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2371
+			},
2372
+			449 => function ($stackPos) {
2373
+				 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2374
+			},
2375
+			450 => function ($stackPos) {
2376
+				 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2377
+			},
2378
+			451 => function ($stackPos) {
2379
+				 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2380
+			},
2381
+			452 => function ($stackPos) {
2382
+				 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2383
+			},
2384
+			453 => function ($stackPos) {
2385
+				 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2386
+			$attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
2387
+			$this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
2388
+			},
2389
+			454 => function ($stackPos) {
2390
+				 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2391
+			},
2392
+			455 => function ($stackPos) {
2393
+				 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2394
+			},
2395
+			456 => function ($stackPos) {
2396
+				 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2397
+			},
2398
+			457 => function ($stackPos) {
2399
+				 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2400
+			},
2401
+			458 => function ($stackPos) {
2402
+				 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2403
+			},
2404
+			459 => function ($stackPos) {
2405
+				 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2406
+			$attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
2407
+			$this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
2408
+			},
2409
+			460 => function ($stackPos) {
2410
+				 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2411
+			},
2412
+			461 => function ($stackPos) {
2413
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2414
+			},
2415
+			462 => function ($stackPos) {
2416
+				 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2417
+			},
2418
+			463 => function ($stackPos) {
2419
+				 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2420
+			},
2421
+			464 => function ($stackPos) {
2422
+				 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2423
+			},
2424
+			465 => function ($stackPos) {
2425
+				 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2426
+			},
2427
+			466 => function ($stackPos) {
2428
+				 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2429
+			},
2430
+			467 => function ($stackPos) {
2431
+				 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2432
+			},
2433
+			468 => function ($stackPos) {
2434
+				 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2435
+			},
2436
+			469 => function ($stackPos) {
2437
+				 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2438
+			},
2439
+			470 => function ($stackPos) {
2440
+				 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2441
+			},
2442
+			471 => function ($stackPos) {
2443
+				 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2444
+			},
2445
+			472 => function ($stackPos) {
2446
+				 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2447
+			},
2448
+			473 => function ($stackPos) {
2449
+				 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2450
+			},
2451
+			474 => function ($stackPos) {
2452
+				 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2453
+			},
2454
+			475 => function ($stackPos) {
2455
+				 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2456
+			},
2457
+			476 => function ($stackPos) {
2458
+				 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2459
+			},
2460
+			477 => function ($stackPos) {
2461
+				 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
2462
+			$this->checkClass($this->semValue[0], -1);
2463
+			},
2464
+			478 => function ($stackPos) {
2465
+				 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2466
+			},
2467
+			479 => function ($stackPos) {
2468
+				 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2469
+			},
2470
+			480 => function ($stackPos) {
2471
+				 $this->semValue = array();
2472
+			},
2473
+			481 => function ($stackPos) {
2474
+				 $this->semValue = $this->semStack[$stackPos-(4-3)];
2475
+			},
2476
+			482 => function ($stackPos) {
2477
+				 $this->semValue = $this->semStack[$stackPos-(2-1)];
2478
+			},
2479
+			483 => function ($stackPos) {
2480
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2481
+			},
2482
+			484 => function ($stackPos) {
2483
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2484
+			},
2485
+			485 => function ($stackPos) {
2486
+				 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2487
+			},
2488
+			486 => function ($stackPos) {
2489
+				 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2490
+			},
2491
+			487 => function ($stackPos) {
2492
+				 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2493
+			},
2494
+			488 => function ($stackPos) {
2495
+				 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2496
+			},
2497
+			489 => function ($stackPos) {
2498
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2499
+			},
2500
+			490 => function ($stackPos) {
2501
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2502
+			},
2503
+			491 => function ($stackPos) {
2504
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2505
+			},
2506
+			492 => function ($stackPos) {
2507
+				 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2508
+			},
2509
+			493 => function ($stackPos) {
2510
+				 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2511
+			},
2512
+			494 => function ($stackPos) {
2513
+				 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2514
+			},
2515
+			495 => function ($stackPos) {
2516
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2517
+			},
2518
+			496 => function ($stackPos) {
2519
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2520
+			},
2521
+			497 => function ($stackPos) {
2522
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2523
+			},
2524
+			498 => function ($stackPos) {
2525
+				 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2526
+			},
2527
+			499 => function ($stackPos) {
2528
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2529
+			},
2530
+			500 => function ($stackPos) {
2531
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2532
+			},
2533
+			501 => function ($stackPos) {
2534
+				 $this->semValue = null;
2535
+			},
2536
+			502 => function ($stackPos) {
2537
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2538
+			},
2539
+			503 => function ($stackPos) {
2540
+				 $this->semValue = array();
2541
+			},
2542
+			504 => function ($stackPos) {
2543
+				 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
2544
+			},
2545
+			505 => function ($stackPos) {
2546
+				 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
2547
+			},
2548
+			506 => function ($stackPos) {
2549
+				 $this->semValue = array();
2550
+			},
2551
+			507 => function ($stackPos) {
2552
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2553
+			},
2554
+			508 => function ($stackPos) {
2555
+				 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2556
+			},
2557
+			509 => function ($stackPos) {
2558
+				 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2559
+			},
2560
+			510 => function ($stackPos) {
2561
+				 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2562
+			},
2563
+			511 => function ($stackPos) {
2564
+				 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2565
+			},
2566
+			512 => function ($stackPos) {
2567
+				 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2568
+			},
2569
+			513 => function ($stackPos) {
2570
+				 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2571
+			},
2572
+			514 => function ($stackPos) {
2573
+				 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2574
+			},
2575
+			515 => function ($stackPos) {
2576
+				 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2577
+			},
2578
+			516 => function ($stackPos) {
2579
+				 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2580
+			},
2581
+			517 => function ($stackPos) {
2582
+				 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2583
+			},
2584
+			518 => function ($stackPos) {
2585
+				 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
2586
+			},
2587
+			519 => function ($stackPos) {
2588
+				 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
2589
+			$this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
2590
+			},
2591
+			520 => function ($stackPos) {
2592
+				 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
2593
+			$this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
2594
+			},
2595
+			521 => function ($stackPos) {
2596
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2597
+			},
2598
+			522 => function ($stackPos) {
2599
+				 $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2600
+			},
2601
+			523 => function ($stackPos) {
2602
+				 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
2603
+			foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
2604
+			},
2605
+			524 => function ($stackPos) {
2606
+				 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2607
+			},
2608
+			525 => function ($stackPos) {
2609
+				 $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2610
+			},
2611
+			526 => function ($stackPos) {
2612
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2613
+			},
2614
+			527 => function ($stackPos) {
2615
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2616
+			},
2617
+			528 => function ($stackPos) {
2618
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2619
+			},
2620
+			529 => function ($stackPos) {
2621
+				 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2622
+			},
2623
+			530 => function ($stackPos) {
2624
+				 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
2625
+			},
2626
+			531 => function ($stackPos) {
2627
+				 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2628
+			},
2629
+			532 => function ($stackPos) {
2630
+				 $this->semValue = null;
2631
+			},
2632
+			533 => function ($stackPos) {
2633
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2634
+			},
2635
+			534 => function ($stackPos) {
2636
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2637
+			},
2638
+			535 => function ($stackPos) {
2639
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2640
+			},
2641
+			536 => function ($stackPos) {
2642
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2643
+			},
2644
+			537 => function ($stackPos) {
2645
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2646
+			},
2647
+			538 => function ($stackPos) {
2648
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2649
+			},
2650
+			539 => function ($stackPos) {
2651
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2652
+			},
2653
+			540 => function ($stackPos) {
2654
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2655
+			},
2656
+			541 => function ($stackPos) {
2657
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2658
+			},
2659
+			542 => function ($stackPos) {
2660
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2661
+			},
2662
+			543 => function ($stackPos) {
2663
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2664
+			},
2665
+			544 => function ($stackPos) {
2666
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2667
+			},
2668
+			545 => function ($stackPos) {
2669
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2670
+			},
2671
+			546 => function ($stackPos) {
2672
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2673
+			},
2674
+			547 => function ($stackPos) {
2675
+				 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2676
+			},
2677
+			548 => function ($stackPos) {
2678
+				 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2679
+			},
2680
+			549 => function ($stackPos) {
2681
+				 $this->semValue = null;
2682
+			},
2683
+			550 => function ($stackPos) {
2684
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2685
+			},
2686
+			551 => function ($stackPos) {
2687
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2688
+			},
2689
+			552 => function ($stackPos) {
2690
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2691
+			},
2692
+			553 => function ($stackPos) {
2693
+				 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2694
+			},
2695
+			554 => function ($stackPos) {
2696
+				 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2697
+			},
2698
+			555 => function ($stackPos) {
2699
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2700
+			},
2701
+			556 => function ($stackPos) {
2702
+				 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2703
+			},
2704
+			557 => function ($stackPos) {
2705
+				 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2706
+			},
2707
+			558 => function ($stackPos) {
2708
+				 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
2709
+			},
2710
+			559 => function ($stackPos) {
2711
+				 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
2712
+			},
2713
+			560 => function ($stackPos) {
2714
+				 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2715
+			},
2716
+			561 => function ($stackPos) {
2717
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2718
+			},
2719
+			562 => function ($stackPos) {
2720
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2721
+			},
2722
+			563 => function ($stackPos) {
2723
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2724
+			},
2725
+			564 => function ($stackPos) {
2726
+				 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2727
+			},
2728
+			565 => function ($stackPos) {
2729
+				 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2730
+			},
2731
+			566 => function ($stackPos) {
2732
+				 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2733
+			},
2734
+			567 => function ($stackPos) {
2735
+				 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2736
+			},
2737
+			568 => function ($stackPos) {
2738
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2739
+			},
2740
+			569 => function ($stackPos) {
2741
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2742
+			},
2743
+			570 => function ($stackPos) {
2744
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2745
+			},
2746
+			571 => function ($stackPos) {
2747
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2748
+			},
2749
+			572 => function ($stackPos) {
2750
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2751
+			},
2752
+			573 => function ($stackPos) {
2753
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2754
+			},
2755
+			574 => function ($stackPos) {
2756
+				 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2757
+			},
2758
+			575 => function ($stackPos) {
2759
+				 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2760
+			},
2761
+			576 => function ($stackPos) {
2762
+				 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
2763
+			},
2764
+			577 => function ($stackPos) {
2765
+				$this->semValue = $this->semStack[$stackPos];
2766
+			},
2767
+			578 => function ($stackPos) {
2768
+				 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
2769
+			},
2770
+			579 => function ($stackPos) {
2771
+				 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2772
+			},
2773
+			580 => function ($stackPos) {
2774
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2775
+			},
2776
+			581 => function ($stackPos) {
2777
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2778
+			},
2779
+			582 => function ($stackPos) {
2780
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2781
+			},
2782
+			583 => function ($stackPos) {
2783
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2784
+			},
2785
+			584 => function ($stackPos) {
2786
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2787
+			},
2788
+			585 => function ($stackPos) {
2789
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2790
+			},
2791
+			586 => function ($stackPos) {
2792
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2793
+			},
2794
+			587 => function ($stackPos) {
2795
+				 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2796
+			},
2797
+			588 => function ($stackPos) {
2798
+				 $this->semValue = null;
2799
+			},
2800
+			589 => function ($stackPos) {
2801
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2802
+			},
2803
+			590 => function ($stackPos) {
2804
+				 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2805
+			},
2806
+			591 => function ($stackPos) {
2807
+				 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2808
+			},
2809
+			592 => function ($stackPos) {
2810
+				 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
2811
+			},
2812
+			593 => function ($stackPos) {
2813
+				 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2814
+			},
2815
+			594 => function ($stackPos) {
2816
+				 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2817
+			},
2818
+			595 => function ($stackPos) {
2819
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2820
+			},
2821
+			596 => function ($stackPos) {
2822
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2823
+			},
2824
+			597 => function ($stackPos) {
2825
+				 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2826
+			},
2827
+			598 => function ($stackPos) {
2828
+				 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2829
+			},
2830
+			599 => function ($stackPos) {
2831
+				 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2832
+			},
2833
+			600 => function ($stackPos) {
2834
+				 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2835
+			},
2836
+			601 => function ($stackPos) {
2837
+				 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
2838
+			},
2839
+			602 => function ($stackPos) {
2840
+				 $this->semValue = $this->semStack[$stackPos-(3-2)];
2841
+			},
2842
+			603 => function ($stackPos) {
2843
+				 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2844
+			},
2845
+			604 => function ($stackPos) {
2846
+				 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2847
+			},
2848
+			605 => function ($stackPos) {
2849
+				 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2850
+			},
2851
+			606 => function ($stackPos) {
2852
+				 $this->semValue = $this->semStack[$stackPos-(1-1)];
2853
+			},
2854
+		];
2855
+	}
2856 2856
 }
Please login to merge, or discard this patch.
Spacing   +1815 added lines, -1815 removed lines patch added patch discarded remove patch
@@ -201,303 +201,303 @@  discard block
 block discarded – undo
201 201
     );
202 202
 
203 203
     protected $tokenToSymbol = array(
204
-            0,  168,  168,  168,  168,  168,  168,  168,  168,  168,
205
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
206
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
207
-          168,  168,  168,   56,  166,  168,  167,   55,  168,  168,
208
-          163,  164,   53,   50,    8,   51,   52,   54,  168,  168,
209
-          168,  168,  168,  168,  168,  168,  168,  168,   31,  159,
210
-           44,   16,   46,   30,   68,  168,  168,  168,  168,  168,
211
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
212
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
213
-          168,   70,  168,  160,   36,  168,  165,  168,  168,  168,
214
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
215
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
216
-          168,  168,  168,  161,   35,  162,   58,  168,  168,  168,
217
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
218
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
219
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
220
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
221
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
222
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
223
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
224
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
225
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
226
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
227
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
228
-          168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
229
-          168,  168,  168,  168,  168,  168,    1,    2,    3,    4,
230
-            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
231
-           17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
232
-           27,   28,   29,   32,   33,   34,   37,   38,   39,   40,
233
-           41,   42,   43,   45,   47,   48,   49,   57,   59,   60,
234
-           61,   62,   63,   64,   65,   66,   67,   69,   71,   72,
235
-           73,   74,   75,   76,   77,   78,   79,   80,   81,   82,
236
-           83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
237
-           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
238
-          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
239
-          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
240
-          123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
241
-          133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
242
-          143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
243
-          153,  154,  155,  156,  157,  158
204
+            0, 168, 168, 168, 168, 168, 168, 168, 168, 168,
205
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
206
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
207
+          168, 168, 168, 56, 166, 168, 167, 55, 168, 168,
208
+          163, 164, 53, 50, 8, 51, 52, 54, 168, 168,
209
+          168, 168, 168, 168, 168, 168, 168, 168, 31, 159,
210
+           44, 16, 46, 30, 68, 168, 168, 168, 168, 168,
211
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
212
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
213
+          168, 70, 168, 160, 36, 168, 165, 168, 168, 168,
214
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
215
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
216
+          168, 168, 168, 161, 35, 162, 58, 168, 168, 168,
217
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
218
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
219
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
220
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
221
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
222
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
223
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
224
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
225
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
226
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
227
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
228
+          168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
229
+          168, 168, 168, 168, 168, 168, 1, 2, 3, 4,
230
+            5, 6, 7, 9, 10, 11, 12, 13, 14, 15,
231
+           17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
232
+           27, 28, 29, 32, 33, 34, 37, 38, 39, 40,
233
+           41, 42, 43, 45, 47, 48, 49, 57, 59, 60,
234
+           61, 62, 63, 64, 65, 66, 67, 69, 71, 72,
235
+           73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
236
+           83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
237
+           93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
238
+          103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
239
+          113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
240
+          123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
241
+          133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
242
+          143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
243
+          153, 154, 155, 156, 157, 158
244 244
     );
245 245
 
246 246
     protected $action = array(
247
-          132,  133,  134,  570,  135,  136,    0,  729,  730,  731,
248
-          137,   37,  929,  450,  451,  452,-32766,-32766,-32766,-32767,
249
-        -32767,-32767,-32767,  101,  102,  103,  104,  105, 1085, 1086,
250
-         1087, 1084, 1083, 1082, 1088,  723,  722,-32766, 1275,-32766,
251
-        -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
252
-        -32767,  373,  374,  918,    2,  732,-32766,-32766,-32766, 1001,
253
-          472,  417,  150,-32766,-32766,-32766,  375,  374,   12,  267,
254
-          138,  399,  736,  737,  738,  739,  417,-32766,  423,-32766,
255
-        -32766,-32766,-32766,-32766,-32766,  740,  741,  742,  743,  744,
256
-          745,  746,  747,  748,  749,  750,  770,  571,  771,  772,
257
-          773,  774,  762,  763,  339,  340,  765,  766,  751,  752,
258
-          753,  755,  756,  757,  349,  797,  798,  799,  800,  801,
259
-          802,  758,  759,  572,  573,  791,  782,  780,  781,  794,
260
-          777,  778,  323,  423,  574,  575,  776,  576,  577,  578,
261
-          579,  580,  581, -324, -585,  810,   34,  805,  779,  582,
262
-          583, -585,  139,-32766,-32766,-32766,  132,  133,  134,  570,
263
-          135,  136, 1034,  729,  730,  731,  137,   37,-32766,-32766,
264
-        -32766,  544,  814,  126,-32766, 1310,-32766,-32766,-32766,-32766,
265
-        -32766,-32766,-32766, 1085, 1086, 1087, 1084, 1083, 1082, 1088,
266
-          473,  723,  722,-32766,-32766,-32766,  458,  459,   81,-32766,
267
-        -32766,-32766, -193, -192,  322,  898,  240,  599, 1210, 1209,
268
-         1211,  732,  816,  703,-32766, 1063,-32766,-32766,-32766,-32766,
269
-        -32766,  811,-32766,-32766,-32766,  267,  138,  399,  736,  737,
270
-          738,  739, 1247, 1295,  423,  694, 1320,   35,  249, 1321,
271
-         1294,  740,  741,  742,  743,  744,  745,  746,  747,  748,
272
-          749,  750,  770,  571,  771,  772,  773,  774,  762,  763,
273
-          339,  340,  765,  766,  751,  752,  753,  755,  756,  757,
274
-          349,  797,  798,  799,  800,  801,  802,  758,  759,  572,
275
-          573,  791,  782,  780,  781,  794,  777,  778,  888,  593,
276
-          574,  575,  776,  576,  577,  578,  579,  580,  581, -324,
277
-           82,   83,   84, -585,  779,  582,  583, -585,  148,  754,
278
-          724,  725,  726,  727,  728, -582,  729,  730,  731,  767,
279
-          768,   36, -582,   85,   86,   87,   88,   89,   90,   91,
280
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
281
-          102,  103,  104,  105,  106,  107,  108, -362,  271, -362,
282
-        -32766,-32766,-32766,  106,  107,  108, -268,  271, -193, -192,
283
-          109,  933,  934,  900,  732,  689,  935,   14,  288,  109,
284
-          815,-32766, 1061,-32766,-32766,  964,  -86,  288,  733,  734,
285
-          735,  736,  737,  738,  739,  239,  384,  803,   11, 1077,
286
-         -539,-32766,-32766,-32766,  740,  741,  742,  743,  744,  745,
287
-          746,  747,  748,  749,  750,  770,  793,  771,  772,  773,
288
-          774,  762,  763,  764,  792,  765,  766,  751,  752,  753,
289
-          755,  756,  757,  796,  797,  798,  799,  800,  801,  802,
290
-          758,  759,  760,  761,  791,  782,  780,  781,  794,  777,
291
-          778,  128,  -86,  769,  775,  776,  783,  784,  786,  785,
292
-          787,  788, -576,  144, -539, -539, -576,  779,  790,  789,
293
-           49,   50,   51,  503,   52,   53,  997,  996,  995,  998,
294
-           54,   55, -111,   56, -582, 1033, 1010, -111, -582, -111,
295
-         1291, -539,-32766,-32766,  302, 1010, 1010, -111, -111, -111,
296
-         -111, -111, -111, -111, -111, 1208,  841,  898,  842,  253,
297
-          807,  287,  306,  965,  284,  898,  723,  722,   57,   58,
298
-          287,  287, 1007, -536,   59,  308,   60,  246,  247,   61,
299
-           62,   63,   64,   65,   66,   67,   68,  695,   27,  269,
300
-           69,  439,  504, -338, 1010,  696, 1241, 1242,  505,  898,
301
-          814,  640,   25,  898, 1239,   41,   24,  506,  320,  507,
302
-         1235,  508, 1009,  509,  149,  402,  510,  511,  841,  805,
303
-          842,   43,   44,  440,  370,  369,  898,   45,  512,  698,
304
-         1210, 1209, 1211,  361,  335, 1215,  809, -536, -536,  336,
305
-          888,  691,  513,  514,  515, 1215, 1007, 1062,  888,  715,
306
-         1007,  337, -536,  363,  516,  517,  705, 1229, 1230, 1231,
307
-         1232, 1226, 1227,  294, -536,  -16, -542,  813, 1010, 1233,
308
-         1228,  367, 1010, 1210, 1209, 1211,  295, -153, -153, -153,
309
-          382,   70,  888,  318,  319,  322,  888,  659,  660, -535,
310
-         1206,  814, -153,  279, -153,  435, -153,  279, -153,  436,
311
-          141,  103,  104,  105,  632,  633,  322,  437,  368,  888,
312
-        -32766,-32766,  371,  372,  438,  900,  814,  689,  820, -111,
313
-         -111,  376,  377,  950, -111,  689,  814,  -88,  151,  874,
314
-         -111, -111, -111, -111,   31,  110,  111,  112,  113,  114,
315
-          115,  116,  117,  118,  119,  120,  121,  122,  723,  722,
316
-         1206,  153,  154, -535, -535,  155,  898,  900,  157,  689,
317
-         1206,  900, -111,  689, -153,   32,  123,  898, -535,  124,
318
-          140,-32766, -537,  129,  130,  143,  322, 1122, 1124,  158,
319
-         -535,-32766, -541, -534,  900,-32766,  689,  159, -534,  723,
320
-          722, 1208,  295,  160,  161,  -79,  -75,   74,-32766,-32766,
321
-        -32766,  322,-32766,  -73,-32766, -298,-32766,   74, -294,-32766,
322
-          -72,  322,  -71,  -70,-32766,-32766,-32766,  -69,  -68,  -67,
323
-        -32766,-32766,   27,  -66,  -47, 1215,-32766,  414,  -18,  147,
324
-          275,  270,  281,  704,  814,-32766, -537, -537, 1239,  888,
325
-          707,  897,  146,  276,   48,   -4,  898, -534, -534,  282,
326
-          888, -537, -534, -534,  283, -246, -246, -246,  329,  285,
327
-          271,  368, -534, -537,  286,   73,  289, -534, 1206,   47,
328
-          723,  722, -111, -111, -534,  290,  109, -111,  914, -534,
329
-          550,  669,  874, -111, -111, -111, -111,  145,  516,  517,
330
-        -32766, 1229, 1230, 1231, 1232, 1226, 1227,  814,  805, 1322,
331
-          662,  300, 1092, 1233, 1228,  682,  814,-32766,  298,  299,
332
-          546,  641,  647, 1208,  900,   72,  689, -246,  319,  322,
333
-        -32766,-32766,-32766,  366,-32766,  900,-32766,  689,-32766,  888,
334
-          646,-32766,   13,  296,  297,  127,-32766,-32766,-32766,  455,
335
-         1206,  -51,-32766,-32766,  483,  630,  663,  556,-32766,  414,
336
-          303,  368, -111,  430,  434,   39,  930,-32766,  293,    0,
337
-          125,-32766, -111, -111,  301,    0,    0, -111, 1010,  307,
338
-            0,    0,  833, -111, -111, -111, -111,    0,-32766,  131,
339
-            0,    0,  295,    0,-32766, 1246,    0,   74,    0, 1248,
340
-         1208,  322,    0, -500,    0,    9,    0,-32766,-32766,-32766,
341
-         -490,-32766,    7,-32766,  900,-32766,  689,   -4,-32766,   16,
342
-          365,  597,  813,-32766,-32766,-32766,  916,  295,  709,-32766,
343
-        -32766, 1240,-32766,   40,  712,-32766,  414,  713, 1208,  879,
344
-          898,  974,  951,  958,-32766,-32766,-32766,-32766,  948,-32766,
345
-          959,-32766,  877,-32766,  946, 1066,-32766, 1069, 1070, 1067,
346
-         1068,-32766,-32766,-32766,-32766, 1074,   33,-32766,-32766, 1236,
347
-         1208,  825, 1261,-32766,  414, 1279, 1313,-32766,-32766,-32766,
348
-          317,-32766,-32766,-32766,  635,-32766,  364,  690,-32766,  693,
349
-          697,  699,  478,-32766,-32766,-32766,-32766,  700,  701,-32766,
350
-        -32766,  702, 1208,  562,  706,-32766,  414,  692, -570,-32766,
351
-        -32766,-32766,  875,-32766,-32766,-32766, 1317,-32766, 1319,  836,
352
-        -32766,  835,  844,  888,  923,-32766,-32766,-32766,  966,  843,
353
-         1318,-32766,-32766,  922,  924,  921, 1194,-32766,  414, -245,
354
-         -245, -245,  907,  917,  905,  368,-32766,  956,  957, 1316,
355
-         1273, 1262,    0, 1280, 1286, 1289, -111, -111, -568,   27,
356
-         -542, -111, -541, -540,    1,   28,  874, -111, -111, -111,
357
-         -111,  814,   29,-32766,   38, 1239,   42,   46,   71, 1208,
358
-           75,   76,   77,   78,   79,    0,-32766,-32766,-32766,   80,
359
-        -32766,  142,-32766,  152,-32766,  156,  245,-32766,  900,  324,
360
-          689, -245,-32766,-32766,-32766, 1206,  350,  351,-32766,-32766,
361
-          352,  353,  354,  355,-32766,  414,  356,  357,  358,  359,
362
-          360,  362,  431,-32766, -271, -269,  517, -268, 1229, 1230,
363
-         1231, 1232, 1226, 1227,   18,   19,   20,   21,   23,  401,
364
-         1233, 1228,  474,  475,  482,  485,  486,  487,  488,  492,
365
-          493,  494,   72, -504,  501,  319,  322,  676, 1219, 1162,
366
-         1237, 1036, 1035,    0, 1016, 1198, 1012, -273, -103,   17,
367
-           22,   26,  292,  400,  590,  594,  621,  681, 1166, 1214,
368
-         1163, 1292,    0, 1179,    0,    0,  322
247
+          132, 133, 134, 570, 135, 136, 0, 729, 730, 731,
248
+          137, 37, 929, 450, 451, 452, -32766, -32766, -32766, -32767,
249
+        -32767, -32767, -32767, 101, 102, 103, 104, 105, 1085, 1086,
250
+         1087, 1084, 1083, 1082, 1088, 723, 722, -32766, 1275, -32766,
251
+        -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767,
252
+        -32767, 373, 374, 918, 2, 732, -32766, -32766, -32766, 1001,
253
+          472, 417, 150, -32766, -32766, -32766, 375, 374, 12, 267,
254
+          138, 399, 736, 737, 738, 739, 417, -32766, 423, -32766,
255
+        -32766, -32766, -32766, -32766, -32766, 740, 741, 742, 743, 744,
256
+          745, 746, 747, 748, 749, 750, 770, 571, 771, 772,
257
+          773, 774, 762, 763, 339, 340, 765, 766, 751, 752,
258
+          753, 755, 756, 757, 349, 797, 798, 799, 800, 801,
259
+          802, 758, 759, 572, 573, 791, 782, 780, 781, 794,
260
+          777, 778, 323, 423, 574, 575, 776, 576, 577, 578,
261
+          579, 580, 581, -324, -585, 810, 34, 805, 779, 582,
262
+          583, -585, 139, -32766, -32766, -32766, 132, 133, 134, 570,
263
+          135, 136, 1034, 729, 730, 731, 137, 37, -32766, -32766,
264
+        -32766, 544, 814, 126, -32766, 1310, -32766, -32766, -32766, -32766,
265
+        -32766, -32766, -32766, 1085, 1086, 1087, 1084, 1083, 1082, 1088,
266
+          473, 723, 722, -32766, -32766, -32766, 458, 459, 81, -32766,
267
+        -32766, -32766, -193, -192, 322, 898, 240, 599, 1210, 1209,
268
+         1211, 732, 816, 703, -32766, 1063, -32766, -32766, -32766, -32766,
269
+        -32766, 811, -32766, -32766, -32766, 267, 138, 399, 736, 737,
270
+          738, 739, 1247, 1295, 423, 694, 1320, 35, 249, 1321,
271
+         1294, 740, 741, 742, 743, 744, 745, 746, 747, 748,
272
+          749, 750, 770, 571, 771, 772, 773, 774, 762, 763,
273
+          339, 340, 765, 766, 751, 752, 753, 755, 756, 757,
274
+          349, 797, 798, 799, 800, 801, 802, 758, 759, 572,
275
+          573, 791, 782, 780, 781, 794, 777, 778, 888, 593,
276
+          574, 575, 776, 576, 577, 578, 579, 580, 581, -324,
277
+           82, 83, 84, -585, 779, 582, 583, -585, 148, 754,
278
+          724, 725, 726, 727, 728, -582, 729, 730, 731, 767,
279
+          768, 36, -582, 85, 86, 87, 88, 89, 90, 91,
280
+           92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
281
+          102, 103, 104, 105, 106, 107, 108, -362, 271, -362,
282
+        -32766, -32766, -32766, 106, 107, 108, -268, 271, -193, -192,
283
+          109, 933, 934, 900, 732, 689, 935, 14, 288, 109,
284
+          815, -32766, 1061, -32766, -32766, 964, -86, 288, 733, 734,
285
+          735, 736, 737, 738, 739, 239, 384, 803, 11, 1077,
286
+         -539, -32766, -32766, -32766, 740, 741, 742, 743, 744, 745,
287
+          746, 747, 748, 749, 750, 770, 793, 771, 772, 773,
288
+          774, 762, 763, 764, 792, 765, 766, 751, 752, 753,
289
+          755, 756, 757, 796, 797, 798, 799, 800, 801, 802,
290
+          758, 759, 760, 761, 791, 782, 780, 781, 794, 777,
291
+          778, 128, -86, 769, 775, 776, 783, 784, 786, 785,
292
+          787, 788, -576, 144, -539, -539, -576, 779, 790, 789,
293
+           49, 50, 51, 503, 52, 53, 997, 996, 995, 998,
294
+           54, 55, -111, 56, -582, 1033, 1010, -111, -582, -111,
295
+         1291, -539, -32766, -32766, 302, 1010, 1010, -111, -111, -111,
296
+         -111, -111, -111, -111, -111, 1208, 841, 898, 842, 253,
297
+          807, 287, 306, 965, 284, 898, 723, 722, 57, 58,
298
+          287, 287, 1007, -536, 59, 308, 60, 246, 247, 61,
299
+           62, 63, 64, 65, 66, 67, 68, 695, 27, 269,
300
+           69, 439, 504, -338, 1010, 696, 1241, 1242, 505, 898,
301
+          814, 640, 25, 898, 1239, 41, 24, 506, 320, 507,
302
+         1235, 508, 1009, 509, 149, 402, 510, 511, 841, 805,
303
+          842, 43, 44, 440, 370, 369, 898, 45, 512, 698,
304
+         1210, 1209, 1211, 361, 335, 1215, 809, -536, -536, 336,
305
+          888, 691, 513, 514, 515, 1215, 1007, 1062, 888, 715,
306
+         1007, 337, -536, 363, 516, 517, 705, 1229, 1230, 1231,
307
+         1232, 1226, 1227, 294, -536, -16, -542, 813, 1010, 1233,
308
+         1228, 367, 1010, 1210, 1209, 1211, 295, -153, -153, -153,
309
+          382, 70, 888, 318, 319, 322, 888, 659, 660, -535,
310
+         1206, 814, -153, 279, -153, 435, -153, 279, -153, 436,
311
+          141, 103, 104, 105, 632, 633, 322, 437, 368, 888,
312
+        -32766, -32766, 371, 372, 438, 900, 814, 689, 820, -111,
313
+         -111, 376, 377, 950, -111, 689, 814, -88, 151, 874,
314
+         -111, -111, -111, -111, 31, 110, 111, 112, 113, 114,
315
+          115, 116, 117, 118, 119, 120, 121, 122, 723, 722,
316
+         1206, 153, 154, -535, -535, 155, 898, 900, 157, 689,
317
+         1206, 900, -111, 689, -153, 32, 123, 898, -535, 124,
318
+          140, -32766, -537, 129, 130, 143, 322, 1122, 1124, 158,
319
+         -535, -32766, -541, -534, 900, -32766, 689, 159, -534, 723,
320
+          722, 1208, 295, 160, 161, -79, -75, 74, -32766, -32766,
321
+        -32766, 322, -32766, -73, -32766, -298, -32766, 74, -294, -32766,
322
+          -72, 322, -71, -70, -32766, -32766, -32766, -69, -68, -67,
323
+        -32766, -32766, 27, -66, -47, 1215, -32766, 414, -18, 147,
324
+          275, 270, 281, 704, 814, -32766, -537, -537, 1239, 888,
325
+          707, 897, 146, 276, 48, -4, 898, -534, -534, 282,
326
+          888, -537, -534, -534, 283, -246, -246, -246, 329, 285,
327
+          271, 368, -534, -537, 286, 73, 289, -534, 1206, 47,
328
+          723, 722, -111, -111, -534, 290, 109, -111, 914, -534,
329
+          550, 669, 874, -111, -111, -111, -111, 145, 516, 517,
330
+        -32766, 1229, 1230, 1231, 1232, 1226, 1227, 814, 805, 1322,
331
+          662, 300, 1092, 1233, 1228, 682, 814, -32766, 298, 299,
332
+          546, 641, 647, 1208, 900, 72, 689, -246, 319, 322,
333
+        -32766, -32766, -32766, 366, -32766, 900, -32766, 689, -32766, 888,
334
+          646, -32766, 13, 296, 297, 127, -32766, -32766, -32766, 455,
335
+         1206, -51, -32766, -32766, 483, 630, 663, 556, -32766, 414,
336
+          303, 368, -111, 430, 434, 39, 930, -32766, 293, 0,
337
+          125, -32766, -111, -111, 301, 0, 0, -111, 1010, 307,
338
+            0, 0, 833, -111, -111, -111, -111, 0, -32766, 131,
339
+            0, 0, 295, 0, -32766, 1246, 0, 74, 0, 1248,
340
+         1208, 322, 0, -500, 0, 9, 0, -32766, -32766, -32766,
341
+         -490, -32766, 7, -32766, 900, -32766, 689, -4, -32766, 16,
342
+          365, 597, 813, -32766, -32766, -32766, 916, 295, 709, -32766,
343
+        -32766, 1240, -32766, 40, 712, -32766, 414, 713, 1208, 879,
344
+          898, 974, 951, 958, -32766, -32766, -32766, -32766, 948, -32766,
345
+          959, -32766, 877, -32766, 946, 1066, -32766, 1069, 1070, 1067,
346
+         1068, -32766, -32766, -32766, -32766, 1074, 33, -32766, -32766, 1236,
347
+         1208, 825, 1261, -32766, 414, 1279, 1313, -32766, -32766, -32766,
348
+          317, -32766, -32766, -32766, 635, -32766, 364, 690, -32766, 693,
349
+          697, 699, 478, -32766, -32766, -32766, -32766, 700, 701, -32766,
350
+        -32766, 702, 1208, 562, 706, -32766, 414, 692, -570, -32766,
351
+        -32766, -32766, 875, -32766, -32766, -32766, 1317, -32766, 1319, 836,
352
+        -32766, 835, 844, 888, 923, -32766, -32766, -32766, 966, 843,
353
+         1318, -32766, -32766, 922, 924, 921, 1194, -32766, 414, -245,
354
+         -245, -245, 907, 917, 905, 368, -32766, 956, 957, 1316,
355
+         1273, 1262, 0, 1280, 1286, 1289, -111, -111, -568, 27,
356
+         -542, -111, -541, -540, 1, 28, 874, -111, -111, -111,
357
+         -111, 814, 29, -32766, 38, 1239, 42, 46, 71, 1208,
358
+           75, 76, 77, 78, 79, 0, -32766, -32766, -32766, 80,
359
+        -32766, 142, -32766, 152, -32766, 156, 245, -32766, 900, 324,
360
+          689, -245, -32766, -32766, -32766, 1206, 350, 351, -32766, -32766,
361
+          352, 353, 354, 355, -32766, 414, 356, 357, 358, 359,
362
+          360, 362, 431, -32766, -271, -269, 517, -268, 1229, 1230,
363
+         1231, 1232, 1226, 1227, 18, 19, 20, 21, 23, 401,
364
+         1233, 1228, 474, 475, 482, 485, 486, 487, 488, 492,
365
+          493, 494, 72, -504, 501, 319, 322, 676, 1219, 1162,
366
+         1237, 1036, 1035, 0, 1016, 1198, 1012, -273, -103, 17,
367
+           22, 26, 292, 400, 590, 594, 621, 681, 1166, 1214,
368
+         1163, 1292, 0, 1179, 0, 0, 322
369 369
     );
370 370
 
371 371
     protected $actionCheck = array(
372
-            2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
373
-           12,   13,  128,  129,  130,  131,    9,   10,   11,   44,
374
-           45,   46,   47,   48,   49,   50,   51,   52,  116,  117,
375
-          118,  119,  120,  121,  122,   37,   38,   30,    1,   32,
376
-           33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
377
-           43,  106,  107,    1,    8,   57,    9,   10,   11,    1,
378
-           31,  116,   14,    9,   10,   11,  106,  107,    8,   71,
379
-           72,   73,   74,   75,   76,   77,  116,   30,   80,   32,
380
-           33,   34,   35,   36,   30,   87,   88,   89,   90,   91,
381
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
382
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
383
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
384
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
385
-          132,  133,   70,   80,  136,  137,  138,  139,  140,  141,
386
-          142,  143,  144,    8,    1,   80,    8,   80,  150,  151,
387
-          152,    8,  154,    9,   10,   11,    2,    3,    4,    5,
388
-            6,    7,  164,    9,   10,   11,   12,   13,    9,   10,
389
-           11,   85,   82,   14,   30,   85,   32,   33,   34,   35,
390
-           36,   37,   38,  116,  117,  118,  119,  120,  121,  122,
391
-          161,   37,   38,    9,   10,   11,  134,  135,  161,    9,
392
-           10,   11,    8,    8,  167,    1,   14,   51,  155,  156,
393
-          157,   57,    1,  161,   30,  162,   32,   33,   34,   35,
394
-           30,  156,   32,   33,   34,   71,   72,   73,   74,   75,
395
-           76,   77,  146,    1,   80,   31,   80,  147,  148,   83,
396
-            8,   87,   88,   89,   90,   91,   92,   93,   94,   95,
397
-           96,   97,   98,   99,  100,  101,  102,  103,  104,  105,
398
-          106,  107,  108,  109,  110,  111,  112,  113,  114,  115,
399
-          116,  117,  118,  119,  120,  121,  122,  123,  124,  125,
400
-          126,  127,  128,  129,  130,  131,  132,  133,   84,    1,
401
-          136,  137,  138,  139,  140,  141,  142,  143,  144,  164,
402
-            9,   10,   11,  160,  150,  151,  152,  164,  154,    2,
403
-            3,    4,    5,    6,    7,    1,    9,   10,   11,   12,
404
-           13,   30,    8,   32,   33,   34,   35,   36,   37,   38,
405
-           39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
406
-           49,   50,   51,   52,   53,   54,   55,  106,   57,  108,
407
-            9,   10,   11,   53,   54,   55,  164,   57,  164,  164,
408
-           69,  117,  118,  159,   57,  161,  122,  101,   30,   69,
409
-          159,   30,    1,   32,   33,   31,   31,   30,   71,   72,
410
-           73,   74,   75,   76,   77,   97,  106,   80,  108,  123,
411
-           70,    9,   10,   11,   87,   88,   89,   90,   91,   92,
412
-           93,   94,   95,   96,   97,   98,   99,  100,  101,  102,
413
-          103,  104,  105,  106,  107,  108,  109,  110,  111,  112,
414
-          113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
415
-          123,  124,  125,  126,  127,  128,  129,  130,  131,  132,
416
-          133,    8,   97,  136,  137,  138,  139,  140,  141,  142,
417
-          143,  144,  160,    8,  134,  135,  164,  150,  151,  152,
418
-            2,    3,    4,    5,    6,    7,  119,  120,  121,  122,
419
-           12,   13,  101,   15,  160,    1,  138,  106,  164,  108,
420
-            1,  161,    9,   10,  113,  138,  138,  116,  117,  118,
421
-          119,  120,  121,  122,  123,   80,  106,    1,  108,    8,
422
-           80,  163,    8,  159,   30,    1,   37,   38,   50,   51,
423
-          163,  163,  116,   70,   56,    8,   58,   59,   60,   61,
424
-           62,   63,   64,   65,   66,   67,   68,   31,   70,   71,
425
-           72,   73,   74,  162,  138,   31,   78,   79,   80,    1,
426
-           82,   75,   76,    1,   86,   87,   88,   89,    8,   91,
427
-            1,   93,  137,   95,  101,  102,   98,   99,  106,   80,
428
-          108,  103,  104,  105,  106,  107,    1,  109,  110,   31,
429
-          155,  156,  157,  115,  116,    1,  156,  134,  135,    8,
430
-           84,  161,  124,  125,  126,    1,  116,  159,   84,  161,
431
-          116,    8,  149,    8,  136,  137,   31,  139,  140,  141,
432
-          142,  143,  144,  145,  161,   31,  163,  155,  138,  151,
433
-          152,    8,  138,  155,  156,  157,  158,   75,   76,   77,
434
-            8,  163,   84,  165,  166,  167,   84,   75,   76,   70,
435
-          116,   82,   90,  163,   92,    8,   94,  163,   96,    8,
436
-          161,   50,   51,   52,  111,  112,  167,    8,  106,   84,
437
-            9,  137,  106,  107,    8,  159,   82,  161,    8,  117,
438
-          118,  106,  107,  159,  122,  161,   82,   31,   14,  127,
439
-          128,  129,  130,  131,   16,   17,   18,   19,   20,   21,
440
-           22,   23,   24,   25,   26,   27,   28,   29,   37,   38,
441
-          116,   14,   14,  134,  135,   14,    1,  159,   14,  161,
442
-          116,  159,  128,  161,  162,   14,   16,    1,  149,   16,
443
-          161,  137,   70,   16,   16,   16,  167,   59,   60,   16,
444
-          161,  137,  163,   70,  159,   74,  161,   16,   70,   37,
445
-           38,   80,  158,   16,   16,   31,   31,  163,   87,   88,
446
-           89,  167,   91,   31,   93,   35,   95,  163,   35,   98,
447
-           31,  167,   31,   31,  103,  104,  105,   31,   31,   31,
448
-          109,  110,   70,   31,   31,    1,  115,  116,   31,   31,
449
-           35,   31,   31,   31,   82,  124,  134,  135,   86,   84,
450
-           31,   31,   31,   35,   70,    0,    1,  134,  135,   35,
451
-           84,  149,  134,  135,   35,  100,  101,  102,   35,   37,
452
-           57,  106,  149,  161,   37,  154,   37,  149,  116,   70,
453
-           37,   38,  117,  118,  161,   37,   69,  122,   38,  161,
454
-           89,   77,  127,  128,  129,  130,  131,   70,  136,  137,
455
-           85,  139,  140,  141,  142,  143,  144,   82,   80,   83,
456
-           94,  132,   82,  151,  152,   92,   82,   74,  134,  135,
457
-           85,   90,  100,   80,  159,  163,  161,  162,  166,  167,
458
-           87,   88,   89,  149,   91,  159,   93,  161,   95,   84,
459
-           96,   98,   97,  134,  135,  161,  103,  104,  105,   97,
460
-          116,   31,  109,  110,   97,  113,  100,  153,  115,  116,
461
-          114,  106,  128,  108,  128,  159,  128,  124,  113,   -1,
462
-          161,  137,  117,  118,  133,   -1,   -1,  122,  138,  132,
463
-           -1,   -1,  127,  128,  129,  130,  131,   -1,  137,   31,
464
-           -1,   -1,  158,   -1,   74,  146,   -1,  163,   -1,  146,
465
-           80,  167,   -1,  149,   -1,  150,   -1,   87,   88,   89,
466
-          149,   91,  149,   93,  159,   95,  161,  162,   98,  149,
467
-          149,  153,  155,  103,  104,  105,  154,  158,  162,  109,
468
-          110,  166,   74,  159,  159,  115,  116,  159,   80,  159,
469
-            1,  159,  159,  159,  124,   87,   88,   89,  159,   91,
470
-          159,   93,  159,   95,  159,  159,   98,  159,  159,  159,
471
-          159,  103,  104,  105,   74,  159,  161,  109,  110,  160,
472
-           80,  160,  160,  115,  116,  160,  160,   87,   88,   89,
473
-          161,   91,  124,   93,  160,   95,  161,  161,   98,  161,
474
-          161,  161,  102,  103,  104,  105,   74,  161,  161,  109,
475
-          110,  161,   80,   81,  161,  115,  116,  161,  163,   87,
476
-           88,   89,  162,   91,  124,   93,  162,   95,  162,  162,
477
-           98,  162,  162,   84,  162,  103,  104,  105,  162,  162,
478
-          162,  109,  110,  162,  162,  162,  162,  115,  116,  100,
479
-          101,  102,  162,  162,  162,  106,  124,  162,  162,  162,
480
-          162,  162,   -1,  162,  162,  162,  117,  118,  163,   70,
481
-          163,  122,  163,  163,  163,  163,  127,  128,  129,  130,
482
-          131,   82,  163,   74,  163,   86,  163,  163,  163,   80,
483
-          163,  163,  163,  163,  163,   -1,   87,   88,   89,  163,
484
-           91,  163,   93,  163,   95,  163,  163,   98,  159,  163,
485
-          161,  162,  103,  104,  105,  116,  163,  163,  109,  110,
486
-          163,  163,  163,  163,  115,  116,  163,  163,  163,  163,
487
-          163,  163,  163,  124,  164,  164,  137,  164,  139,  140,
488
-          141,  142,  143,  144,  164,  164,  164,  164,  164,  164,
489
-          151,  152,  164,  164,  164,  164,  164,  164,  164,  164,
490
-          164,  164,  163,  165,  164,  166,  167,  164,  164,  164,
491
-          164,  164,  164,   -1,  164,  164,  164,  164,  164,  164,
492
-          164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
493
-          164,  164,   -1,  165,   -1,   -1,  167
372
+            2, 3, 4, 5, 6, 7, 0, 9, 10, 11,
373
+           12, 13, 128, 129, 130, 131, 9, 10, 11, 44,
374
+           45, 46, 47, 48, 49, 50, 51, 52, 116, 117,
375
+          118, 119, 120, 121, 122, 37, 38, 30, 1, 32,
376
+           33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
377
+           43, 106, 107, 1, 8, 57, 9, 10, 11, 1,
378
+           31, 116, 14, 9, 10, 11, 106, 107, 8, 71,
379
+           72, 73, 74, 75, 76, 77, 116, 30, 80, 32,
380
+           33, 34, 35, 36, 30, 87, 88, 89, 90, 91,
381
+           92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
382
+          102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
383
+          112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
384
+          122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
385
+          132, 133, 70, 80, 136, 137, 138, 139, 140, 141,
386
+          142, 143, 144, 8, 1, 80, 8, 80, 150, 151,
387
+          152, 8, 154, 9, 10, 11, 2, 3, 4, 5,
388
+            6, 7, 164, 9, 10, 11, 12, 13, 9, 10,
389
+           11, 85, 82, 14, 30, 85, 32, 33, 34, 35,
390
+           36, 37, 38, 116, 117, 118, 119, 120, 121, 122,
391
+          161, 37, 38, 9, 10, 11, 134, 135, 161, 9,
392
+           10, 11, 8, 8, 167, 1, 14, 51, 155, 156,
393
+          157, 57, 1, 161, 30, 162, 32, 33, 34, 35,
394
+           30, 156, 32, 33, 34, 71, 72, 73, 74, 75,
395
+           76, 77, 146, 1, 80, 31, 80, 147, 148, 83,
396
+            8, 87, 88, 89, 90, 91, 92, 93, 94, 95,
397
+           96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
398
+          106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
399
+          116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
400
+          126, 127, 128, 129, 130, 131, 132, 133, 84, 1,
401
+          136, 137, 138, 139, 140, 141, 142, 143, 144, 164,
402
+            9, 10, 11, 160, 150, 151, 152, 164, 154, 2,
403
+            3, 4, 5, 6, 7, 1, 9, 10, 11, 12,
404
+           13, 30, 8, 32, 33, 34, 35, 36, 37, 38,
405
+           39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
406
+           49, 50, 51, 52, 53, 54, 55, 106, 57, 108,
407
+            9, 10, 11, 53, 54, 55, 164, 57, 164, 164,
408
+           69, 117, 118, 159, 57, 161, 122, 101, 30, 69,
409
+          159, 30, 1, 32, 33, 31, 31, 30, 71, 72,
410
+           73, 74, 75, 76, 77, 97, 106, 80, 108, 123,
411
+           70, 9, 10, 11, 87, 88, 89, 90, 91, 92,
412
+           93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
413
+          103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
414
+          113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
415
+          123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
416
+          133, 8, 97, 136, 137, 138, 139, 140, 141, 142,
417
+          143, 144, 160, 8, 134, 135, 164, 150, 151, 152,
418
+            2, 3, 4, 5, 6, 7, 119, 120, 121, 122,
419
+           12, 13, 101, 15, 160, 1, 138, 106, 164, 108,
420
+            1, 161, 9, 10, 113, 138, 138, 116, 117, 118,
421
+          119, 120, 121, 122, 123, 80, 106, 1, 108, 8,
422
+           80, 163, 8, 159, 30, 1, 37, 38, 50, 51,
423
+          163, 163, 116, 70, 56, 8, 58, 59, 60, 61,
424
+           62, 63, 64, 65, 66, 67, 68, 31, 70, 71,
425
+           72, 73, 74, 162, 138, 31, 78, 79, 80, 1,
426
+           82, 75, 76, 1, 86, 87, 88, 89, 8, 91,
427
+            1, 93, 137, 95, 101, 102, 98, 99, 106, 80,
428
+          108, 103, 104, 105, 106, 107, 1, 109, 110, 31,
429
+          155, 156, 157, 115, 116, 1, 156, 134, 135, 8,
430
+           84, 161, 124, 125, 126, 1, 116, 159, 84, 161,
431
+          116, 8, 149, 8, 136, 137, 31, 139, 140, 141,
432
+          142, 143, 144, 145, 161, 31, 163, 155, 138, 151,
433
+          152, 8, 138, 155, 156, 157, 158, 75, 76, 77,
434
+            8, 163, 84, 165, 166, 167, 84, 75, 76, 70,
435
+          116, 82, 90, 163, 92, 8, 94, 163, 96, 8,
436
+          161, 50, 51, 52, 111, 112, 167, 8, 106, 84,
437
+            9, 137, 106, 107, 8, 159, 82, 161, 8, 117,
438
+          118, 106, 107, 159, 122, 161, 82, 31, 14, 127,
439
+          128, 129, 130, 131, 16, 17, 18, 19, 20, 21,
440
+           22, 23, 24, 25, 26, 27, 28, 29, 37, 38,
441
+          116, 14, 14, 134, 135, 14, 1, 159, 14, 161,
442
+          116, 159, 128, 161, 162, 14, 16, 1, 149, 16,
443
+          161, 137, 70, 16, 16, 16, 167, 59, 60, 16,
444
+          161, 137, 163, 70, 159, 74, 161, 16, 70, 37,
445
+           38, 80, 158, 16, 16, 31, 31, 163, 87, 88,
446
+           89, 167, 91, 31, 93, 35, 95, 163, 35, 98,
447
+           31, 167, 31, 31, 103, 104, 105, 31, 31, 31,
448
+          109, 110, 70, 31, 31, 1, 115, 116, 31, 31,
449
+           35, 31, 31, 31, 82, 124, 134, 135, 86, 84,
450
+           31, 31, 31, 35, 70, 0, 1, 134, 135, 35,
451
+           84, 149, 134, 135, 35, 100, 101, 102, 35, 37,
452
+           57, 106, 149, 161, 37, 154, 37, 149, 116, 70,
453
+           37, 38, 117, 118, 161, 37, 69, 122, 38, 161,
454
+           89, 77, 127, 128, 129, 130, 131, 70, 136, 137,
455
+           85, 139, 140, 141, 142, 143, 144, 82, 80, 83,
456
+           94, 132, 82, 151, 152, 92, 82, 74, 134, 135,
457
+           85, 90, 100, 80, 159, 163, 161, 162, 166, 167,
458
+           87, 88, 89, 149, 91, 159, 93, 161, 95, 84,
459
+           96, 98, 97, 134, 135, 161, 103, 104, 105, 97,
460
+          116, 31, 109, 110, 97, 113, 100, 153, 115, 116,
461
+          114, 106, 128, 108, 128, 159, 128, 124, 113, -1,
462
+          161, 137, 117, 118, 133, -1, -1, 122, 138, 132,
463
+           -1, -1, 127, 128, 129, 130, 131, -1, 137, 31,
464
+           -1, -1, 158, -1, 74, 146, -1, 163, -1, 146,
465
+           80, 167, -1, 149, -1, 150, -1, 87, 88, 89,
466
+          149, 91, 149, 93, 159, 95, 161, 162, 98, 149,
467
+          149, 153, 155, 103, 104, 105, 154, 158, 162, 109,
468
+          110, 166, 74, 159, 159, 115, 116, 159, 80, 159,
469
+            1, 159, 159, 159, 124, 87, 88, 89, 159, 91,
470
+          159, 93, 159, 95, 159, 159, 98, 159, 159, 159,
471
+          159, 103, 104, 105, 74, 159, 161, 109, 110, 160,
472
+           80, 160, 160, 115, 116, 160, 160, 87, 88, 89,
473
+          161, 91, 124, 93, 160, 95, 161, 161, 98, 161,
474
+          161, 161, 102, 103, 104, 105, 74, 161, 161, 109,
475
+          110, 161, 80, 81, 161, 115, 116, 161, 163, 87,
476
+           88, 89, 162, 91, 124, 93, 162, 95, 162, 162,
477
+           98, 162, 162, 84, 162, 103, 104, 105, 162, 162,
478
+          162, 109, 110, 162, 162, 162, 162, 115, 116, 100,
479
+          101, 102, 162, 162, 162, 106, 124, 162, 162, 162,
480
+          162, 162, -1, 162, 162, 162, 117, 118, 163, 70,
481
+          163, 122, 163, 163, 163, 163, 127, 128, 129, 130,
482
+          131, 82, 163, 74, 163, 86, 163, 163, 163, 80,
483
+          163, 163, 163, 163, 163, -1, 87, 88, 89, 163,
484
+           91, 163, 93, 163, 95, 163, 163, 98, 159, 163,
485
+          161, 162, 103, 104, 105, 116, 163, 163, 109, 110,
486
+          163, 163, 163, 163, 115, 116, 163, 163, 163, 163,
487
+          163, 163, 163, 124, 164, 164, 137, 164, 139, 140,
488
+          141, 142, 143, 144, 164, 164, 164, 164, 164, 164,
489
+          151, 152, 164, 164, 164, 164, 164, 164, 164, 164,
490
+          164, 164, 163, 165, 164, 166, 167, 164, 164, 164,
491
+          164, 164, 164, -1, 164, 164, 164, 164, 164, 164,
492
+          164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
493
+          164, 164, -1, 165, -1, -1, 167
494 494
     );
495 495
 
496 496
     protected $actionBase = array(
497
-            0,   -2,  154,  542,  785,  695,  969,  549,   53,  420,
498
-          831,  307,  307,   67,  307,  307,  307,  496,  538,  538,
499
-          565,  538,  204,  504,  706,  706,  706,  651,  651,  651,
500
-          651,  773,  773,  920,  920,  952,  888,  850, 1029, 1029,
497
+            0, -2, 154, 542, 785, 695, 969, 549, 53, 420,
498
+          831, 307, 307, 67, 307, 307, 307, 496, 538, 538,
499
+          565, 538, 204, 504, 706, 706, 706, 651, 651, 651,
500
+          651, 773, 773, 920, 920, 952, 888, 850, 1029, 1029,
501 501
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
502 502
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
503 503
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
@@ -510,2346 +510,2346 @@  discard block
 block discarded – undo
510 510
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
511 511
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
512 512
          1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
513
-         1029, 1029,  211,  344,  288,  691, 1038, 1044, 1040, 1045,
514
-         1036, 1035, 1039, 1041, 1046,  917,  918,  751,  919,  921,
515
-          922,  923, 1042,  854, 1037, 1043,  291,  291,  291,  291,
516
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
517
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
518
-          291,  291,  641,  159,  473,  382,  382,  382,  382,  382,
519
-          382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
520
-          382,  382,  382,  382,  382,   54,   54,   54,  341,  692,
521
-          692,  190,  184,  658,   47, 1019, 1019, 1019, 1019, 1019,
522
-         1019, 1019, 1019, 1019, 1019,  144,  144,    7,    7,    7,
523
-            7,    7,  371,  -25,  -25,  -25,  -25,  574,  347,  764,
524
-          474,  584,  266,  241,  338,  470,  470,  591,  591,  396,
525
-         -116,  396,  348,  348,  396,  396,  396,  770,  770,  770,
526
-          770,  443,  559,  452,   86,  514,  479,  479,  479,  479,
527
-          514,  514,  514,  514,  783,  795,  514,  514,  514,  642,
528
-          653,  653,  714,  300,  300,  300,  653,  390,  765,   90,
529
-          390,   90,   37,  156,  781,  -55,  -40,  292,  768,  781,
530
-          320,  739,  314,  143,  797,  546,  797, 1034,  745,  733,
531
-          705,  836,  876, 1047,  752,  915,  786,  916,   62,  704,
513
+         1029, 1029, 211, 344, 288, 691, 1038, 1044, 1040, 1045,
514
+         1036, 1035, 1039, 1041, 1046, 917, 918, 751, 919, 921,
515
+          922, 923, 1042, 854, 1037, 1043, 291, 291, 291, 291,
516
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
517
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
518
+          291, 291, 641, 159, 473, 382, 382, 382, 382, 382,
519
+          382, 382, 382, 382, 382, 382, 382, 382, 382, 382,
520
+          382, 382, 382, 382, 382, 54, 54, 54, 341, 692,
521
+          692, 190, 184, 658, 47, 1019, 1019, 1019, 1019, 1019,
522
+         1019, 1019, 1019, 1019, 1019, 144, 144, 7, 7, 7,
523
+            7, 7, 371, -25, -25, -25, -25, 574, 347, 764,
524
+          474, 584, 266, 241, 338, 470, 470, 591, 591, 396,
525
+         -116, 396, 348, 348, 396, 396, 396, 770, 770, 770,
526
+          770, 443, 559, 452, 86, 514, 479, 479, 479, 479,
527
+          514, 514, 514, 514, 783, 795, 514, 514, 514, 642,
528
+          653, 653, 714, 300, 300, 300, 653, 390, 765, 90,
529
+          390, 90, 37, 156, 781, -55, -40, 292, 768, 781,
530
+          320, 739, 314, 143, 797, 546, 797, 1034, 745, 733,
531
+          705, 836, 876, 1047, 752, 915, 786, 916, 62, 704,
532 532
          1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
533
-         1033, 1049,  469, 1034,   65, 1049, 1049, 1049,  469,  469,
534
-          469,  469,  469,  469,  469,  469,  469,  469,  533,   65,
535
-          466,  552,   65,  763,  469,  211,  791,  211,  211,  211,
536
-          211,  973,  211,  211,  211,  211,  211,  211,  980,  737,
537
-           29,  211,  344,   52,   52,  428,   58,   52,   52,   52,
538
-           52,  211,  211,  211,  546,  743,  734,  555,  798,  195,
539
-          743,  743,  743,  345,  135,  192,  194,  710,  713,  280,
540
-          758,  758,  760,  931,  931,  758,  755,  758,  760,  944,
541
-          758,  931,  799,  433,  627,  571,  603,  631,  931,  494,
542
-          758,  758,  758,  758,  639,  758,  491,  445,  758,  758,
543
-          709,  741,  777,   46,  931,  931,  931,  777,  585,  771,
544
-          771,  771,  805,  808,  772,  740,  540,  507,  650,  138,
545
-          780,  740,  740,  758,  612,  772,  740,  772,  740,  802,
546
-          740,  740,  740,  772,  740,  755,  583,  740,  703,  646,
547
-           60,  740,    6,  945,  947,  636,  948,  941,  949,  989,
548
-          950,  951,  856,  963,  943,  956,  939,  932,  750,  690,
549
-          693,  793,  784,  930,  747,  747,  747,  927,  747,  747,
550
-          747,  747,  747,  747,  747,  747,  690,  839,  801,  766,
551
-          731,  974,  697,  698,  779,  880, 1018, 1048,  973, 1024,
552
-          958,  736,  699, 1004,  977,  796,  849,  978,  979, 1005,
553
-         1025, 1026,  884,  757,  886,  887,  841,  983,  858,  747,
554
-          945,  951,  943,  956,  939,  932,  732,  728,  726,  727,
555
-          722,  721,  712,  719,  738, 1027,  925,  875,  842,  980,
556
-          929,  690,  845, 1000,  835, 1008, 1009,  855,  782,  756,
557
-          846,  889,  984,  985,  986,  859, 1028,  804, 1001,  990,
558
-         1010,  787,  890, 1011, 1012, 1013, 1014,  892,  860,  866,
559
-          867,  810,  761,  991,  774,  896,   48,  754,  759,  778,
560
-          988,  654,  966,  870,  897,  898, 1015, 1016, 1017,  901,
561
-          960,  812, 1002,  746, 1003,  993,  813,  814,  677,  769,
562
-         1030,  735,  748,  767,  678,  681,  902,  903,  904,  962,
563
-          742,  744,  819,  821, 1031,  762, 1032,  910,  684,  823,
564
-          711,  911, 1023,  717,  718,  753,  873,  800,  776,  775,
565
-          987,  749,  825,  912,  826,  828,  829, 1020,  830,    0,
566
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
567
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
568
-            0,    0,    0,    0,    0,    0,    0,    0,  458,  458,
569
-          458,  458,  458,  458,  307,  307,  307,  307,    0,    0,
570
-          307,    0,    0,    0,  458,  458,  458,  458,  458,  458,
571
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
572
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
573
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
574
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
575
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
576
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
577
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
578
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
579
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
580
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
581
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
582
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
583
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
584
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  291,
585
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
586
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
587
-          291,  291,  291,    0,    0,    0,    0,    0,    0,    0,
588
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
589
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  291,
590
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
591
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
592
-          291,  291,  291,  291,  291,  291,  415,  415,  291,  291,
593
-            0,  291,  415,  415,  415,  415,  415,  415,  415,  415,
594
-          415,  415,  291,  291,  291,  291,  291,  291,  291,  799,
595
-          300,  300,  300,  300,  415,  415,  415,  415,  415,  -88,
596
-          -88,  415,  415,  415,  300,  300,  415,  244,  415,  415,
597
-          415,  415,  415,  415,  415,  415,  415,  415,    0,    0,
598
-           65,   90,  415,  755,  755,  755,  755,  415,  415,  415,
599
-          415,   90,   90,  415,  415,  415,    0,    0,    0,    0,
600
-            0,    0,    0,    0,   65,   90,    0,   65,    0,  755,
601
-          755,  415,  799,  799,  232,  244,  415,    0,    0,    0,
602
-            0,   65,  755,   65,  469,   90,  469,  469,   52,  211,
603
-          232,  453,  453,  453,  453,    0,  546,  799,  799,  799,
604
-          799,  799,  799,  799,  799,  799,  799,  799,  755,    0,
605
-          799,    0,  755,  755,  755,    0,    0,    0,    0,    0,
606
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
607
-          755,    0,    0,  931,    0,    0,    0,    0,  758,    0,
608
-            0,    0,    0,    0,    0,  758,  944,    0,    0,    0,
609
-            0,    0,    0,  755,    0,    0,    0,    0,    0,    0,
610
-            0,    0,  747,  782,    0,  782,    0,  747,  747,  747,
611
-            0,    0,    0,    0,  769,  762
533
+         1033, 1049, 469, 1034, 65, 1049, 1049, 1049, 469, 469,
534
+          469, 469, 469, 469, 469, 469, 469, 469, 533, 65,
535
+          466, 552, 65, 763, 469, 211, 791, 211, 211, 211,
536
+          211, 973, 211, 211, 211, 211, 211, 211, 980, 737,
537
+           29, 211, 344, 52, 52, 428, 58, 52, 52, 52,
538
+           52, 211, 211, 211, 546, 743, 734, 555, 798, 195,
539
+          743, 743, 743, 345, 135, 192, 194, 710, 713, 280,
540
+          758, 758, 760, 931, 931, 758, 755, 758, 760, 944,
541
+          758, 931, 799, 433, 627, 571, 603, 631, 931, 494,
542
+          758, 758, 758, 758, 639, 758, 491, 445, 758, 758,
543
+          709, 741, 777, 46, 931, 931, 931, 777, 585, 771,
544
+          771, 771, 805, 808, 772, 740, 540, 507, 650, 138,
545
+          780, 740, 740, 758, 612, 772, 740, 772, 740, 802,
546
+          740, 740, 740, 772, 740, 755, 583, 740, 703, 646,
547
+           60, 740, 6, 945, 947, 636, 948, 941, 949, 989,
548
+          950, 951, 856, 963, 943, 956, 939, 932, 750, 690,
549
+          693, 793, 784, 930, 747, 747, 747, 927, 747, 747,
550
+          747, 747, 747, 747, 747, 747, 690, 839, 801, 766,
551
+          731, 974, 697, 698, 779, 880, 1018, 1048, 973, 1024,
552
+          958, 736, 699, 1004, 977, 796, 849, 978, 979, 1005,
553
+         1025, 1026, 884, 757, 886, 887, 841, 983, 858, 747,
554
+          945, 951, 943, 956, 939, 932, 732, 728, 726, 727,
555
+          722, 721, 712, 719, 738, 1027, 925, 875, 842, 980,
556
+          929, 690, 845, 1000, 835, 1008, 1009, 855, 782, 756,
557
+          846, 889, 984, 985, 986, 859, 1028, 804, 1001, 990,
558
+         1010, 787, 890, 1011, 1012, 1013, 1014, 892, 860, 866,
559
+          867, 810, 761, 991, 774, 896, 48, 754, 759, 778,
560
+          988, 654, 966, 870, 897, 898, 1015, 1016, 1017, 901,
561
+          960, 812, 1002, 746, 1003, 993, 813, 814, 677, 769,
562
+         1030, 735, 748, 767, 678, 681, 902, 903, 904, 962,
563
+          742, 744, 819, 821, 1031, 762, 1032, 910, 684, 823,
564
+          711, 911, 1023, 717, 718, 753, 873, 800, 776, 775,
565
+          987, 749, 825, 912, 826, 828, 829, 1020, 830, 0,
566
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
567
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
568
+            0, 0, 0, 0, 0, 0, 0, 0, 458, 458,
569
+          458, 458, 458, 458, 307, 307, 307, 307, 0, 0,
570
+          307, 0, 0, 0, 458, 458, 458, 458, 458, 458,
571
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
572
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
573
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
574
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
575
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
576
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
577
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
578
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
579
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
580
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
581
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
582
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
583
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
584
+          458, 458, 458, 458, 458, 458, 458, 458, 458, 291,
585
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
586
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
587
+          291, 291, 291, 0, 0, 0, 0, 0, 0, 0,
588
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
589
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 291,
590
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
591
+          291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
592
+          291, 291, 291, 291, 291, 291, 415, 415, 291, 291,
593
+            0, 291, 415, 415, 415, 415, 415, 415, 415, 415,
594
+          415, 415, 291, 291, 291, 291, 291, 291, 291, 799,
595
+          300, 300, 300, 300, 415, 415, 415, 415, 415, -88,
596
+          -88, 415, 415, 415, 300, 300, 415, 244, 415, 415,
597
+          415, 415, 415, 415, 415, 415, 415, 415, 0, 0,
598
+           65, 90, 415, 755, 755, 755, 755, 415, 415, 415,
599
+          415, 90, 90, 415, 415, 415, 0, 0, 0, 0,
600
+            0, 0, 0, 0, 65, 90, 0, 65, 0, 755,
601
+          755, 415, 799, 799, 232, 244, 415, 0, 0, 0,
602
+            0, 65, 755, 65, 469, 90, 469, 469, 52, 211,
603
+          232, 453, 453, 453, 453, 0, 546, 799, 799, 799,
604
+          799, 799, 799, 799, 799, 799, 799, 799, 755, 0,
605
+          799, 0, 755, 755, 755, 0, 0, 0, 0, 0,
606
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
607
+          755, 0, 0, 931, 0, 0, 0, 0, 758, 0,
608
+            0, 0, 0, 0, 0, 758, 944, 0, 0, 0,
609
+            0, 0, 0, 755, 0, 0, 0, 0, 0, 0,
610
+            0, 0, 747, 782, 0, 782, 0, 747, 747, 747,
611
+            0, 0, 0, 0, 769, 762
612 612
     );
613 613
 
614 614
     protected $actionDefault = array(
615
-            3,32767,  103,32767,32767,32767,32767,32767,32767,32767,
616
-        32767,32767,  101,32767,32767,32767,32767,32767,32767,32767,
617
-        32767,32767,32767,32767,32767,32767,32767,  588,  588,  588,
618
-          588,32767,32767,  250,  103,32767,32767,  464,  382,  382,
619
-          382,32767,32767,  532,  532,  532,  532,  532,  532,32767,
620
-        32767,32767,32767,32767,32767,  464,32767,32767,32767,32767,
621
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
622
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
623
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
624
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
625
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
626
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
627
-        32767,32767,32767,32767,32767,32767,32767,32767,  101,32767,
628
-        32767,32767,   37,    7,    8,   10,   11,   50,   17,  320,
629
-        32767,32767,32767,32767,  103,32767,32767,32767,32767,32767,
630
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
631
-        32767,32767,32767,32767,32767,  581,32767,32767,32767,32767,
632
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
633
-        32767,32767,32767,32767,32767,32767,  468,  447,  448,  450,
634
-          451,  381,  533,  587,  323,  584,  380,  146,  335,  325,
635
-          238,  326,  254,  469,  255,  470,  473,  474,  211,  283,
636
-          377,  150,  411,  465,  413,  463,  467,  412,  387,  392,
637
-          393,  394,  395,  396,  397,  398,  399,  400,  401,  402,
638
-          403,  404,  385,  386,  466,  444,  443,  442,  409,32767,
639
-        32767,  410,  414,  384,  417,32767,32767,32767,32767,32767,
640
-        32767,32767,32767,  103,32767,  415,  416,  433,  434,  431,
641
-          432,  435,32767,  436,  437,  438,  439,32767,  312,32767,
642
-        32767,32767,  361,  359,  312,32767,32767,  424,  425,32767,
643
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
644
-        32767,  526,  441,32767,32767,32767,32767,32767,32767,32767,
645
-        32767,32767,32767,32767,32767,32767,  103,32767,  101,  528,
646
-          406,  408,  496,  419,  420,  418,  388,32767,  503,32767,
647
-          103,  505,32767,32767,32767,  112,32767,32767,32767,32767,
648
-          527,32767,  534,  534,32767,  489,  101,  194,32767,  194,
649
-          194,32767,32767,32767,32767,32767,32767,32767,  595,  489,
650
-          111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
651
-          111,32767,  194,  111,32767,32767,32767,  101,  194,  194,
652
-          194,  194,  194,  194,  194,  194,  194,  194,  189,32767,
653
-          264,  266,  103,  549,  194,32767,  508,32767,32767,32767,
654
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  501,
655
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
656
-        32767,32767,32767,32767,  489,  429,  139,32767,  139,  534,
657
-          421,  422,  423,  491,  534,  534,  534,  308,  285,32767,
658
-        32767,32767,32767,  506,  506,  101,  101,  101,  101,  501,
659
-        32767,32767,  112,  100,  100,  100,  100,  100,  104,  102,
660
-        32767,32767,32767,32767,  100,32767,  102,  102,32767,32767,
661
-          221,  208,  219,  102,32767,  553,  554,  219,  102,  223,
662
-          223,  223,  243,  243,  480,  314,  102,  100,  102,  102,
663
-          196,  314,  314,32767,  102,  480,  314,  480,  314,  198,
664
-          314,  314,  314,  480,  314,32767,  102,  314,  210,  100,
665
-          100,  314,32767,32767,32767,  491,32767,32767,32767,32767,
666
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
667
-          521,32767,  538,  551,  427,  428,  430,  536,  452,  453,
668
-          454,  455,  456,  457,  458,  460,  583,32767,  495,32767,
669
-        32767,32767,32767,  334,  593,32767,  593,32767,32767,32767,
670
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
671
-        32767,32767,  594,32767,  534,32767,32767,32767,32767,  426,
672
-            9,   76,   43,   44,   52,   58,  512,  513,  514,  515,
673
-          509,  510,  516,  511,32767,32767,  517,  559,32767,32767,
674
-          535,  586,32767,32767,32767,32767,32767,32767,  139,32767,
675
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  521,
676
-        32767,  137,32767,32767,32767,32767,32767,32767,32767,32767,
677
-        32767,32767,32767,  534,32767,32767,32767,32767,  310,  307,
678
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
679
-        32767,32767,32767,32767,32767,  534,32767,32767,32767,32767,
680
-        32767,  287,32767,  304,32767,32767,32767,32767,32767,32767,
681
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
682
-          282,32767,32767,  376,32767,32767,32767,32767,  355,32767,
683
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  152,
684
-          152,    3,    3,  337,  152,  152,  152,  337,  152,  337,
685
-          337,  337,  152,  152,  152,  152,  152,  152,  276,  184,
686
-          258,  261,  243,  243,  152,  347,  152
615
+            3, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
616
+        32767, 32767, 101, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
617
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 588, 588, 588,
618
+          588, 32767, 32767, 250, 103, 32767, 32767, 464, 382, 382,
619
+          382, 32767, 32767, 532, 532, 532, 532, 532, 532, 32767,
620
+        32767, 32767, 32767, 32767, 32767, 464, 32767, 32767, 32767, 32767,
621
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
622
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
623
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
624
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
625
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
626
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
627
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767,
628
+        32767, 32767, 37, 7, 8, 10, 11, 50, 17, 320,
629
+        32767, 32767, 32767, 32767, 103, 32767, 32767, 32767, 32767, 32767,
630
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
631
+        32767, 32767, 32767, 32767, 32767, 581, 32767, 32767, 32767, 32767,
632
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
633
+        32767, 32767, 32767, 32767, 32767, 32767, 468, 447, 448, 450,
634
+          451, 381, 533, 587, 323, 584, 380, 146, 335, 325,
635
+          238, 326, 254, 469, 255, 470, 473, 474, 211, 283,
636
+          377, 150, 411, 465, 413, 463, 467, 412, 387, 392,
637
+          393, 394, 395, 396, 397, 398, 399, 400, 401, 402,
638
+          403, 404, 385, 386, 466, 444, 443, 442, 409, 32767,
639
+        32767, 410, 414, 384, 417, 32767, 32767, 32767, 32767, 32767,
640
+        32767, 32767, 32767, 103, 32767, 415, 416, 433, 434, 431,
641
+          432, 435, 32767, 436, 437, 438, 439, 32767, 312, 32767,
642
+        32767, 32767, 361, 359, 312, 32767, 32767, 424, 425, 32767,
643
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
644
+        32767, 526, 441, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
645
+        32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 101, 528,
646
+          406, 408, 496, 419, 420, 418, 388, 32767, 503, 32767,
647
+          103, 505, 32767, 32767, 32767, 112, 32767, 32767, 32767, 32767,
648
+          527, 32767, 534, 534, 32767, 489, 101, 194, 32767, 194,
649
+          194, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 595, 489,
650
+          111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
651
+          111, 32767, 194, 111, 32767, 32767, 32767, 101, 194, 194,
652
+          194, 194, 194, 194, 194, 194, 194, 194, 189, 32767,
653
+          264, 266, 103, 549, 194, 32767, 508, 32767, 32767, 32767,
654
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 501,
655
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
656
+        32767, 32767, 32767, 32767, 489, 429, 139, 32767, 139, 534,
657
+          421, 422, 423, 491, 534, 534, 534, 308, 285, 32767,
658
+        32767, 32767, 32767, 506, 506, 101, 101, 101, 101, 501,
659
+        32767, 32767, 112, 100, 100, 100, 100, 100, 104, 102,
660
+        32767, 32767, 32767, 32767, 100, 32767, 102, 102, 32767, 32767,
661
+          221, 208, 219, 102, 32767, 553, 554, 219, 102, 223,
662
+          223, 223, 243, 243, 480, 314, 102, 100, 102, 102,
663
+          196, 314, 314, 32767, 102, 480, 314, 480, 314, 198,
664
+          314, 314, 314, 480, 314, 32767, 102, 314, 210, 100,
665
+          100, 314, 32767, 32767, 32767, 491, 32767, 32767, 32767, 32767,
666
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
667
+          521, 32767, 538, 551, 427, 428, 430, 536, 452, 453,
668
+          454, 455, 456, 457, 458, 460, 583, 32767, 495, 32767,
669
+        32767, 32767, 32767, 334, 593, 32767, 593, 32767, 32767, 32767,
670
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
671
+        32767, 32767, 594, 32767, 534, 32767, 32767, 32767, 32767, 426,
672
+            9, 76, 43, 44, 52, 58, 512, 513, 514, 515,
673
+          509, 510, 516, 511, 32767, 32767, 517, 559, 32767, 32767,
674
+          535, 586, 32767, 32767, 32767, 32767, 32767, 32767, 139, 32767,
675
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 521,
676
+        32767, 137, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
677
+        32767, 32767, 32767, 534, 32767, 32767, 32767, 32767, 310, 307,
678
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
679
+        32767, 32767, 32767, 32767, 32767, 534, 32767, 32767, 32767, 32767,
680
+        32767, 287, 32767, 304, 32767, 32767, 32767, 32767, 32767, 32767,
681
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
682
+          282, 32767, 32767, 376, 32767, 32767, 32767, 32767, 355, 32767,
683
+        32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152,
684
+          152, 3, 3, 337, 152, 152, 152, 337, 152, 337,
685
+          337, 337, 152, 152, 152, 152, 152, 152, 276, 184,
686
+          258, 261, 243, 243, 152, 347, 152
687 687
     );
688 688
 
689 689
     protected $goto = array(
690
-          194,  194,  677,  466, 1281, 1282,  345,  428,  325,  325,
691
-          325,  325,  536,  536,  536,  536,  665,  591,  926, 1039,
692
-          685, 1003, 1019, 1020, 1080, 1081,  165,  165,  165,  165,
693
-          218,  195,  191,  191,  175,  177,  213,  191,  191,  191,
694
-          191,  191,  192,  192,  192,  192,  192,  192,  186,  187,
695
-          188,  189,  190,  215,  213,  216,  524,  525,  415,  526,
696
-          528,  529,  530,  531,  532,  533,  534,  535, 1108,  166,
697
-          167,  168,  193,  169,  170,  171,  164,  172,  173,  174,
698
-          176,  212,  214,  217,  235,  238,  241,  242,  244,  255,
699
-          256,  257,  258,  259,  260,  261,  263,  264,  265,  266,
700
-          277,  278,  313,  314,  315,  420,  421,  422,  569,  219,
701
-          220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
702
-          230,  231,  232,  233,  178,  234,  179,  196,  197,  198,
703
-          236,  186,  187,  188,  189,  190,  215, 1108,  199,  180,
704
-          181,  182,  200,  196,  183,  237,  201,  199,  163,  202,
705
-          203,  184,  204,  205,  206,  185,  207,  208,  209,  210,
706
-          211,  834,  587,  425,  645,  548,  541,  830,  831,  419,
707
-          310,  311,  332,  564,  316,  424,  333,  426,  623,  832,
708
-          973,  947,  947,  945,  947,  710,  808,  540,  982,  977,
709
-          827,  827,  607,  642,  391,  541,  548,  557,  558,  398,
710
-          567,  589,  603,  604,  839,  865,  887,  882,  883,  896,
711
-           15,  840,  884,  837,  885,  886,  838,  457,  457,  639,
712
-          890,  656,  657,  658,  987,  987,  457,  609,  609,  806,
690
+          194, 194, 677, 466, 1281, 1282, 345, 428, 325, 325,
691
+          325, 325, 536, 536, 536, 536, 665, 591, 926, 1039,
692
+          685, 1003, 1019, 1020, 1080, 1081, 165, 165, 165, 165,
693
+          218, 195, 191, 191, 175, 177, 213, 191, 191, 191,
694
+          191, 191, 192, 192, 192, 192, 192, 192, 186, 187,
695
+          188, 189, 190, 215, 213, 216, 524, 525, 415, 526,
696
+          528, 529, 530, 531, 532, 533, 534, 535, 1108, 166,
697
+          167, 168, 193, 169, 170, 171, 164, 172, 173, 174,
698
+          176, 212, 214, 217, 235, 238, 241, 242, 244, 255,
699
+          256, 257, 258, 259, 260, 261, 263, 264, 265, 266,
700
+          277, 278, 313, 314, 315, 420, 421, 422, 569, 219,
701
+          220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
702
+          230, 231, 232, 233, 178, 234, 179, 196, 197, 198,
703
+          236, 186, 187, 188, 189, 190, 215, 1108, 199, 180,
704
+          181, 182, 200, 196, 183, 237, 201, 199, 163, 202,
705
+          203, 184, 204, 205, 206, 185, 207, 208, 209, 210,
706
+          211, 834, 587, 425, 645, 548, 541, 830, 831, 419,
707
+          310, 311, 332, 564, 316, 424, 333, 426, 623, 832,
708
+          973, 947, 947, 945, 947, 710, 808, 540, 982, 977,
709
+          827, 827, 607, 642, 391, 541, 548, 557, 558, 398,
710
+          567, 589, 603, 604, 839, 865, 887, 882, 883, 896,
711
+           15, 840, 884, 837, 885, 886, 838, 457, 457, 639,
712
+          890, 656, 657, 658, 987, 987, 457, 609, 609, 806,
713 713
          1060, 1056, 1057, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
714
-         1238, 1238, 1238, 1256, 1256,  346,  347,  812,  949, 1256,
714
+         1238, 1238, 1238, 1256, 1256, 346, 347, 812, 949, 1256,
715 715
          1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1014,
716
-         1013, 1207, 1008, 1207, 1008, 1207,  561,  442, 1008, 1008,
717
-         1008,  343,  442, 1008,  442, 1008, 1008, 1008, 1008, 1008,
718
-         1008, 1008, 1008, 1008, 1008,  251,  251, 1296,  812, 1207,
719
-          812, 1307, 1307,  970, 1207, 1207, 1207, 1207, 1017, 1018,
720
-         1207, 1207, 1207, 1288, 1288, 1288, 1288,  827, 1307,  321,
721
-          305,  248,  248,  248,  248,  250,  252,  387,  903, 1254,
722
-         1254,  619,  620,  904, 1203, 1254, 1254, 1254, 1254, 1254,
723
-         1254, 1254, 1254, 1254, 1254,  527,  527,  280,  280,  280,
724
-          280,  527,  527,  527,  527,  527,  527,  527,  527,  527,
725
-          527,  941,  405,  684,  560,  442,  442,  442,  442,  442,
726
-          442,  442,  442,  442,  442,  442,  348,  644,  442,  389,
727
-          393,  549,  588,  592,  847, 1157,  348,  348,  538, 1204,
728
-          538,  891,  538,  892,  432,  418,  822,  598,  666,  859,
729
-          348,  348,  846,  348,    5, 1323,    6,  824,  554, 1283,
730
-         1284,  650, 1205, 1264, 1265,  602,  448,  543,  565,  601,
731
-          348,  943,  943,  943,  943,  334,  932,  448,  937,  944,
732
-          403,  404, 1278,  852, 1278,  654, 1278,  655,  397,  407,
733
-          408,  409, 1200,  668,  849, 1045,  410,  542,  552,  992,
734
-          341,  490,  542,  491,  552,  714,  467,  390,  861,  497,
735
-         1049, 1290, 1290, 1290, 1290, 1267,  954,  568,  460,  461,
736
-          462, 1091,  857,  471,    0, 1314, 1315,  555,    0,    0,
737
-            0,  711,  622,  624,    0,  643,    0, 1274,  670,  667,
738
-          671,  984,  675,  683,  980,    0,    0,    0,    0,    0,
739
-          855,  596,  610,  613,  614,  615,  616,  636,  637,  638,
740
-          687,  860,  848, 1044, 1048,  908, 1096,    0,  543,    0,
741
-            0,  952,  606, 1306, 1306,    0, 1047,  989,    0,    0,
742
-         1276, 1276, 1047,  254,  254,  851,    0,  648,  968,  427,
743
-         1306,    0,    0,  845,  942,  427,    0,    0,    0,    0,
744
-            0,    0,    0, 1015, 1015, 1199,    0, 1309,  649, 1026,
745
-         1022, 1023,    0,    0,    0,    0, 1089,  864,    0,    0,
746
-            0,  586, 1073,    0,  688,  674,  674, 1202,  498,  680,
747
-         1071, 1188,  919,    0,    0, 1189, 1192,  920, 1193,    0,
748
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
749
-            0,    0,    0,    0,    0,    0,  272,    0,    0,    0,
750
-            0,  539,    0,  539
716
+         1013, 1207, 1008, 1207, 1008, 1207, 561, 442, 1008, 1008,
717
+         1008, 343, 442, 1008, 442, 1008, 1008, 1008, 1008, 1008,
718
+         1008, 1008, 1008, 1008, 1008, 251, 251, 1296, 812, 1207,
719
+          812, 1307, 1307, 970, 1207, 1207, 1207, 1207, 1017, 1018,
720
+         1207, 1207, 1207, 1288, 1288, 1288, 1288, 827, 1307, 321,
721
+          305, 248, 248, 248, 248, 250, 252, 387, 903, 1254,
722
+         1254, 619, 620, 904, 1203, 1254, 1254, 1254, 1254, 1254,
723
+         1254, 1254, 1254, 1254, 1254, 527, 527, 280, 280, 280,
724
+          280, 527, 527, 527, 527, 527, 527, 527, 527, 527,
725
+          527, 941, 405, 684, 560, 442, 442, 442, 442, 442,
726
+          442, 442, 442, 442, 442, 442, 348, 644, 442, 389,
727
+          393, 549, 588, 592, 847, 1157, 348, 348, 538, 1204,
728
+          538, 891, 538, 892, 432, 418, 822, 598, 666, 859,
729
+          348, 348, 846, 348, 5, 1323, 6, 824, 554, 1283,
730
+         1284, 650, 1205, 1264, 1265, 602, 448, 543, 565, 601,
731
+          348, 943, 943, 943, 943, 334, 932, 448, 937, 944,
732
+          403, 404, 1278, 852, 1278, 654, 1278, 655, 397, 407,
733
+          408, 409, 1200, 668, 849, 1045, 410, 542, 552, 992,
734
+          341, 490, 542, 491, 552, 714, 467, 390, 861, 497,
735
+         1049, 1290, 1290, 1290, 1290, 1267, 954, 568, 460, 461,
736
+          462, 1091, 857, 471, 0, 1314, 1315, 555, 0, 0,
737
+            0, 711, 622, 624, 0, 643, 0, 1274, 670, 667,
738
+          671, 984, 675, 683, 980, 0, 0, 0, 0, 0,
739
+          855, 596, 610, 613, 614, 615, 616, 636, 637, 638,
740
+          687, 860, 848, 1044, 1048, 908, 1096, 0, 543, 0,
741
+            0, 952, 606, 1306, 1306, 0, 1047, 989, 0, 0,
742
+         1276, 1276, 1047, 254, 254, 851, 0, 648, 968, 427,
743
+         1306, 0, 0, 845, 942, 427, 0, 0, 0, 0,
744
+            0, 0, 0, 1015, 1015, 1199, 0, 1309, 649, 1026,
745
+         1022, 1023, 0, 0, 0, 0, 1089, 864, 0, 0,
746
+            0, 586, 1073, 0, 688, 674, 674, 1202, 498, 680,
747
+         1071, 1188, 919, 0, 0, 1189, 1192, 920, 1193, 0,
748
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
749
+            0, 0, 0, 0, 0, 0, 272, 0, 0, 0,
750
+            0, 539, 0, 539
751 751
     );
752 752
 
753 753
     protected $gotoCheck = array(
754
-           42,   42,   72,  172,  172,  172,   95,   87,   23,   23,
755
-           23,   23,  105,  105,  105,  105,   87,  105,   87,  125,
756
-            9,   87,   87,   87,  142,  142,   42,   42,   42,   42,
757
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
758
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
759
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
760
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
761
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
762
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
763
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
764
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
765
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
766
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
767
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
768
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
769
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
770
-           42,   15,  128,   65,   65,   75,   75,   25,   26,   65,
771
-           65,   65,   65,   65,   65,   65,   65,   65,   65,   27,
772
-           25,   25,   25,   25,   25,   25,    7,   25,   25,   25,
773
-           22,   22,   55,   55,   75,   75,   75,   75,   75,   75,
774
-           75,   75,   75,   75,   15,   45,   15,   15,   15,   15,
775
-           75,   15,   15,   15,   15,   15,   15,  147,  147,   84,
776
-           15,   84,   84,   84,  105,  105,  147,  106,  106,    6,
777
-           15,   15,   15,  106,  106,  106,  106,  106,  106,  106,
778
-          106,  106,  106,  166,  166,   95,   95,   12,   49,  166,
779
-          166,  166,  166,  166,  166,  166,  166,  166,  166,  116,
780
-          116,   72,   72,   72,   72,   72,  168,   23,   72,   72,
781
-           72,  175,   23,   72,   23,   72,   72,   72,   72,   72,
782
-           72,   72,   72,   72,   72,    5,    5,  177,   12,   72,
783
-           12,  179,  179,  101,   72,   72,   72,   72,  117,  117,
784
-           72,   72,   72,    9,    9,    9,    9,   22,  179,  165,
785
-          165,    5,    5,    5,    5,    5,    5,   61,   72,  167,
786
-          167,   83,   83,   72,   20,  167,  167,  167,  167,  167,
787
-          167,  167,  167,  167,  167,  169,  169,   24,   24,   24,
788
-           24,  169,  169,  169,  169,  169,  169,  169,  169,  169,
789
-          169,   91,   91,   91,  102,   23,   23,   23,   23,   23,
790
-           23,   23,   23,   23,   23,   23,   14,   63,   23,   58,
791
-           58,   58,   58,   58,   35,  149,   14,   14,   19,   20,
792
-           19,   64,   19,   64,  111,   13,   20,   13,  114,   35,
793
-           14,   14,   35,   14,   46,   14,   46,   18,    9,  174,
794
-          174,  118,   20,   20,   20,    9,   19,   14,    2,    2,
795
-           14,   19,   19,   19,   19,   29,   90,   19,   19,   19,
796
-           80,   80,  128,   39,  128,   80,  128,   80,   28,   80,
797
-           80,   80,  158,   80,   37,  127,   80,    9,    9,  108,
798
-           80,  153,    9,  153,    9,   97,  155,    9,   41,  153,
799
-          130,  128,  128,  128,  128,   14,   94,    9,    9,    9,
800
-            9,  145,    9,   82,   -1,    9,    9,   48,   -1,   -1,
801
-           -1,   48,   48,   48,   -1,   48,   -1,  128,   14,   48,
802
-           48,   48,   48,   48,   48,   -1,   -1,   -1,   -1,   -1,
803
-            9,   79,   79,   79,   79,   79,   79,   79,   79,   79,
804
-           79,   16,   16,   16,   16,   17,   17,   -1,   14,   -1,
805
-           -1,   16,   17,  178,  178,   -1,  128,   17,   -1,   -1,
806
-          128,  128,  128,    5,    5,   17,   -1,   17,   17,  115,
807
-          178,   -1,   -1,   17,   16,  115,   -1,   -1,   -1,   -1,
808
-           -1,   -1,   -1,  115,  115,   17,   -1,  178,  115,  115,
809
-          115,  115,   -1,   -1,   -1,   -1,   16,   16,   -1,   -1,
810
-           -1,    8,    8,   -1,    8,    8,    8,   14,    8,    8,
811
-            8,   78,   78,   -1,   -1,   78,   78,   78,   78,   -1,
812
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
813
-           -1,   -1,   -1,   -1,   -1,   -1,   24,   -1,   -1,   -1,
814
-           -1,   24,   -1,   24
754
+           42, 42, 72, 172, 172, 172, 95, 87, 23, 23,
755
+           23, 23, 105, 105, 105, 105, 87, 105, 87, 125,
756
+            9, 87, 87, 87, 142, 142, 42, 42, 42, 42,
757
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
758
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
759
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
760
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
761
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
762
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
763
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
764
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
765
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
766
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
767
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
768
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
769
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
770
+           42, 15, 128, 65, 65, 75, 75, 25, 26, 65,
771
+           65, 65, 65, 65, 65, 65, 65, 65, 65, 27,
772
+           25, 25, 25, 25, 25, 25, 7, 25, 25, 25,
773
+           22, 22, 55, 55, 75, 75, 75, 75, 75, 75,
774
+           75, 75, 75, 75, 15, 45, 15, 15, 15, 15,
775
+           75, 15, 15, 15, 15, 15, 15, 147, 147, 84,
776
+           15, 84, 84, 84, 105, 105, 147, 106, 106, 6,
777
+           15, 15, 15, 106, 106, 106, 106, 106, 106, 106,
778
+          106, 106, 106, 166, 166, 95, 95, 12, 49, 166,
779
+          166, 166, 166, 166, 166, 166, 166, 166, 166, 116,
780
+          116, 72, 72, 72, 72, 72, 168, 23, 72, 72,
781
+           72, 175, 23, 72, 23, 72, 72, 72, 72, 72,
782
+           72, 72, 72, 72, 72, 5, 5, 177, 12, 72,
783
+           12, 179, 179, 101, 72, 72, 72, 72, 117, 117,
784
+           72, 72, 72, 9, 9, 9, 9, 22, 179, 165,
785
+          165, 5, 5, 5, 5, 5, 5, 61, 72, 167,
786
+          167, 83, 83, 72, 20, 167, 167, 167, 167, 167,
787
+          167, 167, 167, 167, 167, 169, 169, 24, 24, 24,
788
+           24, 169, 169, 169, 169, 169, 169, 169, 169, 169,
789
+          169, 91, 91, 91, 102, 23, 23, 23, 23, 23,
790
+           23, 23, 23, 23, 23, 23, 14, 63, 23, 58,
791
+           58, 58, 58, 58, 35, 149, 14, 14, 19, 20,
792
+           19, 64, 19, 64, 111, 13, 20, 13, 114, 35,
793
+           14, 14, 35, 14, 46, 14, 46, 18, 9, 174,
794
+          174, 118, 20, 20, 20, 9, 19, 14, 2, 2,
795
+           14, 19, 19, 19, 19, 29, 90, 19, 19, 19,
796
+           80, 80, 128, 39, 128, 80, 128, 80, 28, 80,
797
+           80, 80, 158, 80, 37, 127, 80, 9, 9, 108,
798
+           80, 153, 9, 153, 9, 97, 155, 9, 41, 153,
799
+          130, 128, 128, 128, 128, 14, 94, 9, 9, 9,
800
+            9, 145, 9, 82, -1, 9, 9, 48, -1, -1,
801
+           -1, 48, 48, 48, -1, 48, -1, 128, 14, 48,
802
+           48, 48, 48, 48, 48, -1, -1, -1, -1, -1,
803
+            9, 79, 79, 79, 79, 79, 79, 79, 79, 79,
804
+           79, 16, 16, 16, 16, 17, 17, -1, 14, -1,
805
+           -1, 16, 17, 178, 178, -1, 128, 17, -1, -1,
806
+          128, 128, 128, 5, 5, 17, -1, 17, 17, 115,
807
+          178, -1, -1, 17, 16, 115, -1, -1, -1, -1,
808
+           -1, -1, -1, 115, 115, 17, -1, 178, 115, 115,
809
+          115, 115, -1, -1, -1, -1, 16, 16, -1, -1,
810
+           -1, 8, 8, -1, 8, 8, 8, 14, 8, 8,
811
+            8, 78, 78, -1, -1, 78, 78, 78, 78, -1,
812
+           -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
813
+           -1, -1, -1, -1, -1, -1, 24, -1, -1, -1,
814
+           -1, 24, -1, 24
815 815
     );
816 816
 
817 817
     protected $gotoBase = array(
818
-            0,    0, -283,    0,    0,  284,  216,  177,  554,    7,
819
-            0,    0,  -46,   51,   72, -181,   57,   49,   91,  111,
820
-          -62,    0, -135,    5,  334,  163,  164,  175,   94,  122,
821
-            0,    0,    0,    0,    0,   10,    0,   98,    0,  103,
822
-            0,   13,   -1,    0,    0,  193, -320,    0, -223,  225,
823
-            0,    0,    0,    0,    0,  153,    0,    0,  325,    0,
824
-            0,  276,    0,  127,  362,  -76,    0,    0,    0,    0,
825
-            0,    0,   -6,    0,    0, -174,    0,    0,  168,  140,
826
-          -61,    0,   -4, -149, -478,    0,    0, -263,    0,    0,
827
-           88,   50,    0,    0,   19, -467,    0,   43,    0,    0,
828
-            0,  259,  312,    0,    0,  -15,  -12,    0,   76,    0,
829
-            0,  110,    0,    0,  109,  261,  -16,   16,  114,    0,
830
-            0,    0,    0,    0,    0,   17,    0,   68,  155,    0,
831
-           14,    0,    0,    0,    0,    0,    0,    0,    0,    0,
832
-            0,    0, -248,    0,    0,   23,    0,  184,    0,  104,
833
-            0,    0,    0,  -44,    0,   12,    0,    0,   70,    0,
834
-            0,    0,    0,    0,    0,   -9,    4,   80,  238,   96,
835
-            0,    0, -294,    0,   34,  242,    0,  257,  209,  -13,
836
-            0,    0
818
+            0, 0, -283, 0, 0, 284, 216, 177, 554, 7,
819
+            0, 0, -46, 51, 72, -181, 57, 49, 91, 111,
820
+          -62, 0, -135, 5, 334, 163, 164, 175, 94, 122,
821
+            0, 0, 0, 0, 0, 10, 0, 98, 0, 103,
822
+            0, 13, -1, 0, 0, 193, -320, 0, -223, 225,
823
+            0, 0, 0, 0, 0, 153, 0, 0, 325, 0,
824
+            0, 276, 0, 127, 362, -76, 0, 0, 0, 0,
825
+            0, 0, -6, 0, 0, -174, 0, 0, 168, 140,
826
+          -61, 0, -4, -149, -478, 0, 0, -263, 0, 0,
827
+           88, 50, 0, 0, 19, -467, 0, 43, 0, 0,
828
+            0, 259, 312, 0, 0, -15, -12, 0, 76, 0,
829
+            0, 110, 0, 0, 109, 261, -16, 16, 114, 0,
830
+            0, 0, 0, 0, 0, 17, 0, 68, 155, 0,
831
+           14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
832
+            0, 0, -248, 0, 0, 23, 0, 184, 0, 104,
833
+            0, 0, 0, -44, 0, 12, 0, 0, 70, 0,
834
+            0, 0, 0, 0, 0, -9, 4, 80, 238, 96,
835
+            0, 0, -294, 0, 34, 242, 0, 257, 209, -13,
836
+            0, 0
837 837
     );
838 838
 
839 839
     protected $gotoDefault = array(
840
-        -32768,  502,  718,    4,  719,  912,  795,  804,  584,  518,
841
-          686,  342,  611,  416, 1272,  889, 1095,  566,  823, 1216,
842
-         1224,  449,  826,  326,  708,  871,  872,  873,  394,  379,
843
-          385,  392,  634,  612,  484,  858,  445,  850,  476,  853,
844
-          444,  862,  162,  413,  500,  866,    3,  868,  545,  899,
845
-          380,  876,  381,  661,  878,  551,  880,  881,  388,  395,
846
-          396, 1100,  559,  608,  893,  243,  553,  894,  378,  895,
847
-          902,  383,  386,  672,  456,  495,  489,  406, 1075,  595,
848
-          631,  453,  470,  618,  617,  605,  469, 1011,  411,  328,
849
-          931,  939,  477,  454,  953,  344,  961,  716, 1107,  625,
850
-          479,  969,  626,  976,  979,  519,  520,  468,  991,  268,
851
-          994,  480, 1032,  651, 1005, 1006,  652,  627, 1028,  628,
852
-          653,  629, 1030,  463,  585, 1038,  446, 1046, 1260,  447,
853
-         1050,  262, 1053,  274,  412,  429, 1058, 1059,    8, 1065,
854
-          678,  679,   10,  273,  499, 1090,  673,  443, 1106,  433,
855
-         1176, 1178,  547,  481, 1196, 1195,  664,  496, 1201, 1263,
856
-          441,  521,  464,  312,  522,  304,  330,  309,  537,  291,
857
-          331,  523,  465, 1269, 1277,  327,   30, 1297, 1308,  338,
858
-          563,  600
840
+        -32768, 502, 718, 4, 719, 912, 795, 804, 584, 518,
841
+          686, 342, 611, 416, 1272, 889, 1095, 566, 823, 1216,
842
+         1224, 449, 826, 326, 708, 871, 872, 873, 394, 379,
843
+          385, 392, 634, 612, 484, 858, 445, 850, 476, 853,
844
+          444, 862, 162, 413, 500, 866, 3, 868, 545, 899,
845
+          380, 876, 381, 661, 878, 551, 880, 881, 388, 395,
846
+          396, 1100, 559, 608, 893, 243, 553, 894, 378, 895,
847
+          902, 383, 386, 672, 456, 495, 489, 406, 1075, 595,
848
+          631, 453, 470, 618, 617, 605, 469, 1011, 411, 328,
849
+          931, 939, 477, 454, 953, 344, 961, 716, 1107, 625,
850
+          479, 969, 626, 976, 979, 519, 520, 468, 991, 268,
851
+          994, 480, 1032, 651, 1005, 1006, 652, 627, 1028, 628,
852
+          653, 629, 1030, 463, 585, 1038, 446, 1046, 1260, 447,
853
+         1050, 262, 1053, 274, 412, 429, 1058, 1059, 8, 1065,
854
+          678, 679, 10, 273, 499, 1090, 673, 443, 1106, 433,
855
+         1176, 1178, 547, 481, 1196, 1195, 664, 496, 1201, 1263,
856
+          441, 521, 464, 312, 522, 304, 330, 309, 537, 291,
857
+          331, 523, 465, 1269, 1277, 327, 30, 1297, 1308, 338,
858
+          563, 600
859 859
     );
860 860
 
861 861
     protected $ruleToNonTerminal = array(
862
-            0,    1,    3,    3,    2,    5,    5,    6,    6,    6,
863
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
864
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
865
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
866
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
867
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
868
-            6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
869
-            6,    6,    6,    6,    6,    6,    6,    6,    7,    7,
870
-            7,    7,    7,    7,    7,    7,    8,    8,    9,   10,
871
-           11,   11,   11,   12,   12,   13,   13,   14,   15,   15,
872
-           16,   16,   17,   17,   18,   18,   21,   21,   22,   23,
873
-           23,   24,   24,    4,    4,    4,    4,    4,    4,    4,
874
-            4,    4,    4,    4,   29,   29,   30,   30,   32,   34,
875
-           34,   28,   36,   36,   33,   38,   38,   35,   35,   37,
876
-           37,   39,   39,   31,   40,   40,   41,   43,   44,   44,
877
-           45,   46,   46,   48,   47,   47,   47,   47,   49,   49,
878
-           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
879
-           49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
880
-           49,   49,   25,   25,   68,   68,   71,   71,   70,   69,
881
-           69,   62,   74,   74,   75,   75,   76,   76,   77,   77,
882
-           78,   78,   26,   26,   27,   27,   27,   27,   86,   86,
883
-           88,   88,   81,   81,   89,   89,   90,   90,   90,   82,
884
-           82,   85,   85,   83,   83,   91,   92,   92,   56,   56,
885
-           64,   64,   67,   67,   67,   66,   93,   93,   94,   57,
886
-           57,   57,   57,   95,   95,   96,   96,   97,   97,   98,
887
-           99,   99,  100,  100,  101,  101,   54,   54,   50,   50,
888
-          103,   52,   52,  104,   51,   51,   53,   53,   63,   63,
889
-           63,   63,   79,   79,  107,  107,  109,  109,  110,  110,
890
-          110,  110,  108,  108,  108,  112,  112,  112,  112,   87,
891
-           87,  115,  115,  115,  116,  116,  113,  113,  117,  117,
892
-          119,  119,  120,  120,  114,  121,  121,  118,  122,  122,
893
-          122,  122,  111,  111,   80,   80,   80,   20,   20,   20,
894
-          124,  123,  123,  125,  125,  125,  125,   59,  126,  126,
895
-          127,   60,  129,  129,  130,  130,  131,  131,   84,  132,
896
-          132,  132,  132,  132,  132,  137,  137,  138,  138,  139,
897
-          139,  139,  139,  139,  140,  141,  141,  136,  136,  133,
898
-          133,  135,  135,  143,  143,  142,  142,  142,  142,  142,
899
-          142,  142,  134,  144,  144,  146,  145,  145,   61,  102,
900
-          147,  147,   55,   55,   42,   42,   42,   42,   42,   42,
901
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
902
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
903
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
904
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
905
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
906
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
907
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
908
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
909
-           42,   42,   42,   42,   42,   42,   42,  154,  148,  148,
910
-          153,  153,  156,  157,  157,  158,  159,  159,  159,   19,
911
-           19,   72,   72,   72,   72,  149,  149,  149,  149,  161,
912
-          161,  150,  150,  152,  152,  152,  155,  155,  166,  166,
913
-          166,  166,  166,  166,  166,  166,  166,  167,  167,  106,
914
-          169,  169,  169,  169,  151,  151,  151,  151,  151,  151,
915
-          151,  151,   58,   58,  164,  164,  164,  164,  170,  170,
916
-          160,  160,  160,  171,  171,  171,  171,  171,  171,   73,
917
-           73,   65,   65,   65,   65,  128,  128,  128,  128,  174,
918
-          173,  163,  163,  163,  163,  163,  163,  163,  162,  162,
919
-          162,  172,  172,  172,  172,  105,  168,  176,  176,  175,
920
-          175,  177,  177,  177,  177,  177,  177,  177,  177,  165,
921
-          165,  165,  165,  179,  180,  178,  178,  178,  178,  178,
922
-          178,  178,  178,  181,  181,  181,  181
862
+            0, 1, 3, 3, 2, 5, 5, 6, 6, 6,
863
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
864
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
865
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
866
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
867
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
868
+            6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
869
+            6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
870
+            7, 7, 7, 7, 7, 7, 8, 8, 9, 10,
871
+           11, 11, 11, 12, 12, 13, 13, 14, 15, 15,
872
+           16, 16, 17, 17, 18, 18, 21, 21, 22, 23,
873
+           23, 24, 24, 4, 4, 4, 4, 4, 4, 4,
874
+            4, 4, 4, 4, 29, 29, 30, 30, 32, 34,
875
+           34, 28, 36, 36, 33, 38, 38, 35, 35, 37,
876
+           37, 39, 39, 31, 40, 40, 41, 43, 44, 44,
877
+           45, 46, 46, 48, 47, 47, 47, 47, 49, 49,
878
+           49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
879
+           49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
880
+           49, 49, 25, 25, 68, 68, 71, 71, 70, 69,
881
+           69, 62, 74, 74, 75, 75, 76, 76, 77, 77,
882
+           78, 78, 26, 26, 27, 27, 27, 27, 86, 86,
883
+           88, 88, 81, 81, 89, 89, 90, 90, 90, 82,
884
+           82, 85, 85, 83, 83, 91, 92, 92, 56, 56,
885
+           64, 64, 67, 67, 67, 66, 93, 93, 94, 57,
886
+           57, 57, 57, 95, 95, 96, 96, 97, 97, 98,
887
+           99, 99, 100, 100, 101, 101, 54, 54, 50, 50,
888
+          103, 52, 52, 104, 51, 51, 53, 53, 63, 63,
889
+           63, 63, 79, 79, 107, 107, 109, 109, 110, 110,
890
+          110, 110, 108, 108, 108, 112, 112, 112, 112, 87,
891
+           87, 115, 115, 115, 116, 116, 113, 113, 117, 117,
892
+          119, 119, 120, 120, 114, 121, 121, 118, 122, 122,
893
+          122, 122, 111, 111, 80, 80, 80, 20, 20, 20,
894
+          124, 123, 123, 125, 125, 125, 125, 59, 126, 126,
895
+          127, 60, 129, 129, 130, 130, 131, 131, 84, 132,
896
+          132, 132, 132, 132, 132, 137, 137, 138, 138, 139,
897
+          139, 139, 139, 139, 140, 141, 141, 136, 136, 133,
898
+          133, 135, 135, 143, 143, 142, 142, 142, 142, 142,
899
+          142, 142, 134, 144, 144, 146, 145, 145, 61, 102,
900
+          147, 147, 55, 55, 42, 42, 42, 42, 42, 42,
901
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
902
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
903
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
904
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
905
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
906
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
907
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
908
+           42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
909
+           42, 42, 42, 42, 42, 42, 42, 154, 148, 148,
910
+          153, 153, 156, 157, 157, 158, 159, 159, 159, 19,
911
+           19, 72, 72, 72, 72, 149, 149, 149, 149, 161,
912
+          161, 150, 150, 152, 152, 152, 155, 155, 166, 166,
913
+          166, 166, 166, 166, 166, 166, 166, 167, 167, 106,
914
+          169, 169, 169, 169, 151, 151, 151, 151, 151, 151,
915
+          151, 151, 58, 58, 164, 164, 164, 164, 170, 170,
916
+          160, 160, 160, 171, 171, 171, 171, 171, 171, 73,
917
+           73, 65, 65, 65, 65, 128, 128, 128, 128, 174,
918
+          173, 163, 163, 163, 163, 163, 163, 163, 162, 162,
919
+          162, 172, 172, 172, 172, 105, 168, 176, 176, 175,
920
+          175, 177, 177, 177, 177, 177, 177, 177, 177, 165,
921
+          165, 165, 165, 179, 180, 178, 178, 178, 178, 178,
922
+          178, 178, 178, 181, 181, 181, 181
923 923
     );
924 924
 
925 925
     protected $ruleToLength = array(
926
-            1,    1,    2,    0,    1,    1,    1,    1,    1,    1,
927
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
928
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
929
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
930
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
931
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
932
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
933
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
934
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
935
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
936
-            0,    1,    0,    1,    1,    2,    1,    3,    4,    1,
937
-            2,    0,    1,    1,    1,    1,    1,    3,    5,    4,
938
-            3,    4,    2,    3,    1,    1,    7,    6,    2,    3,
939
-            1,    2,    3,    1,    2,    3,    1,    1,    3,    1,
940
-            3,    1,    2,    2,    3,    1,    3,    2,    3,    1,
941
-            3,    2,    0,    1,    1,    1,    1,    1,    3,    7,
942
-           10,    5,    7,    9,    5,    3,    3,    3,    3,    3,
943
-            3,    1,    2,    5,    7,    9,    6,    5,    6,    3,
944
-            2,    1,    1,    1,    0,    2,    1,    3,    8,    0,
945
-            4,    2,    1,    3,    0,    1,    0,    1,    0,    1,
946
-            3,    1,    8,    9,    8,    7,    6,    8,    0,    2,
947
-            0,    2,    1,    2,    1,    2,    1,    1,    1,    0,
948
-            2,    0,    2,    0,    2,    2,    1,    3,    1,    4,
949
-            1,    4,    1,    1,    4,    2,    1,    3,    3,    3,
950
-            4,    4,    5,    0,    2,    4,    3,    1,    1,    7,
951
-            0,    2,    1,    3,    3,    4,    1,    4,    0,    2,
952
-            5,    0,    2,    6,    0,    2,    0,    3,    1,    2,
953
-            1,    1,    2,    0,    1,    3,    0,    2,    1,    1,
954
-            1,    1,    6,    8,    6,    1,    2,    1,    1,    1,
955
-            1,    1,    1,    1,    1,    3,    3,    3,    1,    3,
956
-            3,    3,    3,    3,    1,    3,    3,    1,    1,    2,
957
-            1,    1,    0,    1,    0,    2,    2,    2,    4,    3,
958
-            1,    1,    3,    1,    2,    2,    3,    2,    3,    1,
959
-            1,    2,    3,    1,    1,    3,    2,    0,    1,    5,
960
-            5,   10,    3,    5,    1,    1,    3,    0,    2,    4,
961
-            5,    4,    4,    4,    3,    1,    1,    1,    1,    1,
962
-            1,    0,    1,    1,    2,    1,    1,    1,    1,    1,
963
-            1,    1,    2,    1,    3,    1,    1,    3,    2,    2,
964
-            3,    1,    0,    1,    1,    3,    3,    3,    4,    1,
965
-            1,    2,    3,    3,    3,    3,    3,    3,    3,    3,
966
-            3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
967
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
968
-            3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
969
-            2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
970
-            3,    3,    5,    4,    3,    4,    4,    2,    2,    4,
971
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
972
-            2,    1,    3,    2,    1,    2,    4,    2,    2,    8,
973
-            9,    8,    9,    9,   10,    9,   10,    8,    3,    2,
974
-            0,    4,    2,    1,    3,    2,    2,    2,    4,    1,
975
-            1,    1,    1,    1,    1,    1,    1,    3,    1,    1,
976
-            1,    0,    3,    0,    1,    1,    0,    1,    1,    1,
977
-            1,    1,    1,    1,    1,    1,    1,    3,    3,    3,
978
-            4,    1,    1,    3,    1,    1,    1,    1,    1,    3,
979
-            2,    3,    0,    1,    1,    3,    1,    1,    1,    1,
980
-            1,    3,    1,    1,    4,    4,    1,    4,    4,    0,
981
-            1,    1,    1,    3,    3,    1,    4,    2,    2,    1,
982
-            3,    1,    4,    4,    3,    3,    3,    3,    1,    3,
983
-            1,    1,    3,    1,    1,    4,    1,    1,    1,    3,
984
-            1,    1,    2,    1,    3,    4,    3,    2,    0,    2,
985
-            2,    1,    2,    1,    1,    1,    4,    3,    3,    3,
986
-            3,    6,    3,    1,    1,    2,    1
926
+            1, 1, 2, 0, 1, 1, 1, 1, 1, 1,
927
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
928
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
929
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
930
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
931
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
932
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
933
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
934
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
935
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
936
+            0, 1, 0, 1, 1, 2, 1, 3, 4, 1,
937
+            2, 0, 1, 1, 1, 1, 1, 3, 5, 4,
938
+            3, 4, 2, 3, 1, 1, 7, 6, 2, 3,
939
+            1, 2, 3, 1, 2, 3, 1, 1, 3, 1,
940
+            3, 1, 2, 2, 3, 1, 3, 2, 3, 1,
941
+            3, 2, 0, 1, 1, 1, 1, 1, 3, 7,
942
+           10, 5, 7, 9, 5, 3, 3, 3, 3, 3,
943
+            3, 1, 2, 5, 7, 9, 6, 5, 6, 3,
944
+            2, 1, 1, 1, 0, 2, 1, 3, 8, 0,
945
+            4, 2, 1, 3, 0, 1, 0, 1, 0, 1,
946
+            3, 1, 8, 9, 8, 7, 6, 8, 0, 2,
947
+            0, 2, 1, 2, 1, 2, 1, 1, 1, 0,
948
+            2, 0, 2, 0, 2, 2, 1, 3, 1, 4,
949
+            1, 4, 1, 1, 4, 2, 1, 3, 3, 3,
950
+            4, 4, 5, 0, 2, 4, 3, 1, 1, 7,
951
+            0, 2, 1, 3, 3, 4, 1, 4, 0, 2,
952
+            5, 0, 2, 6, 0, 2, 0, 3, 1, 2,
953
+            1, 1, 2, 0, 1, 3, 0, 2, 1, 1,
954
+            1, 1, 6, 8, 6, 1, 2, 1, 1, 1,
955
+            1, 1, 1, 1, 1, 3, 3, 3, 1, 3,
956
+            3, 3, 3, 3, 1, 3, 3, 1, 1, 2,
957
+            1, 1, 0, 1, 0, 2, 2, 2, 4, 3,
958
+            1, 1, 3, 1, 2, 2, 3, 2, 3, 1,
959
+            1, 2, 3, 1, 1, 3, 2, 0, 1, 5,
960
+            5, 10, 3, 5, 1, 1, 3, 0, 2, 4,
961
+            5, 4, 4, 4, 3, 1, 1, 1, 1, 1,
962
+            1, 0, 1, 1, 2, 1, 1, 1, 1, 1,
963
+            1, 1, 2, 1, 3, 1, 1, 3, 2, 2,
964
+            3, 1, 0, 1, 1, 3, 3, 3, 4, 1,
965
+            1, 2, 3, 3, 3, 3, 3, 3, 3, 3,
966
+            3, 3, 3, 3, 3, 2, 2, 2, 2, 3,
967
+            3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
968
+            3, 3, 3, 3, 3, 3, 3, 2, 2, 2,
969
+            2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
970
+            3, 3, 5, 4, 3, 4, 4, 2, 2, 4,
971
+            2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
972
+            2, 1, 3, 2, 1, 2, 4, 2, 2, 8,
973
+            9, 8, 9, 9, 10, 9, 10, 8, 3, 2,
974
+            0, 4, 2, 1, 3, 2, 2, 2, 4, 1,
975
+            1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
976
+            1, 0, 3, 0, 1, 1, 0, 1, 1, 1,
977
+            1, 1, 1, 1, 1, 1, 1, 3, 3, 3,
978
+            4, 1, 1, 3, 1, 1, 1, 1, 1, 3,
979
+            2, 3, 0, 1, 1, 3, 1, 1, 1, 1,
980
+            1, 3, 1, 1, 4, 4, 1, 4, 4, 0,
981
+            1, 1, 1, 3, 3, 1, 4, 2, 2, 1,
982
+            3, 1, 4, 4, 3, 3, 3, 3, 1, 3,
983
+            1, 1, 3, 1, 1, 4, 1, 1, 1, 3,
984
+            1, 1, 2, 1, 3, 4, 3, 2, 0, 2,
985
+            2, 1, 2, 1, 1, 1, 4, 3, 3, 3,
986
+            3, 6, 3, 1, 1, 2, 1
987 987
     );
988 988
 
989 989
     protected function initReduceCallbacks() {
990 990
         $this->reduceCallbacks = [
991
-            0 => function ($stackPos) {
991
+            0 => function($stackPos) {
992 992
                 $this->semValue = $this->semStack[$stackPos];
993 993
             },
994
-            1 => function ($stackPos) {
995
-                 $this->semValue = $this->handleNamespaces($this->semStack[$stackPos-(1-1)]);
994
+            1 => function($stackPos) {
995
+                 $this->semValue = $this->handleNamespaces($this->semStack[$stackPos - (1 - 1)]);
996 996
             },
997
-            2 => function ($stackPos) {
998
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
997
+            2 => function($stackPos) {
998
+                 if (is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; };
999 999
             },
1000
-            3 => function ($stackPos) {
1000
+            3 => function($stackPos) {
1001 1001
                  $this->semValue = array();
1002 1002
             },
1003
-            4 => function ($stackPos) {
1003
+            4 => function($stackPos) {
1004 1004
                  $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1005
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1005
+            if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1006 1006
             },
1007
-            5 => function ($stackPos) {
1007
+            5 => function($stackPos) {
1008 1008
                 $this->semValue = $this->semStack[$stackPos];
1009 1009
             },
1010
-            6 => function ($stackPos) {
1010
+            6 => function($stackPos) {
1011 1011
                 $this->semValue = $this->semStack[$stackPos];
1012 1012
             },
1013
-            7 => function ($stackPos) {
1013
+            7 => function($stackPos) {
1014 1014
                 $this->semValue = $this->semStack[$stackPos];
1015 1015
             },
1016
-            8 => function ($stackPos) {
1016
+            8 => function($stackPos) {
1017 1017
                 $this->semValue = $this->semStack[$stackPos];
1018 1018
             },
1019
-            9 => function ($stackPos) {
1019
+            9 => function($stackPos) {
1020 1020
                 $this->semValue = $this->semStack[$stackPos];
1021 1021
             },
1022
-            10 => function ($stackPos) {
1022
+            10 => function($stackPos) {
1023 1023
                 $this->semValue = $this->semStack[$stackPos];
1024 1024
             },
1025
-            11 => function ($stackPos) {
1025
+            11 => function($stackPos) {
1026 1026
                 $this->semValue = $this->semStack[$stackPos];
1027 1027
             },
1028
-            12 => function ($stackPos) {
1028
+            12 => function($stackPos) {
1029 1029
                 $this->semValue = $this->semStack[$stackPos];
1030 1030
             },
1031
-            13 => function ($stackPos) {
1031
+            13 => function($stackPos) {
1032 1032
                 $this->semValue = $this->semStack[$stackPos];
1033 1033
             },
1034
-            14 => function ($stackPos) {
1034
+            14 => function($stackPos) {
1035 1035
                 $this->semValue = $this->semStack[$stackPos];
1036 1036
             },
1037
-            15 => function ($stackPos) {
1037
+            15 => function($stackPos) {
1038 1038
                 $this->semValue = $this->semStack[$stackPos];
1039 1039
             },
1040
-            16 => function ($stackPos) {
1040
+            16 => function($stackPos) {
1041 1041
                 $this->semValue = $this->semStack[$stackPos];
1042 1042
             },
1043
-            17 => function ($stackPos) {
1043
+            17 => function($stackPos) {
1044 1044
                 $this->semValue = $this->semStack[$stackPos];
1045 1045
             },
1046
-            18 => function ($stackPos) {
1046
+            18 => function($stackPos) {
1047 1047
                 $this->semValue = $this->semStack[$stackPos];
1048 1048
             },
1049
-            19 => function ($stackPos) {
1049
+            19 => function($stackPos) {
1050 1050
                 $this->semValue = $this->semStack[$stackPos];
1051 1051
             },
1052
-            20 => function ($stackPos) {
1052
+            20 => function($stackPos) {
1053 1053
                 $this->semValue = $this->semStack[$stackPos];
1054 1054
             },
1055
-            21 => function ($stackPos) {
1055
+            21 => function($stackPos) {
1056 1056
                 $this->semValue = $this->semStack[$stackPos];
1057 1057
             },
1058
-            22 => function ($stackPos) {
1058
+            22 => function($stackPos) {
1059 1059
                 $this->semValue = $this->semStack[$stackPos];
1060 1060
             },
1061
-            23 => function ($stackPos) {
1061
+            23 => function($stackPos) {
1062 1062
                 $this->semValue = $this->semStack[$stackPos];
1063 1063
             },
1064
-            24 => function ($stackPos) {
1064
+            24 => function($stackPos) {
1065 1065
                 $this->semValue = $this->semStack[$stackPos];
1066 1066
             },
1067
-            25 => function ($stackPos) {
1067
+            25 => function($stackPos) {
1068 1068
                 $this->semValue = $this->semStack[$stackPos];
1069 1069
             },
1070
-            26 => function ($stackPos) {
1070
+            26 => function($stackPos) {
1071 1071
                 $this->semValue = $this->semStack[$stackPos];
1072 1072
             },
1073
-            27 => function ($stackPos) {
1073
+            27 => function($stackPos) {
1074 1074
                 $this->semValue = $this->semStack[$stackPos];
1075 1075
             },
1076
-            28 => function ($stackPos) {
1076
+            28 => function($stackPos) {
1077 1077
                 $this->semValue = $this->semStack[$stackPos];
1078 1078
             },
1079
-            29 => function ($stackPos) {
1079
+            29 => function($stackPos) {
1080 1080
                 $this->semValue = $this->semStack[$stackPos];
1081 1081
             },
1082
-            30 => function ($stackPos) {
1082
+            30 => function($stackPos) {
1083 1083
                 $this->semValue = $this->semStack[$stackPos];
1084 1084
             },
1085
-            31 => function ($stackPos) {
1085
+            31 => function($stackPos) {
1086 1086
                 $this->semValue = $this->semStack[$stackPos];
1087 1087
             },
1088
-            32 => function ($stackPos) {
1088
+            32 => function($stackPos) {
1089 1089
                 $this->semValue = $this->semStack[$stackPos];
1090 1090
             },
1091
-            33 => function ($stackPos) {
1091
+            33 => function($stackPos) {
1092 1092
                 $this->semValue = $this->semStack[$stackPos];
1093 1093
             },
1094
-            34 => function ($stackPos) {
1094
+            34 => function($stackPos) {
1095 1095
                 $this->semValue = $this->semStack[$stackPos];
1096 1096
             },
1097
-            35 => function ($stackPos) {
1097
+            35 => function($stackPos) {
1098 1098
                 $this->semValue = $this->semStack[$stackPos];
1099 1099
             },
1100
-            36 => function ($stackPos) {
1100
+            36 => function($stackPos) {
1101 1101
                 $this->semValue = $this->semStack[$stackPos];
1102 1102
             },
1103
-            37 => function ($stackPos) {
1103
+            37 => function($stackPos) {
1104 1104
                 $this->semValue = $this->semStack[$stackPos];
1105 1105
             },
1106
-            38 => function ($stackPos) {
1106
+            38 => function($stackPos) {
1107 1107
                 $this->semValue = $this->semStack[$stackPos];
1108 1108
             },
1109
-            39 => function ($stackPos) {
1109
+            39 => function($stackPos) {
1110 1110
                 $this->semValue = $this->semStack[$stackPos];
1111 1111
             },
1112
-            40 => function ($stackPos) {
1112
+            40 => function($stackPos) {
1113 1113
                 $this->semValue = $this->semStack[$stackPos];
1114 1114
             },
1115
-            41 => function ($stackPos) {
1115
+            41 => function($stackPos) {
1116 1116
                 $this->semValue = $this->semStack[$stackPos];
1117 1117
             },
1118
-            42 => function ($stackPos) {
1118
+            42 => function($stackPos) {
1119 1119
                 $this->semValue = $this->semStack[$stackPos];
1120 1120
             },
1121
-            43 => function ($stackPos) {
1121
+            43 => function($stackPos) {
1122 1122
                 $this->semValue = $this->semStack[$stackPos];
1123 1123
             },
1124
-            44 => function ($stackPos) {
1124
+            44 => function($stackPos) {
1125 1125
                 $this->semValue = $this->semStack[$stackPos];
1126 1126
             },
1127
-            45 => function ($stackPos) {
1127
+            45 => function($stackPos) {
1128 1128
                 $this->semValue = $this->semStack[$stackPos];
1129 1129
             },
1130
-            46 => function ($stackPos) {
1130
+            46 => function($stackPos) {
1131 1131
                 $this->semValue = $this->semStack[$stackPos];
1132 1132
             },
1133
-            47 => function ($stackPos) {
1133
+            47 => function($stackPos) {
1134 1134
                 $this->semValue = $this->semStack[$stackPos];
1135 1135
             },
1136
-            48 => function ($stackPos) {
1136
+            48 => function($stackPos) {
1137 1137
                 $this->semValue = $this->semStack[$stackPos];
1138 1138
             },
1139
-            49 => function ($stackPos) {
1139
+            49 => function($stackPos) {
1140 1140
                 $this->semValue = $this->semStack[$stackPos];
1141 1141
             },
1142
-            50 => function ($stackPos) {
1142
+            50 => function($stackPos) {
1143 1143
                 $this->semValue = $this->semStack[$stackPos];
1144 1144
             },
1145
-            51 => function ($stackPos) {
1145
+            51 => function($stackPos) {
1146 1146
                 $this->semValue = $this->semStack[$stackPos];
1147 1147
             },
1148
-            52 => function ($stackPos) {
1148
+            52 => function($stackPos) {
1149 1149
                 $this->semValue = $this->semStack[$stackPos];
1150 1150
             },
1151
-            53 => function ($stackPos) {
1151
+            53 => function($stackPos) {
1152 1152
                 $this->semValue = $this->semStack[$stackPos];
1153 1153
             },
1154
-            54 => function ($stackPos) {
1154
+            54 => function($stackPos) {
1155 1155
                 $this->semValue = $this->semStack[$stackPos];
1156 1156
             },
1157
-            55 => function ($stackPos) {
1157
+            55 => function($stackPos) {
1158 1158
                 $this->semValue = $this->semStack[$stackPos];
1159 1159
             },
1160
-            56 => function ($stackPos) {
1160
+            56 => function($stackPos) {
1161 1161
                 $this->semValue = $this->semStack[$stackPos];
1162 1162
             },
1163
-            57 => function ($stackPos) {
1163
+            57 => function($stackPos) {
1164 1164
                 $this->semValue = $this->semStack[$stackPos];
1165 1165
             },
1166
-            58 => function ($stackPos) {
1166
+            58 => function($stackPos) {
1167 1167
                 $this->semValue = $this->semStack[$stackPos];
1168 1168
             },
1169
-            59 => function ($stackPos) {
1169
+            59 => function($stackPos) {
1170 1170
                 $this->semValue = $this->semStack[$stackPos];
1171 1171
             },
1172
-            60 => function ($stackPos) {
1172
+            60 => function($stackPos) {
1173 1173
                 $this->semValue = $this->semStack[$stackPos];
1174 1174
             },
1175
-            61 => function ($stackPos) {
1175
+            61 => function($stackPos) {
1176 1176
                 $this->semValue = $this->semStack[$stackPos];
1177 1177
             },
1178
-            62 => function ($stackPos) {
1178
+            62 => function($stackPos) {
1179 1179
                 $this->semValue = $this->semStack[$stackPos];
1180 1180
             },
1181
-            63 => function ($stackPos) {
1181
+            63 => function($stackPos) {
1182 1182
                 $this->semValue = $this->semStack[$stackPos];
1183 1183
             },
1184
-            64 => function ($stackPos) {
1184
+            64 => function($stackPos) {
1185 1185
                 $this->semValue = $this->semStack[$stackPos];
1186 1186
             },
1187
-            65 => function ($stackPos) {
1187
+            65 => function($stackPos) {
1188 1188
                 $this->semValue = $this->semStack[$stackPos];
1189 1189
             },
1190
-            66 => function ($stackPos) {
1190
+            66 => function($stackPos) {
1191 1191
                 $this->semValue = $this->semStack[$stackPos];
1192 1192
             },
1193
-            67 => function ($stackPos) {
1193
+            67 => function($stackPos) {
1194 1194
                 $this->semValue = $this->semStack[$stackPos];
1195 1195
             },
1196
-            68 => function ($stackPos) {
1196
+            68 => function($stackPos) {
1197 1197
                 $this->semValue = $this->semStack[$stackPos];
1198 1198
             },
1199
-            69 => function ($stackPos) {
1199
+            69 => function($stackPos) {
1200 1200
                 $this->semValue = $this->semStack[$stackPos];
1201 1201
             },
1202
-            70 => function ($stackPos) {
1202
+            70 => function($stackPos) {
1203 1203
                 $this->semValue = $this->semStack[$stackPos];
1204 1204
             },
1205
-            71 => function ($stackPos) {
1205
+            71 => function($stackPos) {
1206 1206
                 $this->semValue = $this->semStack[$stackPos];
1207 1207
             },
1208
-            72 => function ($stackPos) {
1208
+            72 => function($stackPos) {
1209 1209
                 $this->semValue = $this->semStack[$stackPos];
1210 1210
             },
1211
-            73 => function ($stackPos) {
1211
+            73 => function($stackPos) {
1212 1212
                 $this->semValue = $this->semStack[$stackPos];
1213 1213
             },
1214
-            74 => function ($stackPos) {
1214
+            74 => function($stackPos) {
1215 1215
                 $this->semValue = $this->semStack[$stackPos];
1216 1216
             },
1217
-            75 => function ($stackPos) {
1217
+            75 => function($stackPos) {
1218 1218
                 $this->semValue = $this->semStack[$stackPos];
1219 1219
             },
1220
-            76 => function ($stackPos) {
1220
+            76 => function($stackPos) {
1221 1221
                 $this->semValue = $this->semStack[$stackPos];
1222 1222
             },
1223
-            77 => function ($stackPos) {
1223
+            77 => function($stackPos) {
1224 1224
                 $this->semValue = $this->semStack[$stackPos];
1225 1225
             },
1226
-            78 => function ($stackPos) {
1226
+            78 => function($stackPos) {
1227 1227
                 $this->semValue = $this->semStack[$stackPos];
1228 1228
             },
1229
-            79 => function ($stackPos) {
1229
+            79 => function($stackPos) {
1230 1230
                 $this->semValue = $this->semStack[$stackPos];
1231 1231
             },
1232
-            80 => function ($stackPos) {
1232
+            80 => function($stackPos) {
1233 1233
                 $this->semValue = $this->semStack[$stackPos];
1234 1234
             },
1235
-            81 => function ($stackPos) {
1235
+            81 => function($stackPos) {
1236 1236
                 $this->semValue = $this->semStack[$stackPos];
1237 1237
             },
1238
-            82 => function ($stackPos) {
1238
+            82 => function($stackPos) {
1239 1239
                 $this->semValue = $this->semStack[$stackPos];
1240 1240
             },
1241
-            83 => function ($stackPos) {
1241
+            83 => function($stackPos) {
1242 1242
                 $this->semValue = $this->semStack[$stackPos];
1243 1243
             },
1244
-            84 => function ($stackPos) {
1244
+            84 => function($stackPos) {
1245 1245
                 $this->semValue = $this->semStack[$stackPos];
1246 1246
             },
1247
-            85 => function ($stackPos) {
1247
+            85 => function($stackPos) {
1248 1248
                 $this->semValue = $this->semStack[$stackPos];
1249 1249
             },
1250
-            86 => function ($stackPos) {
1251
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1250
+            86 => function($stackPos) {
1251
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1252 1252
             },
1253
-            87 => function ($stackPos) {
1254
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1253
+            87 => function($stackPos) {
1254
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1255 1255
             },
1256
-            88 => function ($stackPos) {
1257
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1256
+            88 => function($stackPos) {
1257
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1258 1258
             },
1259
-            89 => function ($stackPos) {
1260
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1259
+            89 => function($stackPos) {
1260
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1261 1261
             },
1262
-            90 => function ($stackPos) {
1263
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1262
+            90 => function($stackPos) {
1263
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1264 1264
             },
1265
-            91 => function ($stackPos) {
1266
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1265
+            91 => function($stackPos) {
1266
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1267 1267
             },
1268
-            92 => function ($stackPos) {
1269
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1268
+            92 => function($stackPos) {
1269
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1270 1270
             },
1271
-            93 => function ($stackPos) {
1272
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1271
+            93 => function($stackPos) {
1272
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1273 1273
             },
1274
-            94 => function ($stackPos) {
1275
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1274
+            94 => function($stackPos) {
1275
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1276 1276
             },
1277
-            95 => function ($stackPos) {
1278
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1277
+            95 => function($stackPos) {
1278
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1279 1279
             },
1280
-            96 => function ($stackPos) {
1281
-                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1280
+            96 => function($stackPos) {
1281
+                 $this->semValue = new Name(substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1282 1282
             },
1283
-            97 => function ($stackPos) {
1284
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1283
+            97 => function($stackPos) {
1284
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1285 1285
             },
1286
-            98 => function ($stackPos) {
1286
+            98 => function($stackPos) {
1287 1287
                  /* nothing */
1288 1288
             },
1289
-            99 => function ($stackPos) {
1289
+            99 => function($stackPos) {
1290 1290
                  /* nothing */
1291 1291
             },
1292
-            100 => function ($stackPos) {
1292
+            100 => function($stackPos) {
1293 1293
                  /* nothing */
1294 1294
             },
1295
-            101 => function ($stackPos) {
1296
-                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
1295
+            101 => function($stackPos) {
1296
+                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes));
1297 1297
             },
1298
-            102 => function ($stackPos) {
1298
+            102 => function($stackPos) {
1299 1299
                 $this->semValue = $this->semStack[$stackPos];
1300 1300
             },
1301
-            103 => function ($stackPos) {
1301
+            103 => function($stackPos) {
1302 1302
                 $this->semValue = $this->semStack[$stackPos];
1303 1303
             },
1304
-            104 => function ($stackPos) {
1305
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1304
+            104 => function($stackPos) {
1305
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos - (1 - 1)], [], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1306 1306
             },
1307
-            105 => function ($stackPos) {
1308
-                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1307
+            105 => function($stackPos) {
1308
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1309 1309
             },
1310
-            106 => function ($stackPos) {
1311
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1310
+            106 => function($stackPos) {
1311
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1312 1312
             },
1313
-            107 => function ($stackPos) {
1314
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1313
+            107 => function($stackPos) {
1314
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1315 1315
             },
1316
-            108 => function ($stackPos) {
1317
-                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1316
+            108 => function($stackPos) {
1317
+                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1318 1318
             },
1319
-            109 => function ($stackPos) {
1320
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1319
+            109 => function($stackPos) {
1320
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1321 1321
             },
1322
-            110 => function ($stackPos) {
1323
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1322
+            110 => function($stackPos) {
1323
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1324 1324
             },
1325
-            111 => function ($stackPos) {
1325
+            111 => function($stackPos) {
1326 1326
                  $this->semValue = [];
1327 1327
             },
1328
-            112 => function ($stackPos) {
1329
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1328
+            112 => function($stackPos) {
1329
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1330 1330
             },
1331
-            113 => function ($stackPos) {
1332
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1331
+            113 => function($stackPos) {
1332
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1333 1333
             },
1334
-            114 => function ($stackPos) {
1335
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1334
+            114 => function($stackPos) {
1335
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1336 1336
             },
1337
-            115 => function ($stackPos) {
1338
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1337
+            115 => function($stackPos) {
1338
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1339 1339
             },
1340
-            116 => function ($stackPos) {
1341
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1340
+            116 => function($stackPos) {
1341
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1342 1342
             },
1343
-            117 => function ($stackPos) {
1344
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1343
+            117 => function($stackPos) {
1344
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1345 1345
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
1346 1346
             $this->checkNamespace($this->semValue);
1347 1347
             },
1348
-            118 => function ($stackPos) {
1349
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1348
+            118 => function($stackPos) {
1349
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1350 1350
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1351 1351
             $this->checkNamespace($this->semValue);
1352 1352
             },
1353
-            119 => function ($stackPos) {
1354
-                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1353
+            119 => function($stackPos) {
1354
+                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1355 1355
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
1356 1356
             $this->checkNamespace($this->semValue);
1357 1357
             },
1358
-            120 => function ($stackPos) {
1359
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1358
+            120 => function($stackPos) {
1359
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1360 1360
             },
1361
-            121 => function ($stackPos) {
1362
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1361
+            121 => function($stackPos) {
1362
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1363 1363
             },
1364
-            122 => function ($stackPos) {
1365
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1364
+            122 => function($stackPos) {
1365
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1366 1366
             },
1367
-            123 => function ($stackPos) {
1368
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1367
+            123 => function($stackPos) {
1368
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1369 1369
             },
1370
-            124 => function ($stackPos) {
1370
+            124 => function($stackPos) {
1371 1371
                  $this->semValue = Stmt\Use_::TYPE_FUNCTION;
1372 1372
             },
1373
-            125 => function ($stackPos) {
1373
+            125 => function($stackPos) {
1374 1374
                  $this->semValue = Stmt\Use_::TYPE_CONSTANT;
1375 1375
             },
1376
-            126 => function ($stackPos) {
1377
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1376
+            126 => function($stackPos) {
1377
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1378 1378
             },
1379
-            127 => function ($stackPos) {
1380
-                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1379
+            127 => function($stackPos) {
1380
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes);
1381 1381
             },
1382
-            128 => function ($stackPos) {
1383
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1382
+            128 => function($stackPos) {
1383
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1384 1384
             },
1385
-            129 => function ($stackPos) {
1386
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1385
+            129 => function($stackPos) {
1386
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1387 1387
             },
1388
-            130 => function ($stackPos) {
1389
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1388
+            130 => function($stackPos) {
1389
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1390 1390
             },
1391
-            131 => function ($stackPos) {
1392
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1391
+            131 => function($stackPos) {
1392
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1393 1393
             },
1394
-            132 => function ($stackPos) {
1395
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1394
+            132 => function($stackPos) {
1395
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1396 1396
             },
1397
-            133 => function ($stackPos) {
1398
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1397
+            133 => function($stackPos) {
1398
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1399 1399
             },
1400
-            134 => function ($stackPos) {
1401
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1400
+            134 => function($stackPos) {
1401
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1402 1402
             },
1403
-            135 => function ($stackPos) {
1404
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1403
+            135 => function($stackPos) {
1404
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1405 1405
             },
1406
-            136 => function ($stackPos) {
1407
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1406
+            136 => function($stackPos) {
1407
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1408 1408
             },
1409
-            137 => function ($stackPos) {
1410
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1409
+            137 => function($stackPos) {
1410
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1));
1411 1411
             },
1412
-            138 => function ($stackPos) {
1413
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1412
+            138 => function($stackPos) {
1413
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3));
1414 1414
             },
1415
-            139 => function ($stackPos) {
1416
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
1415
+            139 => function($stackPos) {
1416
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1));
1417 1417
             },
1418
-            140 => function ($stackPos) {
1419
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
1418
+            140 => function($stackPos) {
1419
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3));
1420 1420
             },
1421
-            141 => function ($stackPos) {
1422
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
1421
+            141 => function($stackPos) {
1422
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
1423 1423
             },
1424
-            142 => function ($stackPos) {
1425
-                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
1424
+            142 => function($stackPos) {
1425
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)]; $this->semValue->type = $this->semStack[$stackPos - (2 - 1)];
1426 1426
             },
1427
-            143 => function ($stackPos) {
1428
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1427
+            143 => function($stackPos) {
1428
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1429 1429
             },
1430
-            144 => function ($stackPos) {
1431
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1430
+            144 => function($stackPos) {
1431
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1432 1432
             },
1433
-            145 => function ($stackPos) {
1434
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1433
+            145 => function($stackPos) {
1434
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1435 1435
             },
1436
-            146 => function ($stackPos) {
1437
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1436
+            146 => function($stackPos) {
1437
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1438 1438
             },
1439
-            147 => function ($stackPos) {
1440
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1439
+            147 => function($stackPos) {
1440
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1441 1441
             },
1442
-            148 => function ($stackPos) {
1443
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1442
+            148 => function($stackPos) {
1443
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1444 1444
             },
1445
-            149 => function ($stackPos) {
1446
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1445
+            149 => function($stackPos) {
1446
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1447 1447
             },
1448
-            150 => function ($stackPos) {
1449
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1448
+            150 => function($stackPos) {
1449
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1450 1450
             },
1451
-            151 => function ($stackPos) {
1452
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
1451
+            151 => function($stackPos) {
1452
+                 if (is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; };
1453 1453
             },
1454
-            152 => function ($stackPos) {
1454
+            152 => function($stackPos) {
1455 1455
                  $this->semValue = array();
1456 1456
             },
1457
-            153 => function ($stackPos) {
1457
+            153 => function($stackPos) {
1458 1458
                  $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
1459
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
1459
+            if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1460 1460
             },
1461
-            154 => function ($stackPos) {
1462
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1461
+            154 => function($stackPos) {
1462
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1463 1463
             },
1464
-            155 => function ($stackPos) {
1465
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1464
+            155 => function($stackPos) {
1465
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1466 1466
             },
1467
-            156 => function ($stackPos) {
1468
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1467
+            156 => function($stackPos) {
1468
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1469 1469
             },
1470
-            157 => function ($stackPos) {
1471
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1470
+            157 => function($stackPos) {
1471
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1472 1472
             },
1473
-            158 => function ($stackPos) {
1473
+            158 => function($stackPos) {
1474 1474
 
1475
-        if ($this->semStack[$stackPos-(3-2)]) {
1476
-            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
1475
+        if ($this->semStack[$stackPos - (3 - 2)]) {
1476
+            $this->semValue = $this->semStack[$stackPos - (3 - 2)]; $attrs = $this->startAttributeStack[$stackPos - (3 - 1)]; $stmts = $this->semValue; if ( ! empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
1477 1477
         } else {
1478
-            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1478
+            $startAttributes = $this->startAttributeStack[$stackPos - (3 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1479 1479
             if (null === $this->semValue) { $this->semValue = array(); }
1480 1480
         }
1481 1481
 
1482 1482
             },
1483
-            159 => function ($stackPos) {
1484
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1483
+            159 => function($stackPos) {
1484
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos - (7 - 3)], ['stmts' => is_array($this->semStack[$stackPos - (7 - 5)]) ? $this->semStack[$stackPos - (7 - 5)] : array($this->semStack[$stackPos - (7 - 5)]), 'elseifs' => $this->semStack[$stackPos - (7 - 6)], 'else' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1485 1485
             },
1486
-            160 => function ($stackPos) {
1487
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
1486
+            160 => function($stackPos) {
1487
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos - (10 - 3)], ['stmts' => $this->semStack[$stackPos - (10 - 6)], 'elseifs' => $this->semStack[$stackPos - (10 - 7)], 'else' => $this->semStack[$stackPos - (10 - 8)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes);
1488 1488
             },
1489
-            161 => function ($stackPos) {
1490
-                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1489
+            161 => function($stackPos) {
1490
+                 $this->semValue = new Stmt\While_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1491 1491
             },
1492
-            162 => function ($stackPos) {
1493
-                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1492
+            162 => function($stackPos) {
1493
+                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (7 - 5)], is_array($this->semStack[$stackPos - (7 - 2)]) ? $this->semStack[$stackPos - (7 - 2)] : array($this->semStack[$stackPos - (7 - 2)]), $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1494 1494
             },
1495
-            163 => function ($stackPos) {
1496
-                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1495
+            163 => function($stackPos) {
1496
+                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
1497 1497
             },
1498
-            164 => function ($stackPos) {
1499
-                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1498
+            164 => function($stackPos) {
1499
+                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1500 1500
             },
1501
-            165 => function ($stackPos) {
1502
-                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1501
+            165 => function($stackPos) {
1502
+                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1503 1503
             },
1504
-            166 => function ($stackPos) {
1505
-                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1504
+            166 => function($stackPos) {
1505
+                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1506 1506
             },
1507
-            167 => function ($stackPos) {
1508
-                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1507
+            167 => function($stackPos) {
1508
+                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1509 1509
             },
1510
-            168 => function ($stackPos) {
1511
-                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1510
+            168 => function($stackPos) {
1511
+                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1512 1512
             },
1513
-            169 => function ($stackPos) {
1514
-                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1513
+            169 => function($stackPos) {
1514
+                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1515 1515
             },
1516
-            170 => function ($stackPos) {
1517
-                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1516
+            170 => function($stackPos) {
1517
+                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1518 1518
             },
1519
-            171 => function ($stackPos) {
1520
-                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1519
+            171 => function($stackPos) {
1520
+                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1521 1521
             },
1522
-            172 => function ($stackPos) {
1522
+            172 => function($stackPos) {
1523 1523
 
1524
-        $e = $this->semStack[$stackPos-(2-1)];
1524
+        $e = $this->semStack[$stackPos - (2 - 1)];
1525 1525
         if ($e instanceof Expr\Throw_) {
1526 1526
             // For backwards-compatibility reasons, convert throw in statement position into
1527 1527
             // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
1528
-            $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1528
+            $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1529 1529
         } else {
1530
-            $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1530
+            $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1531 1531
         }
1532 1532
 
1533 1533
             },
1534
-            173 => function ($stackPos) {
1535
-                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1534
+            173 => function($stackPos) {
1535
+                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1536 1536
             },
1537
-            174 => function ($stackPos) {
1538
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1537
+            174 => function($stackPos) {
1538
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1539 1539
             },
1540
-            175 => function ($stackPos) {
1541
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1540
+            175 => function($stackPos) {
1541
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
1542 1542
             },
1543
-            176 => function ($stackPos) {
1544
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1543
+            176 => function($stackPos) {
1544
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (6 - 3)], new Expr\Error($this->startAttributeStack[$stackPos - (6 - 4)] + $this->endAttributeStack[$stackPos - (6 - 4)]), ['stmts' => $this->semStack[$stackPos - (6 - 6)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes);
1545 1545
             },
1546
-            177 => function ($stackPos) {
1547
-                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1546
+            177 => function($stackPos) {
1547
+                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1548 1548
             },
1549
-            178 => function ($stackPos) {
1550
-                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
1549
+            178 => function($stackPos) {
1550
+                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
1551 1551
             },
1552
-            179 => function ($stackPos) {
1553
-                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1552
+            179 => function($stackPos) {
1553
+                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1554 1554
             },
1555
-            180 => function ($stackPos) {
1556
-                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1555
+            180 => function($stackPos) {
1556
+                 $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1557 1557
             },
1558
-            181 => function ($stackPos) {
1558
+            181 => function($stackPos) {
1559 1559
                  $this->semValue = array(); /* means: no statement */
1560 1560
             },
1561
-            182 => function ($stackPos) {
1562
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1561
+            182 => function($stackPos) {
1562
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1563 1563
             },
1564
-            183 => function ($stackPos) {
1565
-                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1564
+            183 => function($stackPos) {
1565
+                 $startAttributes = $this->startAttributeStack[$stackPos - (1 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1566 1566
             if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
1567 1567
             },
1568
-            184 => function ($stackPos) {
1568
+            184 => function($stackPos) {
1569 1569
                  $this->semValue = array();
1570 1570
             },
1571
-            185 => function ($stackPos) {
1572
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1571
+            185 => function($stackPos) {
1572
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1573 1573
             },
1574
-            186 => function ($stackPos) {
1575
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1574
+            186 => function($stackPos) {
1575
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1576 1576
             },
1577
-            187 => function ($stackPos) {
1578
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1577
+            187 => function($stackPos) {
1578
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1579 1579
             },
1580
-            188 => function ($stackPos) {
1581
-                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1580
+            188 => function($stackPos) {
1581
+                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
1582 1582
             },
1583
-            189 => function ($stackPos) {
1583
+            189 => function($stackPos) {
1584 1584
                  $this->semValue = null;
1585 1585
             },
1586
-            190 => function ($stackPos) {
1587
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1586
+            190 => function($stackPos) {
1587
+                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1588 1588
             },
1589
-            191 => function ($stackPos) {
1590
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1589
+            191 => function($stackPos) {
1590
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1591 1591
             },
1592
-            192 => function ($stackPos) {
1593
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1592
+            192 => function($stackPos) {
1593
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1594 1594
             },
1595
-            193 => function ($stackPos) {
1596
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1595
+            193 => function($stackPos) {
1596
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1597 1597
             },
1598
-            194 => function ($stackPos) {
1598
+            194 => function($stackPos) {
1599 1599
                  $this->semValue = false;
1600 1600
             },
1601
-            195 => function ($stackPos) {
1601
+            195 => function($stackPos) {
1602 1602
                  $this->semValue = true;
1603 1603
             },
1604
-            196 => function ($stackPos) {
1604
+            196 => function($stackPos) {
1605 1605
                  $this->semValue = false;
1606 1606
             },
1607
-            197 => function ($stackPos) {
1607
+            197 => function($stackPos) {
1608 1608
                  $this->semValue = true;
1609 1609
             },
1610
-            198 => function ($stackPos) {
1610
+            198 => function($stackPos) {
1611 1611
                  $this->semValue = false;
1612 1612
             },
1613
-            199 => function ($stackPos) {
1613
+            199 => function($stackPos) {
1614 1614
                  $this->semValue = true;
1615 1615
             },
1616
-            200 => function ($stackPos) {
1617
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1616
+            200 => function($stackPos) {
1617
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
1618 1618
             },
1619
-            201 => function ($stackPos) {
1619
+            201 => function($stackPos) {
1620 1620
                  $this->semValue = [];
1621 1621
             },
1622
-            202 => function ($stackPos) {
1623
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1622
+            202 => function($stackPos) {
1623
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (8 - 3)], ['byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 5)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
1624 1624
             },
1625
-            203 => function ($stackPos) {
1626
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
1625
+            203 => function($stackPos) {
1626
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (9 - 4)], ['byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
1627 1627
             },
1628
-            204 => function ($stackPos) {
1629
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1630
-            $this->checkClass($this->semValue, $stackPos-(8-3));
1628
+            204 => function($stackPos) {
1629
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (8 - 3)], ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
1630
+            $this->checkClass($this->semValue, $stackPos - (8 - 3));
1631 1631
             },
1632
-            205 => function ($stackPos) {
1633
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1634
-            $this->checkInterface($this->semValue, $stackPos-(7-3));
1632
+            205 => function($stackPos) {
1633
+                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (7 - 3)], ['extends' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => $this->semStack[$stackPos - (7 - 1)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1634
+            $this->checkInterface($this->semValue, $stackPos - (7 - 3));
1635 1635
             },
1636
-            206 => function ($stackPos) {
1637
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1636
+            206 => function($stackPos) {
1637
+                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (6 - 3)], ['stmts' => $this->semStack[$stackPos - (6 - 5)], 'attrGroups' => $this->semStack[$stackPos - (6 - 1)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes);
1638 1638
             },
1639
-            207 => function ($stackPos) {
1640
-                 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
1641
-            $this->checkEnum($this->semValue, $stackPos-(8-3));
1639
+            207 => function($stackPos) {
1640
+                 $this->semValue = new Stmt\Enum_($this->semStack[$stackPos - (8 - 3)], ['scalarType' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
1641
+            $this->checkEnum($this->semValue, $stackPos - (8 - 3));
1642 1642
             },
1643
-            208 => function ($stackPos) {
1643
+            208 => function($stackPos) {
1644 1644
                  $this->semValue = null;
1645 1645
             },
1646
-            209 => function ($stackPos) {
1647
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1646
+            209 => function($stackPos) {
1647
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1648 1648
             },
1649
-            210 => function ($stackPos) {
1649
+            210 => function($stackPos) {
1650 1650
                  $this->semValue = null;
1651 1651
             },
1652
-            211 => function ($stackPos) {
1653
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1652
+            211 => function($stackPos) {
1653
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1654 1654
             },
1655
-            212 => function ($stackPos) {
1655
+            212 => function($stackPos) {
1656 1656
                  $this->semValue = 0;
1657 1657
             },
1658
-            213 => function ($stackPos) {
1659
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1658
+            213 => function($stackPos) {
1659
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1660 1660
             },
1661
-            214 => function ($stackPos) {
1662
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1661
+            214 => function($stackPos) {
1662
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1663 1663
             },
1664
-            215 => function ($stackPos) {
1665
-                 $this->checkClassModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1664
+            215 => function($stackPos) {
1665
+                 $this->checkClassModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)];
1666 1666
             },
1667
-            216 => function ($stackPos) {
1667
+            216 => function($stackPos) {
1668 1668
                  $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
1669 1669
             },
1670
-            217 => function ($stackPos) {
1670
+            217 => function($stackPos) {
1671 1671
                  $this->semValue = Stmt\Class_::MODIFIER_FINAL;
1672 1672
             },
1673
-            218 => function ($stackPos) {
1673
+            218 => function($stackPos) {
1674 1674
                  $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1675 1675
             },
1676
-            219 => function ($stackPos) {
1676
+            219 => function($stackPos) {
1677 1677
                  $this->semValue = null;
1678 1678
             },
1679
-            220 => function ($stackPos) {
1680
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1679
+            220 => function($stackPos) {
1680
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1681 1681
             },
1682
-            221 => function ($stackPos) {
1682
+            221 => function($stackPos) {
1683 1683
                  $this->semValue = array();
1684 1684
             },
1685
-            222 => function ($stackPos) {
1686
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1685
+            222 => function($stackPos) {
1686
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1687 1687
             },
1688
-            223 => function ($stackPos) {
1688
+            223 => function($stackPos) {
1689 1689
                  $this->semValue = array();
1690 1690
             },
1691
-            224 => function ($stackPos) {
1692
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1691
+            224 => function($stackPos) {
1692
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1693 1693
             },
1694
-            225 => function ($stackPos) {
1695
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1694
+            225 => function($stackPos) {
1695
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1696 1696
             },
1697
-            226 => function ($stackPos) {
1698
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1697
+            226 => function($stackPos) {
1698
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1699 1699
             },
1700
-            227 => function ($stackPos) {
1701
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1700
+            227 => function($stackPos) {
1701
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1702 1702
             },
1703
-            228 => function ($stackPos) {
1704
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1703
+            228 => function($stackPos) {
1704
+                 $this->semValue = is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]);
1705 1705
             },
1706
-            229 => function ($stackPos) {
1707
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1706
+            229 => function($stackPos) {
1707
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1708 1708
             },
1709
-            230 => function ($stackPos) {
1710
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1709
+            230 => function($stackPos) {
1710
+                 $this->semValue = is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]);
1711 1711
             },
1712
-            231 => function ($stackPos) {
1713
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1712
+            231 => function($stackPos) {
1713
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1714 1714
             },
1715
-            232 => function ($stackPos) {
1716
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1715
+            232 => function($stackPos) {
1716
+                 $this->semValue = is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]);
1717 1717
             },
1718
-            233 => function ($stackPos) {
1718
+            233 => function($stackPos) {
1719 1719
                  $this->semValue = null;
1720 1720
             },
1721
-            234 => function ($stackPos) {
1722
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1721
+            234 => function($stackPos) {
1722
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1723 1723
             },
1724
-            235 => function ($stackPos) {
1725
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1724
+            235 => function($stackPos) {
1725
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1726 1726
             },
1727
-            236 => function ($stackPos) {
1728
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1727
+            236 => function($stackPos) {
1728
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1729 1729
             },
1730
-            237 => function ($stackPos) {
1731
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1730
+            237 => function($stackPos) {
1731
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1732 1732
             },
1733
-            238 => function ($stackPos) {
1734
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1733
+            238 => function($stackPos) {
1734
+                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1735 1735
             },
1736
-            239 => function ($stackPos) {
1737
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1736
+            239 => function($stackPos) {
1737
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
1738 1738
             },
1739
-            240 => function ($stackPos) {
1740
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
1739
+            240 => function($stackPos) {
1740
+                 $this->semValue = $this->semStack[$stackPos - (4 - 3)];
1741 1741
             },
1742
-            241 => function ($stackPos) {
1743
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1742
+            241 => function($stackPos) {
1743
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1744 1744
             },
1745
-            242 => function ($stackPos) {
1746
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
1745
+            242 => function($stackPos) {
1746
+                 $this->semValue = $this->semStack[$stackPos - (5 - 3)];
1747 1747
             },
1748
-            243 => function ($stackPos) {
1748
+            243 => function($stackPos) {
1749 1749
                  $this->semValue = array();
1750 1750
             },
1751
-            244 => function ($stackPos) {
1752
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1751
+            244 => function($stackPos) {
1752
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1753 1753
             },
1754
-            245 => function ($stackPos) {
1755
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1754
+            245 => function($stackPos) {
1755
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1756 1756
             },
1757
-            246 => function ($stackPos) {
1758
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1757
+            246 => function($stackPos) {
1758
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1759 1759
             },
1760
-            247 => function ($stackPos) {
1760
+            247 => function($stackPos) {
1761 1761
                 $this->semValue = $this->semStack[$stackPos];
1762 1762
             },
1763
-            248 => function ($stackPos) {
1763
+            248 => function($stackPos) {
1764 1764
                 $this->semValue = $this->semStack[$stackPos];
1765 1765
             },
1766
-            249 => function ($stackPos) {
1767
-                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
1766
+            249 => function($stackPos) {
1767
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes);
1768 1768
             },
1769
-            250 => function ($stackPos) {
1769
+            250 => function($stackPos) {
1770 1770
                  $this->semValue = [];
1771 1771
             },
1772
-            251 => function ($stackPos) {
1773
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1772
+            251 => function($stackPos) {
1773
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1774 1774
             },
1775
-            252 => function ($stackPos) {
1776
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1775
+            252 => function($stackPos) {
1776
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1777 1777
             },
1778
-            253 => function ($stackPos) {
1779
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1778
+            253 => function($stackPos) {
1779
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1780 1780
             },
1781
-            254 => function ($stackPos) {
1782
-                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1781
+            254 => function($stackPos) {
1782
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1783 1783
             },
1784
-            255 => function ($stackPos) {
1785
-                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
1784
+            255 => function($stackPos) {
1785
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
1786 1786
             },
1787
-            256 => function ($stackPos) {
1788
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
1787
+            256 => function($stackPos) {
1788
+                 $this->semValue = is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]);
1789 1789
             },
1790
-            257 => function ($stackPos) {
1791
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1790
+            257 => function($stackPos) {
1791
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1792 1792
             },
1793
-            258 => function ($stackPos) {
1793
+            258 => function($stackPos) {
1794 1794
                  $this->semValue = array();
1795 1795
             },
1796
-            259 => function ($stackPos) {
1797
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1796
+            259 => function($stackPos) {
1797
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1798 1798
             },
1799
-            260 => function ($stackPos) {
1800
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
1799
+            260 => function($stackPos) {
1800
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (5 - 3)], is_array($this->semStack[$stackPos - (5 - 5)]) ? $this->semStack[$stackPos - (5 - 5)] : array($this->semStack[$stackPos - (5 - 5)]), $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
1801 1801
             },
1802
-            261 => function ($stackPos) {
1802
+            261 => function($stackPos) {
1803 1803
                  $this->semValue = array();
1804 1804
             },
1805
-            262 => function ($stackPos) {
1806
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
1805
+            262 => function($stackPos) {
1806
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1807 1807
             },
1808
-            263 => function ($stackPos) {
1809
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
1808
+            263 => function($stackPos) {
1809
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes);
1810 1810
             },
1811
-            264 => function ($stackPos) {
1811
+            264 => function($stackPos) {
1812 1812
                  $this->semValue = null;
1813 1813
             },
1814
-            265 => function ($stackPos) {
1815
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1814
+            265 => function($stackPos) {
1815
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos - (2 - 2)]) ? $this->semStack[$stackPos - (2 - 2)] : array($this->semStack[$stackPos - (2 - 2)]), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1816 1816
             },
1817
-            266 => function ($stackPos) {
1817
+            266 => function($stackPos) {
1818 1818
                  $this->semValue = null;
1819 1819
             },
1820
-            267 => function ($stackPos) {
1821
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
1820
+            267 => function($stackPos) {
1821
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
1822 1822
             },
1823
-            268 => function ($stackPos) {
1824
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1823
+            268 => function($stackPos) {
1824
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)], false);
1825 1825
             },
1826
-            269 => function ($stackPos) {
1827
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
1826
+            269 => function($stackPos) {
1827
+                 $this->semValue = array($this->semStack[$stackPos - (2 - 2)], true);
1828 1828
             },
1829
-            270 => function ($stackPos) {
1830
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1829
+            270 => function($stackPos) {
1830
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)], false);
1831 1831
             },
1832
-            271 => function ($stackPos) {
1833
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
1832
+            271 => function($stackPos) {
1833
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)], false);
1834 1834
             },
1835
-            272 => function ($stackPos) {
1836
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
1835
+            272 => function($stackPos) {
1836
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
1837 1837
             },
1838
-            273 => function ($stackPos) {
1838
+            273 => function($stackPos) {
1839 1839
                  $this->semValue = array();
1840 1840
             },
1841
-            274 => function ($stackPos) {
1842
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1841
+            274 => function($stackPos) {
1842
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1843 1843
             },
1844
-            275 => function ($stackPos) {
1845
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1844
+            275 => function($stackPos) {
1845
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1846 1846
             },
1847
-            276 => function ($stackPos) {
1847
+            276 => function($stackPos) {
1848 1848
                  $this->semValue = 0;
1849 1849
             },
1850
-            277 => function ($stackPos) {
1851
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
1850
+            277 => function($stackPos) {
1851
+                 $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)];
1852 1852
             },
1853
-            278 => function ($stackPos) {
1853
+            278 => function($stackPos) {
1854 1854
                  $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
1855 1855
             },
1856
-            279 => function ($stackPos) {
1856
+            279 => function($stackPos) {
1857 1857
                  $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
1858 1858
             },
1859
-            280 => function ($stackPos) {
1859
+            280 => function($stackPos) {
1860 1860
                  $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
1861 1861
             },
1862
-            281 => function ($stackPos) {
1862
+            281 => function($stackPos) {
1863 1863
                  $this->semValue = Stmt\Class_::MODIFIER_READONLY;
1864 1864
             },
1865
-            282 => function ($stackPos) {
1866
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1865
+            282 => function($stackPos) {
1866
+                 $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 6)], null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]);
1867 1867
             $this->checkParam($this->semValue);
1868 1868
             },
1869
-            283 => function ($stackPos) {
1870
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
1869
+            283 => function($stackPos) {
1870
+                 $this->semValue = new Node\Param($this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 8)], $this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 5)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (8 - 2)], $this->semStack[$stackPos - (8 - 1)]);
1871 1871
             $this->checkParam($this->semValue);
1872 1872
             },
1873
-            284 => function ($stackPos) {
1874
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
1873
+            284 => function($stackPos) {
1874
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes), null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]);
1875 1875
             },
1876
-            285 => function ($stackPos) {
1877
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1876
+            285 => function($stackPos) {
1877
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1878 1878
             },
1879
-            286 => function ($stackPos) {
1880
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1879
+            286 => function($stackPos) {
1880
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1881 1881
             },
1882
-            287 => function ($stackPos) {
1883
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1882
+            287 => function($stackPos) {
1883
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1884 1884
             },
1885
-            288 => function ($stackPos) {
1886
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1885
+            288 => function($stackPos) {
1886
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1887 1887
             },
1888
-            289 => function ($stackPos) {
1889
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1888
+            289 => function($stackPos) {
1889
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1890 1890
             },
1891
-            290 => function ($stackPos) {
1892
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1891
+            290 => function($stackPos) {
1892
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1893 1893
             },
1894
-            291 => function ($stackPos) {
1895
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
1894
+            291 => function($stackPos) {
1895
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos - (1 - 1)]);
1896 1896
             },
1897
-            292 => function ($stackPos) {
1898
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1897
+            292 => function($stackPos) {
1898
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1899 1899
             },
1900
-            293 => function ($stackPos) {
1901
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1900
+            293 => function($stackPos) {
1901
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1902 1902
             },
1903
-            294 => function ($stackPos) {
1904
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1903
+            294 => function($stackPos) {
1904
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1905 1905
             },
1906
-            295 => function ($stackPos) {
1907
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1906
+            295 => function($stackPos) {
1907
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
1908 1908
             },
1909
-            296 => function ($stackPos) {
1910
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1909
+            296 => function($stackPos) {
1910
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]);
1911 1911
             },
1912
-            297 => function ($stackPos) {
1913
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1912
+            297 => function($stackPos) {
1913
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1914 1914
             },
1915
-            298 => function ($stackPos) {
1916
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1915
+            298 => function($stackPos) {
1916
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1917 1917
             },
1918
-            299 => function ($stackPos) {
1919
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
1918
+            299 => function($stackPos) {
1919
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
1920 1920
             },
1921
-            300 => function ($stackPos) {
1922
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1921
+            300 => function($stackPos) {
1922
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]);
1923 1923
             },
1924
-            301 => function ($stackPos) {
1925
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1924
+            301 => function($stackPos) {
1925
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1926 1926
             },
1927
-            302 => function ($stackPos) {
1928
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1927
+            302 => function($stackPos) {
1928
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]);
1929 1929
             },
1930
-            303 => function ($stackPos) {
1931
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1930
+            303 => function($stackPos) {
1931
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1932 1932
             },
1933
-            304 => function ($stackPos) {
1934
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1933
+            304 => function($stackPos) {
1934
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1935 1935
             },
1936
-            305 => function ($stackPos) {
1937
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
1936
+            305 => function($stackPos) {
1937
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]);
1938 1938
             },
1939
-            306 => function ($stackPos) {
1940
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1939
+            306 => function($stackPos) {
1940
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1941 1941
             },
1942
-            307 => function ($stackPos) {
1943
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1942
+            307 => function($stackPos) {
1943
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1944 1944
             },
1945
-            308 => function ($stackPos) {
1946
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1945
+            308 => function($stackPos) {
1946
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1947 1947
             },
1948
-            309 => function ($stackPos) {
1949
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1948
+            309 => function($stackPos) {
1949
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1950 1950
             },
1951
-            310 => function ($stackPos) {
1952
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1951
+            310 => function($stackPos) {
1952
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1953 1953
             },
1954
-            311 => function ($stackPos) {
1955
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1954
+            311 => function($stackPos) {
1955
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1956 1956
             },
1957
-            312 => function ($stackPos) {
1957
+            312 => function($stackPos) {
1958 1958
                  $this->semValue = null;
1959 1959
             },
1960
-            313 => function ($stackPos) {
1961
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
1960
+            313 => function($stackPos) {
1961
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
1962 1962
             },
1963
-            314 => function ($stackPos) {
1963
+            314 => function($stackPos) {
1964 1964
                  $this->semValue = null;
1965 1965
             },
1966
-            315 => function ($stackPos) {
1967
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
1966
+            315 => function($stackPos) {
1967
+                 $this->semValue = $this->semStack[$stackPos - (2 - 2)];
1968 1968
             },
1969
-            316 => function ($stackPos) {
1969
+            316 => function($stackPos) {
1970 1970
                  $this->semValue = null;
1971 1971
             },
1972
-            317 => function ($stackPos) {
1972
+            317 => function($stackPos) {
1973 1973
                  $this->semValue = array();
1974 1974
             },
1975
-            318 => function ($stackPos) {
1976
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
1975
+            318 => function($stackPos) {
1976
+                 $this->semValue = $this->semStack[$stackPos - (4 - 2)];
1977 1977
             },
1978
-            319 => function ($stackPos) {
1979
-                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
1978
+            319 => function($stackPos) {
1979
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 2)]);
1980 1980
             },
1981
-            320 => function ($stackPos) {
1982
-                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1981
+            320 => function($stackPos) {
1982
+                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1983 1983
             },
1984
-            321 => function ($stackPos) {
1985
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
1984
+            321 => function($stackPos) {
1985
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
1986 1986
             },
1987
-            322 => function ($stackPos) {
1988
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
1987
+            322 => function($stackPos) {
1988
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
1989 1989
             },
1990
-            323 => function ($stackPos) {
1991
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
1990
+            323 => function($stackPos) {
1991
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], false, false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
1992 1992
             },
1993
-            324 => function ($stackPos) {
1994
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1993
+            324 => function($stackPos) {
1994
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], true, false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1995 1995
             },
1996
-            325 => function ($stackPos) {
1997
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
1996
+            325 => function($stackPos) {
1997
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], false, true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
1998 1998
             },
1999
-            326 => function ($stackPos) {
2000
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
1999
+            326 => function($stackPos) {
2000
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos - (3 - 3)], false, false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (3 - 1)]);
2001 2001
             },
2002
-            327 => function ($stackPos) {
2003
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2002
+            327 => function($stackPos) {
2003
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2004 2004
             },
2005
-            328 => function ($stackPos) {
2006
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2005
+            328 => function($stackPos) {
2006
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2007 2007
             },
2008
-            329 => function ($stackPos) {
2009
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2008
+            329 => function($stackPos) {
2009
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2010 2010
             },
2011
-            330 => function ($stackPos) {
2012
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2011
+            330 => function($stackPos) {
2012
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2013 2013
             },
2014
-            331 => function ($stackPos) {
2015
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2014
+            331 => function($stackPos) {
2015
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2016 2016
             },
2017
-            332 => function ($stackPos) {
2018
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2017
+            332 => function($stackPos) {
2018
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2019 2019
             },
2020
-            333 => function ($stackPos) {
2021
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2020
+            333 => function($stackPos) {
2021
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2022 2022
             },
2023
-            334 => function ($stackPos) {
2024
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2023
+            334 => function($stackPos) {
2024
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2025 2025
             },
2026
-            335 => function ($stackPos) {
2027
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2026
+            335 => function($stackPos) {
2027
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2028 2028
             },
2029
-            336 => function ($stackPos) {
2030
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
2029
+            336 => function($stackPos) {
2030
+                 if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }
2031 2031
             },
2032
-            337 => function ($stackPos) {
2032
+            337 => function($stackPos) {
2033 2033
                  $this->semValue = array();
2034 2034
             },
2035
-            338 => function ($stackPos) {
2035
+            338 => function($stackPos) {
2036 2036
                  $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
2037
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
2037
+            if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2038 2038
             },
2039
-            339 => function ($stackPos) {
2040
-                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
2041
-            $this->checkProperty($this->semValue, $stackPos-(5-2));
2039
+            339 => function($stackPos) {
2040
+                 $this->semValue = new Stmt\Property($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 1)]);
2041
+            $this->checkProperty($this->semValue, $stackPos - (5 - 2));
2042 2042
             },
2043
-            340 => function ($stackPos) {
2044
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
2045
-            $this->checkClassConst($this->semValue, $stackPos-(5-2));
2043
+            340 => function($stackPos) {
2044
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 2)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 1)]);
2045
+            $this->checkClassConst($this->semValue, $stackPos - (5 - 2));
2046 2046
             },
2047
-            341 => function ($stackPos) {
2048
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2049
-            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
2047
+            341 => function($stackPos) {
2048
+                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (10 - 5)], ['type' => $this->semStack[$stackPos - (10 - 2)], 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 7)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes);
2049
+            $this->checkClassMethod($this->semValue, $stackPos - (10 - 2));
2050 2050
             },
2051
-            342 => function ($stackPos) {
2052
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2051
+            342 => function($stackPos) {
2052
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2053 2053
             },
2054
-            343 => function ($stackPos) {
2055
-                 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2054
+            343 => function($stackPos) {
2055
+                 $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 1)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
2056 2056
             },
2057
-            344 => function ($stackPos) {
2057
+            344 => function($stackPos) {
2058 2058
                  $this->semValue = null; /* will be skipped */
2059 2059
             },
2060
-            345 => function ($stackPos) {
2060
+            345 => function($stackPos) {
2061 2061
                  $this->semValue = array();
2062 2062
             },
2063
-            346 => function ($stackPos) {
2064
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2063
+            346 => function($stackPos) {
2064
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2065 2065
             },
2066
-            347 => function ($stackPos) {
2066
+            347 => function($stackPos) {
2067 2067
                  $this->semValue = array();
2068 2068
             },
2069
-            348 => function ($stackPos) {
2070
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2069
+            348 => function($stackPos) {
2070
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2071 2071
             },
2072
-            349 => function ($stackPos) {
2073
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2072
+            349 => function($stackPos) {
2073
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2074 2074
             },
2075
-            350 => function ($stackPos) {
2076
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2075
+            350 => function($stackPos) {
2076
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
2077 2077
             },
2078
-            351 => function ($stackPos) {
2079
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2078
+            351 => function($stackPos) {
2079
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2080 2080
             },
2081
-            352 => function ($stackPos) {
2082
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2081
+            352 => function($stackPos) {
2082
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2083 2083
             },
2084
-            353 => function ($stackPos) {
2085
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2084
+            353 => function($stackPos) {
2085
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2086 2086
             },
2087
-            354 => function ($stackPos) {
2088
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
2087
+            354 => function($stackPos) {
2088
+                 $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]);
2089 2089
             },
2090
-            355 => function ($stackPos) {
2091
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2090
+            355 => function($stackPos) {
2091
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2092 2092
             },
2093
-            356 => function ($stackPos) {
2094
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
2093
+            356 => function($stackPos) {
2094
+                 $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]);
2095 2095
             },
2096
-            357 => function ($stackPos) {
2096
+            357 => function($stackPos) {
2097 2097
                  $this->semValue = null;
2098 2098
             },
2099
-            358 => function ($stackPos) {
2100
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2099
+            358 => function($stackPos) {
2100
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2101 2101
             },
2102
-            359 => function ($stackPos) {
2103
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2102
+            359 => function($stackPos) {
2103
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2104 2104
             },
2105
-            360 => function ($stackPos) {
2105
+            360 => function($stackPos) {
2106 2106
                  $this->semValue = 0;
2107 2107
             },
2108
-            361 => function ($stackPos) {
2108
+            361 => function($stackPos) {
2109 2109
                  $this->semValue = 0;
2110 2110
             },
2111
-            362 => function ($stackPos) {
2112
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2111
+            362 => function($stackPos) {
2112
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2113 2113
             },
2114
-            363 => function ($stackPos) {
2115
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2114
+            363 => function($stackPos) {
2115
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2116 2116
             },
2117
-            364 => function ($stackPos) {
2118
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
2117
+            364 => function($stackPos) {
2118
+                 $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)];
2119 2119
             },
2120
-            365 => function ($stackPos) {
2120
+            365 => function($stackPos) {
2121 2121
                  $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
2122 2122
             },
2123
-            366 => function ($stackPos) {
2123
+            366 => function($stackPos) {
2124 2124
                  $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
2125 2125
             },
2126
-            367 => function ($stackPos) {
2126
+            367 => function($stackPos) {
2127 2127
                  $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
2128 2128
             },
2129
-            368 => function ($stackPos) {
2129
+            368 => function($stackPos) {
2130 2130
                  $this->semValue = Stmt\Class_::MODIFIER_STATIC;
2131 2131
             },
2132
-            369 => function ($stackPos) {
2132
+            369 => function($stackPos) {
2133 2133
                  $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
2134 2134
             },
2135
-            370 => function ($stackPos) {
2135
+            370 => function($stackPos) {
2136 2136
                  $this->semValue = Stmt\Class_::MODIFIER_FINAL;
2137 2137
             },
2138
-            371 => function ($stackPos) {
2138
+            371 => function($stackPos) {
2139 2139
                  $this->semValue = Stmt\Class_::MODIFIER_READONLY;
2140 2140
             },
2141
-            372 => function ($stackPos) {
2142
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2141
+            372 => function($stackPos) {
2142
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2143 2143
             },
2144
-            373 => function ($stackPos) {
2145
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2144
+            373 => function($stackPos) {
2145
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2146 2146
             },
2147
-            374 => function ($stackPos) {
2148
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2147
+            374 => function($stackPos) {
2148
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2149 2149
             },
2150
-            375 => function ($stackPos) {
2151
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2150
+            375 => function($stackPos) {
2151
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2152 2152
             },
2153
-            376 => function ($stackPos) {
2154
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2153
+            376 => function($stackPos) {
2154
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2155 2155
             },
2156
-            377 => function ($stackPos) {
2157
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2156
+            377 => function($stackPos) {
2157
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2158 2158
             },
2159
-            378 => function ($stackPos) {
2160
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2159
+            378 => function($stackPos) {
2160
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2161 2161
             },
2162
-            379 => function ($stackPos) {
2163
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2162
+            379 => function($stackPos) {
2163
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2164 2164
             },
2165
-            380 => function ($stackPos) {
2166
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2165
+            380 => function($stackPos) {
2166
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2167 2167
             },
2168
-            381 => function ($stackPos) {
2169
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2168
+            381 => function($stackPos) {
2169
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2170 2170
             },
2171
-            382 => function ($stackPos) {
2171
+            382 => function($stackPos) {
2172 2172
                  $this->semValue = array();
2173 2173
             },
2174
-            383 => function ($stackPos) {
2175
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2174
+            383 => function($stackPos) {
2175
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2176 2176
             },
2177
-            384 => function ($stackPos) {
2178
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2177
+            384 => function($stackPos) {
2178
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2179 2179
             },
2180
-            385 => function ($stackPos) {
2181
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2180
+            385 => function($stackPos) {
2181
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2182 2182
             },
2183
-            386 => function ($stackPos) {
2184
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2183
+            386 => function($stackPos) {
2184
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2185 2185
             },
2186
-            387 => function ($stackPos) {
2187
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2186
+            387 => function($stackPos) {
2187
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2188 2188
             },
2189
-            388 => function ($stackPos) {
2190
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2189
+            388 => function($stackPos) {
2190
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2191 2191
             },
2192
-            389 => function ($stackPos) {
2193
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2192
+            389 => function($stackPos) {
2193
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2194 2194
             },
2195
-            390 => function ($stackPos) {
2196
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2195
+            390 => function($stackPos) {
2196
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2197 2197
             },
2198
-            391 => function ($stackPos) {
2199
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2198
+            391 => function($stackPos) {
2199
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2200 2200
             },
2201
-            392 => function ($stackPos) {
2202
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2201
+            392 => function($stackPos) {
2202
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2203 2203
             },
2204
-            393 => function ($stackPos) {
2205
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2204
+            393 => function($stackPos) {
2205
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2206 2206
             },
2207
-            394 => function ($stackPos) {
2208
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2207
+            394 => function($stackPos) {
2208
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2209 2209
             },
2210
-            395 => function ($stackPos) {
2211
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2210
+            395 => function($stackPos) {
2211
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2212 2212
             },
2213
-            396 => function ($stackPos) {
2214
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2213
+            396 => function($stackPos) {
2214
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2215 2215
             },
2216
-            397 => function ($stackPos) {
2217
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2216
+            397 => function($stackPos) {
2217
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2218 2218
             },
2219
-            398 => function ($stackPos) {
2220
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2219
+            398 => function($stackPos) {
2220
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2221 2221
             },
2222
-            399 => function ($stackPos) {
2223
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2222
+            399 => function($stackPos) {
2223
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2224 2224
             },
2225
-            400 => function ($stackPos) {
2226
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2225
+            400 => function($stackPos) {
2226
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2227 2227
             },
2228
-            401 => function ($stackPos) {
2229
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2228
+            401 => function($stackPos) {
2229
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2230 2230
             },
2231
-            402 => function ($stackPos) {
2232
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2231
+            402 => function($stackPos) {
2232
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2233 2233
             },
2234
-            403 => function ($stackPos) {
2235
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2234
+            403 => function($stackPos) {
2235
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2236 2236
             },
2237
-            404 => function ($stackPos) {
2238
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2237
+            404 => function($stackPos) {
2238
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2239 2239
             },
2240
-            405 => function ($stackPos) {
2241
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2240
+            405 => function($stackPos) {
2241
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2242 2242
             },
2243
-            406 => function ($stackPos) {
2244
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2243
+            406 => function($stackPos) {
2244
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2245 2245
             },
2246
-            407 => function ($stackPos) {
2247
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2246
+            407 => function($stackPos) {
2247
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2248 2248
             },
2249
-            408 => function ($stackPos) {
2250
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2249
+            408 => function($stackPos) {
2250
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2251 2251
             },
2252
-            409 => function ($stackPos) {
2253
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2252
+            409 => function($stackPos) {
2253
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2254 2254
             },
2255
-            410 => function ($stackPos) {
2256
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2255
+            410 => function($stackPos) {
2256
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2257 2257
             },
2258
-            411 => function ($stackPos) {
2259
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2258
+            411 => function($stackPos) {
2259
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2260 2260
             },
2261
-            412 => function ($stackPos) {
2262
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2261
+            412 => function($stackPos) {
2262
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2263 2263
             },
2264
-            413 => function ($stackPos) {
2265
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2264
+            413 => function($stackPos) {
2265
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2266 2266
             },
2267
-            414 => function ($stackPos) {
2268
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2267
+            414 => function($stackPos) {
2268
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2269 2269
             },
2270
-            415 => function ($stackPos) {
2271
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2270
+            415 => function($stackPos) {
2271
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2272 2272
             },
2273
-            416 => function ($stackPos) {
2274
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2273
+            416 => function($stackPos) {
2274
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2275 2275
             },
2276
-            417 => function ($stackPos) {
2277
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2276
+            417 => function($stackPos) {
2277
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2278 2278
             },
2279
-            418 => function ($stackPos) {
2280
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2279
+            418 => function($stackPos) {
2280
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2281 2281
             },
2282
-            419 => function ($stackPos) {
2283
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2282
+            419 => function($stackPos) {
2283
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2284 2284
             },
2285
-            420 => function ($stackPos) {
2286
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2285
+            420 => function($stackPos) {
2286
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2287 2287
             },
2288
-            421 => function ($stackPos) {
2289
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2288
+            421 => function($stackPos) {
2289
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2290 2290
             },
2291
-            422 => function ($stackPos) {
2292
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2291
+            422 => function($stackPos) {
2292
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2293 2293
             },
2294
-            423 => function ($stackPos) {
2295
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2294
+            423 => function($stackPos) {
2295
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2296 2296
             },
2297
-            424 => function ($stackPos) {
2298
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2297
+            424 => function($stackPos) {
2298
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2299 2299
             },
2300
-            425 => function ($stackPos) {
2301
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2300
+            425 => function($stackPos) {
2301
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2302 2302
             },
2303
-            426 => function ($stackPos) {
2304
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2303
+            426 => function($stackPos) {
2304
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2305 2305
             },
2306
-            427 => function ($stackPos) {
2307
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2306
+            427 => function($stackPos) {
2307
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2308 2308
             },
2309
-            428 => function ($stackPos) {
2310
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2309
+            428 => function($stackPos) {
2310
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2311 2311
             },
2312
-            429 => function ($stackPos) {
2313
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2312
+            429 => function($stackPos) {
2313
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2314 2314
             },
2315
-            430 => function ($stackPos) {
2316
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2315
+            430 => function($stackPos) {
2316
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2317 2317
             },
2318
-            431 => function ($stackPos) {
2319
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2318
+            431 => function($stackPos) {
2319
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2320 2320
             },
2321
-            432 => function ($stackPos) {
2322
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2321
+            432 => function($stackPos) {
2322
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2323 2323
             },
2324
-            433 => function ($stackPos) {
2325
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2324
+            433 => function($stackPos) {
2325
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2326 2326
             },
2327
-            434 => function ($stackPos) {
2328
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2327
+            434 => function($stackPos) {
2328
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2329 2329
             },
2330
-            435 => function ($stackPos) {
2331
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2330
+            435 => function($stackPos) {
2331
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2332 2332
             },
2333
-            436 => function ($stackPos) {
2334
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2333
+            436 => function($stackPos) {
2334
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2335 2335
             },
2336
-            437 => function ($stackPos) {
2337
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2336
+            437 => function($stackPos) {
2337
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2338 2338
             },
2339
-            438 => function ($stackPos) {
2340
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2339
+            438 => function($stackPos) {
2340
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2341 2341
             },
2342
-            439 => function ($stackPos) {
2343
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2342
+            439 => function($stackPos) {
2343
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2344 2344
             },
2345
-            440 => function ($stackPos) {
2346
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2345
+            440 => function($stackPos) {
2346
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2347 2347
             },
2348
-            441 => function ($stackPos) {
2349
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2348
+            441 => function($stackPos) {
2349
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2350 2350
             },
2351
-            442 => function ($stackPos) {
2352
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
2351
+            442 => function($stackPos) {
2352
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes);
2353 2353
             },
2354
-            443 => function ($stackPos) {
2355
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2354
+            443 => function($stackPos) {
2355
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2356 2356
             },
2357
-            444 => function ($stackPos) {
2358
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2357
+            444 => function($stackPos) {
2358
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2359 2359
             },
2360
-            445 => function ($stackPos) {
2361
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2360
+            445 => function($stackPos) {
2361
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2362 2362
             },
2363
-            446 => function ($stackPos) {
2364
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2363
+            446 => function($stackPos) {
2364
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2365 2365
             },
2366
-            447 => function ($stackPos) {
2367
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2366
+            447 => function($stackPos) {
2367
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2368 2368
             },
2369
-            448 => function ($stackPos) {
2370
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2369
+            448 => function($stackPos) {
2370
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2371 2371
             },
2372
-            449 => function ($stackPos) {
2373
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2372
+            449 => function($stackPos) {
2373
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2374 2374
             },
2375
-            450 => function ($stackPos) {
2376
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2375
+            450 => function($stackPos) {
2376
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2377 2377
             },
2378
-            451 => function ($stackPos) {
2379
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2378
+            451 => function($stackPos) {
2379
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2380 2380
             },
2381
-            452 => function ($stackPos) {
2382
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2381
+            452 => function($stackPos) {
2382
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2383 2383
             },
2384
-            453 => function ($stackPos) {
2385
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2386
-            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
2387
-            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
2384
+            453 => function($stackPos) {
2385
+                 $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes;
2386
+            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]);
2387
+            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs);
2388 2388
             },
2389
-            454 => function ($stackPos) {
2390
-                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2389
+            454 => function($stackPos) {
2390
+                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2391 2391
             },
2392
-            455 => function ($stackPos) {
2393
-                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2392
+            455 => function($stackPos) {
2393
+                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2394 2394
             },
2395
-            456 => function ($stackPos) {
2396
-                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2395
+            456 => function($stackPos) {
2396
+                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2397 2397
             },
2398
-            457 => function ($stackPos) {
2399
-                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2398
+            457 => function($stackPos) {
2399
+                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2400 2400
             },
2401
-            458 => function ($stackPos) {
2402
-                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2401
+            458 => function($stackPos) {
2402
+                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2403 2403
             },
2404
-            459 => function ($stackPos) {
2405
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
2406
-            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
2407
-            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
2404
+            459 => function($stackPos) {
2405
+                 $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes;
2406
+            $attrs['kind'] = strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
2407
+            $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs);
2408 2408
             },
2409
-            460 => function ($stackPos) {
2410
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2409
+            460 => function($stackPos) {
2410
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2411 2411
             },
2412
-            461 => function ($stackPos) {
2413
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2412
+            461 => function($stackPos) {
2413
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2414 2414
             },
2415
-            462 => function ($stackPos) {
2416
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2415
+            462 => function($stackPos) {
2416
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2417 2417
             },
2418
-            463 => function ($stackPos) {
2419
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2418
+            463 => function($stackPos) {
2419
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2420 2420
             },
2421
-            464 => function ($stackPos) {
2422
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2421
+            464 => function($stackPos) {
2422
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2423 2423
             },
2424
-            465 => function ($stackPos) {
2425
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2424
+            465 => function($stackPos) {
2425
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2426 2426
             },
2427
-            466 => function ($stackPos) {
2428
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2427
+            466 => function($stackPos) {
2428
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2429 2429
             },
2430
-            467 => function ($stackPos) {
2431
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2430
+            467 => function($stackPos) {
2431
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2432 2432
             },
2433
-            468 => function ($stackPos) {
2434
-                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2433
+            468 => function($stackPos) {
2434
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2435 2435
             },
2436
-            469 => function ($stackPos) {
2437
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2436
+            469 => function($stackPos) {
2437
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'returnType' => $this->semStack[$stackPos - (8 - 6)], 'expr' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
2438 2438
             },
2439
-            470 => function ($stackPos) {
2440
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2439
+            470 => function($stackPos) {
2440
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
2441 2441
             },
2442
-            471 => function ($stackPos) {
2443
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
2442
+            471 => function($stackPos) {
2443
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'uses' => $this->semStack[$stackPos - (8 - 6)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes);
2444 2444
             },
2445
-            472 => function ($stackPos) {
2446
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2445
+            472 => function($stackPos) {
2446
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
2447 2447
             },
2448
-            473 => function ($stackPos) {
2449
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2448
+            473 => function($stackPos) {
2449
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
2450 2450
             },
2451
-            474 => function ($stackPos) {
2452
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2451
+            474 => function($stackPos) {
2452
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 8)], 'expr' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes);
2453 2453
             },
2454
-            475 => function ($stackPos) {
2455
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
2454
+            475 => function($stackPos) {
2455
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes);
2456 2456
             },
2457
-            476 => function ($stackPos) {
2458
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
2457
+            476 => function($stackPos) {
2458
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'uses' => $this->semStack[$stackPos - (10 - 8)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes);
2459 2459
             },
2460
-            477 => function ($stackPos) {
2461
-                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
2460
+            477 => function($stackPos) {
2461
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (8 - 3)]);
2462 2462
             $this->checkClass($this->semValue[0], -1);
2463 2463
             },
2464
-            478 => function ($stackPos) {
2465
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2464
+            478 => function($stackPos) {
2465
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2466 2466
             },
2467
-            479 => function ($stackPos) {
2468
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2467
+            479 => function($stackPos) {
2468
+                 list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2469 2469
             },
2470
-            480 => function ($stackPos) {
2470
+            480 => function($stackPos) {
2471 2471
                  $this->semValue = array();
2472 2472
             },
2473
-            481 => function ($stackPos) {
2474
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
2473
+            481 => function($stackPos) {
2474
+                 $this->semValue = $this->semStack[$stackPos - (4 - 3)];
2475 2475
             },
2476
-            482 => function ($stackPos) {
2477
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
2476
+            482 => function($stackPos) {
2477
+                 $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2478 2478
             },
2479
-            483 => function ($stackPos) {
2480
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2479
+            483 => function($stackPos) {
2480
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2481 2481
             },
2482
-            484 => function ($stackPos) {
2483
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2482
+            484 => function($stackPos) {
2483
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2484 2484
             },
2485
-            485 => function ($stackPos) {
2486
-                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2485
+            485 => function($stackPos) {
2486
+                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2487 2487
             },
2488
-            486 => function ($stackPos) {
2489
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2488
+            486 => function($stackPos) {
2489
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2490 2490
             },
2491
-            487 => function ($stackPos) {
2492
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2491
+            487 => function($stackPos) {
2492
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2493 2493
             },
2494
-            488 => function ($stackPos) {
2495
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2494
+            488 => function($stackPos) {
2495
+                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2496 2496
             },
2497
-            489 => function ($stackPos) {
2498
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2497
+            489 => function($stackPos) {
2498
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2499 2499
             },
2500
-            490 => function ($stackPos) {
2501
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2500
+            490 => function($stackPos) {
2501
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2502 2502
             },
2503
-            491 => function ($stackPos) {
2504
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2503
+            491 => function($stackPos) {
2504
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2505 2505
             },
2506
-            492 => function ($stackPos) {
2507
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2506
+            492 => function($stackPos) {
2507
+                 $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2508 2508
             },
2509
-            493 => function ($stackPos) {
2510
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2509
+            493 => function($stackPos) {
2510
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2511 2511
             },
2512
-            494 => function ($stackPos) {
2513
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2512
+            494 => function($stackPos) {
2513
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos - (1 - 1)], 10), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2514 2514
             },
2515
-            495 => function ($stackPos) {
2516
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2515
+            495 => function($stackPos) {
2516
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2517 2517
             },
2518
-            496 => function ($stackPos) {
2519
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2518
+            496 => function($stackPos) {
2519
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2520 2520
             },
2521
-            497 => function ($stackPos) {
2522
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2521
+            497 => function($stackPos) {
2522
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2523 2523
             },
2524
-            498 => function ($stackPos) {
2525
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2524
+            498 => function($stackPos) {
2525
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->errorState = 2;
2526 2526
             },
2527
-            499 => function ($stackPos) {
2528
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2527
+            499 => function($stackPos) {
2528
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2529 2529
             },
2530
-            500 => function ($stackPos) {
2531
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2530
+            500 => function($stackPos) {
2531
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2532 2532
             },
2533
-            501 => function ($stackPos) {
2533
+            501 => function($stackPos) {
2534 2534
                  $this->semValue = null;
2535 2535
             },
2536
-            502 => function ($stackPos) {
2537
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2536
+            502 => function($stackPos) {
2537
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2538 2538
             },
2539
-            503 => function ($stackPos) {
2539
+            503 => function($stackPos) {
2540 2540
                  $this->semValue = array();
2541 2541
             },
2542
-            504 => function ($stackPos) {
2543
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
2542
+            504 => function($stackPos) {
2543
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos - (1 - 1)], '`'), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes));
2544 2544
             },
2545
-            505 => function ($stackPos) {
2546
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
2545
+            505 => function($stackPos) {
2546
+                 foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2547 2547
             },
2548
-            506 => function ($stackPos) {
2548
+            506 => function($stackPos) {
2549 2549
                  $this->semValue = array();
2550 2550
             },
2551
-            507 => function ($stackPos) {
2552
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2551
+            507 => function($stackPos) {
2552
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2553 2553
             },
2554
-            508 => function ($stackPos) {
2555
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2554
+            508 => function($stackPos) {
2555
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2556 2556
             },
2557
-            509 => function ($stackPos) {
2558
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2557
+            509 => function($stackPos) {
2558
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2559 2559
             },
2560
-            510 => function ($stackPos) {
2561
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2560
+            510 => function($stackPos) {
2561
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2562 2562
             },
2563
-            511 => function ($stackPos) {
2564
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2563
+            511 => function($stackPos) {
2564
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2565 2565
             },
2566
-            512 => function ($stackPos) {
2567
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2566
+            512 => function($stackPos) {
2567
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2568 2568
             },
2569
-            513 => function ($stackPos) {
2570
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2569
+            513 => function($stackPos) {
2570
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2571 2571
             },
2572
-            514 => function ($stackPos) {
2573
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2572
+            514 => function($stackPos) {
2573
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2574 2574
             },
2575
-            515 => function ($stackPos) {
2576
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2575
+            515 => function($stackPos) {
2576
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2577 2577
             },
2578
-            516 => function ($stackPos) {
2579
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2578
+            516 => function($stackPos) {
2579
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2580 2580
             },
2581
-            517 => function ($stackPos) {
2582
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2581
+            517 => function($stackPos) {
2582
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2583 2583
             },
2584
-            518 => function ($stackPos) {
2585
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
2584
+            518 => function($stackPos) {
2585
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], new Expr\Error($this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)]), $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->errorState = 2;
2586 2586
             },
2587
-            519 => function ($stackPos) {
2588
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
2589
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
2587
+            519 => function($stackPos) {
2588
+                 $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
2589
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs);
2590 2590
             },
2591
-            520 => function ($stackPos) {
2592
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
2593
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
2591
+            520 => function($stackPos) {
2592
+                 $attrs = $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
2593
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs);
2594 2594
             },
2595
-            521 => function ($stackPos) {
2596
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2595
+            521 => function($stackPos) {
2596
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2597 2597
             },
2598
-            522 => function ($stackPos) {
2599
-                 $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2598
+            522 => function($stackPos) {
2599
+                 $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2600 2600
             },
2601
-            523 => function ($stackPos) {
2602
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
2603
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
2601
+            523 => function($stackPos) {
2602
+                 $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
2603
+            foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos - (3 - 2)], $attrs);
2604 2604
             },
2605
-            524 => function ($stackPos) {
2606
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2605
+            524 => function($stackPos) {
2606
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2607 2607
             },
2608
-            525 => function ($stackPos) {
2609
-                 $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2608
+            525 => function($stackPos) {
2609
+                 $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2610 2610
             },
2611
-            526 => function ($stackPos) {
2612
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2611
+            526 => function($stackPos) {
2612
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2613 2613
             },
2614
-            527 => function ($stackPos) {
2615
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2614
+            527 => function($stackPos) {
2615
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2616 2616
             },
2617
-            528 => function ($stackPos) {
2618
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2617
+            528 => function($stackPos) {
2618
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2619 2619
             },
2620
-            529 => function ($stackPos) {
2621
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2620
+            529 => function($stackPos) {
2621
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], true);
2622 2622
             },
2623
-            530 => function ($stackPos) {
2624
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
2623
+            530 => function($stackPos) {
2624
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (2 - 2)] + $this->endAttributeStack[$stackPos - (2 - 2)], true);
2625 2625
             },
2626
-            531 => function ($stackPos) {
2627
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
2626
+            531 => function($stackPos) {
2627
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], true);
2628 2628
             },
2629
-            532 => function ($stackPos) {
2629
+            532 => function($stackPos) {
2630 2630
                  $this->semValue = null;
2631 2631
             },
2632
-            533 => function ($stackPos) {
2633
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2632
+            533 => function($stackPos) {
2633
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2634 2634
             },
2635
-            534 => function ($stackPos) {
2636
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2635
+            534 => function($stackPos) {
2636
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2637 2637
             },
2638
-            535 => function ($stackPos) {
2639
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2638
+            535 => function($stackPos) {
2639
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2640 2640
             },
2641
-            536 => function ($stackPos) {
2642
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2641
+            536 => function($stackPos) {
2642
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2643 2643
             },
2644
-            537 => function ($stackPos) {
2645
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2644
+            537 => function($stackPos) {
2645
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2646 2646
             },
2647
-            538 => function ($stackPos) {
2648
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2647
+            538 => function($stackPos) {
2648
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2649 2649
             },
2650
-            539 => function ($stackPos) {
2651
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2650
+            539 => function($stackPos) {
2651
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2652 2652
             },
2653
-            540 => function ($stackPos) {
2654
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2653
+            540 => function($stackPos) {
2654
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2655 2655
             },
2656
-            541 => function ($stackPos) {
2657
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2656
+            541 => function($stackPos) {
2657
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2658 2658
             },
2659
-            542 => function ($stackPos) {
2660
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2659
+            542 => function($stackPos) {
2660
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2661 2661
             },
2662
-            543 => function ($stackPos) {
2663
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2662
+            543 => function($stackPos) {
2663
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2664 2664
             },
2665
-            544 => function ($stackPos) {
2666
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2665
+            544 => function($stackPos) {
2666
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2667 2667
             },
2668
-            545 => function ($stackPos) {
2669
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2668
+            545 => function($stackPos) {
2669
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2670 2670
             },
2671
-            546 => function ($stackPos) {
2672
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2671
+            546 => function($stackPos) {
2672
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2673 2673
             },
2674
-            547 => function ($stackPos) {
2675
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2674
+            547 => function($stackPos) {
2675
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2676 2676
             },
2677
-            548 => function ($stackPos) {
2678
-                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2677
+            548 => function($stackPos) {
2678
+                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2679 2679
             },
2680
-            549 => function ($stackPos) {
2680
+            549 => function($stackPos) {
2681 2681
                  $this->semValue = null;
2682 2682
             },
2683
-            550 => function ($stackPos) {
2684
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2683
+            550 => function($stackPos) {
2684
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2685 2685
             },
2686
-            551 => function ($stackPos) {
2687
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2686
+            551 => function($stackPos) {
2687
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2688 2688
             },
2689
-            552 => function ($stackPos) {
2690
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2689
+            552 => function($stackPos) {
2690
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2691 2691
             },
2692
-            553 => function ($stackPos) {
2693
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2692
+            553 => function($stackPos) {
2693
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2694 2694
             },
2695
-            554 => function ($stackPos) {
2696
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2695
+            554 => function($stackPos) {
2696
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2697 2697
             },
2698
-            555 => function ($stackPos) {
2699
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2698
+            555 => function($stackPos) {
2699
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2700 2700
             },
2701
-            556 => function ($stackPos) {
2702
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2701
+            556 => function($stackPos) {
2702
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2703 2703
             },
2704
-            557 => function ($stackPos) {
2705
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2704
+            557 => function($stackPos) {
2705
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2706 2706
             },
2707
-            558 => function ($stackPos) {
2708
-                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
2707
+            558 => function($stackPos) {
2708
+                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); $this->errorState = 2;
2709 2709
             },
2710
-            559 => function ($stackPos) {
2711
-                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
2710
+            559 => function($stackPos) {
2711
+                 $var = $this->semStack[$stackPos - (1 - 1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes) : $var;
2712 2712
             },
2713
-            560 => function ($stackPos) {
2714
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2713
+            560 => function($stackPos) {
2714
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2715 2715
             },
2716
-            561 => function ($stackPos) {
2717
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2716
+            561 => function($stackPos) {
2717
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2718 2718
             },
2719
-            562 => function ($stackPos) {
2720
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2719
+            562 => function($stackPos) {
2720
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2721 2721
             },
2722
-            563 => function ($stackPos) {
2723
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2722
+            563 => function($stackPos) {
2723
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2724 2724
             },
2725
-            564 => function ($stackPos) {
2726
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2725
+            564 => function($stackPos) {
2726
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2727 2727
             },
2728
-            565 => function ($stackPos) {
2729
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2728
+            565 => function($stackPos) {
2729
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2730 2730
             },
2731
-            566 => function ($stackPos) {
2732
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2731
+            566 => function($stackPos) {
2732
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2733 2733
             },
2734
-            567 => function ($stackPos) {
2735
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2734
+            567 => function($stackPos) {
2735
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2736 2736
             },
2737
-            568 => function ($stackPos) {
2738
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2737
+            568 => function($stackPos) {
2738
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2739 2739
             },
2740
-            569 => function ($stackPos) {
2741
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2740
+            569 => function($stackPos) {
2741
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2742 2742
             },
2743
-            570 => function ($stackPos) {
2744
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2743
+            570 => function($stackPos) {
2744
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2745 2745
             },
2746
-            571 => function ($stackPos) {
2747
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2746
+            571 => function($stackPos) {
2747
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2748 2748
             },
2749
-            572 => function ($stackPos) {
2750
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2749
+            572 => function($stackPos) {
2750
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2751 2751
             },
2752
-            573 => function ($stackPos) {
2753
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2752
+            573 => function($stackPos) {
2753
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2754 2754
             },
2755
-            574 => function ($stackPos) {
2756
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
2755
+            574 => function($stackPos) {
2756
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->errorState = 2;
2757 2757
             },
2758
-            575 => function ($stackPos) {
2759
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2758
+            575 => function($stackPos) {
2759
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2760 2760
             },
2761
-            576 => function ($stackPos) {
2762
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
2761
+            576 => function($stackPos) {
2762
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $end = count($this->semValue) - 1; if ($this->semValue[$end] === null) array_pop($this->semValue);
2763 2763
             },
2764
-            577 => function ($stackPos) {
2764
+            577 => function($stackPos) {
2765 2765
                 $this->semValue = $this->semStack[$stackPos];
2766 2766
             },
2767
-            578 => function ($stackPos) {
2767
+            578 => function($stackPos) {
2768 2768
                  /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
2769 2769
             },
2770
-            579 => function ($stackPos) {
2771
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
2770
+            579 => function($stackPos) {
2771
+                 $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)];
2772 2772
             },
2773
-            580 => function ($stackPos) {
2774
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2773
+            580 => function($stackPos) {
2774
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2775 2775
             },
2776
-            581 => function ($stackPos) {
2777
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2776
+            581 => function($stackPos) {
2777
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2778 2778
             },
2779
-            582 => function ($stackPos) {
2780
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2779
+            582 => function($stackPos) {
2780
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2781 2781
             },
2782
-            583 => function ($stackPos) {
2783
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2782
+            583 => function($stackPos) {
2783
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2784 2784
             },
2785
-            584 => function ($stackPos) {
2786
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2785
+            584 => function($stackPos) {
2786
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2787 2787
             },
2788
-            585 => function ($stackPos) {
2789
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2788
+            585 => function($stackPos) {
2789
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], true, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2790 2790
             },
2791
-            586 => function ($stackPos) {
2792
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2791
+            586 => function($stackPos) {
2792
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2793 2793
             },
2794
-            587 => function ($stackPos) {
2795
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2794
+            587 => function($stackPos) {
2795
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2796 2796
             },
2797
-            588 => function ($stackPos) {
2797
+            588 => function($stackPos) {
2798 2798
                  $this->semValue = null;
2799 2799
             },
2800
-            589 => function ($stackPos) {
2801
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2800
+            589 => function($stackPos) {
2801
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2802 2802
             },
2803
-            590 => function ($stackPos) {
2804
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
2803
+            590 => function($stackPos) {
2804
+                 $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)];
2805 2805
             },
2806
-            591 => function ($stackPos) {
2807
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
2806
+            591 => function($stackPos) {
2807
+                 $this->semValue = array($this->semStack[$stackPos - (1 - 1)]);
2808 2808
             },
2809
-            592 => function ($stackPos) {
2810
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
2809
+            592 => function($stackPos) {
2810
+                 $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]);
2811 2811
             },
2812
-            593 => function ($stackPos) {
2813
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2812
+            593 => function($stackPos) {
2813
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2814 2814
             },
2815
-            594 => function ($stackPos) {
2816
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2815
+            594 => function($stackPos) {
2816
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2817 2817
             },
2818
-            595 => function ($stackPos) {
2819
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2818
+            595 => function($stackPos) {
2819
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2820 2820
             },
2821
-            596 => function ($stackPos) {
2822
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2821
+            596 => function($stackPos) {
2822
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes);
2823 2823
             },
2824
-            597 => function ($stackPos) {
2825
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2824
+            597 => function($stackPos) {
2825
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2826 2826
             },
2827
-            598 => function ($stackPos) {
2828
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2827
+            598 => function($stackPos) {
2828
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2829 2829
             },
2830
-            599 => function ($stackPos) {
2831
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2830
+            599 => function($stackPos) {
2831
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2832 2832
             },
2833
-            600 => function ($stackPos) {
2834
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
2833
+            600 => function($stackPos) {
2834
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes);
2835 2835
             },
2836
-            601 => function ($stackPos) {
2837
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
2836
+            601 => function($stackPos) {
2837
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes);
2838 2838
             },
2839
-            602 => function ($stackPos) {
2840
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
2839
+            602 => function($stackPos) {
2840
+                 $this->semValue = $this->semStack[$stackPos - (3 - 2)];
2841 2841
             },
2842
-            603 => function ($stackPos) {
2843
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2842
+            603 => function($stackPos) {
2843
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2844 2844
             },
2845
-            604 => function ($stackPos) {
2846
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
2845
+            604 => function($stackPos) {
2846
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes);
2847 2847
             },
2848
-            605 => function ($stackPos) {
2849
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
2848
+            605 => function($stackPos) {
2849
+                 $this->semValue = $this->parseNumString('-'.$this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes);
2850 2850
             },
2851
-            606 => function ($stackPos) {
2852
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
2851
+            606 => function($stackPos) {
2852
+                 $this->semValue = $this->semStack[$stackPos - (1 - 1)];
2853 2853
             },
2854 2854
         ];
2855 2855
     }
Please login to merge, or discard this patch.
Braces   +7 added lines, -2 removed lines patch added patch discarded remove patch
@@ -1563,7 +1563,10 @@  discard block
 block discarded – undo
1563 1563
             },
1564 1564
             183 => function ($stackPos) {
1565 1565
                  $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
1566
-            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
1566
+            if ($this->semValue === null) {
1567
+            	$this->semValue = array();
1568
+            }
1569
+            /* means: no statement */
1567 1570
             },
1568 1571
             184 => function ($stackPos) {
1569 1572
                  $this->semValue = array();
@@ -2759,7 +2762,9 @@  discard block
 block discarded – undo
2759 2762
                  $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
2760 2763
             },
2761 2764
             576 => function ($stackPos) {
2762
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
2765
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) {
2766
+                 	array_pop($this->semValue);
2767
+                 }
2763 2768
             },
2764 2769
             577 => function ($stackPos) {
2765 2770
                 $this->semValue = $this->semStack[$stackPos];
Please login to merge, or discard this patch.
vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php 2 patches
Indentation   +1477 added lines, -1477 removed lines patch added patch discarded remove patch
@@ -14,1461 +14,1461 @@  discard block
 block discarded – undo
14 14
 
15 15
 abstract class PrettyPrinterAbstract
16 16
 {
17
-    const FIXUP_PREC_LEFT       = 0; // LHS operand affected by precedence
18
-    const FIXUP_PREC_RIGHT      = 1; // RHS operand affected by precedence
19
-    const FIXUP_CALL_LHS        = 2; // LHS of call
20
-    const FIXUP_DEREF_LHS       = 3; // LHS of dereferencing operation
21
-    const FIXUP_BRACED_NAME     = 4; // Name operand that may require bracing
22
-    const FIXUP_VAR_BRACED_NAME = 5; // Name operand that may require ${} bracing
23
-    const FIXUP_ENCAPSED        = 6; // Encapsed string part
24
-
25
-    protected $precedenceMap = [
26
-        // [precedence, associativity]
27
-        // where for precedence -1 is %left, 0 is %nonassoc and 1 is %right
28
-        BinaryOp\Pow::class            => [  0,  1],
29
-        Expr\BitwiseNot::class         => [ 10,  1],
30
-        Expr\PreInc::class             => [ 10,  1],
31
-        Expr\PreDec::class             => [ 10,  1],
32
-        Expr\PostInc::class            => [ 10, -1],
33
-        Expr\PostDec::class            => [ 10, -1],
34
-        Expr\UnaryPlus::class          => [ 10,  1],
35
-        Expr\UnaryMinus::class         => [ 10,  1],
36
-        Cast\Int_::class               => [ 10,  1],
37
-        Cast\Double::class             => [ 10,  1],
38
-        Cast\String_::class            => [ 10,  1],
39
-        Cast\Array_::class             => [ 10,  1],
40
-        Cast\Object_::class            => [ 10,  1],
41
-        Cast\Bool_::class              => [ 10,  1],
42
-        Cast\Unset_::class             => [ 10,  1],
43
-        Expr\ErrorSuppress::class      => [ 10,  1],
44
-        Expr\Instanceof_::class        => [ 20,  0],
45
-        Expr\BooleanNot::class         => [ 30,  1],
46
-        BinaryOp\Mul::class            => [ 40, -1],
47
-        BinaryOp\Div::class            => [ 40, -1],
48
-        BinaryOp\Mod::class            => [ 40, -1],
49
-        BinaryOp\Plus::class           => [ 50, -1],
50
-        BinaryOp\Minus::class          => [ 50, -1],
51
-        BinaryOp\Concat::class         => [ 50, -1],
52
-        BinaryOp\ShiftLeft::class      => [ 60, -1],
53
-        BinaryOp\ShiftRight::class     => [ 60, -1],
54
-        BinaryOp\Smaller::class        => [ 70,  0],
55
-        BinaryOp\SmallerOrEqual::class => [ 70,  0],
56
-        BinaryOp\Greater::class        => [ 70,  0],
57
-        BinaryOp\GreaterOrEqual::class => [ 70,  0],
58
-        BinaryOp\Equal::class          => [ 80,  0],
59
-        BinaryOp\NotEqual::class       => [ 80,  0],
60
-        BinaryOp\Identical::class      => [ 80,  0],
61
-        BinaryOp\NotIdentical::class   => [ 80,  0],
62
-        BinaryOp\Spaceship::class      => [ 80,  0],
63
-        BinaryOp\BitwiseAnd::class     => [ 90, -1],
64
-        BinaryOp\BitwiseXor::class     => [100, -1],
65
-        BinaryOp\BitwiseOr::class      => [110, -1],
66
-        BinaryOp\BooleanAnd::class     => [120, -1],
67
-        BinaryOp\BooleanOr::class      => [130, -1],
68
-        BinaryOp\Coalesce::class       => [140,  1],
69
-        Expr\Ternary::class            => [150,  0],
70
-        // parser uses %left for assignments, but they really behave as %right
71
-        Expr\Assign::class             => [160,  1],
72
-        Expr\AssignRef::class          => [160,  1],
73
-        AssignOp\Plus::class           => [160,  1],
74
-        AssignOp\Minus::class          => [160,  1],
75
-        AssignOp\Mul::class            => [160,  1],
76
-        AssignOp\Div::class            => [160,  1],
77
-        AssignOp\Concat::class         => [160,  1],
78
-        AssignOp\Mod::class            => [160,  1],
79
-        AssignOp\BitwiseAnd::class     => [160,  1],
80
-        AssignOp\BitwiseOr::class      => [160,  1],
81
-        AssignOp\BitwiseXor::class     => [160,  1],
82
-        AssignOp\ShiftLeft::class      => [160,  1],
83
-        AssignOp\ShiftRight::class     => [160,  1],
84
-        AssignOp\Pow::class            => [160,  1],
85
-        AssignOp\Coalesce::class       => [160,  1],
86
-        Expr\YieldFrom::class          => [165,  1],
87
-        Expr\Print_::class             => [168,  1],
88
-        BinaryOp\LogicalAnd::class     => [170, -1],
89
-        BinaryOp\LogicalXor::class     => [180, -1],
90
-        BinaryOp\LogicalOr::class      => [190, -1],
91
-        Expr\Include_::class           => [200, -1],
92
-    ];
93
-
94
-    /** @var int Current indentation level. */
95
-    protected $indentLevel;
96
-    /** @var string Newline including current indentation. */
97
-    protected $nl;
98
-    /** @var string Token placed at end of doc string to ensure it is followed by a newline. */
99
-    protected $docStringEndToken;
100
-    /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */
101
-    protected $canUseSemicolonNamespaces;
102
-    /** @var array Pretty printer options */
103
-    protected $options;
104
-
105
-    /** @var TokenStream Original tokens for use in format-preserving pretty print */
106
-    protected $origTokens;
107
-    /** @var Internal\Differ Differ for node lists */
108
-    protected $nodeListDiffer;
109
-    /** @var bool[] Map determining whether a certain character is a label character */
110
-    protected $labelCharMap;
111
-    /**
112
-     * @var int[][] Map from token classes and subnode names to FIXUP_* constants. This is used
113
-     *              during format-preserving prints to place additional parens/braces if necessary.
114
-     */
115
-    protected $fixupMap;
116
-    /**
117
-     * @var int[][] Map from "{$node->getType()}->{$subNode}" to ['left' => $l, 'right' => $r],
118
-     *              where $l and $r specify the token type that needs to be stripped when removing
119
-     *              this node.
120
-     */
121
-    protected $removalMap;
122
-    /**
123
-     * @var mixed[] Map from "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight].
124
-     *              $find is an optional token after which the insertion occurs. $extraLeft/Right
125
-     *              are optionally added before/after the main insertions.
126
-     */
127
-    protected $insertionMap;
128
-    /**
129
-     * @var string[] Map From "{$node->getType()}->{$subNode}" to string that should be inserted
130
-     *               between elements of this list subnode.
131
-     */
132
-    protected $listInsertionMap;
133
-    protected $emptyListInsertionMap;
134
-    /** @var int[] Map from "{$node->getType()}->{$subNode}" to token before which the modifiers
135
-     *             should be reprinted. */
136
-    protected $modifierChangeMap;
137
-
138
-    /**
139
-     * Creates a pretty printer instance using the given options.
140
-     *
141
-     * Supported options:
142
-     *  * bool $shortArraySyntax = false: Whether to use [] instead of array() as the default array
143
-     *                                    syntax, if the node does not specify a format.
144
-     *
145
-     * @param array $options Dictionary of formatting options
146
-     */
147
-    public function __construct(array $options = []) {
148
-        $this->docStringEndToken = '_DOC_STRING_END_' . mt_rand();
149
-
150
-        $defaultOptions = ['shortArraySyntax' => false];
151
-        $this->options = $options + $defaultOptions;
152
-    }
153
-
154
-    /**
155
-     * Reset pretty printing state.
156
-     */
157
-    protected function resetState() {
158
-        $this->indentLevel = 0;
159
-        $this->nl = "\n";
160
-        $this->origTokens = null;
161
-    }
162
-
163
-    /**
164
-     * Set indentation level
165
-     *
166
-     * @param int $level Level in number of spaces
167
-     */
168
-    protected function setIndentLevel(int $level) {
169
-        $this->indentLevel = $level;
170
-        $this->nl = "\n" . \str_repeat(' ', $level);
171
-    }
172
-
173
-    /**
174
-     * Increase indentation level.
175
-     */
176
-    protected function indent() {
177
-        $this->indentLevel += 4;
178
-        $this->nl .= '    ';
179
-    }
180
-
181
-    /**
182
-     * Decrease indentation level.
183
-     */
184
-    protected function outdent() {
185
-        assert($this->indentLevel >= 4);
186
-        $this->indentLevel -= 4;
187
-        $this->nl = "\n" . str_repeat(' ', $this->indentLevel);
188
-    }
189
-
190
-    /**
191
-     * Pretty prints an array of statements.
192
-     *
193
-     * @param Node[] $stmts Array of statements
194
-     *
195
-     * @return string Pretty printed statements
196
-     */
197
-    public function prettyPrint(array $stmts) : string {
198
-        $this->resetState();
199
-        $this->preprocessNodes($stmts);
200
-
201
-        return ltrim($this->handleMagicTokens($this->pStmts($stmts, false)));
202
-    }
203
-
204
-    /**
205
-     * Pretty prints an expression.
206
-     *
207
-     * @param Expr $node Expression node
208
-     *
209
-     * @return string Pretty printed node
210
-     */
211
-    public function prettyPrintExpr(Expr $node) : string {
212
-        $this->resetState();
213
-        return $this->handleMagicTokens($this->p($node));
214
-    }
215
-
216
-    /**
217
-     * Pretty prints a file of statements (includes the opening <?php tag if it is required).
218
-     *
219
-     * @param Node[] $stmts Array of statements
220
-     *
221
-     * @return string Pretty printed statements
222
-     */
223
-    public function prettyPrintFile(array $stmts) : string {
224
-        if (!$stmts) {
225
-            return "<?php\n\n";
226
-        }
227
-
228
-        $p = "<?php\n\n" . $this->prettyPrint($stmts);
229
-
230
-        if ($stmts[0] instanceof Stmt\InlineHTML) {
231
-            $p = preg_replace('/^<\?php\s+\?>\n?/', '', $p);
232
-        }
233
-        if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) {
234
-            $p = preg_replace('/<\?php$/', '', rtrim($p));
235
-        }
236
-
237
-        return $p;
238
-    }
239
-
240
-    /**
241
-     * Preprocesses the top-level nodes to initialize pretty printer state.
242
-     *
243
-     * @param Node[] $nodes Array of nodes
244
-     */
245
-    protected function preprocessNodes(array $nodes) {
246
-        /* We can use semicolon-namespaces unless there is a global namespace declaration */
247
-        $this->canUseSemicolonNamespaces = true;
248
-        foreach ($nodes as $node) {
249
-            if ($node instanceof Stmt\Namespace_ && null === $node->name) {
250
-                $this->canUseSemicolonNamespaces = false;
251
-                break;
252
-            }
253
-        }
254
-    }
255
-
256
-    /**
257
-     * Handles (and removes) no-indent and doc-string-end tokens.
258
-     *
259
-     * @param string $str
260
-     * @return string
261
-     */
262
-    protected function handleMagicTokens(string $str) : string {
263
-        // Replace doc-string-end tokens with nothing or a newline
264
-        $str = str_replace($this->docStringEndToken . ";\n", ";\n", $str);
265
-        $str = str_replace($this->docStringEndToken, "\n", $str);
266
-
267
-        return $str;
268
-    }
269
-
270
-    /**
271
-     * Pretty prints an array of nodes (statements) and indents them optionally.
272
-     *
273
-     * @param Node[] $nodes  Array of nodes
274
-     * @param bool   $indent Whether to indent the printed nodes
275
-     *
276
-     * @return string Pretty printed statements
277
-     */
278
-    protected function pStmts(array $nodes, bool $indent = true) : string {
279
-        if ($indent) {
280
-            $this->indent();
281
-        }
282
-
283
-        $result = '';
284
-        foreach ($nodes as $node) {
285
-            $comments = $node->getComments();
286
-            if ($comments) {
287
-                $result .= $this->nl . $this->pComments($comments);
288
-                if ($node instanceof Stmt\Nop) {
289
-                    continue;
290
-                }
291
-            }
292
-
293
-            $result .= $this->nl . $this->p($node);
294
-        }
295
-
296
-        if ($indent) {
297
-            $this->outdent();
298
-        }
299
-
300
-        return $result;
301
-    }
302
-
303
-    /**
304
-     * Pretty-print an infix operation while taking precedence into account.
305
-     *
306
-     * @param string $class          Node class of operator
307
-     * @param Node   $leftNode       Left-hand side node
308
-     * @param string $operatorString String representation of the operator
309
-     * @param Node   $rightNode      Right-hand side node
310
-     *
311
-     * @return string Pretty printed infix operation
312
-     */
313
-    protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode) : string {
314
-        list($precedence, $associativity) = $this->precedenceMap[$class];
315
-
316
-        return $this->pPrec($leftNode, $precedence, $associativity, -1)
317
-             . $operatorString
318
-             . $this->pPrec($rightNode, $precedence, $associativity, 1);
319
-    }
320
-
321
-    /**
322
-     * Pretty-print a prefix operation while taking precedence into account.
323
-     *
324
-     * @param string $class          Node class of operator
325
-     * @param string $operatorString String representation of the operator
326
-     * @param Node   $node           Node
327
-     *
328
-     * @return string Pretty printed prefix operation
329
-     */
330
-    protected function pPrefixOp(string $class, string $operatorString, Node $node) : string {
331
-        list($precedence, $associativity) = $this->precedenceMap[$class];
332
-        return $operatorString . $this->pPrec($node, $precedence, $associativity, 1);
333
-    }
334
-
335
-    /**
336
-     * Pretty-print a postfix operation while taking precedence into account.
337
-     *
338
-     * @param string $class          Node class of operator
339
-     * @param string $operatorString String representation of the operator
340
-     * @param Node   $node           Node
341
-     *
342
-     * @return string Pretty printed postfix operation
343
-     */
344
-    protected function pPostfixOp(string $class, Node $node, string $operatorString) : string {
345
-        list($precedence, $associativity) = $this->precedenceMap[$class];
346
-        return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString;
347
-    }
348
-
349
-    /**
350
-     * Prints an expression node with the least amount of parentheses necessary to preserve the meaning.
351
-     *
352
-     * @param Node $node                Node to pretty print
353
-     * @param int  $parentPrecedence    Precedence of the parent operator
354
-     * @param int  $parentAssociativity Associativity of parent operator
355
-     *                                  (-1 is left, 0 is nonassoc, 1 is right)
356
-     * @param int  $childPosition       Position of the node relative to the operator
357
-     *                                  (-1 is left, 1 is right)
358
-     *
359
-     * @return string The pretty printed node
360
-     */
361
-    protected function pPrec(Node $node, int $parentPrecedence, int $parentAssociativity, int $childPosition) : string {
362
-        $class = \get_class($node);
363
-        if (isset($this->precedenceMap[$class])) {
364
-            $childPrecedence = $this->precedenceMap[$class][0];
365
-            if ($childPrecedence > $parentPrecedence
366
-                || ($parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition)
367
-            ) {
368
-                return '(' . $this->p($node) . ')';
369
-            }
370
-        }
371
-
372
-        return $this->p($node);
373
-    }
374
-
375
-    /**
376
-     * Pretty prints an array of nodes and implodes the printed values.
377
-     *
378
-     * @param Node[] $nodes Array of Nodes to be printed
379
-     * @param string $glue  Character to implode with
380
-     *
381
-     * @return string Imploded pretty printed nodes
382
-     */
383
-    protected function pImplode(array $nodes, string $glue = '') : string {
384
-        $pNodes = [];
385
-        foreach ($nodes as $node) {
386
-            if (null === $node) {
387
-                $pNodes[] = '';
388
-            } else {
389
-                $pNodes[] = $this->p($node);
390
-            }
391
-        }
392
-
393
-        return implode($glue, $pNodes);
394
-    }
395
-
396
-    /**
397
-     * Pretty prints an array of nodes and implodes the printed values with commas.
398
-     *
399
-     * @param Node[] $nodes Array of Nodes to be printed
400
-     *
401
-     * @return string Comma separated pretty printed nodes
402
-     */
403
-    protected function pCommaSeparated(array $nodes) : string {
404
-        return $this->pImplode($nodes, ', ');
405
-    }
406
-
407
-    /**
408
-     * Pretty prints a comma-separated list of nodes in multiline style, including comments.
409
-     *
410
-     * The result includes a leading newline and one level of indentation (same as pStmts).
411
-     *
412
-     * @param Node[] $nodes         Array of Nodes to be printed
413
-     * @param bool   $trailingComma Whether to use a trailing comma
414
-     *
415
-     * @return string Comma separated pretty printed nodes in multiline style
416
-     */
417
-    protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma) : string {
418
-        $this->indent();
419
-
420
-        $result = '';
421
-        $lastIdx = count($nodes) - 1;
422
-        foreach ($nodes as $idx => $node) {
423
-            if ($node !== null) {
424
-                $comments = $node->getComments();
425
-                if ($comments) {
426
-                    $result .= $this->nl . $this->pComments($comments);
427
-                }
428
-
429
-                $result .= $this->nl . $this->p($node);
430
-            } else {
431
-                $result .= $this->nl;
432
-            }
433
-            if ($trailingComma || $idx !== $lastIdx) {
434
-                $result .= ',';
435
-            }
436
-        }
437
-
438
-        $this->outdent();
439
-        return $result;
440
-    }
441
-
442
-    /**
443
-     * Prints reformatted text of the passed comments.
444
-     *
445
-     * @param Comment[] $comments List of comments
446
-     *
447
-     * @return string Reformatted text of comments
448
-     */
449
-    protected function pComments(array $comments) : string {
450
-        $formattedComments = [];
451
-
452
-        foreach ($comments as $comment) {
453
-            $formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText());
454
-        }
455
-
456
-        return implode($this->nl, $formattedComments);
457
-    }
458
-
459
-    /**
460
-     * Perform a format-preserving pretty print of an AST.
461
-     *
462
-     * The format preservation is best effort. For some changes to the AST the formatting will not
463
-     * be preserved (at least not locally).
464
-     *
465
-     * In order to use this method a number of prerequisites must be satisfied:
466
-     *  * The startTokenPos and endTokenPos attributes in the lexer must be enabled.
467
-     *  * The CloningVisitor must be run on the AST prior to modification.
468
-     *  * The original tokens must be provided, using the getTokens() method on the lexer.
469
-     *
470
-     * @param Node[] $stmts      Modified AST with links to original AST
471
-     * @param Node[] $origStmts  Original AST with token offset information
472
-     * @param array  $origTokens Tokens of the original code
473
-     *
474
-     * @return string
475
-     */
476
-    public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string {
477
-        $this->initializeNodeListDiffer();
478
-        $this->initializeLabelCharMap();
479
-        $this->initializeFixupMap();
480
-        $this->initializeRemovalMap();
481
-        $this->initializeInsertionMap();
482
-        $this->initializeListInsertionMap();
483
-        $this->initializeEmptyListInsertionMap();
484
-        $this->initializeModifierChangeMap();
485
-
486
-        $this->resetState();
487
-        $this->origTokens = new TokenStream($origTokens);
488
-
489
-        $this->preprocessNodes($stmts);
490
-
491
-        $pos = 0;
492
-        $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null);
493
-        if (null !== $result) {
494
-            $result .= $this->origTokens->getTokenCode($pos, count($origTokens), 0);
495
-        } else {
496
-            // Fallback
497
-            // TODO Add <?php properly
498
-            $result = "<?php\n" . $this->pStmts($stmts, false);
499
-        }
500
-
501
-        return ltrim($this->handleMagicTokens($result));
502
-    }
503
-
504
-    protected function pFallback(Node $node) {
505
-        return $this->{'p' . $node->getType()}($node);
506
-    }
507
-
508
-    /**
509
-     * Pretty prints a node.
510
-     *
511
-     * This method also handles formatting preservation for nodes.
512
-     *
513
-     * @param Node $node Node to be pretty printed
514
-     * @param bool $parentFormatPreserved Whether parent node has preserved formatting
515
-     *
516
-     * @return string Pretty printed node
517
-     */
518
-    protected function p(Node $node, $parentFormatPreserved = false) : string {
519
-        // No orig tokens means this is a normal pretty print without preservation of formatting
520
-        if (!$this->origTokens) {
521
-            return $this->{'p' . $node->getType()}($node);
522
-        }
523
-
524
-        /** @var Node $origNode */
525
-        $origNode = $node->getAttribute('origNode');
526
-        if (null === $origNode) {
527
-            return $this->pFallback($node);
528
-        }
529
-
530
-        $class = \get_class($node);
531
-        \assert($class === \get_class($origNode));
532
-
533
-        $startPos = $origNode->getStartTokenPos();
534
-        $endPos = $origNode->getEndTokenPos();
535
-        \assert($startPos >= 0 && $endPos >= 0);
536
-
537
-        $fallbackNode = $node;
538
-        if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) {
539
-            // Normalize node structure of anonymous classes
540
-            $node = PrintableNewAnonClassNode::fromNewNode($node);
541
-            $origNode = PrintableNewAnonClassNode::fromNewNode($origNode);
542
-        }
543
-
544
-        // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting
545
-        // is not preserved, then we need to use the fallback code to make sure the tags are
546
-        // printed.
547
-        if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) {
548
-            return $this->pFallback($fallbackNode);
549
-        }
550
-
551
-        $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos);
552
-
553
-        $type = $node->getType();
554
-        $fixupInfo = $this->fixupMap[$class] ?? null;
555
-
556
-        $result = '';
557
-        $pos = $startPos;
558
-        foreach ($node->getSubNodeNames() as $subNodeName) {
559
-            $subNode = $node->$subNodeName;
560
-            $origSubNode = $origNode->$subNodeName;
561
-
562
-            if ((!$subNode instanceof Node && $subNode !== null)
563
-                || (!$origSubNode instanceof Node && $origSubNode !== null)
564
-            ) {
565
-                if ($subNode === $origSubNode) {
566
-                    // Unchanged, can reuse old code
567
-                    continue;
568
-                }
569
-
570
-                if (is_array($subNode) && is_array($origSubNode)) {
571
-                    // Array subnode changed, we might be able to reconstruct it
572
-                    $listResult = $this->pArray(
573
-                        $subNode, $origSubNode, $pos, $indentAdjustment, $type, $subNodeName,
574
-                        $fixupInfo[$subNodeName] ?? null
575
-                    );
576
-                    if (null === $listResult) {
577
-                        return $this->pFallback($fallbackNode);
578
-                    }
579
-
580
-                    $result .= $listResult;
581
-                    continue;
582
-                }
583
-
584
-                if (is_int($subNode) && is_int($origSubNode)) {
585
-                    // Check if this is a modifier change
586
-                    $key = $type . '->' . $subNodeName;
587
-                    if (!isset($this->modifierChangeMap[$key])) {
588
-                        return $this->pFallback($fallbackNode);
589
-                    }
590
-
591
-                    $findToken = $this->modifierChangeMap[$key];
592
-                    $result .= $this->pModifiers($subNode);
593
-                    $pos = $this->origTokens->findRight($pos, $findToken);
594
-                    continue;
595
-                }
596
-
597
-                // If a non-node, non-array subnode changed, we don't be able to do a partial
598
-                // reconstructions, as we don't have enough offset information. Pretty print the
599
-                // whole node instead.
600
-                return $this->pFallback($fallbackNode);
601
-            }
602
-
603
-            $extraLeft = '';
604
-            $extraRight = '';
605
-            if ($origSubNode !== null) {
606
-                $subStartPos = $origSubNode->getStartTokenPos();
607
-                $subEndPos = $origSubNode->getEndTokenPos();
608
-                \assert($subStartPos >= 0 && $subEndPos >= 0);
609
-            } else {
610
-                if ($subNode === null) {
611
-                    // Both null, nothing to do
612
-                    continue;
613
-                }
614
-
615
-                // A node has been inserted, check if we have insertion information for it
616
-                $key = $type . '->' . $subNodeName;
617
-                if (!isset($this->insertionMap[$key])) {
618
-                    return $this->pFallback($fallbackNode);
619
-                }
620
-
621
-                list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key];
622
-                if (null !== $findToken) {
623
-                    $subStartPos = $this->origTokens->findRight($pos, $findToken)
624
-                        + (int) !$beforeToken;
625
-                } else {
626
-                    $subStartPos = $pos;
627
-                }
628
-
629
-                if (null === $extraLeft && null !== $extraRight) {
630
-                    // If inserting on the right only, skipping whitespace looks better
631
-                    $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos);
632
-                }
633
-                $subEndPos = $subStartPos - 1;
634
-            }
635
-
636
-            if (null === $subNode) {
637
-                // A node has been removed, check if we have removal information for it
638
-                $key = $type . '->' . $subNodeName;
639
-                if (!isset($this->removalMap[$key])) {
640
-                    return $this->pFallback($fallbackNode);
641
-                }
642
-
643
-                // Adjust positions to account for additional tokens that must be skipped
644
-                $removalInfo = $this->removalMap[$key];
645
-                if (isset($removalInfo['left'])) {
646
-                    $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1;
647
-                }
648
-                if (isset($removalInfo['right'])) {
649
-                    $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1;
650
-                }
651
-            }
652
-
653
-            $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment);
654
-
655
-            if (null !== $subNode) {
656
-                $result .= $extraLeft;
657
-
658
-                $origIndentLevel = $this->indentLevel;
659
-                $this->setIndentLevel($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment);
660
-
661
-                // If it's the same node that was previously in this position, it certainly doesn't
662
-                // need fixup. It's important to check this here, because our fixup checks are more
663
-                // conservative than strictly necessary.
664
-                if (isset($fixupInfo[$subNodeName])
665
-                    && $subNode->getAttribute('origNode') !== $origSubNode
666
-                ) {
667
-                    $fixup = $fixupInfo[$subNodeName];
668
-                    $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos);
669
-                } else {
670
-                    $res = $this->p($subNode, true);
671
-                }
672
-
673
-                $this->safeAppend($result, $res);
674
-                $this->setIndentLevel($origIndentLevel);
675
-
676
-                $result .= $extraRight;
677
-            }
678
-
679
-            $pos = $subEndPos + 1;
680
-        }
681
-
682
-        $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment);
683
-        return $result;
684
-    }
685
-
686
-    /**
687
-     * Perform a format-preserving pretty print of an array.
688
-     *
689
-     * @param array       $nodes            New nodes
690
-     * @param array       $origNodes        Original nodes
691
-     * @param int         $pos              Current token position (updated by reference)
692
-     * @param int         $indentAdjustment Adjustment for indentation
693
-     * @param string      $parentNodeType   Type of the containing node.
694
-     * @param string      $subNodeName      Name of array subnode.
695
-     * @param null|int    $fixup            Fixup information for array item nodes
696
-     *
697
-     * @return null|string Result of pretty print or null if cannot preserve formatting
698
-     */
699
-    protected function pArray(
700
-        array $nodes, array $origNodes, int &$pos, int $indentAdjustment,
701
-        string $parentNodeType, string $subNodeName, $fixup
702
-    ) {
703
-        $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes);
704
-
705
-        $mapKey = $parentNodeType . '->' . $subNodeName;
706
-        $insertStr = $this->listInsertionMap[$mapKey] ?? null;
707
-        $isStmtList = $subNodeName === 'stmts';
708
-
709
-        $beforeFirstKeepOrReplace = true;
710
-        $skipRemovedNode = false;
711
-        $delayedAdd = [];
712
-        $lastElemIndentLevel = $this->indentLevel;
713
-
714
-        $insertNewline = false;
715
-        if ($insertStr === "\n") {
716
-            $insertStr = '';
717
-            $insertNewline = true;
718
-        }
719
-
720
-        if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) {
721
-            $startPos = $origNodes[0]->getStartTokenPos();
722
-            $endPos = $origNodes[0]->getEndTokenPos();
723
-            \assert($startPos >= 0 && $endPos >= 0);
724
-            if (!$this->origTokens->haveBraces($startPos, $endPos)) {
725
-                // This was a single statement without braces, but either additional statements
726
-                // have been added, or the single statement has been removed. This requires the
727
-                // addition of braces. For now fall back.
728
-                // TODO: Try to preserve formatting
729
-                return null;
730
-            }
731
-        }
732
-
733
-        $result = '';
734
-        foreach ($diff as $i => $diffElem) {
735
-            $diffType = $diffElem->type;
736
-            /** @var Node|null $arrItem */
737
-            $arrItem = $diffElem->new;
738
-            /** @var Node|null $origArrItem */
739
-            $origArrItem = $diffElem->old;
740
-
741
-            if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) {
742
-                $beforeFirstKeepOrReplace = false;
743
-
744
-                if ($origArrItem === null || $arrItem === null) {
745
-                    // We can only handle the case where both are null
746
-                    if ($origArrItem === $arrItem) {
747
-                        continue;
748
-                    }
749
-                    return null;
750
-                }
751
-
752
-                if (!$arrItem instanceof Node || !$origArrItem instanceof Node) {
753
-                    // We can only deal with nodes. This can occur for Names, which use string arrays.
754
-                    return null;
755
-                }
756
-
757
-                $itemStartPos = $origArrItem->getStartTokenPos();
758
-                $itemEndPos = $origArrItem->getEndTokenPos();
759
-                \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos);
760
-
761
-                $origIndentLevel = $this->indentLevel;
762
-                $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment;
763
-                $this->setIndentLevel($lastElemIndentLevel);
764
-
765
-                $comments = $arrItem->getComments();
766
-                $origComments = $origArrItem->getComments();
767
-                $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos;
768
-                \assert($commentStartPos >= 0);
769
-
770
-                if ($commentStartPos < $pos) {
771
-                    // Comments may be assigned to multiple nodes if they start at the same position.
772
-                    // Make sure we don't try to print them multiple times.
773
-                    $commentStartPos = $itemStartPos;
774
-                }
775
-
776
-                if ($skipRemovedNode) {
777
-                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
778
-                        // We'd remove the brace of a code block.
779
-                        // TODO: Preserve formatting.
780
-                        $this->setIndentLevel($origIndentLevel);
781
-                        return null;
782
-                    }
783
-                } else {
784
-                    $result .= $this->origTokens->getTokenCode(
785
-                        $pos, $commentStartPos, $indentAdjustment);
786
-                }
787
-
788
-                if (!empty($delayedAdd)) {
789
-                    /** @var Node $delayedAddNode */
790
-                    foreach ($delayedAdd as $delayedAddNode) {
791
-                        if ($insertNewline) {
792
-                            $delayedAddComments = $delayedAddNode->getComments();
793
-                            if ($delayedAddComments) {
794
-                                $result .= $this->pComments($delayedAddComments) . $this->nl;
795
-                            }
796
-                        }
797
-
798
-                        $this->safeAppend($result, $this->p($delayedAddNode, true));
799
-
800
-                        if ($insertNewline) {
801
-                            $result .= $insertStr . $this->nl;
802
-                        } else {
803
-                            $result .= $insertStr;
804
-                        }
805
-                    }
806
-
807
-                    $delayedAdd = [];
808
-                }
809
-
810
-                if ($comments !== $origComments) {
811
-                    if ($comments) {
812
-                        $result .= $this->pComments($comments) . $this->nl;
813
-                    }
814
-                } else {
815
-                    $result .= $this->origTokens->getTokenCode(
816
-                        $commentStartPos, $itemStartPos, $indentAdjustment);
817
-                }
818
-
819
-                // If we had to remove anything, we have done so now.
820
-                $skipRemovedNode = false;
821
-            } elseif ($diffType === DiffElem::TYPE_ADD) {
822
-                if (null === $insertStr) {
823
-                    // We don't have insertion information for this list type
824
-                    return null;
825
-                }
826
-
827
-                // We go multiline if the original code was multiline,
828
-                // or if it's an array item with a comment above it.
829
-                if ($insertStr === ', ' &&
830
-                    ($this->isMultiline($origNodes) || $arrItem->getComments())
831
-                ) {
832
-                    $insertStr = ',';
833
-                    $insertNewline = true;
834
-                }
835
-
836
-                if ($beforeFirstKeepOrReplace) {
837
-                    // Will be inserted at the next "replace" or "keep" element
838
-                    $delayedAdd[] = $arrItem;
839
-                    continue;
840
-                }
841
-
842
-                $itemStartPos = $pos;
843
-                $itemEndPos = $pos - 1;
844
-
845
-                $origIndentLevel = $this->indentLevel;
846
-                $this->setIndentLevel($lastElemIndentLevel);
847
-
848
-                if ($insertNewline) {
849
-                    $result .= $insertStr . $this->nl;
850
-                    $comments = $arrItem->getComments();
851
-                    if ($comments) {
852
-                        $result .= $this->pComments($comments) . $this->nl;
853
-                    }
854
-                } else {
855
-                    $result .= $insertStr;
856
-                }
857
-            } elseif ($diffType === DiffElem::TYPE_REMOVE) {
858
-                if (!$origArrItem instanceof Node) {
859
-                    // We only support removal for nodes
860
-                    return null;
861
-                }
862
-
863
-                $itemStartPos = $origArrItem->getStartTokenPos();
864
-                $itemEndPos = $origArrItem->getEndTokenPos();
865
-                \assert($itemStartPos >= 0 && $itemEndPos >= 0);
866
-
867
-                // Consider comments part of the node.
868
-                $origComments = $origArrItem->getComments();
869
-                if ($origComments) {
870
-                    $itemStartPos = $origComments[0]->getStartTokenPos();
871
-                }
872
-
873
-                if ($i === 0) {
874
-                    // If we're removing from the start, keep the tokens before the node and drop those after it,
875
-                    // instead of the other way around.
876
-                    $result .= $this->origTokens->getTokenCode(
877
-                        $pos, $itemStartPos, $indentAdjustment);
878
-                    $skipRemovedNode = true;
879
-                } else {
880
-                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
881
-                        // We'd remove the brace of a code block.
882
-                        // TODO: Preserve formatting.
883
-                        return null;
884
-                    }
885
-                }
886
-
887
-                $pos = $itemEndPos + 1;
888
-                continue;
889
-            } else {
890
-                throw new \Exception("Shouldn't happen");
891
-            }
892
-
893
-            if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) {
894
-                $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos);
895
-            } else {
896
-                $res = $this->p($arrItem, true);
897
-            }
898
-            $this->safeAppend($result, $res);
899
-
900
-            $this->setIndentLevel($origIndentLevel);
901
-            $pos = $itemEndPos + 1;
902
-        }
903
-
904
-        if ($skipRemovedNode) {
905
-            // TODO: Support removing single node.
906
-            return null;
907
-        }
908
-
909
-        if (!empty($delayedAdd)) {
910
-            if (!isset($this->emptyListInsertionMap[$mapKey])) {
911
-                return null;
912
-            }
913
-
914
-            list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey];
915
-            if (null !== $findToken) {
916
-                $insertPos = $this->origTokens->findRight($pos, $findToken) + 1;
917
-                $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment);
918
-                $pos = $insertPos;
919
-            }
920
-
921
-            $first = true;
922
-            $result .= $extraLeft;
923
-            foreach ($delayedAdd as $delayedAddNode) {
924
-                if (!$first) {
925
-                    $result .= $insertStr;
926
-                    if ($insertNewline) {
927
-                        $result .= $this->nl;
928
-                    }
929
-                }
930
-                $result .= $this->p($delayedAddNode, true);
931
-                $first = false;
932
-            }
933
-            $result .= $extraRight === "\n" ? $this->nl : $extraRight;
934
-        }
935
-
936
-        return $result;
937
-    }
938
-
939
-    /**
940
-     * Print node with fixups.
941
-     *
942
-     * Fixups here refer to the addition of extra parentheses, braces or other characters, that
943
-     * are required to preserve program semantics in a certain context (e.g. to maintain precedence
944
-     * or because only certain expressions are allowed in certain places).
945
-     *
946
-     * @param int         $fixup       Fixup type
947
-     * @param Node        $subNode     Subnode to print
948
-     * @param string|null $parentClass Class of parent node
949
-     * @param int         $subStartPos Original start pos of subnode
950
-     * @param int         $subEndPos   Original end pos of subnode
951
-     *
952
-     * @return string Result of fixed-up print of subnode
953
-     */
954
-    protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStartPos, int $subEndPos) : string {
955
-        switch ($fixup) {
956
-            case self::FIXUP_PREC_LEFT:
957
-            case self::FIXUP_PREC_RIGHT:
958
-                if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
959
-                    list($precedence, $associativity) = $this->precedenceMap[$parentClass];
960
-                    return $this->pPrec($subNode, $precedence, $associativity,
961
-                        $fixup === self::FIXUP_PREC_LEFT ? -1 : 1);
962
-                }
963
-                break;
964
-            case self::FIXUP_CALL_LHS:
965
-                if ($this->callLhsRequiresParens($subNode)
966
-                    && !$this->origTokens->haveParens($subStartPos, $subEndPos)
967
-                ) {
968
-                    return '(' . $this->p($subNode) . ')';
969
-                }
970
-                break;
971
-            case self::FIXUP_DEREF_LHS:
972
-                if ($this->dereferenceLhsRequiresParens($subNode)
973
-                    && !$this->origTokens->haveParens($subStartPos, $subEndPos)
974
-                ) {
975
-                    return '(' . $this->p($subNode) . ')';
976
-                }
977
-                break;
978
-            case self::FIXUP_BRACED_NAME:
979
-            case self::FIXUP_VAR_BRACED_NAME:
980
-                if ($subNode instanceof Expr
981
-                    && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
982
-                ) {
983
-                    return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '')
984
-                        . '{' . $this->p($subNode) . '}';
985
-                }
986
-                break;
987
-            case self::FIXUP_ENCAPSED:
988
-                if (!$subNode instanceof Scalar\EncapsedStringPart
989
-                    && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
990
-                ) {
991
-                    return '{' . $this->p($subNode) . '}';
992
-                }
993
-                break;
994
-            default:
995
-                throw new \Exception('Cannot happen');
996
-        }
997
-
998
-        // Nothing special to do
999
-        return $this->p($subNode);
1000
-    }
1001
-
1002
-    /**
1003
-     * Appends to a string, ensuring whitespace between label characters.
1004
-     *
1005
-     * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x".
1006
-     * Without safeAppend the result would be "echox", which does not preserve semantics.
1007
-     *
1008
-     * @param string $str
1009
-     * @param string $append
1010
-     */
1011
-    protected function safeAppend(string &$str, string $append) {
1012
-        if ($str === "") {
1013
-            $str = $append;
1014
-            return;
1015
-        }
1016
-
1017
-        if ($append === "") {
1018
-            return;
1019
-        }
1020
-
1021
-        if (!$this->labelCharMap[$append[0]]
1022
-                || !$this->labelCharMap[$str[\strlen($str) - 1]]) {
1023
-            $str .= $append;
1024
-        } else {
1025
-            $str .= " " . $append;
1026
-        }
1027
-    }
1028
-
1029
-    /**
1030
-     * Determines whether the LHS of a call must be wrapped in parenthesis.
1031
-     *
1032
-     * @param Node $node LHS of a call
1033
-     *
1034
-     * @return bool Whether parentheses are required
1035
-     */
1036
-    protected function callLhsRequiresParens(Node $node) : bool {
1037
-        return !($node instanceof Node\Name
1038
-            || $node instanceof Expr\Variable
1039
-            || $node instanceof Expr\ArrayDimFetch
1040
-            || $node instanceof Expr\FuncCall
1041
-            || $node instanceof Expr\MethodCall
1042
-            || $node instanceof Expr\NullsafeMethodCall
1043
-            || $node instanceof Expr\StaticCall
1044
-            || $node instanceof Expr\Array_);
1045
-    }
1046
-
1047
-    /**
1048
-     * Determines whether the LHS of a dereferencing operation must be wrapped in parenthesis.
1049
-     *
1050
-     * @param Node $node LHS of dereferencing operation
1051
-     *
1052
-     * @return bool Whether parentheses are required
1053
-     */
1054
-    protected function dereferenceLhsRequiresParens(Node $node) : bool {
1055
-        return !($node instanceof Expr\Variable
1056
-            || $node instanceof Node\Name
1057
-            || $node instanceof Expr\ArrayDimFetch
1058
-            || $node instanceof Expr\PropertyFetch
1059
-            || $node instanceof Expr\NullsafePropertyFetch
1060
-            || $node instanceof Expr\StaticPropertyFetch
1061
-            || $node instanceof Expr\FuncCall
1062
-            || $node instanceof Expr\MethodCall
1063
-            || $node instanceof Expr\NullsafeMethodCall
1064
-            || $node instanceof Expr\StaticCall
1065
-            || $node instanceof Expr\Array_
1066
-            || $node instanceof Scalar\String_
1067
-            || $node instanceof Expr\ConstFetch
1068
-            || $node instanceof Expr\ClassConstFetch);
1069
-    }
1070
-
1071
-    /**
1072
-     * Print modifiers, including trailing whitespace.
1073
-     *
1074
-     * @param int $modifiers Modifier mask to print
1075
-     *
1076
-     * @return string Printed modifiers
1077
-     */
1078
-    protected function pModifiers(int $modifiers) {
1079
-        return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC    ? 'public '    : '')
1080
-             . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '')
1081
-             . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE   ? 'private '   : '')
1082
-             . ($modifiers & Stmt\Class_::MODIFIER_STATIC    ? 'static '    : '')
1083
-             . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT  ? 'abstract '  : '')
1084
-             . ($modifiers & Stmt\Class_::MODIFIER_FINAL     ? 'final '     : '')
1085
-             . ($modifiers & Stmt\Class_::MODIFIER_READONLY  ? 'readonly '  : '');
1086
-    }
1087
-
1088
-    /**
1089
-     * Determine whether a list of nodes uses multiline formatting.
1090
-     *
1091
-     * @param (Node|null)[] $nodes Node list
1092
-     *
1093
-     * @return bool Whether multiline formatting is used
1094
-     */
1095
-    protected function isMultiline(array $nodes) : bool {
1096
-        if (\count($nodes) < 2) {
1097
-            return false;
1098
-        }
1099
-
1100
-        $pos = -1;
1101
-        foreach ($nodes as $node) {
1102
-            if (null === $node) {
1103
-                continue;
1104
-            }
1105
-
1106
-            $endPos = $node->getEndTokenPos() + 1;
1107
-            if ($pos >= 0) {
1108
-                $text = $this->origTokens->getTokenCode($pos, $endPos, 0);
1109
-                if (false === strpos($text, "\n")) {
1110
-                    // We require that a newline is present between *every* item. If the formatting
1111
-                    // is inconsistent, with only some items having newlines, we don't consider it
1112
-                    // as multiline
1113
-                    return false;
1114
-                }
1115
-            }
1116
-            $pos = $endPos;
1117
-        }
1118
-
1119
-        return true;
1120
-    }
1121
-
1122
-    /**
1123
-     * Lazily initializes label char map.
1124
-     *
1125
-     * The label char map determines whether a certain character may occur in a label.
1126
-     */
1127
-    protected function initializeLabelCharMap() {
1128
-        if ($this->labelCharMap) return;
1129
-
1130
-        $this->labelCharMap = [];
1131
-        for ($i = 0; $i < 256; $i++) {
1132
-            // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for
1133
-            // older versions.
1134
-            $chr = chr($i);
1135
-            $this->labelCharMap[$chr] = $i >= 0x7f || ctype_alnum($chr);
1136
-        }
1137
-    }
1138
-
1139
-    /**
1140
-     * Lazily initializes node list differ.
1141
-     *
1142
-     * The node list differ is used to determine differences between two array subnodes.
1143
-     */
1144
-    protected function initializeNodeListDiffer() {
1145
-        if ($this->nodeListDiffer) return;
1146
-
1147
-        $this->nodeListDiffer = new Internal\Differ(function ($a, $b) {
1148
-            if ($a instanceof Node && $b instanceof Node) {
1149
-                return $a === $b->getAttribute('origNode');
1150
-            }
1151
-            // Can happen for array destructuring
1152
-            return $a === null && $b === null;
1153
-        });
1154
-    }
1155
-
1156
-    /**
1157
-     * Lazily initializes fixup map.
1158
-     *
1159
-     * The fixup map is used to determine whether a certain subnode of a certain node may require
1160
-     * some kind of "fixup" operation, e.g. the addition of parenthesis or braces.
1161
-     */
1162
-    protected function initializeFixupMap() {
1163
-        if ($this->fixupMap) return;
1164
-
1165
-        $this->fixupMap = [
1166
-            Expr\PreInc::class => ['var' => self::FIXUP_PREC_RIGHT],
1167
-            Expr\PreDec::class => ['var' => self::FIXUP_PREC_RIGHT],
1168
-            Expr\PostInc::class => ['var' => self::FIXUP_PREC_LEFT],
1169
-            Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT],
1170
-            Expr\Instanceof_::class => [
1171
-                'expr' => self::FIXUP_PREC_LEFT,
1172
-                'class' => self::FIXUP_PREC_RIGHT, // TODO: FIXUP_NEW_VARIABLE
1173
-            ],
1174
-            Expr\Ternary::class => [
1175
-                'cond' => self::FIXUP_PREC_LEFT,
1176
-                'else' => self::FIXUP_PREC_RIGHT,
1177
-            ],
1178
-
1179
-            Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS],
1180
-            Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS],
1181
-            Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS],
1182
-            Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS],
1183
-            Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], // TODO: FIXUP_NEW_VARIABLE
1184
-            Expr\MethodCall::class => [
1185
-                'var' => self::FIXUP_DEREF_LHS,
1186
-                'name' => self::FIXUP_BRACED_NAME,
1187
-            ],
1188
-            Expr\NullsafeMethodCall::class => [
1189
-                'var' => self::FIXUP_DEREF_LHS,
1190
-                'name' => self::FIXUP_BRACED_NAME,
1191
-            ],
1192
-            Expr\StaticPropertyFetch::class => [
1193
-                'class' => self::FIXUP_DEREF_LHS,
1194
-                'name' => self::FIXUP_VAR_BRACED_NAME,
1195
-            ],
1196
-            Expr\PropertyFetch::class => [
1197
-                'var' => self::FIXUP_DEREF_LHS,
1198
-                'name' => self::FIXUP_BRACED_NAME,
1199
-            ],
1200
-            Expr\NullsafePropertyFetch::class => [
1201
-                'var' => self::FIXUP_DEREF_LHS,
1202
-                'name' => self::FIXUP_BRACED_NAME,
1203
-            ],
1204
-            Scalar\Encapsed::class => [
1205
-                'parts' => self::FIXUP_ENCAPSED,
1206
-            ],
1207
-        ];
1208
-
1209
-        $binaryOps = [
1210
-            BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class,
1211
-            BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class,
1212
-            BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class,
1213
-            BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class,
1214
-            BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class,
1215
-            BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class,
1216
-            BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class,
1217
-            BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class,
1218
-            BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class,
1219
-        ];
1220
-        foreach ($binaryOps as $binaryOp) {
1221
-            $this->fixupMap[$binaryOp] = [
1222
-                'left' => self::FIXUP_PREC_LEFT,
1223
-                'right' => self::FIXUP_PREC_RIGHT
1224
-            ];
1225
-        }
1226
-
1227
-        $assignOps = [
1228
-            Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class,
1229
-            AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class,
1230
-            AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class,
1231
-            AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class
1232
-        ];
1233
-        foreach ($assignOps as $assignOp) {
1234
-            $this->fixupMap[$assignOp] = [
1235
-                'var' => self::FIXUP_PREC_LEFT,
1236
-                'expr' => self::FIXUP_PREC_RIGHT,
1237
-            ];
1238
-        }
1239
-
1240
-        $prefixOps = [
1241
-            Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class,
1242
-            Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class,
1243
-            Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class,
1244
-            Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class,
1245
-        ];
1246
-        foreach ($prefixOps as $prefixOp) {
1247
-            $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_RIGHT];
1248
-        }
1249
-    }
1250
-
1251
-    /**
1252
-     * Lazily initializes the removal map.
1253
-     *
1254
-     * The removal map is used to determine which additional tokens should be removed when a
1255
-     * certain node is replaced by null.
1256
-     */
1257
-    protected function initializeRemovalMap() {
1258
-        if ($this->removalMap) return;
1259
-
1260
-        $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE];
1261
-        $stripLeft = ['left' => \T_WHITESPACE];
1262
-        $stripRight = ['right' => \T_WHITESPACE];
1263
-        $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW];
1264
-        $stripColon = ['left' => ':'];
1265
-        $stripEquals = ['left' => '='];
1266
-        $this->removalMap = [
1267
-            'Expr_ArrayDimFetch->dim' => $stripBoth,
1268
-            'Expr_ArrayItem->key' => $stripDoubleArrow,
1269
-            'Expr_ArrowFunction->returnType' => $stripColon,
1270
-            'Expr_Closure->returnType' => $stripColon,
1271
-            'Expr_Exit->expr' => $stripBoth,
1272
-            'Expr_Ternary->if' => $stripBoth,
1273
-            'Expr_Yield->key' => $stripDoubleArrow,
1274
-            'Expr_Yield->value' => $stripBoth,
1275
-            'Param->type' => $stripRight,
1276
-            'Param->default' => $stripEquals,
1277
-            'Stmt_Break->num' => $stripBoth,
1278
-            'Stmt_Catch->var' => $stripLeft,
1279
-            'Stmt_ClassMethod->returnType' => $stripColon,
1280
-            'Stmt_Class->extends' => ['left' => \T_EXTENDS],
1281
-            'Stmt_Enum->scalarType' => $stripColon,
1282
-            'Stmt_EnumCase->expr' => $stripEquals,
1283
-            'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS],
1284
-            'Stmt_Continue->num' => $stripBoth,
1285
-            'Stmt_Foreach->keyVar' => $stripDoubleArrow,
1286
-            'Stmt_Function->returnType' => $stripColon,
1287
-            'Stmt_If->else' => $stripLeft,
1288
-            'Stmt_Namespace->name' => $stripLeft,
1289
-            'Stmt_Property->type' => $stripRight,
1290
-            'Stmt_PropertyProperty->default' => $stripEquals,
1291
-            'Stmt_Return->expr' => $stripBoth,
1292
-            'Stmt_StaticVar->default' => $stripEquals,
1293
-            'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft,
1294
-            'Stmt_TryCatch->finally' => $stripLeft,
1295
-            // 'Stmt_Case->cond': Replace with "default"
1296
-            // 'Stmt_Class->name': Unclear what to do
1297
-            // 'Stmt_Declare->stmts': Not a plain node
1298
-            // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a plain node
1299
-        ];
1300
-    }
1301
-
1302
-    protected function initializeInsertionMap() {
1303
-        if ($this->insertionMap) return;
1304
-
1305
-        // TODO: "yield" where both key and value are inserted doesn't work
1306
-        // [$find, $beforeToken, $extraLeft, $extraRight]
1307
-        $this->insertionMap = [
1308
-            'Expr_ArrayDimFetch->dim' => ['[', false, null, null],
1309
-            'Expr_ArrayItem->key' => [null, false, null, ' => '],
1310
-            'Expr_ArrowFunction->returnType' => [')', false, ' : ', null],
1311
-            'Expr_Closure->returnType' => [')', false, ' : ', null],
1312
-            'Expr_Ternary->if' => ['?', false, ' ', ' '],
1313
-            'Expr_Yield->key' => [\T_YIELD, false, null, ' => '],
1314
-            'Expr_Yield->value' => [\T_YIELD, false, ' ', null],
1315
-            'Param->type' => [null, false, null, ' '],
1316
-            'Param->default' => [null, false, ' = ', null],
1317
-            'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
1318
-            'Stmt_Catch->var' => [null, false, ' ', null],
1319
-            'Stmt_ClassMethod->returnType' => [')', false, ' : ', null],
1320
-            'Stmt_Class->extends' => [null, false, ' extends ', null],
1321
-            'Stmt_Enum->scalarType' => [null, false, ' : ', null],
1322
-            'Stmt_EnumCase->expr' => [null, false, ' = ', null],
1323
-            'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null],
1324
-            'Stmt_Continue->num' => [\T_CONTINUE, false, ' ', null],
1325
-            'Stmt_Foreach->keyVar' => [\T_AS, false, null, ' => '],
1326
-            'Stmt_Function->returnType' => [')', false, ' : ', null],
1327
-            'Stmt_If->else' => [null, false, ' ', null],
1328
-            'Stmt_Namespace->name' => [\T_NAMESPACE, false, ' ', null],
1329
-            'Stmt_Property->type' => [\T_VARIABLE, true, null, ' '],
1330
-            'Stmt_PropertyProperty->default' => [null, false, ' = ', null],
1331
-            'Stmt_Return->expr' => [\T_RETURN, false, ' ', null],
1332
-            'Stmt_StaticVar->default' => [null, false, ' = ', null],
1333
-            //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO
1334
-            'Stmt_TryCatch->finally' => [null, false, ' ', null],
1335
-
1336
-            // 'Expr_Exit->expr': Complicated due to optional ()
1337
-            // 'Stmt_Case->cond': Conversion from default to case
1338
-            // 'Stmt_Class->name': Unclear
1339
-            // 'Stmt_Declare->stmts': Not a proper node
1340
-            // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a proper node
1341
-        ];
1342
-    }
1343
-
1344
-    protected function initializeListInsertionMap() {
1345
-        if ($this->listInsertionMap) return;
1346
-
1347
-        $this->listInsertionMap = [
1348
-            // special
1349
-            //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully
1350
-            //'Scalar_Encapsed->parts' => '',
1351
-            'Stmt_Catch->types' => '|',
1352
-            'UnionType->types' => '|',
1353
-            'IntersectionType->types' => '&',
1354
-            'Stmt_If->elseifs' => ' ',
1355
-            'Stmt_TryCatch->catches' => ' ',
1356
-
1357
-            // comma-separated lists
1358
-            'Expr_Array->items' => ', ',
1359
-            'Expr_ArrowFunction->params' => ', ',
1360
-            'Expr_Closure->params' => ', ',
1361
-            'Expr_Closure->uses' => ', ',
1362
-            'Expr_FuncCall->args' => ', ',
1363
-            'Expr_Isset->vars' => ', ',
1364
-            'Expr_List->items' => ', ',
1365
-            'Expr_MethodCall->args' => ', ',
1366
-            'Expr_NullsafeMethodCall->args' => ', ',
1367
-            'Expr_New->args' => ', ',
1368
-            'Expr_PrintableNewAnonClass->args' => ', ',
1369
-            'Expr_StaticCall->args' => ', ',
1370
-            'Stmt_ClassConst->consts' => ', ',
1371
-            'Stmt_ClassMethod->params' => ', ',
1372
-            'Stmt_Class->implements' => ', ',
1373
-            'Stmt_Enum->implements' => ', ',
1374
-            'Expr_PrintableNewAnonClass->implements' => ', ',
1375
-            'Stmt_Const->consts' => ', ',
1376
-            'Stmt_Declare->declares' => ', ',
1377
-            'Stmt_Echo->exprs' => ', ',
1378
-            'Stmt_For->init' => ', ',
1379
-            'Stmt_For->cond' => ', ',
1380
-            'Stmt_For->loop' => ', ',
1381
-            'Stmt_Function->params' => ', ',
1382
-            'Stmt_Global->vars' => ', ',
1383
-            'Stmt_GroupUse->uses' => ', ',
1384
-            'Stmt_Interface->extends' => ', ',
1385
-            'Stmt_Match->arms' => ', ',
1386
-            'Stmt_Property->props' => ', ',
1387
-            'Stmt_StaticVar->vars' => ', ',
1388
-            'Stmt_TraitUse->traits' => ', ',
1389
-            'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ',
1390
-            'Stmt_Unset->vars' => ', ',
1391
-            'Stmt_Use->uses' => ', ',
1392
-            'MatchArm->conds' => ', ',
1393
-            'AttributeGroup->attrs' => ', ',
1394
-
1395
-            // statement lists
1396
-            'Expr_Closure->stmts' => "\n",
1397
-            'Stmt_Case->stmts' => "\n",
1398
-            'Stmt_Catch->stmts' => "\n",
1399
-            'Stmt_Class->stmts' => "\n",
1400
-            'Stmt_Enum->stmts' => "\n",
1401
-            'Expr_PrintableNewAnonClass->stmts' => "\n",
1402
-            'Stmt_Interface->stmts' => "\n",
1403
-            'Stmt_Trait->stmts' => "\n",
1404
-            'Stmt_ClassMethod->stmts' => "\n",
1405
-            'Stmt_Declare->stmts' => "\n",
1406
-            'Stmt_Do->stmts' => "\n",
1407
-            'Stmt_ElseIf->stmts' => "\n",
1408
-            'Stmt_Else->stmts' => "\n",
1409
-            'Stmt_Finally->stmts' => "\n",
1410
-            'Stmt_Foreach->stmts' => "\n",
1411
-            'Stmt_For->stmts' => "\n",
1412
-            'Stmt_Function->stmts' => "\n",
1413
-            'Stmt_If->stmts' => "\n",
1414
-            'Stmt_Namespace->stmts' => "\n",
1415
-            'Stmt_Class->attrGroups' => "\n",
1416
-            'Stmt_Enum->attrGroups' => "\n",
1417
-            'Stmt_EnumCase->attrGroups' => "\n",
1418
-            'Stmt_Interface->attrGroups' => "\n",
1419
-            'Stmt_Trait->attrGroups' => "\n",
1420
-            'Stmt_Function->attrGroups' => "\n",
1421
-            'Stmt_ClassMethod->attrGroups' => "\n",
1422
-            'Stmt_ClassConst->attrGroups' => "\n",
1423
-            'Stmt_Property->attrGroups' => "\n",
1424
-            'Expr_PrintableNewAnonClass->attrGroups' => ' ',
1425
-            'Expr_Closure->attrGroups' => ' ',
1426
-            'Expr_ArrowFunction->attrGroups' => ' ',
1427
-            'Param->attrGroups' => ' ',
1428
-            'Stmt_Switch->cases' => "\n",
1429
-            'Stmt_TraitUse->adaptations' => "\n",
1430
-            'Stmt_TryCatch->stmts' => "\n",
1431
-            'Stmt_While->stmts' => "\n",
1432
-
1433
-            // dummy for top-level context
1434
-            'File->stmts' => "\n",
1435
-        ];
1436
-    }
1437
-
1438
-    protected function initializeEmptyListInsertionMap() {
1439
-        if ($this->emptyListInsertionMap) return;
1440
-
1441
-        // TODO Insertion into empty statement lists.
1442
-
1443
-        // [$find, $extraLeft, $extraRight]
1444
-        $this->emptyListInsertionMap = [
1445
-            'Expr_ArrowFunction->params' => ['(', '', ''],
1446
-            'Expr_Closure->uses' => [')', ' use(', ')'],
1447
-            'Expr_Closure->params' => ['(', '', ''],
1448
-            'Expr_FuncCall->args' => ['(', '', ''],
1449
-            'Expr_MethodCall->args' => ['(', '', ''],
1450
-            'Expr_NullsafeMethodCall->args' => ['(', '', ''],
1451
-            'Expr_New->args' => ['(', '', ''],
1452
-            'Expr_PrintableNewAnonClass->args' => ['(', '', ''],
1453
-            'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''],
1454
-            'Expr_StaticCall->args' => ['(', '', ''],
1455
-            'Stmt_Class->implements' => [null, ' implements ', ''],
1456
-            'Stmt_Enum->implements' => [null, ' implements ', ''],
1457
-            'Stmt_ClassMethod->params' => ['(', '', ''],
1458
-            'Stmt_Interface->extends' => [null, ' extends ', ''],
1459
-            'Stmt_Function->params' => ['(', '', ''],
1460
-            'Stmt_Interface->attrGroups' => [null, '', "\n"],
1461
-            'Stmt_Class->attrGroups' => [null, '', "\n"],
1462
-            'Stmt_ClassConst->attrGroups' => [null, '', "\n"],
1463
-            'Stmt_ClassMethod->attrGroups' => [null, '', "\n"],
1464
-            'Stmt_Function->attrGroups' => [null, '', "\n"],
1465
-            'Stmt_Property->attrGroups' => [null, '', "\n"],
1466
-            'Stmt_Trait->attrGroups' => [null, '', "\n"],
1467
-            'Expr_ArrowFunction->attrGroups' => [null, '', ' '],
1468
-            'Expr_Closure->attrGroups' => [null, '', ' '],
1469
-            'Expr_PrintableNewAnonClass->attrGroups' => [\T_NEW, ' ', ''],
1470
-
1471
-            /* These cannot be empty to start with:
17
+	const FIXUP_PREC_LEFT       = 0; // LHS operand affected by precedence
18
+	const FIXUP_PREC_RIGHT      = 1; // RHS operand affected by precedence
19
+	const FIXUP_CALL_LHS        = 2; // LHS of call
20
+	const FIXUP_DEREF_LHS       = 3; // LHS of dereferencing operation
21
+	const FIXUP_BRACED_NAME     = 4; // Name operand that may require bracing
22
+	const FIXUP_VAR_BRACED_NAME = 5; // Name operand that may require ${} bracing
23
+	const FIXUP_ENCAPSED        = 6; // Encapsed string part
24
+
25
+	protected $precedenceMap = [
26
+		// [precedence, associativity]
27
+		// where for precedence -1 is %left, 0 is %nonassoc and 1 is %right
28
+		BinaryOp\Pow::class            => [  0,  1],
29
+		Expr\BitwiseNot::class         => [ 10,  1],
30
+		Expr\PreInc::class             => [ 10,  1],
31
+		Expr\PreDec::class             => [ 10,  1],
32
+		Expr\PostInc::class            => [ 10, -1],
33
+		Expr\PostDec::class            => [ 10, -1],
34
+		Expr\UnaryPlus::class          => [ 10,  1],
35
+		Expr\UnaryMinus::class         => [ 10,  1],
36
+		Cast\Int_::class               => [ 10,  1],
37
+		Cast\Double::class             => [ 10,  1],
38
+		Cast\String_::class            => [ 10,  1],
39
+		Cast\Array_::class             => [ 10,  1],
40
+		Cast\Object_::class            => [ 10,  1],
41
+		Cast\Bool_::class              => [ 10,  1],
42
+		Cast\Unset_::class             => [ 10,  1],
43
+		Expr\ErrorSuppress::class      => [ 10,  1],
44
+		Expr\Instanceof_::class        => [ 20,  0],
45
+		Expr\BooleanNot::class         => [ 30,  1],
46
+		BinaryOp\Mul::class            => [ 40, -1],
47
+		BinaryOp\Div::class            => [ 40, -1],
48
+		BinaryOp\Mod::class            => [ 40, -1],
49
+		BinaryOp\Plus::class           => [ 50, -1],
50
+		BinaryOp\Minus::class          => [ 50, -1],
51
+		BinaryOp\Concat::class         => [ 50, -1],
52
+		BinaryOp\ShiftLeft::class      => [ 60, -1],
53
+		BinaryOp\ShiftRight::class     => [ 60, -1],
54
+		BinaryOp\Smaller::class        => [ 70,  0],
55
+		BinaryOp\SmallerOrEqual::class => [ 70,  0],
56
+		BinaryOp\Greater::class        => [ 70,  0],
57
+		BinaryOp\GreaterOrEqual::class => [ 70,  0],
58
+		BinaryOp\Equal::class          => [ 80,  0],
59
+		BinaryOp\NotEqual::class       => [ 80,  0],
60
+		BinaryOp\Identical::class      => [ 80,  0],
61
+		BinaryOp\NotIdentical::class   => [ 80,  0],
62
+		BinaryOp\Spaceship::class      => [ 80,  0],
63
+		BinaryOp\BitwiseAnd::class     => [ 90, -1],
64
+		BinaryOp\BitwiseXor::class     => [100, -1],
65
+		BinaryOp\BitwiseOr::class      => [110, -1],
66
+		BinaryOp\BooleanAnd::class     => [120, -1],
67
+		BinaryOp\BooleanOr::class      => [130, -1],
68
+		BinaryOp\Coalesce::class       => [140,  1],
69
+		Expr\Ternary::class            => [150,  0],
70
+		// parser uses %left for assignments, but they really behave as %right
71
+		Expr\Assign::class             => [160,  1],
72
+		Expr\AssignRef::class          => [160,  1],
73
+		AssignOp\Plus::class           => [160,  1],
74
+		AssignOp\Minus::class          => [160,  1],
75
+		AssignOp\Mul::class            => [160,  1],
76
+		AssignOp\Div::class            => [160,  1],
77
+		AssignOp\Concat::class         => [160,  1],
78
+		AssignOp\Mod::class            => [160,  1],
79
+		AssignOp\BitwiseAnd::class     => [160,  1],
80
+		AssignOp\BitwiseOr::class      => [160,  1],
81
+		AssignOp\BitwiseXor::class     => [160,  1],
82
+		AssignOp\ShiftLeft::class      => [160,  1],
83
+		AssignOp\ShiftRight::class     => [160,  1],
84
+		AssignOp\Pow::class            => [160,  1],
85
+		AssignOp\Coalesce::class       => [160,  1],
86
+		Expr\YieldFrom::class          => [165,  1],
87
+		Expr\Print_::class             => [168,  1],
88
+		BinaryOp\LogicalAnd::class     => [170, -1],
89
+		BinaryOp\LogicalXor::class     => [180, -1],
90
+		BinaryOp\LogicalOr::class      => [190, -1],
91
+		Expr\Include_::class           => [200, -1],
92
+	];
93
+
94
+	/** @var int Current indentation level. */
95
+	protected $indentLevel;
96
+	/** @var string Newline including current indentation. */
97
+	protected $nl;
98
+	/** @var string Token placed at end of doc string to ensure it is followed by a newline. */
99
+	protected $docStringEndToken;
100
+	/** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */
101
+	protected $canUseSemicolonNamespaces;
102
+	/** @var array Pretty printer options */
103
+	protected $options;
104
+
105
+	/** @var TokenStream Original tokens for use in format-preserving pretty print */
106
+	protected $origTokens;
107
+	/** @var Internal\Differ Differ for node lists */
108
+	protected $nodeListDiffer;
109
+	/** @var bool[] Map determining whether a certain character is a label character */
110
+	protected $labelCharMap;
111
+	/**
112
+	 * @var int[][] Map from token classes and subnode names to FIXUP_* constants. This is used
113
+	 *              during format-preserving prints to place additional parens/braces if necessary.
114
+	 */
115
+	protected $fixupMap;
116
+	/**
117
+	 * @var int[][] Map from "{$node->getType()}->{$subNode}" to ['left' => $l, 'right' => $r],
118
+	 *              where $l and $r specify the token type that needs to be stripped when removing
119
+	 *              this node.
120
+	 */
121
+	protected $removalMap;
122
+	/**
123
+	 * @var mixed[] Map from "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight].
124
+	 *              $find is an optional token after which the insertion occurs. $extraLeft/Right
125
+	 *              are optionally added before/after the main insertions.
126
+	 */
127
+	protected $insertionMap;
128
+	/**
129
+	 * @var string[] Map From "{$node->getType()}->{$subNode}" to string that should be inserted
130
+	 *               between elements of this list subnode.
131
+	 */
132
+	protected $listInsertionMap;
133
+	protected $emptyListInsertionMap;
134
+	/** @var int[] Map from "{$node->getType()}->{$subNode}" to token before which the modifiers
135
+	 *             should be reprinted. */
136
+	protected $modifierChangeMap;
137
+
138
+	/**
139
+	 * Creates a pretty printer instance using the given options.
140
+	 *
141
+	 * Supported options:
142
+	 *  * bool $shortArraySyntax = false: Whether to use [] instead of array() as the default array
143
+	 *                                    syntax, if the node does not specify a format.
144
+	 *
145
+	 * @param array $options Dictionary of formatting options
146
+	 */
147
+	public function __construct(array $options = []) {
148
+		$this->docStringEndToken = '_DOC_STRING_END_' . mt_rand();
149
+
150
+		$defaultOptions = ['shortArraySyntax' => false];
151
+		$this->options = $options + $defaultOptions;
152
+	}
153
+
154
+	/**
155
+	 * Reset pretty printing state.
156
+	 */
157
+	protected function resetState() {
158
+		$this->indentLevel = 0;
159
+		$this->nl = "\n";
160
+		$this->origTokens = null;
161
+	}
162
+
163
+	/**
164
+	 * Set indentation level
165
+	 *
166
+	 * @param int $level Level in number of spaces
167
+	 */
168
+	protected function setIndentLevel(int $level) {
169
+		$this->indentLevel = $level;
170
+		$this->nl = "\n" . \str_repeat(' ', $level);
171
+	}
172
+
173
+	/**
174
+	 * Increase indentation level.
175
+	 */
176
+	protected function indent() {
177
+		$this->indentLevel += 4;
178
+		$this->nl .= '    ';
179
+	}
180
+
181
+	/**
182
+	 * Decrease indentation level.
183
+	 */
184
+	protected function outdent() {
185
+		assert($this->indentLevel >= 4);
186
+		$this->indentLevel -= 4;
187
+		$this->nl = "\n" . str_repeat(' ', $this->indentLevel);
188
+	}
189
+
190
+	/**
191
+	 * Pretty prints an array of statements.
192
+	 *
193
+	 * @param Node[] $stmts Array of statements
194
+	 *
195
+	 * @return string Pretty printed statements
196
+	 */
197
+	public function prettyPrint(array $stmts) : string {
198
+		$this->resetState();
199
+		$this->preprocessNodes($stmts);
200
+
201
+		return ltrim($this->handleMagicTokens($this->pStmts($stmts, false)));
202
+	}
203
+
204
+	/**
205
+	 * Pretty prints an expression.
206
+	 *
207
+	 * @param Expr $node Expression node
208
+	 *
209
+	 * @return string Pretty printed node
210
+	 */
211
+	public function prettyPrintExpr(Expr $node) : string {
212
+		$this->resetState();
213
+		return $this->handleMagicTokens($this->p($node));
214
+	}
215
+
216
+	/**
217
+	 * Pretty prints a file of statements (includes the opening <?php tag if it is required).
218
+	 *
219
+	 * @param Node[] $stmts Array of statements
220
+	 *
221
+	 * @return string Pretty printed statements
222
+	 */
223
+	public function prettyPrintFile(array $stmts) : string {
224
+		if (!$stmts) {
225
+			return "<?php\n\n";
226
+		}
227
+
228
+		$p = "<?php\n\n" . $this->prettyPrint($stmts);
229
+
230
+		if ($stmts[0] instanceof Stmt\InlineHTML) {
231
+			$p = preg_replace('/^<\?php\s+\?>\n?/', '', $p);
232
+		}
233
+		if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) {
234
+			$p = preg_replace('/<\?php$/', '', rtrim($p));
235
+		}
236
+
237
+		return $p;
238
+	}
239
+
240
+	/**
241
+	 * Preprocesses the top-level nodes to initialize pretty printer state.
242
+	 *
243
+	 * @param Node[] $nodes Array of nodes
244
+	 */
245
+	protected function preprocessNodes(array $nodes) {
246
+		/* We can use semicolon-namespaces unless there is a global namespace declaration */
247
+		$this->canUseSemicolonNamespaces = true;
248
+		foreach ($nodes as $node) {
249
+			if ($node instanceof Stmt\Namespace_ && null === $node->name) {
250
+				$this->canUseSemicolonNamespaces = false;
251
+				break;
252
+			}
253
+		}
254
+	}
255
+
256
+	/**
257
+	 * Handles (and removes) no-indent and doc-string-end tokens.
258
+	 *
259
+	 * @param string $str
260
+	 * @return string
261
+	 */
262
+	protected function handleMagicTokens(string $str) : string {
263
+		// Replace doc-string-end tokens with nothing or a newline
264
+		$str = str_replace($this->docStringEndToken . ";\n", ";\n", $str);
265
+		$str = str_replace($this->docStringEndToken, "\n", $str);
266
+
267
+		return $str;
268
+	}
269
+
270
+	/**
271
+	 * Pretty prints an array of nodes (statements) and indents them optionally.
272
+	 *
273
+	 * @param Node[] $nodes  Array of nodes
274
+	 * @param bool   $indent Whether to indent the printed nodes
275
+	 *
276
+	 * @return string Pretty printed statements
277
+	 */
278
+	protected function pStmts(array $nodes, bool $indent = true) : string {
279
+		if ($indent) {
280
+			$this->indent();
281
+		}
282
+
283
+		$result = '';
284
+		foreach ($nodes as $node) {
285
+			$comments = $node->getComments();
286
+			if ($comments) {
287
+				$result .= $this->nl . $this->pComments($comments);
288
+				if ($node instanceof Stmt\Nop) {
289
+					continue;
290
+				}
291
+			}
292
+
293
+			$result .= $this->nl . $this->p($node);
294
+		}
295
+
296
+		if ($indent) {
297
+			$this->outdent();
298
+		}
299
+
300
+		return $result;
301
+	}
302
+
303
+	/**
304
+	 * Pretty-print an infix operation while taking precedence into account.
305
+	 *
306
+	 * @param string $class          Node class of operator
307
+	 * @param Node   $leftNode       Left-hand side node
308
+	 * @param string $operatorString String representation of the operator
309
+	 * @param Node   $rightNode      Right-hand side node
310
+	 *
311
+	 * @return string Pretty printed infix operation
312
+	 */
313
+	protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode) : string {
314
+		list($precedence, $associativity) = $this->precedenceMap[$class];
315
+
316
+		return $this->pPrec($leftNode, $precedence, $associativity, -1)
317
+			 . $operatorString
318
+			 . $this->pPrec($rightNode, $precedence, $associativity, 1);
319
+	}
320
+
321
+	/**
322
+	 * Pretty-print a prefix operation while taking precedence into account.
323
+	 *
324
+	 * @param string $class          Node class of operator
325
+	 * @param string $operatorString String representation of the operator
326
+	 * @param Node   $node           Node
327
+	 *
328
+	 * @return string Pretty printed prefix operation
329
+	 */
330
+	protected function pPrefixOp(string $class, string $operatorString, Node $node) : string {
331
+		list($precedence, $associativity) = $this->precedenceMap[$class];
332
+		return $operatorString . $this->pPrec($node, $precedence, $associativity, 1);
333
+	}
334
+
335
+	/**
336
+	 * Pretty-print a postfix operation while taking precedence into account.
337
+	 *
338
+	 * @param string $class          Node class of operator
339
+	 * @param string $operatorString String representation of the operator
340
+	 * @param Node   $node           Node
341
+	 *
342
+	 * @return string Pretty printed postfix operation
343
+	 */
344
+	protected function pPostfixOp(string $class, Node $node, string $operatorString) : string {
345
+		list($precedence, $associativity) = $this->precedenceMap[$class];
346
+		return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString;
347
+	}
348
+
349
+	/**
350
+	 * Prints an expression node with the least amount of parentheses necessary to preserve the meaning.
351
+	 *
352
+	 * @param Node $node                Node to pretty print
353
+	 * @param int  $parentPrecedence    Precedence of the parent operator
354
+	 * @param int  $parentAssociativity Associativity of parent operator
355
+	 *                                  (-1 is left, 0 is nonassoc, 1 is right)
356
+	 * @param int  $childPosition       Position of the node relative to the operator
357
+	 *                                  (-1 is left, 1 is right)
358
+	 *
359
+	 * @return string The pretty printed node
360
+	 */
361
+	protected function pPrec(Node $node, int $parentPrecedence, int $parentAssociativity, int $childPosition) : string {
362
+		$class = \get_class($node);
363
+		if (isset($this->precedenceMap[$class])) {
364
+			$childPrecedence = $this->precedenceMap[$class][0];
365
+			if ($childPrecedence > $parentPrecedence
366
+				|| ($parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition)
367
+			) {
368
+				return '(' . $this->p($node) . ')';
369
+			}
370
+		}
371
+
372
+		return $this->p($node);
373
+	}
374
+
375
+	/**
376
+	 * Pretty prints an array of nodes and implodes the printed values.
377
+	 *
378
+	 * @param Node[] $nodes Array of Nodes to be printed
379
+	 * @param string $glue  Character to implode with
380
+	 *
381
+	 * @return string Imploded pretty printed nodes
382
+	 */
383
+	protected function pImplode(array $nodes, string $glue = '') : string {
384
+		$pNodes = [];
385
+		foreach ($nodes as $node) {
386
+			if (null === $node) {
387
+				$pNodes[] = '';
388
+			} else {
389
+				$pNodes[] = $this->p($node);
390
+			}
391
+		}
392
+
393
+		return implode($glue, $pNodes);
394
+	}
395
+
396
+	/**
397
+	 * Pretty prints an array of nodes and implodes the printed values with commas.
398
+	 *
399
+	 * @param Node[] $nodes Array of Nodes to be printed
400
+	 *
401
+	 * @return string Comma separated pretty printed nodes
402
+	 */
403
+	protected function pCommaSeparated(array $nodes) : string {
404
+		return $this->pImplode($nodes, ', ');
405
+	}
406
+
407
+	/**
408
+	 * Pretty prints a comma-separated list of nodes in multiline style, including comments.
409
+	 *
410
+	 * The result includes a leading newline and one level of indentation (same as pStmts).
411
+	 *
412
+	 * @param Node[] $nodes         Array of Nodes to be printed
413
+	 * @param bool   $trailingComma Whether to use a trailing comma
414
+	 *
415
+	 * @return string Comma separated pretty printed nodes in multiline style
416
+	 */
417
+	protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma) : string {
418
+		$this->indent();
419
+
420
+		$result = '';
421
+		$lastIdx = count($nodes) - 1;
422
+		foreach ($nodes as $idx => $node) {
423
+			if ($node !== null) {
424
+				$comments = $node->getComments();
425
+				if ($comments) {
426
+					$result .= $this->nl . $this->pComments($comments);
427
+				}
428
+
429
+				$result .= $this->nl . $this->p($node);
430
+			} else {
431
+				$result .= $this->nl;
432
+			}
433
+			if ($trailingComma || $idx !== $lastIdx) {
434
+				$result .= ',';
435
+			}
436
+		}
437
+
438
+		$this->outdent();
439
+		return $result;
440
+	}
441
+
442
+	/**
443
+	 * Prints reformatted text of the passed comments.
444
+	 *
445
+	 * @param Comment[] $comments List of comments
446
+	 *
447
+	 * @return string Reformatted text of comments
448
+	 */
449
+	protected function pComments(array $comments) : string {
450
+		$formattedComments = [];
451
+
452
+		foreach ($comments as $comment) {
453
+			$formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText());
454
+		}
455
+
456
+		return implode($this->nl, $formattedComments);
457
+	}
458
+
459
+	/**
460
+	 * Perform a format-preserving pretty print of an AST.
461
+	 *
462
+	 * The format preservation is best effort. For some changes to the AST the formatting will not
463
+	 * be preserved (at least not locally).
464
+	 *
465
+	 * In order to use this method a number of prerequisites must be satisfied:
466
+	 *  * The startTokenPos and endTokenPos attributes in the lexer must be enabled.
467
+	 *  * The CloningVisitor must be run on the AST prior to modification.
468
+	 *  * The original tokens must be provided, using the getTokens() method on the lexer.
469
+	 *
470
+	 * @param Node[] $stmts      Modified AST with links to original AST
471
+	 * @param Node[] $origStmts  Original AST with token offset information
472
+	 * @param array  $origTokens Tokens of the original code
473
+	 *
474
+	 * @return string
475
+	 */
476
+	public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string {
477
+		$this->initializeNodeListDiffer();
478
+		$this->initializeLabelCharMap();
479
+		$this->initializeFixupMap();
480
+		$this->initializeRemovalMap();
481
+		$this->initializeInsertionMap();
482
+		$this->initializeListInsertionMap();
483
+		$this->initializeEmptyListInsertionMap();
484
+		$this->initializeModifierChangeMap();
485
+
486
+		$this->resetState();
487
+		$this->origTokens = new TokenStream($origTokens);
488
+
489
+		$this->preprocessNodes($stmts);
490
+
491
+		$pos = 0;
492
+		$result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null);
493
+		if (null !== $result) {
494
+			$result .= $this->origTokens->getTokenCode($pos, count($origTokens), 0);
495
+		} else {
496
+			// Fallback
497
+			// TODO Add <?php properly
498
+			$result = "<?php\n" . $this->pStmts($stmts, false);
499
+		}
500
+
501
+		return ltrim($this->handleMagicTokens($result));
502
+	}
503
+
504
+	protected function pFallback(Node $node) {
505
+		return $this->{'p' . $node->getType()}($node);
506
+	}
507
+
508
+	/**
509
+	 * Pretty prints a node.
510
+	 *
511
+	 * This method also handles formatting preservation for nodes.
512
+	 *
513
+	 * @param Node $node Node to be pretty printed
514
+	 * @param bool $parentFormatPreserved Whether parent node has preserved formatting
515
+	 *
516
+	 * @return string Pretty printed node
517
+	 */
518
+	protected function p(Node $node, $parentFormatPreserved = false) : string {
519
+		// No orig tokens means this is a normal pretty print without preservation of formatting
520
+		if (!$this->origTokens) {
521
+			return $this->{'p' . $node->getType()}($node);
522
+		}
523
+
524
+		/** @var Node $origNode */
525
+		$origNode = $node->getAttribute('origNode');
526
+		if (null === $origNode) {
527
+			return $this->pFallback($node);
528
+		}
529
+
530
+		$class = \get_class($node);
531
+		\assert($class === \get_class($origNode));
532
+
533
+		$startPos = $origNode->getStartTokenPos();
534
+		$endPos = $origNode->getEndTokenPos();
535
+		\assert($startPos >= 0 && $endPos >= 0);
536
+
537
+		$fallbackNode = $node;
538
+		if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) {
539
+			// Normalize node structure of anonymous classes
540
+			$node = PrintableNewAnonClassNode::fromNewNode($node);
541
+			$origNode = PrintableNewAnonClassNode::fromNewNode($origNode);
542
+		}
543
+
544
+		// InlineHTML node does not contain closing and opening PHP tags. If the parent formatting
545
+		// is not preserved, then we need to use the fallback code to make sure the tags are
546
+		// printed.
547
+		if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) {
548
+			return $this->pFallback($fallbackNode);
549
+		}
550
+
551
+		$indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos);
552
+
553
+		$type = $node->getType();
554
+		$fixupInfo = $this->fixupMap[$class] ?? null;
555
+
556
+		$result = '';
557
+		$pos = $startPos;
558
+		foreach ($node->getSubNodeNames() as $subNodeName) {
559
+			$subNode = $node->$subNodeName;
560
+			$origSubNode = $origNode->$subNodeName;
561
+
562
+			if ((!$subNode instanceof Node && $subNode !== null)
563
+				|| (!$origSubNode instanceof Node && $origSubNode !== null)
564
+			) {
565
+				if ($subNode === $origSubNode) {
566
+					// Unchanged, can reuse old code
567
+					continue;
568
+				}
569
+
570
+				if (is_array($subNode) && is_array($origSubNode)) {
571
+					// Array subnode changed, we might be able to reconstruct it
572
+					$listResult = $this->pArray(
573
+						$subNode, $origSubNode, $pos, $indentAdjustment, $type, $subNodeName,
574
+						$fixupInfo[$subNodeName] ?? null
575
+					);
576
+					if (null === $listResult) {
577
+						return $this->pFallback($fallbackNode);
578
+					}
579
+
580
+					$result .= $listResult;
581
+					continue;
582
+				}
583
+
584
+				if (is_int($subNode) && is_int($origSubNode)) {
585
+					// Check if this is a modifier change
586
+					$key = $type . '->' . $subNodeName;
587
+					if (!isset($this->modifierChangeMap[$key])) {
588
+						return $this->pFallback($fallbackNode);
589
+					}
590
+
591
+					$findToken = $this->modifierChangeMap[$key];
592
+					$result .= $this->pModifiers($subNode);
593
+					$pos = $this->origTokens->findRight($pos, $findToken);
594
+					continue;
595
+				}
596
+
597
+				// If a non-node, non-array subnode changed, we don't be able to do a partial
598
+				// reconstructions, as we don't have enough offset information. Pretty print the
599
+				// whole node instead.
600
+				return $this->pFallback($fallbackNode);
601
+			}
602
+
603
+			$extraLeft = '';
604
+			$extraRight = '';
605
+			if ($origSubNode !== null) {
606
+				$subStartPos = $origSubNode->getStartTokenPos();
607
+				$subEndPos = $origSubNode->getEndTokenPos();
608
+				\assert($subStartPos >= 0 && $subEndPos >= 0);
609
+			} else {
610
+				if ($subNode === null) {
611
+					// Both null, nothing to do
612
+					continue;
613
+				}
614
+
615
+				// A node has been inserted, check if we have insertion information for it
616
+				$key = $type . '->' . $subNodeName;
617
+				if (!isset($this->insertionMap[$key])) {
618
+					return $this->pFallback($fallbackNode);
619
+				}
620
+
621
+				list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key];
622
+				if (null !== $findToken) {
623
+					$subStartPos = $this->origTokens->findRight($pos, $findToken)
624
+						+ (int) !$beforeToken;
625
+				} else {
626
+					$subStartPos = $pos;
627
+				}
628
+
629
+				if (null === $extraLeft && null !== $extraRight) {
630
+					// If inserting on the right only, skipping whitespace looks better
631
+					$subStartPos = $this->origTokens->skipRightWhitespace($subStartPos);
632
+				}
633
+				$subEndPos = $subStartPos - 1;
634
+			}
635
+
636
+			if (null === $subNode) {
637
+				// A node has been removed, check if we have removal information for it
638
+				$key = $type . '->' . $subNodeName;
639
+				if (!isset($this->removalMap[$key])) {
640
+					return $this->pFallback($fallbackNode);
641
+				}
642
+
643
+				// Adjust positions to account for additional tokens that must be skipped
644
+				$removalInfo = $this->removalMap[$key];
645
+				if (isset($removalInfo['left'])) {
646
+					$subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1;
647
+				}
648
+				if (isset($removalInfo['right'])) {
649
+					$subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1;
650
+				}
651
+			}
652
+
653
+			$result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment);
654
+
655
+			if (null !== $subNode) {
656
+				$result .= $extraLeft;
657
+
658
+				$origIndentLevel = $this->indentLevel;
659
+				$this->setIndentLevel($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment);
660
+
661
+				// If it's the same node that was previously in this position, it certainly doesn't
662
+				// need fixup. It's important to check this here, because our fixup checks are more
663
+				// conservative than strictly necessary.
664
+				if (isset($fixupInfo[$subNodeName])
665
+					&& $subNode->getAttribute('origNode') !== $origSubNode
666
+				) {
667
+					$fixup = $fixupInfo[$subNodeName];
668
+					$res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos);
669
+				} else {
670
+					$res = $this->p($subNode, true);
671
+				}
672
+
673
+				$this->safeAppend($result, $res);
674
+				$this->setIndentLevel($origIndentLevel);
675
+
676
+				$result .= $extraRight;
677
+			}
678
+
679
+			$pos = $subEndPos + 1;
680
+		}
681
+
682
+		$result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment);
683
+		return $result;
684
+	}
685
+
686
+	/**
687
+	 * Perform a format-preserving pretty print of an array.
688
+	 *
689
+	 * @param array       $nodes            New nodes
690
+	 * @param array       $origNodes        Original nodes
691
+	 * @param int         $pos              Current token position (updated by reference)
692
+	 * @param int         $indentAdjustment Adjustment for indentation
693
+	 * @param string      $parentNodeType   Type of the containing node.
694
+	 * @param string      $subNodeName      Name of array subnode.
695
+	 * @param null|int    $fixup            Fixup information for array item nodes
696
+	 *
697
+	 * @return null|string Result of pretty print or null if cannot preserve formatting
698
+	 */
699
+	protected function pArray(
700
+		array $nodes, array $origNodes, int &$pos, int $indentAdjustment,
701
+		string $parentNodeType, string $subNodeName, $fixup
702
+	) {
703
+		$diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes);
704
+
705
+		$mapKey = $parentNodeType . '->' . $subNodeName;
706
+		$insertStr = $this->listInsertionMap[$mapKey] ?? null;
707
+		$isStmtList = $subNodeName === 'stmts';
708
+
709
+		$beforeFirstKeepOrReplace = true;
710
+		$skipRemovedNode = false;
711
+		$delayedAdd = [];
712
+		$lastElemIndentLevel = $this->indentLevel;
713
+
714
+		$insertNewline = false;
715
+		if ($insertStr === "\n") {
716
+			$insertStr = '';
717
+			$insertNewline = true;
718
+		}
719
+
720
+		if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) {
721
+			$startPos = $origNodes[0]->getStartTokenPos();
722
+			$endPos = $origNodes[0]->getEndTokenPos();
723
+			\assert($startPos >= 0 && $endPos >= 0);
724
+			if (!$this->origTokens->haveBraces($startPos, $endPos)) {
725
+				// This was a single statement without braces, but either additional statements
726
+				// have been added, or the single statement has been removed. This requires the
727
+				// addition of braces. For now fall back.
728
+				// TODO: Try to preserve formatting
729
+				return null;
730
+			}
731
+		}
732
+
733
+		$result = '';
734
+		foreach ($diff as $i => $diffElem) {
735
+			$diffType = $diffElem->type;
736
+			/** @var Node|null $arrItem */
737
+			$arrItem = $diffElem->new;
738
+			/** @var Node|null $origArrItem */
739
+			$origArrItem = $diffElem->old;
740
+
741
+			if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) {
742
+				$beforeFirstKeepOrReplace = false;
743
+
744
+				if ($origArrItem === null || $arrItem === null) {
745
+					// We can only handle the case where both are null
746
+					if ($origArrItem === $arrItem) {
747
+						continue;
748
+					}
749
+					return null;
750
+				}
751
+
752
+				if (!$arrItem instanceof Node || !$origArrItem instanceof Node) {
753
+					// We can only deal with nodes. This can occur for Names, which use string arrays.
754
+					return null;
755
+				}
756
+
757
+				$itemStartPos = $origArrItem->getStartTokenPos();
758
+				$itemEndPos = $origArrItem->getEndTokenPos();
759
+				\assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos);
760
+
761
+				$origIndentLevel = $this->indentLevel;
762
+				$lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment;
763
+				$this->setIndentLevel($lastElemIndentLevel);
764
+
765
+				$comments = $arrItem->getComments();
766
+				$origComments = $origArrItem->getComments();
767
+				$commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos;
768
+				\assert($commentStartPos >= 0);
769
+
770
+				if ($commentStartPos < $pos) {
771
+					// Comments may be assigned to multiple nodes if they start at the same position.
772
+					// Make sure we don't try to print them multiple times.
773
+					$commentStartPos = $itemStartPos;
774
+				}
775
+
776
+				if ($skipRemovedNode) {
777
+					if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
778
+						// We'd remove the brace of a code block.
779
+						// TODO: Preserve formatting.
780
+						$this->setIndentLevel($origIndentLevel);
781
+						return null;
782
+					}
783
+				} else {
784
+					$result .= $this->origTokens->getTokenCode(
785
+						$pos, $commentStartPos, $indentAdjustment);
786
+				}
787
+
788
+				if (!empty($delayedAdd)) {
789
+					/** @var Node $delayedAddNode */
790
+					foreach ($delayedAdd as $delayedAddNode) {
791
+						if ($insertNewline) {
792
+							$delayedAddComments = $delayedAddNode->getComments();
793
+							if ($delayedAddComments) {
794
+								$result .= $this->pComments($delayedAddComments) . $this->nl;
795
+							}
796
+						}
797
+
798
+						$this->safeAppend($result, $this->p($delayedAddNode, true));
799
+
800
+						if ($insertNewline) {
801
+							$result .= $insertStr . $this->nl;
802
+						} else {
803
+							$result .= $insertStr;
804
+						}
805
+					}
806
+
807
+					$delayedAdd = [];
808
+				}
809
+
810
+				if ($comments !== $origComments) {
811
+					if ($comments) {
812
+						$result .= $this->pComments($comments) . $this->nl;
813
+					}
814
+				} else {
815
+					$result .= $this->origTokens->getTokenCode(
816
+						$commentStartPos, $itemStartPos, $indentAdjustment);
817
+				}
818
+
819
+				// If we had to remove anything, we have done so now.
820
+				$skipRemovedNode = false;
821
+			} elseif ($diffType === DiffElem::TYPE_ADD) {
822
+				if (null === $insertStr) {
823
+					// We don't have insertion information for this list type
824
+					return null;
825
+				}
826
+
827
+				// We go multiline if the original code was multiline,
828
+				// or if it's an array item with a comment above it.
829
+				if ($insertStr === ', ' &&
830
+					($this->isMultiline($origNodes) || $arrItem->getComments())
831
+				) {
832
+					$insertStr = ',';
833
+					$insertNewline = true;
834
+				}
835
+
836
+				if ($beforeFirstKeepOrReplace) {
837
+					// Will be inserted at the next "replace" or "keep" element
838
+					$delayedAdd[] = $arrItem;
839
+					continue;
840
+				}
841
+
842
+				$itemStartPos = $pos;
843
+				$itemEndPos = $pos - 1;
844
+
845
+				$origIndentLevel = $this->indentLevel;
846
+				$this->setIndentLevel($lastElemIndentLevel);
847
+
848
+				if ($insertNewline) {
849
+					$result .= $insertStr . $this->nl;
850
+					$comments = $arrItem->getComments();
851
+					if ($comments) {
852
+						$result .= $this->pComments($comments) . $this->nl;
853
+					}
854
+				} else {
855
+					$result .= $insertStr;
856
+				}
857
+			} elseif ($diffType === DiffElem::TYPE_REMOVE) {
858
+				if (!$origArrItem instanceof Node) {
859
+					// We only support removal for nodes
860
+					return null;
861
+				}
862
+
863
+				$itemStartPos = $origArrItem->getStartTokenPos();
864
+				$itemEndPos = $origArrItem->getEndTokenPos();
865
+				\assert($itemStartPos >= 0 && $itemEndPos >= 0);
866
+
867
+				// Consider comments part of the node.
868
+				$origComments = $origArrItem->getComments();
869
+				if ($origComments) {
870
+					$itemStartPos = $origComments[0]->getStartTokenPos();
871
+				}
872
+
873
+				if ($i === 0) {
874
+					// If we're removing from the start, keep the tokens before the node and drop those after it,
875
+					// instead of the other way around.
876
+					$result .= $this->origTokens->getTokenCode(
877
+						$pos, $itemStartPos, $indentAdjustment);
878
+					$skipRemovedNode = true;
879
+				} else {
880
+					if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
881
+						// We'd remove the brace of a code block.
882
+						// TODO: Preserve formatting.
883
+						return null;
884
+					}
885
+				}
886
+
887
+				$pos = $itemEndPos + 1;
888
+				continue;
889
+			} else {
890
+				throw new \Exception("Shouldn't happen");
891
+			}
892
+
893
+			if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) {
894
+				$res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos);
895
+			} else {
896
+				$res = $this->p($arrItem, true);
897
+			}
898
+			$this->safeAppend($result, $res);
899
+
900
+			$this->setIndentLevel($origIndentLevel);
901
+			$pos = $itemEndPos + 1;
902
+		}
903
+
904
+		if ($skipRemovedNode) {
905
+			// TODO: Support removing single node.
906
+			return null;
907
+		}
908
+
909
+		if (!empty($delayedAdd)) {
910
+			if (!isset($this->emptyListInsertionMap[$mapKey])) {
911
+				return null;
912
+			}
913
+
914
+			list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey];
915
+			if (null !== $findToken) {
916
+				$insertPos = $this->origTokens->findRight($pos, $findToken) + 1;
917
+				$result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment);
918
+				$pos = $insertPos;
919
+			}
920
+
921
+			$first = true;
922
+			$result .= $extraLeft;
923
+			foreach ($delayedAdd as $delayedAddNode) {
924
+				if (!$first) {
925
+					$result .= $insertStr;
926
+					if ($insertNewline) {
927
+						$result .= $this->nl;
928
+					}
929
+				}
930
+				$result .= $this->p($delayedAddNode, true);
931
+				$first = false;
932
+			}
933
+			$result .= $extraRight === "\n" ? $this->nl : $extraRight;
934
+		}
935
+
936
+		return $result;
937
+	}
938
+
939
+	/**
940
+	 * Print node with fixups.
941
+	 *
942
+	 * Fixups here refer to the addition of extra parentheses, braces or other characters, that
943
+	 * are required to preserve program semantics in a certain context (e.g. to maintain precedence
944
+	 * or because only certain expressions are allowed in certain places).
945
+	 *
946
+	 * @param int         $fixup       Fixup type
947
+	 * @param Node        $subNode     Subnode to print
948
+	 * @param string|null $parentClass Class of parent node
949
+	 * @param int         $subStartPos Original start pos of subnode
950
+	 * @param int         $subEndPos   Original end pos of subnode
951
+	 *
952
+	 * @return string Result of fixed-up print of subnode
953
+	 */
954
+	protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStartPos, int $subEndPos) : string {
955
+		switch ($fixup) {
956
+			case self::FIXUP_PREC_LEFT:
957
+			case self::FIXUP_PREC_RIGHT:
958
+				if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
959
+					list($precedence, $associativity) = $this->precedenceMap[$parentClass];
960
+					return $this->pPrec($subNode, $precedence, $associativity,
961
+						$fixup === self::FIXUP_PREC_LEFT ? -1 : 1);
962
+				}
963
+				break;
964
+			case self::FIXUP_CALL_LHS:
965
+				if ($this->callLhsRequiresParens($subNode)
966
+					&& !$this->origTokens->haveParens($subStartPos, $subEndPos)
967
+				) {
968
+					return '(' . $this->p($subNode) . ')';
969
+				}
970
+				break;
971
+			case self::FIXUP_DEREF_LHS:
972
+				if ($this->dereferenceLhsRequiresParens($subNode)
973
+					&& !$this->origTokens->haveParens($subStartPos, $subEndPos)
974
+				) {
975
+					return '(' . $this->p($subNode) . ')';
976
+				}
977
+				break;
978
+			case self::FIXUP_BRACED_NAME:
979
+			case self::FIXUP_VAR_BRACED_NAME:
980
+				if ($subNode instanceof Expr
981
+					&& !$this->origTokens->haveBraces($subStartPos, $subEndPos)
982
+				) {
983
+					return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '')
984
+						. '{' . $this->p($subNode) . '}';
985
+				}
986
+				break;
987
+			case self::FIXUP_ENCAPSED:
988
+				if (!$subNode instanceof Scalar\EncapsedStringPart
989
+					&& !$this->origTokens->haveBraces($subStartPos, $subEndPos)
990
+				) {
991
+					return '{' . $this->p($subNode) . '}';
992
+				}
993
+				break;
994
+			default:
995
+				throw new \Exception('Cannot happen');
996
+		}
997
+
998
+		// Nothing special to do
999
+		return $this->p($subNode);
1000
+	}
1001
+
1002
+	/**
1003
+	 * Appends to a string, ensuring whitespace between label characters.
1004
+	 *
1005
+	 * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x".
1006
+	 * Without safeAppend the result would be "echox", which does not preserve semantics.
1007
+	 *
1008
+	 * @param string $str
1009
+	 * @param string $append
1010
+	 */
1011
+	protected function safeAppend(string &$str, string $append) {
1012
+		if ($str === "") {
1013
+			$str = $append;
1014
+			return;
1015
+		}
1016
+
1017
+		if ($append === "") {
1018
+			return;
1019
+		}
1020
+
1021
+		if (!$this->labelCharMap[$append[0]]
1022
+				|| !$this->labelCharMap[$str[\strlen($str) - 1]]) {
1023
+			$str .= $append;
1024
+		} else {
1025
+			$str .= " " . $append;
1026
+		}
1027
+	}
1028
+
1029
+	/**
1030
+	 * Determines whether the LHS of a call must be wrapped in parenthesis.
1031
+	 *
1032
+	 * @param Node $node LHS of a call
1033
+	 *
1034
+	 * @return bool Whether parentheses are required
1035
+	 */
1036
+	protected function callLhsRequiresParens(Node $node) : bool {
1037
+		return !($node instanceof Node\Name
1038
+			|| $node instanceof Expr\Variable
1039
+			|| $node instanceof Expr\ArrayDimFetch
1040
+			|| $node instanceof Expr\FuncCall
1041
+			|| $node instanceof Expr\MethodCall
1042
+			|| $node instanceof Expr\NullsafeMethodCall
1043
+			|| $node instanceof Expr\StaticCall
1044
+			|| $node instanceof Expr\Array_);
1045
+	}
1046
+
1047
+	/**
1048
+	 * Determines whether the LHS of a dereferencing operation must be wrapped in parenthesis.
1049
+	 *
1050
+	 * @param Node $node LHS of dereferencing operation
1051
+	 *
1052
+	 * @return bool Whether parentheses are required
1053
+	 */
1054
+	protected function dereferenceLhsRequiresParens(Node $node) : bool {
1055
+		return !($node instanceof Expr\Variable
1056
+			|| $node instanceof Node\Name
1057
+			|| $node instanceof Expr\ArrayDimFetch
1058
+			|| $node instanceof Expr\PropertyFetch
1059
+			|| $node instanceof Expr\NullsafePropertyFetch
1060
+			|| $node instanceof Expr\StaticPropertyFetch
1061
+			|| $node instanceof Expr\FuncCall
1062
+			|| $node instanceof Expr\MethodCall
1063
+			|| $node instanceof Expr\NullsafeMethodCall
1064
+			|| $node instanceof Expr\StaticCall
1065
+			|| $node instanceof Expr\Array_
1066
+			|| $node instanceof Scalar\String_
1067
+			|| $node instanceof Expr\ConstFetch
1068
+			|| $node instanceof Expr\ClassConstFetch);
1069
+	}
1070
+
1071
+	/**
1072
+	 * Print modifiers, including trailing whitespace.
1073
+	 *
1074
+	 * @param int $modifiers Modifier mask to print
1075
+	 *
1076
+	 * @return string Printed modifiers
1077
+	 */
1078
+	protected function pModifiers(int $modifiers) {
1079
+		return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC    ? 'public '    : '')
1080
+			 . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '')
1081
+			 . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE   ? 'private '   : '')
1082
+			 . ($modifiers & Stmt\Class_::MODIFIER_STATIC    ? 'static '    : '')
1083
+			 . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT  ? 'abstract '  : '')
1084
+			 . ($modifiers & Stmt\Class_::MODIFIER_FINAL     ? 'final '     : '')
1085
+			 . ($modifiers & Stmt\Class_::MODIFIER_READONLY  ? 'readonly '  : '');
1086
+	}
1087
+
1088
+	/**
1089
+	 * Determine whether a list of nodes uses multiline formatting.
1090
+	 *
1091
+	 * @param (Node|null)[] $nodes Node list
1092
+	 *
1093
+	 * @return bool Whether multiline formatting is used
1094
+	 */
1095
+	protected function isMultiline(array $nodes) : bool {
1096
+		if (\count($nodes) < 2) {
1097
+			return false;
1098
+		}
1099
+
1100
+		$pos = -1;
1101
+		foreach ($nodes as $node) {
1102
+			if (null === $node) {
1103
+				continue;
1104
+			}
1105
+
1106
+			$endPos = $node->getEndTokenPos() + 1;
1107
+			if ($pos >= 0) {
1108
+				$text = $this->origTokens->getTokenCode($pos, $endPos, 0);
1109
+				if (false === strpos($text, "\n")) {
1110
+					// We require that a newline is present between *every* item. If the formatting
1111
+					// is inconsistent, with only some items having newlines, we don't consider it
1112
+					// as multiline
1113
+					return false;
1114
+				}
1115
+			}
1116
+			$pos = $endPos;
1117
+		}
1118
+
1119
+		return true;
1120
+	}
1121
+
1122
+	/**
1123
+	 * Lazily initializes label char map.
1124
+	 *
1125
+	 * The label char map determines whether a certain character may occur in a label.
1126
+	 */
1127
+	protected function initializeLabelCharMap() {
1128
+		if ($this->labelCharMap) return;
1129
+
1130
+		$this->labelCharMap = [];
1131
+		for ($i = 0; $i < 256; $i++) {
1132
+			// Since PHP 7.1 The lower range is 0x80. However, we also want to support code for
1133
+			// older versions.
1134
+			$chr = chr($i);
1135
+			$this->labelCharMap[$chr] = $i >= 0x7f || ctype_alnum($chr);
1136
+		}
1137
+	}
1138
+
1139
+	/**
1140
+	 * Lazily initializes node list differ.
1141
+	 *
1142
+	 * The node list differ is used to determine differences between two array subnodes.
1143
+	 */
1144
+	protected function initializeNodeListDiffer() {
1145
+		if ($this->nodeListDiffer) return;
1146
+
1147
+		$this->nodeListDiffer = new Internal\Differ(function ($a, $b) {
1148
+			if ($a instanceof Node && $b instanceof Node) {
1149
+				return $a === $b->getAttribute('origNode');
1150
+			}
1151
+			// Can happen for array destructuring
1152
+			return $a === null && $b === null;
1153
+		});
1154
+	}
1155
+
1156
+	/**
1157
+	 * Lazily initializes fixup map.
1158
+	 *
1159
+	 * The fixup map is used to determine whether a certain subnode of a certain node may require
1160
+	 * some kind of "fixup" operation, e.g. the addition of parenthesis or braces.
1161
+	 */
1162
+	protected function initializeFixupMap() {
1163
+		if ($this->fixupMap) return;
1164
+
1165
+		$this->fixupMap = [
1166
+			Expr\PreInc::class => ['var' => self::FIXUP_PREC_RIGHT],
1167
+			Expr\PreDec::class => ['var' => self::FIXUP_PREC_RIGHT],
1168
+			Expr\PostInc::class => ['var' => self::FIXUP_PREC_LEFT],
1169
+			Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT],
1170
+			Expr\Instanceof_::class => [
1171
+				'expr' => self::FIXUP_PREC_LEFT,
1172
+				'class' => self::FIXUP_PREC_RIGHT, // TODO: FIXUP_NEW_VARIABLE
1173
+			],
1174
+			Expr\Ternary::class => [
1175
+				'cond' => self::FIXUP_PREC_LEFT,
1176
+				'else' => self::FIXUP_PREC_RIGHT,
1177
+			],
1178
+
1179
+			Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS],
1180
+			Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS],
1181
+			Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS],
1182
+			Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS],
1183
+			Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], // TODO: FIXUP_NEW_VARIABLE
1184
+			Expr\MethodCall::class => [
1185
+				'var' => self::FIXUP_DEREF_LHS,
1186
+				'name' => self::FIXUP_BRACED_NAME,
1187
+			],
1188
+			Expr\NullsafeMethodCall::class => [
1189
+				'var' => self::FIXUP_DEREF_LHS,
1190
+				'name' => self::FIXUP_BRACED_NAME,
1191
+			],
1192
+			Expr\StaticPropertyFetch::class => [
1193
+				'class' => self::FIXUP_DEREF_LHS,
1194
+				'name' => self::FIXUP_VAR_BRACED_NAME,
1195
+			],
1196
+			Expr\PropertyFetch::class => [
1197
+				'var' => self::FIXUP_DEREF_LHS,
1198
+				'name' => self::FIXUP_BRACED_NAME,
1199
+			],
1200
+			Expr\NullsafePropertyFetch::class => [
1201
+				'var' => self::FIXUP_DEREF_LHS,
1202
+				'name' => self::FIXUP_BRACED_NAME,
1203
+			],
1204
+			Scalar\Encapsed::class => [
1205
+				'parts' => self::FIXUP_ENCAPSED,
1206
+			],
1207
+		];
1208
+
1209
+		$binaryOps = [
1210
+			BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class,
1211
+			BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class,
1212
+			BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class,
1213
+			BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class,
1214
+			BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class,
1215
+			BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class,
1216
+			BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class,
1217
+			BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class,
1218
+			BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class,
1219
+		];
1220
+		foreach ($binaryOps as $binaryOp) {
1221
+			$this->fixupMap[$binaryOp] = [
1222
+				'left' => self::FIXUP_PREC_LEFT,
1223
+				'right' => self::FIXUP_PREC_RIGHT
1224
+			];
1225
+		}
1226
+
1227
+		$assignOps = [
1228
+			Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class,
1229
+			AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class,
1230
+			AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class,
1231
+			AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class
1232
+		];
1233
+		foreach ($assignOps as $assignOp) {
1234
+			$this->fixupMap[$assignOp] = [
1235
+				'var' => self::FIXUP_PREC_LEFT,
1236
+				'expr' => self::FIXUP_PREC_RIGHT,
1237
+			];
1238
+		}
1239
+
1240
+		$prefixOps = [
1241
+			Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class,
1242
+			Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class,
1243
+			Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class,
1244
+			Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class,
1245
+		];
1246
+		foreach ($prefixOps as $prefixOp) {
1247
+			$this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_RIGHT];
1248
+		}
1249
+	}
1250
+
1251
+	/**
1252
+	 * Lazily initializes the removal map.
1253
+	 *
1254
+	 * The removal map is used to determine which additional tokens should be removed when a
1255
+	 * certain node is replaced by null.
1256
+	 */
1257
+	protected function initializeRemovalMap() {
1258
+		if ($this->removalMap) return;
1259
+
1260
+		$stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE];
1261
+		$stripLeft = ['left' => \T_WHITESPACE];
1262
+		$stripRight = ['right' => \T_WHITESPACE];
1263
+		$stripDoubleArrow = ['right' => \T_DOUBLE_ARROW];
1264
+		$stripColon = ['left' => ':'];
1265
+		$stripEquals = ['left' => '='];
1266
+		$this->removalMap = [
1267
+			'Expr_ArrayDimFetch->dim' => $stripBoth,
1268
+			'Expr_ArrayItem->key' => $stripDoubleArrow,
1269
+			'Expr_ArrowFunction->returnType' => $stripColon,
1270
+			'Expr_Closure->returnType' => $stripColon,
1271
+			'Expr_Exit->expr' => $stripBoth,
1272
+			'Expr_Ternary->if' => $stripBoth,
1273
+			'Expr_Yield->key' => $stripDoubleArrow,
1274
+			'Expr_Yield->value' => $stripBoth,
1275
+			'Param->type' => $stripRight,
1276
+			'Param->default' => $stripEquals,
1277
+			'Stmt_Break->num' => $stripBoth,
1278
+			'Stmt_Catch->var' => $stripLeft,
1279
+			'Stmt_ClassMethod->returnType' => $stripColon,
1280
+			'Stmt_Class->extends' => ['left' => \T_EXTENDS],
1281
+			'Stmt_Enum->scalarType' => $stripColon,
1282
+			'Stmt_EnumCase->expr' => $stripEquals,
1283
+			'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS],
1284
+			'Stmt_Continue->num' => $stripBoth,
1285
+			'Stmt_Foreach->keyVar' => $stripDoubleArrow,
1286
+			'Stmt_Function->returnType' => $stripColon,
1287
+			'Stmt_If->else' => $stripLeft,
1288
+			'Stmt_Namespace->name' => $stripLeft,
1289
+			'Stmt_Property->type' => $stripRight,
1290
+			'Stmt_PropertyProperty->default' => $stripEquals,
1291
+			'Stmt_Return->expr' => $stripBoth,
1292
+			'Stmt_StaticVar->default' => $stripEquals,
1293
+			'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft,
1294
+			'Stmt_TryCatch->finally' => $stripLeft,
1295
+			// 'Stmt_Case->cond': Replace with "default"
1296
+			// 'Stmt_Class->name': Unclear what to do
1297
+			// 'Stmt_Declare->stmts': Not a plain node
1298
+			// 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a plain node
1299
+		];
1300
+	}
1301
+
1302
+	protected function initializeInsertionMap() {
1303
+		if ($this->insertionMap) return;
1304
+
1305
+		// TODO: "yield" where both key and value are inserted doesn't work
1306
+		// [$find, $beforeToken, $extraLeft, $extraRight]
1307
+		$this->insertionMap = [
1308
+			'Expr_ArrayDimFetch->dim' => ['[', false, null, null],
1309
+			'Expr_ArrayItem->key' => [null, false, null, ' => '],
1310
+			'Expr_ArrowFunction->returnType' => [')', false, ' : ', null],
1311
+			'Expr_Closure->returnType' => [')', false, ' : ', null],
1312
+			'Expr_Ternary->if' => ['?', false, ' ', ' '],
1313
+			'Expr_Yield->key' => [\T_YIELD, false, null, ' => '],
1314
+			'Expr_Yield->value' => [\T_YIELD, false, ' ', null],
1315
+			'Param->type' => [null, false, null, ' '],
1316
+			'Param->default' => [null, false, ' = ', null],
1317
+			'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
1318
+			'Stmt_Catch->var' => [null, false, ' ', null],
1319
+			'Stmt_ClassMethod->returnType' => [')', false, ' : ', null],
1320
+			'Stmt_Class->extends' => [null, false, ' extends ', null],
1321
+			'Stmt_Enum->scalarType' => [null, false, ' : ', null],
1322
+			'Stmt_EnumCase->expr' => [null, false, ' = ', null],
1323
+			'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null],
1324
+			'Stmt_Continue->num' => [\T_CONTINUE, false, ' ', null],
1325
+			'Stmt_Foreach->keyVar' => [\T_AS, false, null, ' => '],
1326
+			'Stmt_Function->returnType' => [')', false, ' : ', null],
1327
+			'Stmt_If->else' => [null, false, ' ', null],
1328
+			'Stmt_Namespace->name' => [\T_NAMESPACE, false, ' ', null],
1329
+			'Stmt_Property->type' => [\T_VARIABLE, true, null, ' '],
1330
+			'Stmt_PropertyProperty->default' => [null, false, ' = ', null],
1331
+			'Stmt_Return->expr' => [\T_RETURN, false, ' ', null],
1332
+			'Stmt_StaticVar->default' => [null, false, ' = ', null],
1333
+			//'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO
1334
+			'Stmt_TryCatch->finally' => [null, false, ' ', null],
1335
+
1336
+			// 'Expr_Exit->expr': Complicated due to optional ()
1337
+			// 'Stmt_Case->cond': Conversion from default to case
1338
+			// 'Stmt_Class->name': Unclear
1339
+			// 'Stmt_Declare->stmts': Not a proper node
1340
+			// 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a proper node
1341
+		];
1342
+	}
1343
+
1344
+	protected function initializeListInsertionMap() {
1345
+		if ($this->listInsertionMap) return;
1346
+
1347
+		$this->listInsertionMap = [
1348
+			// special
1349
+			//'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully
1350
+			//'Scalar_Encapsed->parts' => '',
1351
+			'Stmt_Catch->types' => '|',
1352
+			'UnionType->types' => '|',
1353
+			'IntersectionType->types' => '&',
1354
+			'Stmt_If->elseifs' => ' ',
1355
+			'Stmt_TryCatch->catches' => ' ',
1356
+
1357
+			// comma-separated lists
1358
+			'Expr_Array->items' => ', ',
1359
+			'Expr_ArrowFunction->params' => ', ',
1360
+			'Expr_Closure->params' => ', ',
1361
+			'Expr_Closure->uses' => ', ',
1362
+			'Expr_FuncCall->args' => ', ',
1363
+			'Expr_Isset->vars' => ', ',
1364
+			'Expr_List->items' => ', ',
1365
+			'Expr_MethodCall->args' => ', ',
1366
+			'Expr_NullsafeMethodCall->args' => ', ',
1367
+			'Expr_New->args' => ', ',
1368
+			'Expr_PrintableNewAnonClass->args' => ', ',
1369
+			'Expr_StaticCall->args' => ', ',
1370
+			'Stmt_ClassConst->consts' => ', ',
1371
+			'Stmt_ClassMethod->params' => ', ',
1372
+			'Stmt_Class->implements' => ', ',
1373
+			'Stmt_Enum->implements' => ', ',
1374
+			'Expr_PrintableNewAnonClass->implements' => ', ',
1375
+			'Stmt_Const->consts' => ', ',
1376
+			'Stmt_Declare->declares' => ', ',
1377
+			'Stmt_Echo->exprs' => ', ',
1378
+			'Stmt_For->init' => ', ',
1379
+			'Stmt_For->cond' => ', ',
1380
+			'Stmt_For->loop' => ', ',
1381
+			'Stmt_Function->params' => ', ',
1382
+			'Stmt_Global->vars' => ', ',
1383
+			'Stmt_GroupUse->uses' => ', ',
1384
+			'Stmt_Interface->extends' => ', ',
1385
+			'Stmt_Match->arms' => ', ',
1386
+			'Stmt_Property->props' => ', ',
1387
+			'Stmt_StaticVar->vars' => ', ',
1388
+			'Stmt_TraitUse->traits' => ', ',
1389
+			'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ',
1390
+			'Stmt_Unset->vars' => ', ',
1391
+			'Stmt_Use->uses' => ', ',
1392
+			'MatchArm->conds' => ', ',
1393
+			'AttributeGroup->attrs' => ', ',
1394
+
1395
+			// statement lists
1396
+			'Expr_Closure->stmts' => "\n",
1397
+			'Stmt_Case->stmts' => "\n",
1398
+			'Stmt_Catch->stmts' => "\n",
1399
+			'Stmt_Class->stmts' => "\n",
1400
+			'Stmt_Enum->stmts' => "\n",
1401
+			'Expr_PrintableNewAnonClass->stmts' => "\n",
1402
+			'Stmt_Interface->stmts' => "\n",
1403
+			'Stmt_Trait->stmts' => "\n",
1404
+			'Stmt_ClassMethod->stmts' => "\n",
1405
+			'Stmt_Declare->stmts' => "\n",
1406
+			'Stmt_Do->stmts' => "\n",
1407
+			'Stmt_ElseIf->stmts' => "\n",
1408
+			'Stmt_Else->stmts' => "\n",
1409
+			'Stmt_Finally->stmts' => "\n",
1410
+			'Stmt_Foreach->stmts' => "\n",
1411
+			'Stmt_For->stmts' => "\n",
1412
+			'Stmt_Function->stmts' => "\n",
1413
+			'Stmt_If->stmts' => "\n",
1414
+			'Stmt_Namespace->stmts' => "\n",
1415
+			'Stmt_Class->attrGroups' => "\n",
1416
+			'Stmt_Enum->attrGroups' => "\n",
1417
+			'Stmt_EnumCase->attrGroups' => "\n",
1418
+			'Stmt_Interface->attrGroups' => "\n",
1419
+			'Stmt_Trait->attrGroups' => "\n",
1420
+			'Stmt_Function->attrGroups' => "\n",
1421
+			'Stmt_ClassMethod->attrGroups' => "\n",
1422
+			'Stmt_ClassConst->attrGroups' => "\n",
1423
+			'Stmt_Property->attrGroups' => "\n",
1424
+			'Expr_PrintableNewAnonClass->attrGroups' => ' ',
1425
+			'Expr_Closure->attrGroups' => ' ',
1426
+			'Expr_ArrowFunction->attrGroups' => ' ',
1427
+			'Param->attrGroups' => ' ',
1428
+			'Stmt_Switch->cases' => "\n",
1429
+			'Stmt_TraitUse->adaptations' => "\n",
1430
+			'Stmt_TryCatch->stmts' => "\n",
1431
+			'Stmt_While->stmts' => "\n",
1432
+
1433
+			// dummy for top-level context
1434
+			'File->stmts' => "\n",
1435
+		];
1436
+	}
1437
+
1438
+	protected function initializeEmptyListInsertionMap() {
1439
+		if ($this->emptyListInsertionMap) return;
1440
+
1441
+		// TODO Insertion into empty statement lists.
1442
+
1443
+		// [$find, $extraLeft, $extraRight]
1444
+		$this->emptyListInsertionMap = [
1445
+			'Expr_ArrowFunction->params' => ['(', '', ''],
1446
+			'Expr_Closure->uses' => [')', ' use(', ')'],
1447
+			'Expr_Closure->params' => ['(', '', ''],
1448
+			'Expr_FuncCall->args' => ['(', '', ''],
1449
+			'Expr_MethodCall->args' => ['(', '', ''],
1450
+			'Expr_NullsafeMethodCall->args' => ['(', '', ''],
1451
+			'Expr_New->args' => ['(', '', ''],
1452
+			'Expr_PrintableNewAnonClass->args' => ['(', '', ''],
1453
+			'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''],
1454
+			'Expr_StaticCall->args' => ['(', '', ''],
1455
+			'Stmt_Class->implements' => [null, ' implements ', ''],
1456
+			'Stmt_Enum->implements' => [null, ' implements ', ''],
1457
+			'Stmt_ClassMethod->params' => ['(', '', ''],
1458
+			'Stmt_Interface->extends' => [null, ' extends ', ''],
1459
+			'Stmt_Function->params' => ['(', '', ''],
1460
+			'Stmt_Interface->attrGroups' => [null, '', "\n"],
1461
+			'Stmt_Class->attrGroups' => [null, '', "\n"],
1462
+			'Stmt_ClassConst->attrGroups' => [null, '', "\n"],
1463
+			'Stmt_ClassMethod->attrGroups' => [null, '', "\n"],
1464
+			'Stmt_Function->attrGroups' => [null, '', "\n"],
1465
+			'Stmt_Property->attrGroups' => [null, '', "\n"],
1466
+			'Stmt_Trait->attrGroups' => [null, '', "\n"],
1467
+			'Expr_ArrowFunction->attrGroups' => [null, '', ' '],
1468
+			'Expr_Closure->attrGroups' => [null, '', ' '],
1469
+			'Expr_PrintableNewAnonClass->attrGroups' => [\T_NEW, ' ', ''],
1470
+
1471
+			/* These cannot be empty to start with:
1472 1472
              * Expr_Isset->vars
1473 1473
              * Stmt_Catch->types
1474 1474
              * Stmt_Const->consts
@@ -1486,7 +1486,7 @@  discard block
 block discarded – undo
1486 1486
              * UnionType->types
1487 1487
              */
1488 1488
 
1489
-            /* TODO
1489
+			/* TODO
1490 1490
              * Stmt_If->elseifs
1491 1491
              * Stmt_TryCatch->catches
1492 1492
              * Expr_Array->items
@@ -1495,25 +1495,25 @@  discard block
 block discarded – undo
1495 1495
              * Stmt_For->cond
1496 1496
              * Stmt_For->loop
1497 1497
              */
1498
-        ];
1499
-    }
1500
-
1501
-    protected function initializeModifierChangeMap() {
1502
-        if ($this->modifierChangeMap) return;
1503
-
1504
-        $this->modifierChangeMap = [
1505
-            'Stmt_ClassConst->flags' => \T_CONST,
1506
-            'Stmt_ClassMethod->flags' => \T_FUNCTION,
1507
-            'Stmt_Class->flags' => \T_CLASS,
1508
-            'Stmt_Property->flags' => \T_VARIABLE,
1509
-            'Param->flags' => \T_VARIABLE,
1510
-            //'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO
1511
-        ];
1512
-
1513
-        // List of integer subnodes that are not modifiers:
1514
-        // Expr_Include->type
1515
-        // Stmt_GroupUse->type
1516
-        // Stmt_Use->type
1517
-        // Stmt_UseUse->type
1518
-    }
1498
+		];
1499
+	}
1500
+
1501
+	protected function initializeModifierChangeMap() {
1502
+		if ($this->modifierChangeMap) return;
1503
+
1504
+		$this->modifierChangeMap = [
1505
+			'Stmt_ClassConst->flags' => \T_CONST,
1506
+			'Stmt_ClassMethod->flags' => \T_FUNCTION,
1507
+			'Stmt_Class->flags' => \T_CLASS,
1508
+			'Stmt_Property->flags' => \T_VARIABLE,
1509
+			'Param->flags' => \T_VARIABLE,
1510
+			//'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO
1511
+		];
1512
+
1513
+		// List of integer subnodes that are not modifiers:
1514
+		// Expr_Include->type
1515
+		// Stmt_GroupUse->type
1516
+		// Stmt_Use->type
1517
+		// Stmt_UseUse->type
1518
+	}
1519 1519
 }
Please login to merge, or discard this patch.
Spacing   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -25,66 +25,66 @@  discard block
 block discarded – undo
25 25
     protected $precedenceMap = [
26 26
         // [precedence, associativity]
27 27
         // where for precedence -1 is %left, 0 is %nonassoc and 1 is %right
28
-        BinaryOp\Pow::class            => [  0,  1],
29
-        Expr\BitwiseNot::class         => [ 10,  1],
30
-        Expr\PreInc::class             => [ 10,  1],
31
-        Expr\PreDec::class             => [ 10,  1],
32
-        Expr\PostInc::class            => [ 10, -1],
33
-        Expr\PostDec::class            => [ 10, -1],
34
-        Expr\UnaryPlus::class          => [ 10,  1],
35
-        Expr\UnaryMinus::class         => [ 10,  1],
36
-        Cast\Int_::class               => [ 10,  1],
37
-        Cast\Double::class             => [ 10,  1],
38
-        Cast\String_::class            => [ 10,  1],
39
-        Cast\Array_::class             => [ 10,  1],
40
-        Cast\Object_::class            => [ 10,  1],
41
-        Cast\Bool_::class              => [ 10,  1],
42
-        Cast\Unset_::class             => [ 10,  1],
43
-        Expr\ErrorSuppress::class      => [ 10,  1],
44
-        Expr\Instanceof_::class        => [ 20,  0],
45
-        Expr\BooleanNot::class         => [ 30,  1],
46
-        BinaryOp\Mul::class            => [ 40, -1],
47
-        BinaryOp\Div::class            => [ 40, -1],
48
-        BinaryOp\Mod::class            => [ 40, -1],
49
-        BinaryOp\Plus::class           => [ 50, -1],
50
-        BinaryOp\Minus::class          => [ 50, -1],
51
-        BinaryOp\Concat::class         => [ 50, -1],
52
-        BinaryOp\ShiftLeft::class      => [ 60, -1],
53
-        BinaryOp\ShiftRight::class     => [ 60, -1],
54
-        BinaryOp\Smaller::class        => [ 70,  0],
55
-        BinaryOp\SmallerOrEqual::class => [ 70,  0],
56
-        BinaryOp\Greater::class        => [ 70,  0],
57
-        BinaryOp\GreaterOrEqual::class => [ 70,  0],
58
-        BinaryOp\Equal::class          => [ 80,  0],
59
-        BinaryOp\NotEqual::class       => [ 80,  0],
60
-        BinaryOp\Identical::class      => [ 80,  0],
61
-        BinaryOp\NotIdentical::class   => [ 80,  0],
62
-        BinaryOp\Spaceship::class      => [ 80,  0],
63
-        BinaryOp\BitwiseAnd::class     => [ 90, -1],
28
+        BinaryOp\Pow::class            => [0, 1],
29
+        Expr\BitwiseNot::class         => [10, 1],
30
+        Expr\PreInc::class             => [10, 1],
31
+        Expr\PreDec::class             => [10, 1],
32
+        Expr\PostInc::class            => [10, -1],
33
+        Expr\PostDec::class            => [10, -1],
34
+        Expr\UnaryPlus::class          => [10, 1],
35
+        Expr\UnaryMinus::class         => [10, 1],
36
+        Cast\Int_::class               => [10, 1],
37
+        Cast\Double::class             => [10, 1],
38
+        Cast\String_::class            => [10, 1],
39
+        Cast\Array_::class             => [10, 1],
40
+        Cast\Object_::class            => [10, 1],
41
+        Cast\Bool_::class              => [10, 1],
42
+        Cast\Unset_::class             => [10, 1],
43
+        Expr\ErrorSuppress::class      => [10, 1],
44
+        Expr\Instanceof_::class        => [20, 0],
45
+        Expr\BooleanNot::class         => [30, 1],
46
+        BinaryOp\Mul::class            => [40, -1],
47
+        BinaryOp\Div::class            => [40, -1],
48
+        BinaryOp\Mod::class            => [40, -1],
49
+        BinaryOp\Plus::class           => [50, -1],
50
+        BinaryOp\Minus::class          => [50, -1],
51
+        BinaryOp\Concat::class         => [50, -1],
52
+        BinaryOp\ShiftLeft::class      => [60, -1],
53
+        BinaryOp\ShiftRight::class     => [60, -1],
54
+        BinaryOp\Smaller::class        => [70, 0],
55
+        BinaryOp\SmallerOrEqual::class => [70, 0],
56
+        BinaryOp\Greater::class        => [70, 0],
57
+        BinaryOp\GreaterOrEqual::class => [70, 0],
58
+        BinaryOp\Equal::class          => [80, 0],
59
+        BinaryOp\NotEqual::class       => [80, 0],
60
+        BinaryOp\Identical::class      => [80, 0],
61
+        BinaryOp\NotIdentical::class   => [80, 0],
62
+        BinaryOp\Spaceship::class      => [80, 0],
63
+        BinaryOp\BitwiseAnd::class     => [90, -1],
64 64
         BinaryOp\BitwiseXor::class     => [100, -1],
65 65
         BinaryOp\BitwiseOr::class      => [110, -1],
66 66
         BinaryOp\BooleanAnd::class     => [120, -1],
67 67
         BinaryOp\BooleanOr::class      => [130, -1],
68
-        BinaryOp\Coalesce::class       => [140,  1],
69
-        Expr\Ternary::class            => [150,  0],
68
+        BinaryOp\Coalesce::class       => [140, 1],
69
+        Expr\Ternary::class            => [150, 0],
70 70
         // parser uses %left for assignments, but they really behave as %right
71
-        Expr\Assign::class             => [160,  1],
72
-        Expr\AssignRef::class          => [160,  1],
73
-        AssignOp\Plus::class           => [160,  1],
74
-        AssignOp\Minus::class          => [160,  1],
75
-        AssignOp\Mul::class            => [160,  1],
76
-        AssignOp\Div::class            => [160,  1],
77
-        AssignOp\Concat::class         => [160,  1],
78
-        AssignOp\Mod::class            => [160,  1],
79
-        AssignOp\BitwiseAnd::class     => [160,  1],
80
-        AssignOp\BitwiseOr::class      => [160,  1],
81
-        AssignOp\BitwiseXor::class     => [160,  1],
82
-        AssignOp\ShiftLeft::class      => [160,  1],
83
-        AssignOp\ShiftRight::class     => [160,  1],
84
-        AssignOp\Pow::class            => [160,  1],
85
-        AssignOp\Coalesce::class       => [160,  1],
86
-        Expr\YieldFrom::class          => [165,  1],
87
-        Expr\Print_::class             => [168,  1],
71
+        Expr\Assign::class             => [160, 1],
72
+        Expr\AssignRef::class          => [160, 1],
73
+        AssignOp\Plus::class           => [160, 1],
74
+        AssignOp\Minus::class          => [160, 1],
75
+        AssignOp\Mul::class            => [160, 1],
76
+        AssignOp\Div::class            => [160, 1],
77
+        AssignOp\Concat::class         => [160, 1],
78
+        AssignOp\Mod::class            => [160, 1],
79
+        AssignOp\BitwiseAnd::class     => [160, 1],
80
+        AssignOp\BitwiseOr::class      => [160, 1],
81
+        AssignOp\BitwiseXor::class     => [160, 1],
82
+        AssignOp\ShiftLeft::class      => [160, 1],
83
+        AssignOp\ShiftRight::class     => [160, 1],
84
+        AssignOp\Pow::class            => [160, 1],
85
+        AssignOp\Coalesce::class       => [160, 1],
86
+        Expr\YieldFrom::class          => [165, 1],
87
+        Expr\Print_::class             => [168, 1],
88 88
         BinaryOp\LogicalAnd::class     => [170, -1],
89 89
         BinaryOp\LogicalXor::class     => [180, -1],
90 90
         BinaryOp\LogicalOr::class      => [190, -1],
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
      * @param array $options Dictionary of formatting options
146 146
      */
147 147
     public function __construct(array $options = []) {
148
-        $this->docStringEndToken = '_DOC_STRING_END_' . mt_rand();
148
+        $this->docStringEndToken = '_DOC_STRING_END_'.mt_rand();
149 149
 
150 150
         $defaultOptions = ['shortArraySyntax' => false];
151 151
         $this->options = $options + $defaultOptions;
@@ -167,7 +167,7 @@  discard block
 block discarded – undo
167 167
      */
168 168
     protected function setIndentLevel(int $level) {
169 169
         $this->indentLevel = $level;
170
-        $this->nl = "\n" . \str_repeat(' ', $level);
170
+        $this->nl = "\n".\str_repeat(' ', $level);
171 171
     }
172 172
 
173 173
     /**
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
     protected function outdent() {
185 185
         assert($this->indentLevel >= 4);
186 186
         $this->indentLevel -= 4;
187
-        $this->nl = "\n" . str_repeat(' ', $this->indentLevel);
187
+        $this->nl = "\n".str_repeat(' ', $this->indentLevel);
188 188
     }
189 189
 
190 190
     /**
@@ -221,11 +221,11 @@  discard block
 block discarded – undo
221 221
      * @return string Pretty printed statements
222 222
      */
223 223
     public function prettyPrintFile(array $stmts) : string {
224
-        if (!$stmts) {
224
+        if ( ! $stmts) {
225 225
             return "<?php\n\n";
226 226
         }
227 227
 
228
-        $p = "<?php\n\n" . $this->prettyPrint($stmts);
228
+        $p = "<?php\n\n".$this->prettyPrint($stmts);
229 229
 
230 230
         if ($stmts[0] instanceof Stmt\InlineHTML) {
231 231
             $p = preg_replace('/^<\?php\s+\?>\n?/', '', $p);
@@ -261,7 +261,7 @@  discard block
 block discarded – undo
261 261
      */
262 262
     protected function handleMagicTokens(string $str) : string {
263 263
         // Replace doc-string-end tokens with nothing or a newline
264
-        $str = str_replace($this->docStringEndToken . ";\n", ";\n", $str);
264
+        $str = str_replace($this->docStringEndToken.";\n", ";\n", $str);
265 265
         $str = str_replace($this->docStringEndToken, "\n", $str);
266 266
 
267 267
         return $str;
@@ -284,13 +284,13 @@  discard block
 block discarded – undo
284 284
         foreach ($nodes as $node) {
285 285
             $comments = $node->getComments();
286 286
             if ($comments) {
287
-                $result .= $this->nl . $this->pComments($comments);
287
+                $result .= $this->nl.$this->pComments($comments);
288 288
                 if ($node instanceof Stmt\Nop) {
289 289
                     continue;
290 290
                 }
291 291
             }
292 292
 
293
-            $result .= $this->nl . $this->p($node);
293
+            $result .= $this->nl.$this->p($node);
294 294
         }
295 295
 
296 296
         if ($indent) {
@@ -329,7 +329,7 @@  discard block
 block discarded – undo
329 329
      */
330 330
     protected function pPrefixOp(string $class, string $operatorString, Node $node) : string {
331 331
         list($precedence, $associativity) = $this->precedenceMap[$class];
332
-        return $operatorString . $this->pPrec($node, $precedence, $associativity, 1);
332
+        return $operatorString.$this->pPrec($node, $precedence, $associativity, 1);
333 333
     }
334 334
 
335 335
     /**
@@ -343,7 +343,7 @@  discard block
 block discarded – undo
343 343
      */
344 344
     protected function pPostfixOp(string $class, Node $node, string $operatorString) : string {
345 345
         list($precedence, $associativity) = $this->precedenceMap[$class];
346
-        return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString;
346
+        return $this->pPrec($node, $precedence, $associativity, -1).$operatorString;
347 347
     }
348 348
 
349 349
     /**
@@ -365,7 +365,7 @@  discard block
 block discarded – undo
365 365
             if ($childPrecedence > $parentPrecedence
366 366
                 || ($parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition)
367 367
             ) {
368
-                return '(' . $this->p($node) . ')';
368
+                return '('.$this->p($node).')';
369 369
             }
370 370
         }
371 371
 
@@ -423,10 +423,10 @@  discard block
 block discarded – undo
423 423
             if ($node !== null) {
424 424
                 $comments = $node->getComments();
425 425
                 if ($comments) {
426
-                    $result .= $this->nl . $this->pComments($comments);
426
+                    $result .= $this->nl.$this->pComments($comments);
427 427
                 }
428 428
 
429
-                $result .= $this->nl . $this->p($node);
429
+                $result .= $this->nl.$this->p($node);
430 430
             } else {
431 431
                 $result .= $this->nl;
432 432
             }
@@ -495,14 +495,14 @@  discard block
 block discarded – undo
495 495
         } else {
496 496
             // Fallback
497 497
             // TODO Add <?php properly
498
-            $result = "<?php\n" . $this->pStmts($stmts, false);
498
+            $result = "<?php\n".$this->pStmts($stmts, false);
499 499
         }
500 500
 
501 501
         return ltrim($this->handleMagicTokens($result));
502 502
     }
503 503
 
504 504
     protected function pFallback(Node $node) {
505
-        return $this->{'p' . $node->getType()}($node);
505
+        return $this->{'p'.$node->getType()}($node);
506 506
     }
507 507
 
508 508
     /**
@@ -517,8 +517,8 @@  discard block
 block discarded – undo
517 517
      */
518 518
     protected function p(Node $node, $parentFormatPreserved = false) : string {
519 519
         // No orig tokens means this is a normal pretty print without preservation of formatting
520
-        if (!$this->origTokens) {
521
-            return $this->{'p' . $node->getType()}($node);
520
+        if ( ! $this->origTokens) {
521
+            return $this->{'p'.$node->getType()}($node);
522 522
         }
523 523
 
524 524
         /** @var Node $origNode */
@@ -544,7 +544,7 @@  discard block
 block discarded – undo
544 544
         // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting
545 545
         // is not preserved, then we need to use the fallback code to make sure the tags are
546 546
         // printed.
547
-        if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) {
547
+        if ($node instanceof Stmt\InlineHTML && ! $parentFormatPreserved) {
548 548
             return $this->pFallback($fallbackNode);
549 549
         }
550 550
 
@@ -559,8 +559,8 @@  discard block
 block discarded – undo
559 559
             $subNode = $node->$subNodeName;
560 560
             $origSubNode = $origNode->$subNodeName;
561 561
 
562
-            if ((!$subNode instanceof Node && $subNode !== null)
563
-                || (!$origSubNode instanceof Node && $origSubNode !== null)
562
+            if (( ! $subNode instanceof Node && $subNode !== null)
563
+                || ( ! $origSubNode instanceof Node && $origSubNode !== null)
564 564
             ) {
565 565
                 if ($subNode === $origSubNode) {
566 566
                     // Unchanged, can reuse old code
@@ -583,8 +583,8 @@  discard block
 block discarded – undo
583 583
 
584 584
                 if (is_int($subNode) && is_int($origSubNode)) {
585 585
                     // Check if this is a modifier change
586
-                    $key = $type . '->' . $subNodeName;
587
-                    if (!isset($this->modifierChangeMap[$key])) {
586
+                    $key = $type.'->'.$subNodeName;
587
+                    if ( ! isset($this->modifierChangeMap[$key])) {
588 588
                         return $this->pFallback($fallbackNode);
589 589
                     }
590 590
 
@@ -613,15 +613,15 @@  discard block
 block discarded – undo
613 613
                 }
614 614
 
615 615
                 // A node has been inserted, check if we have insertion information for it
616
-                $key = $type . '->' . $subNodeName;
617
-                if (!isset($this->insertionMap[$key])) {
616
+                $key = $type.'->'.$subNodeName;
617
+                if ( ! isset($this->insertionMap[$key])) {
618 618
                     return $this->pFallback($fallbackNode);
619 619
                 }
620 620
 
621 621
                 list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key];
622 622
                 if (null !== $findToken) {
623 623
                     $subStartPos = $this->origTokens->findRight($pos, $findToken)
624
-                        + (int) !$beforeToken;
624
+                        + (int) ! $beforeToken;
625 625
                 } else {
626 626
                     $subStartPos = $pos;
627 627
                 }
@@ -635,8 +635,8 @@  discard block
 block discarded – undo
635 635
 
636 636
             if (null === $subNode) {
637 637
                 // A node has been removed, check if we have removal information for it
638
-                $key = $type . '->' . $subNodeName;
639
-                if (!isset($this->removalMap[$key])) {
638
+                $key = $type.'->'.$subNodeName;
639
+                if ( ! isset($this->removalMap[$key])) {
640 640
                     return $this->pFallback($fallbackNode);
641 641
                 }
642 642
 
@@ -702,7 +702,7 @@  discard block
 block discarded – undo
702 702
     ) {
703 703
         $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes);
704 704
 
705
-        $mapKey = $parentNodeType . '->' . $subNodeName;
705
+        $mapKey = $parentNodeType.'->'.$subNodeName;
706 706
         $insertStr = $this->listInsertionMap[$mapKey] ?? null;
707 707
         $isStmtList = $subNodeName === 'stmts';
708 708
 
@@ -721,7 +721,7 @@  discard block
 block discarded – undo
721 721
             $startPos = $origNodes[0]->getStartTokenPos();
722 722
             $endPos = $origNodes[0]->getEndTokenPos();
723 723
             \assert($startPos >= 0 && $endPos >= 0);
724
-            if (!$this->origTokens->haveBraces($startPos, $endPos)) {
724
+            if ( ! $this->origTokens->haveBraces($startPos, $endPos)) {
725 725
                 // This was a single statement without braces, but either additional statements
726 726
                 // have been added, or the single statement has been removed. This requires the
727 727
                 // addition of braces. For now fall back.
@@ -749,7 +749,7 @@  discard block
 block discarded – undo
749 749
                     return null;
750 750
                 }
751 751
 
752
-                if (!$arrItem instanceof Node || !$origArrItem instanceof Node) {
752
+                if ( ! $arrItem instanceof Node || ! $origArrItem instanceof Node) {
753 753
                     // We can only deal with nodes. This can occur for Names, which use string arrays.
754 754
                     return null;
755 755
                 }
@@ -785,20 +785,20 @@  discard block
 block discarded – undo
785 785
                         $pos, $commentStartPos, $indentAdjustment);
786 786
                 }
787 787
 
788
-                if (!empty($delayedAdd)) {
788
+                if ( ! empty($delayedAdd)) {
789 789
                     /** @var Node $delayedAddNode */
790 790
                     foreach ($delayedAdd as $delayedAddNode) {
791 791
                         if ($insertNewline) {
792 792
                             $delayedAddComments = $delayedAddNode->getComments();
793 793
                             if ($delayedAddComments) {
794
-                                $result .= $this->pComments($delayedAddComments) . $this->nl;
794
+                                $result .= $this->pComments($delayedAddComments).$this->nl;
795 795
                             }
796 796
                         }
797 797
 
798 798
                         $this->safeAppend($result, $this->p($delayedAddNode, true));
799 799
 
800 800
                         if ($insertNewline) {
801
-                            $result .= $insertStr . $this->nl;
801
+                            $result .= $insertStr.$this->nl;
802 802
                         } else {
803 803
                             $result .= $insertStr;
804 804
                         }
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
 
810 810
                 if ($comments !== $origComments) {
811 811
                     if ($comments) {
812
-                        $result .= $this->pComments($comments) . $this->nl;
812
+                        $result .= $this->pComments($comments).$this->nl;
813 813
                     }
814 814
                 } else {
815 815
                     $result .= $this->origTokens->getTokenCode(
@@ -846,16 +846,16 @@  discard block
 block discarded – undo
846 846
                 $this->setIndentLevel($lastElemIndentLevel);
847 847
 
848 848
                 if ($insertNewline) {
849
-                    $result .= $insertStr . $this->nl;
849
+                    $result .= $insertStr.$this->nl;
850 850
                     $comments = $arrItem->getComments();
851 851
                     if ($comments) {
852
-                        $result .= $this->pComments($comments) . $this->nl;
852
+                        $result .= $this->pComments($comments).$this->nl;
853 853
                     }
854 854
                 } else {
855 855
                     $result .= $insertStr;
856 856
                 }
857 857
             } elseif ($diffType === DiffElem::TYPE_REMOVE) {
858
-                if (!$origArrItem instanceof Node) {
858
+                if ( ! $origArrItem instanceof Node) {
859 859
                     // We only support removal for nodes
860 860
                     return null;
861 861
                 }
@@ -906,8 +906,8 @@  discard block
 block discarded – undo
906 906
             return null;
907 907
         }
908 908
 
909
-        if (!empty($delayedAdd)) {
910
-            if (!isset($this->emptyListInsertionMap[$mapKey])) {
909
+        if ( ! empty($delayedAdd)) {
910
+            if ( ! isset($this->emptyListInsertionMap[$mapKey])) {
911 911
                 return null;
912 912
             }
913 913
 
@@ -921,7 +921,7 @@  discard block
 block discarded – undo
921 921
             $first = true;
922 922
             $result .= $extraLeft;
923 923
             foreach ($delayedAdd as $delayedAddNode) {
924
-                if (!$first) {
924
+                if ( ! $first) {
925 925
                     $result .= $insertStr;
926 926
                     if ($insertNewline) {
927 927
                         $result .= $this->nl;
@@ -955,7 +955,7 @@  discard block
 block discarded – undo
955 955
         switch ($fixup) {
956 956
             case self::FIXUP_PREC_LEFT:
957 957
             case self::FIXUP_PREC_RIGHT:
958
-                if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
958
+                if ( ! $this->origTokens->haveParens($subStartPos, $subEndPos)) {
959 959
                     list($precedence, $associativity) = $this->precedenceMap[$parentClass];
960 960
                     return $this->pPrec($subNode, $precedence, $associativity,
961 961
                         $fixup === self::FIXUP_PREC_LEFT ? -1 : 1);
@@ -963,32 +963,32 @@  discard block
 block discarded – undo
963 963
                 break;
964 964
             case self::FIXUP_CALL_LHS:
965 965
                 if ($this->callLhsRequiresParens($subNode)
966
-                    && !$this->origTokens->haveParens($subStartPos, $subEndPos)
966
+                    && ! $this->origTokens->haveParens($subStartPos, $subEndPos)
967 967
                 ) {
968
-                    return '(' . $this->p($subNode) . ')';
968
+                    return '('.$this->p($subNode).')';
969 969
                 }
970 970
                 break;
971 971
             case self::FIXUP_DEREF_LHS:
972 972
                 if ($this->dereferenceLhsRequiresParens($subNode)
973
-                    && !$this->origTokens->haveParens($subStartPos, $subEndPos)
973
+                    && ! $this->origTokens->haveParens($subStartPos, $subEndPos)
974 974
                 ) {
975
-                    return '(' . $this->p($subNode) . ')';
975
+                    return '('.$this->p($subNode).')';
976 976
                 }
977 977
                 break;
978 978
             case self::FIXUP_BRACED_NAME:
979 979
             case self::FIXUP_VAR_BRACED_NAME:
980 980
                 if ($subNode instanceof Expr
981
-                    && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
981
+                    && ! $this->origTokens->haveBraces($subStartPos, $subEndPos)
982 982
                 ) {
983 983
                     return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '')
984
-                        . '{' . $this->p($subNode) . '}';
984
+                        . '{'.$this->p($subNode).'}';
985 985
                 }
986 986
                 break;
987 987
             case self::FIXUP_ENCAPSED:
988
-                if (!$subNode instanceof Scalar\EncapsedStringPart
989
-                    && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
988
+                if ( ! $subNode instanceof Scalar\EncapsedStringPart
989
+                    && ! $this->origTokens->haveBraces($subStartPos, $subEndPos)
990 990
                 ) {
991
-                    return '{' . $this->p($subNode) . '}';
991
+                    return '{'.$this->p($subNode).'}';
992 992
                 }
993 993
                 break;
994 994
             default:
@@ -1018,11 +1018,11 @@  discard block
 block discarded – undo
1018 1018
             return;
1019 1019
         }
1020 1020
 
1021
-        if (!$this->labelCharMap[$append[0]]
1022
-                || !$this->labelCharMap[$str[\strlen($str) - 1]]) {
1021
+        if ( ! $this->labelCharMap[$append[0]]
1022
+                || ! $this->labelCharMap[$str[\strlen($str) - 1]]) {
1023 1023
             $str .= $append;
1024 1024
         } else {
1025
-            $str .= " " . $append;
1025
+            $str .= " ".$append;
1026 1026
         }
1027 1027
     }
1028 1028
 
@@ -1034,7 +1034,7 @@  discard block
 block discarded – undo
1034 1034
      * @return bool Whether parentheses are required
1035 1035
      */
1036 1036
     protected function callLhsRequiresParens(Node $node) : bool {
1037
-        return !($node instanceof Node\Name
1037
+        return ! ($node instanceof Node\Name
1038 1038
             || $node instanceof Expr\Variable
1039 1039
             || $node instanceof Expr\ArrayDimFetch
1040 1040
             || $node instanceof Expr\FuncCall
@@ -1052,7 +1052,7 @@  discard block
 block discarded – undo
1052 1052
      * @return bool Whether parentheses are required
1053 1053
      */
1054 1054
     protected function dereferenceLhsRequiresParens(Node $node) : bool {
1055
-        return !($node instanceof Expr\Variable
1055
+        return ! ($node instanceof Expr\Variable
1056 1056
             || $node instanceof Node\Name
1057 1057
             || $node instanceof Expr\ArrayDimFetch
1058 1058
             || $node instanceof Expr\PropertyFetch
@@ -1076,13 +1076,13 @@  discard block
 block discarded – undo
1076 1076
      * @return string Printed modifiers
1077 1077
      */
1078 1078
     protected function pModifiers(int $modifiers) {
1079
-        return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC    ? 'public '    : '')
1079
+        return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC ? 'public ' : '')
1080 1080
              . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '')
1081
-             . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE   ? 'private '   : '')
1082
-             . ($modifiers & Stmt\Class_::MODIFIER_STATIC    ? 'static '    : '')
1083
-             . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT  ? 'abstract '  : '')
1084
-             . ($modifiers & Stmt\Class_::MODIFIER_FINAL     ? 'final '     : '')
1085
-             . ($modifiers & Stmt\Class_::MODIFIER_READONLY  ? 'readonly '  : '');
1081
+             . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE ? 'private ' : '')
1082
+             . ($modifiers & Stmt\Class_::MODIFIER_STATIC ? 'static ' : '')
1083
+             . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT ? 'abstract ' : '')
1084
+             . ($modifiers & Stmt\Class_::MODIFIER_FINAL ? 'final ' : '')
1085
+             . ($modifiers & Stmt\Class_::MODIFIER_READONLY ? 'readonly ' : '');
1086 1086
     }
1087 1087
 
1088 1088
     /**
@@ -1144,7 +1144,7 @@  discard block
 block discarded – undo
1144 1144
     protected function initializeNodeListDiffer() {
1145 1145
         if ($this->nodeListDiffer) return;
1146 1146
 
1147
-        $this->nodeListDiffer = new Internal\Differ(function ($a, $b) {
1147
+        $this->nodeListDiffer = new Internal\Differ(function($a, $b) {
1148 1148
             if ($a instanceof Node && $b instanceof Node) {
1149 1149
                 return $a === $b->getAttribute('origNode');
1150 1150
             }
Please login to merge, or discard this patch.