diff --git a/scripts/phutil_symbols.php b/scripts/phutil_symbols.php index b27e0fd..296c364 100755 --- a/scripts/phutil_symbols.php +++ b/scripts/phutil_symbols.php @@ -1,564 +1,565 @@ #!/usr/bin/env php setTagline(pht('identify symbols in a PHP source file')); $args->setSynopsis(<<parseStandardArguments(); $args->parse( array( array( 'name' => 'all', 'help' => pht( 'Report all symbols, including built-ins and declared externals.'), ), array( 'name' => 'ugly', 'help' => pht('Do not prettify JSON output.'), ), array( 'name' => 'path', 'wildcard' => true, 'help' => pht('PHP Source file to analyze.'), ), )); $paths = $args->getArg('path'); if (count($paths) !== 1) { throw new Exception(pht('Specify exactly one path!')); } $path = Filesystem::resolvePath(head($paths)); $show_all = $args->getArg('all'); $source_code = Filesystem::readFile($path); try { $tree = XHPASTTree::newFromData($source_code); } catch (XHPASTSyntaxErrorException $ex) { $result = array( 'error' => $ex->getMessage(), 'line' => $ex->getErrorLine(), 'file' => $path, ); $json = new PhutilJSON(); echo $json->encodeFormatted($result); exit(0); } $root = $tree->getRootNode(); $root->buildSelectCache(); // -( Unsupported Constructs )------------------------------------------------ $namespaces = $root->selectDescendantsOfType('n_NAMESPACE'); foreach ($namespaces as $namespace) { phutil_fail_on_unsupported_feature($namespace, $path, pht('namespaces')); } $uses = $root->selectDescendantsOfType('n_USE'); foreach ($namespaces as $namespace) { phutil_fail_on_unsupported_feature( $namespace, $path, pht('namespace `%s` statements', 'use')); } $possible_traits = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($possible_traits as $possible_trait) { $attributes = $possible_trait->getChildByIndex(0); // Can't use getChildByIndex here because not all classes have attributes foreach ($attributes->getChildren() as $attribute) { if (strtolower($attribute->getConcreteString()) === 'trait') { phutil_fail_on_unsupported_feature($possible_trait, $path, pht('traits')); } } } // -( Marked Externals )------------------------------------------------------ // Identify symbols marked with "@phutil-external-symbol", so we exclude them // from the dependency list. $externals = array(); $doc_parser = new PhutilDocblockParser(); foreach ($root->getTokens() as $token) { if ($token->getTypeName() === 'T_DOC_COMMENT') { list($block, $special) = $doc_parser->parse($token->getValue()); $ext_list = idx($special, 'phutil-external-symbol'); $ext_list = (array)$ext_list; $ext_list = array_filter($ext_list); foreach ($ext_list as $ext_ref) { $matches = null; if (preg_match('/^\s*(\S+)\s+(\S+)/', $ext_ref, $matches)) { $externals[$matches[1]][$matches[2]] = true; } } } } // -( Declarations and Dependencies )----------------------------------------- // The first stage of analysis is to find all the symbols we declare in the // file (like functions and classes) and all the symbols we use in the file // (like calling functions and invoking classes). Later, we filter this list // to exclude builtins. $have = array(); // For symbols we declare. $need = array(); // For symbols we use. $xmap = array(); // For extended classes and implemented interfaces. // -( Functions )------------------------------------------------------------- // Find functions declared in this file. // This is "function f() { ... }". $functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); foreach ($functions as $function) { $name = $function->getChildByIndex(2); if ($name->getTypeName() === 'n_EMPTY') { // This is an anonymous function; don't record it into the symbol // index. continue; } $have[] = array( 'type' => 'function', 'symbol' => $name, ); } // Find functions used by this file. Uses: // // - Explicit Call // - String literal passed to call_user_func() or call_user_func_array() // - String literal in array literal in call_user_func()/call_user_func_array() // // TODO: Possibly support these: // // - String literal in ReflectionFunction(). // This is "f();". $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($calls as $call) { $name = $call->getChildByIndex(0); if ($name->getTypeName() === 'n_VARIABLE' || $name->getTypeName() === 'n_VARIABLE_VARIABLE') { // Ignore these, we can't analyze them. continue; } if ($name->getTypeName() === 'n_CLASS_STATIC_ACCESS') { // These are "C::f()", we'll pick this up later on. continue; } $call_name = $name->getConcreteString(); if ($call_name === 'call_user_func' || $call_name === 'call_user_func_array') { $params = $call->getChildByIndex(1)->getChildren(); if (!count($params)) { // This is a bare call_user_func() with no arguments; just ignore it. continue; } $symbol = array_shift($params); $type = 'function'; $symbol_value = $symbol->getStringLiteralValue(); $pos = strpos($symbol_value, '::'); if ($pos) { $type = 'class'; $symbol_value = substr($symbol_value, 0, $pos); } else if ($symbol->getTypeName() === 'n_ARRAY_LITERAL') { try { $type = 'class'; $symbol_value = idx($symbol->evalStatic(), 0); } catch (Exception $ex) {} } if ($symbol_value && strpos($symbol_value, '$') === false) { $need[] = array( 'type' => $type, 'name' => $symbol_value, 'symbol' => $symbol, ); } } else { $need[] = array( 'type' => 'function', 'symbol' => $name, ); } } // -( Classes )--------------------------------------------------------------- // Find classes declared by this file. // This is "class X ... { ... }". $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $class_name = $class->getChildByIndex(1); $have[] = array( 'type' => 'class', 'symbol' => $class_name, ); } // Find classes used by this file. We identify these: // // - class ... extends X // - new X // - Static method call // - Static property access // - Use of class constant // - typehints // - catch // - instanceof // - newv() // // TODO: Possibly support these: // // - String literal in ReflectionClass(). // This is "class X ... { ... }". $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $class_name = $class->getChildByIndex(1)->getConcreteString(); $extends = $class->getChildByIndex(2); foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { $need[] = array( 'type' => 'class', 'symbol' => $parent, ); // Track all 'extends' in the extension map. $xmap[$class_name][] = $parent->getConcreteString(); } } // This is "new X()". $uses_of_new = $root->selectDescendantsOfType('n_NEW'); foreach ($uses_of_new as $new_operator) { $name = $new_operator->getChildByIndex(0); if ($name->getTypeName() === 'n_VARIABLE' || $name->getTypeName() === 'n_VARIABLE_VARIABLE') { continue; } $need[] = array( 'type' => 'class', 'symbol' => $name, ); } // This covers all of "X::$y", "X::y()" and "X::CONST". $static_uses = $root->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); foreach ($static_uses as $static_use) { $name = $static_use->getChildByIndex(0); if ($name->getTypeName() !== 'n_CLASS_NAME') { continue; } $need[] = array( 'type' => 'class', 'symbol' => $name, ); } // This is "function (X $x)". $parameters = $root->selectDescendantsOfType('n_DECLARATION_PARAMETER'); foreach ($parameters as $parameter) { $hint = $parameter->getChildByIndex(0); if ($hint->getTypeName() !== 'n_CLASS_NAME') { continue; } $need[] = array( 'type' => 'class/interface', 'symbol' => $hint, ); } // This is "catch (Exception $ex)". $catches = $root->selectDescendantsOfType('n_CATCH'); foreach ($catches as $catch) { $need[] = array( 'type' => 'class/interface', 'symbol' => $catch->getChildOfType(0, 'n_CLASS_NAME'), ); } // This is "$x instanceof X". $instanceofs = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); foreach ($instanceofs as $instanceof) { $operator = $instanceof->getChildOfType(1, 'n_OPERATOR'); if ($operator->getConcreteString() !== 'instanceof') { continue; } $class = $instanceof->getChildByIndex(2); if ($class->getTypeName() !== 'n_CLASS_NAME') { continue; } $need[] = array( 'type' => 'class/interface', 'symbol' => $class, ); } // This is "newv('X')". $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); foreach ($calls as $call) { $call_name = $call->getChildByIndex(0)->getConcreteString(); if ($call_name !== 'newv') { continue; } $params = $call->getChildByIndex(1)->getChildren(); if (!count($params)) { continue; } $symbol = reset($params); $symbol_value = $symbol->getStringLiteralValue(); if ($symbol_value && strpos($symbol_value, '$') === false) { $need[] = array( 'type' => 'class', 'name' => $symbol_value, 'symbol' => $symbol, ); } } // -( Interfaces )------------------------------------------------------------ // Find interfaces declared in this file. // This is "interface X .. { ... }". $interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); foreach ($interfaces as $interface) { $interface_name = $interface->getChildByIndex(1); $have[] = array( 'type' => 'interface', 'symbol' => $interface_name, ); } // Find interfaces used by this file. We identify these: // // - class ... implements X // - interface ... extends X // This is "class X ... { ... }". $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $class_name = $class->getChildByIndex(1)->getConcreteString(); $implements = $class->getChildByIndex(3); $interfaces = $implements->selectDescendantsOfType('n_CLASS_NAME'); foreach ($interfaces as $interface) { $need[] = array( 'type' => 'interface', 'symbol' => $interface, ); // Track 'class ... implements' in the extension map. $xmap[$class_name][] = $interface->getConcreteString(); } } // This is "interface X ... { ... }". $interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); foreach ($interfaces as $interface) { $interface_name = $interface->getChildByIndex(1)->getConcreteString(); $extends = $interface->getChildByIndex(2); foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { $need[] = array( 'type' => 'interface', 'symbol' => $parent, ); // Track 'interface ... extends' in the extension map. $xmap[$interface_name][] = $parent->getConcreteString(); } } // -( Analysis )-------------------------------------------------------------- $declared_symbols = array(); foreach ($have as $key => $spec) { $name = $spec['symbol']->getConcreteString(); $declared_symbols[$spec['type']][$name] = $spec['symbol']->getOffset(); } $required_symbols = array(); foreach ($need as $key => $spec) { $name = idx($spec, 'name'); if (!$name) { $name = $spec['symbol']->getConcreteString(); } $type = $spec['type']; foreach (explode('/', $type) as $libtype) { if (!$show_all) { if (!empty($externals[$libtype][$name])) { // Ignore symbols declared as externals. continue 2; } if (!empty($builtins[$libtype][$name])) { // Ignore symbols declared as builtins. continue 2; } } if (!empty($declared_symbols[$libtype][$name])) { // We declare this symbol, so don't treat it as a requirement. continue 2; } } if (!empty($required_symbols[$type][$name])) { // Report only the first use of a symbol, since reporting all of them // isn't terribly informative. continue; } $required_symbols[$type][$name] = $spec['symbol']->getOffset(); } $result = array( 'have' => $declared_symbols, 'need' => $required_symbols, 'xmap' => $xmap, ); // -( Output )---------------------------------------------------------------- if ($args->getArg('ugly')) { echo json_encode($result); } else { $json = new PhutilJSON(); echo $json->encodeFormatted($result); } // -( Library )--------------------------------------------------------------- function phutil_fail_on_unsupported_feature(XHPASTNode $node, $file, $what) { $line = $node->getLineNumber(); $message = phutil_console_wrap( pht( '`%s` has limited support for features introduced after PHP 5.2.3. '. 'This library uses an unsupported feature (%s) on line %d of %s.', 'arc liberate', $what, $line, Filesystem::readablePath($file))); $result = array( 'error' => $message, 'line' => $line, 'file' => $file, ); $json = new PhutilJSON(); echo $json->encodeFormatted($result); exit(0); } function phutil_symbols_get_builtins() { $builtin = array(); $builtin['classes'] = get_declared_classes(); $builtin['interfaces'] = get_declared_interfaces(); $funcs = get_defined_functions(); $builtin['functions'] = $funcs['internal']; $compat = json_decode( file_get_contents( dirname(__FILE__).'/../resources/php_compat_info.json'), true); foreach (array('functions', 'classes', 'interfaces') as $type) { // Developers may not have every extension that a library potentially uses // installed. We supplement the list of declared functions and classes with // a list of known extension functions to avoid raising false positives just // because you don't have pcntl, etc. $extensions = array_keys($compat[$type]); $builtin[$type] = array_merge($builtin[$type], $extensions); } return array( 'class' => array_fill_keys($builtin['classes'], true) + array( 'static' => true, 'parent' => true, 'self' => true, 'PhutilBootloader' => true, // PHP7 defines these new parent classes of "Exception", but they do not // exist prior to PHP7. It's possible to use them safely in PHP5, in // some cases, to write code which is compatible with either PHP5 or // PHP7, but it s hard for us tell if a particular use is safe or not. // For now, assume users know what they're doing and that uses are safe. // For discussion, see T12855. 'Throwable' => true, 'Error' => true, + 'ParseError' => true, ), 'function' => array_filter( array( 'empty' => true, 'isset' => true, 'die' => true, // These are provided by libphutil but not visible in the map. 'phutil_is_windows' => true, 'phutil_load_library' => true, 'phutil_is_hiphop_runtime' => true, // HPHP/i defines these functions as 'internal', but they are NOT // builtins and do not exist in vanilla PHP. Make sure we don't mark // them as builtin since we need to add dependencies for them. 'idx' => false, 'id' => false, ) + array_fill_keys($builtin['functions'], true)), 'interface' => array_fill_keys($builtin['interfaces'], true), ); } diff --git a/src/markup/__tests__/PhutilMarkupTestCase.php b/src/markup/__tests__/PhutilMarkupTestCase.php index df6620b..50dde40 100644 --- a/src/markup/__tests__/PhutilMarkupTestCase.php +++ b/src/markup/__tests__/PhutilMarkupTestCase.php @@ -1,274 +1,283 @@ assertEqual( (string)phutil_tag('br'), (string)phutil_tag('br', array())); $this->assertEqual( (string)phutil_tag('br', array()), (string)phutil_tag('br', array(), null)); } public function testTagEmpty() { $this->assertEqual( '
', (string)phutil_tag('br', array(), null)); $this->assertEqual( '
', (string)phutil_tag('div', array(), null)); $this->assertEqual( '
', (string)phutil_tag('div', array(), '')); } public function testTagBasics() { $this->assertEqual( '
', (string)phutil_tag('br')); $this->assertEqual( '
y
', (string)phutil_tag('div', array(), 'y')); } public function testTagAttributes() { $this->assertEqual( '
y
', (string)phutil_tag('div', array('u' => 'v'), 'y')); $this->assertEqual( '
', (string)phutil_tag('br', array('u' => 'v'))); } public function testTagEscapes() { $this->assertEqual( '
', (string)phutil_tag('br', array('u' => '<'))); $this->assertEqual( '

', (string)phutil_tag('div', array(), phutil_tag('br'))); } public function testTagNullAttribute() { $this->assertEqual( '
', (string)phutil_tag('br', array('y' => null))); } public function testDefaultRelNoreferrer() { $map = array( // These should not have rel="nofollow" inserted implicitly. '/' => false, '/path/to/local.html' => false, '#example' => false, '' => false, // These should get the implicit insertion. 'http://www.example.org/' => true, - '///evil.com/' => true, ' http://www.example.org/' => true, 'ftp://filez.com' => true, 'mailto:santa@northpole.com' => true, 'tel:18005555555' => true, + + // These are protocol-relative hrefs. Browers will treat a URI with + // a leading slash followed by any positive number of slashes and + // backslashes as a protocol-relative link. + '//evil.com/' => true, + '/\\evil.com/' => true, + '///evil.com/' => true, + '//\\evil.com/' => true, + '/\\/evil.com/' => true, + '/\\\\/evil.com' => true, ); foreach ($map as $input => $expect) { $tag = phutil_tag( 'a', array( 'href' => $input, ), 'link'); $tag = (string)$tag; $this->assertEqual($expect, (bool)preg_match('/noreferrer/', $tag)); } // With an explicit `rel` present, we should not override it. $tag = phutil_tag( 'a', array( 'href' => 'http://www.example.org/', 'rel' => 'nofollow', ), 'link'); $this->assertFalse((bool)preg_match('/noreferrer/', (string)$tag)); // For tags other than `a`, we should not insert `rel`. $tag = phutil_tag( 'link', array( 'href' => 'http://www.example.org/', ), 'link'); $this->assertFalse((bool)preg_match('/noreferrer/', (string)$tag)); } public function testTagJavascriptProtocolRejection() { $hrefs = array( 'javascript:alert(1)' => true, 'JAVASCRIPT:alert(2)' => true, // NOTE: When interpreted as a URI, this is dropped because of leading // whitespace. ' javascript:alert(3)' => array(true, false), '/' => false, '/path/to/stuff/' => false, '' => false, 'http://example.com/' => false, '#' => false, 'javascript://anything' => true, // Chrome 33 and IE11, at a minimum, treat this as Javascript. "javascript\n:alert(4)" => true, // Opera currently accepts a variety of unicode spaces. This test case // has a smattering of them. "\xE2\x80\x89javascript:" => true, "javascript\xE2\x80\x89:" => true, "\xE2\x80\x84javascript:" => true, "javascript\xE2\x80\x84:" => true, // Because we're aggressive, all of unicode should trigger detection // by default. "\xE2\x98\x83javascript:" => true, "javascript\xE2\x98\x83:" => true, "\xE2\x98\x83javascript\xE2\x98\x83:" => true, // We're aggressive about this, so we'll intentionally raise false // positives in these cases. 'javascript~:alert(5)' => true, '!!!javascript!!!!:alert(6)' => true, // However, we should raise true negatives in these slightly more // reasonable cases. 'javascript/:docs.html' => false, 'javascripts:x.png' => false, 'COOLjavascript:page' => false, '/javascript:alert(1)' => false, ); foreach (array(true, false) as $use_uri) { foreach ($hrefs as $href => $expect) { if (is_array($expect)) { $expect = ($use_uri ? $expect[1] : $expect[0]); } if ($use_uri) { $href_value = new PhutilURI($href); } else { $href_value = $href; } $caught = null; try { phutil_tag('a', array('href' => $href_value), 'click for candy'); } catch (Exception $ex) { $caught = $ex; } $desc = pht( 'Unexpected result for "%s". ', $href, $use_uri ? pht('Yes') : pht('No'), $expect ? pht('Yes') : pht('No')); $this->assertEqual( $expect, $caught instanceof Exception, $desc); } } } public function testURIEscape() { $this->assertEqual( '%2B/%20%3F%23%26%3A%21xyz%25', phutil_escape_uri('+/ ?#&:!xyz%')); } public function testURIPathComponentEscape() { $this->assertEqual( 'a%252Fb', phutil_escape_uri_path_component('a/b')); $str = ''; for ($ii = 0; $ii <= 255; $ii++) { $str .= chr($ii); } $this->assertEqual( $str, phutil_unescape_uri_path_component( rawurldecode( // Simulates webserver. phutil_escape_uri_path_component($str)))); } public function testHsprintf() { $this->assertEqual( '
<3
', (string)hsprintf('
%s
', '<3')); } public function testAppendHTML() { $html = phutil_tag('hr'); $html->appendHTML(phutil_tag('br'), ''); $this->assertEqual('

<evil>', $html->getHTMLContent()); } public function testArrayEscaping() { $this->assertEqual( '
<div>
', phutil_escape_html( array( hsprintf('
'), array( array( '<', array( 'd', array( array( hsprintf('i'), ), 'v', ), ), array( array( '>', ), ), ), ), hsprintf('
'), ))); $this->assertEqual( '


', phutil_tag( 'div', array(), array( array( array( phutil_tag('br'), array( phutil_tag('hr'), ), phutil_tag('wbr'), ), ), ))->getHTMLContent()); } } diff --git a/src/markup/render.php b/src/markup/render.php index b3f20ca..14c6f6e 100644 --- a/src/markup/render.php +++ b/src/markup/render.php @@ -1,273 +1,278 @@ ` tags, if the `rel` attribute is not specified, it * is interpreted as `rel="noreferrer"`. * - When rendering `` tags, the `href` attribute may not begin with * `javascript:`. * * These special cases can not be disabled. * * IMPORTANT: The `$tag` attribute and the keys of the `$attributes` array are * trusted blindly, and not escaped. You should not pass user data in these * parameters. * * @param string The name of the tag, like `a` or `div`. * @param map A map of tag attributes. * @param wild Content to put in the tag. * @return PhutilSafeHTML Tag object. */ function phutil_tag($tag, array $attributes = array(), $content = null) { // If the `href` attribute is present: // - make sure it is not a "javascript:" URI. We never permit these. // - if the tag is an `` and the link is to some foreign resource, // add `rel="nofollow"` by default. if (!empty($attributes['href'])) { // This might be a URI object, so cast it to a string. $href = (string)$attributes['href']; if (isset($href[0])) { $is_anchor_href = ($href[0] == '#'); // Is this a link to a resource on the same domain? The second part of - // this excludes "///evil.com/" protocol-relative hrefs. - $is_domain_href = ($href[0] == '/') && - (!isset($href[1]) || $href[1] != '/'); + // this excludes "//evil.com/" protocol-relative hrefs. The third part + // of this excludes "/\evil.com/" protocol-relative fantasy hrefs which + // are completely made up but which browsers all respect. Broadly, + // browsers will dutifuly treat "/" followed by ANY sequence of "/" and + // "\" as though it were "//". + $is_domain_href = + ($href[0] == '/') && + (!isset($href[1]) || ($href[1] != '/' && $href[1] != '\\')); // If the `rel` attribute is not specified, fill in `rel="noreferrer"`. // Effectively, this serves to make the default behavior for offsite // links "do not send a referrer", which is broadly desirable. Specifying // some non-null `rel` will skip this. if (!isset($attributes['rel'])) { if (!$is_anchor_href && !$is_domain_href) { if ($tag == 'a') { $attributes['rel'] = 'noreferrer'; } } } // Block 'javascript:' hrefs at the tag level: no well-designed // application should ever use them, and they are a potent attack vector. // This function is deep in the core and performance sensitive, so we're // doing a cheap version of this test first to avoid calling preg_match() // on URIs which begin with '/' or `#`. These cover essentially all URIs // in Phabricator. if (!$is_anchor_href && !$is_domain_href) { // Chrome 33 and IE 11 both interpret "javascript\n:" as a Javascript // URI, and all browsers interpret " javascript:" as a Javascript URI, // so be aggressive about looking for "javascript:" in the initial // section of the string. $normalized_href = preg_replace('([^a-z0-9/:]+)i', '', $href); if (preg_match('/^javascript:/i', $normalized_href)) { throw new Exception( pht( "Attempting to render a tag with an '%s' attribute that begins ". "with '%s'. This is either a serious security concern or a ". "serious architecture concern. Seek urgent remedy.", 'href', 'javascript:')); } } } } // For tags which can't self-close, treat null as the empty string -- for // example, always render `
`, never `
`. static $self_closing_tags = array( 'area' => true, 'base' => true, 'br' => true, 'col' => true, 'command' => true, 'embed' => true, 'frame' => true, 'hr' => true, 'img' => true, 'input' => true, 'keygen' => true, 'link' => true, 'meta' => true, 'param' => true, 'source' => true, 'track' => true, 'wbr' => true, ); $attr_string = ''; foreach ($attributes as $k => $v) { if ($v === null) { continue; } $v = phutil_escape_html($v); $attr_string .= ' '.$k.'="'.$v.'"'; } if ($content === null) { if (isset($self_closing_tags[$tag])) { return new PhutilSafeHTML('<'.$tag.$attr_string.' />'); } else { $content = ''; } } else { $content = phutil_escape_html($content); } return new PhutilSafeHTML('<'.$tag.$attr_string.'>'.$content.''); } function phutil_tag_div($class, $content = null) { return phutil_tag('div', array('class' => $class), $content); } function phutil_escape_html($string) { if ($string instanceof PhutilSafeHTML) { return $string; } else if ($string instanceof PhutilSafeHTMLProducerInterface) { $result = $string->producePhutilSafeHTML(); if ($result instanceof PhutilSafeHTML) { return phutil_escape_html($result); } else if (is_array($result)) { return phutil_escape_html($result); } else if ($result instanceof PhutilSafeHTMLProducerInterface) { return phutil_escape_html($result); } else { try { assert_stringlike($result); return phutil_escape_html((string)$result); } catch (Exception $ex) { throw new Exception( pht( "Object (of class '%s') implements %s but did not return anything ". "renderable from %s.", get_class($string), 'PhutilSafeHTMLProducerInterface', 'producePhutilSafeHTML()')); } } } else if (is_array($string)) { $result = ''; foreach ($string as $item) { $result .= phutil_escape_html($item); } return $result; } return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } function phutil_escape_html_newlines($string) { return PhutilSafeHTML::applyFunction('nl2br', $string); } /** * Mark string as safe for use in HTML. */ function phutil_safe_html($string) { if ($string == '') { return $string; } else if ($string instanceof PhutilSafeHTML) { return $string; } else { return new PhutilSafeHTML($string); } } /** * HTML safe version of `implode()`. */ function phutil_implode_html($glue, array $pieces) { $glue = phutil_escape_html($glue); foreach ($pieces as $k => $piece) { $pieces[$k] = phutil_escape_html($piece); } return phutil_safe_html(implode($glue, $pieces)); } /** * Format a HTML code. This function behaves like `sprintf()`, except that all * the normal conversions (like %s) will be properly escaped. */ function hsprintf($html /* , ... */) { $args = func_get_args(); array_shift($args); return new PhutilSafeHTML( vsprintf($html, array_map('phutil_escape_html', $args))); } /** * Escape text for inclusion in a URI or a query parameter. Note that this * method does NOT escape '/', because "%2F" is invalid in paths and Apache * will automatically 404 the page if it's present. This will produce correct * (the URIs will work) and desirable (the URIs will be readable) behavior in * these cases: * * '/path/?param='.phutil_escape_uri($string); # OK: Query Parameter * '/path/to/'.phutil_escape_uri($string); # OK: URI Suffix * * It will potentially produce the WRONG behavior in this special case: * * COUNTEREXAMPLE * '/path/to/'.phutil_escape_uri($string).'/thing/'; # BAD: URI Infix * * In this case, any '/' characters in the string will not be escaped, so you * will not be able to distinguish between the string and the suffix (unless * you have more information, like you know the format of the suffix). For infix * URI components, use @{function:phutil_escape_uri_path_component} instead. * * @param string Some string. * @return string URI encoded string, except for '/'. */ function phutil_escape_uri($string) { return str_replace('%2F', '/', rawurlencode($string)); } /** * Escape text for inclusion as an infix URI substring. See discussion at * @{function:phutil_escape_uri}. This function covers an unusual special case; * @{function:phutil_escape_uri} is usually the correct function to use. * * This function will escape a string into a format which is safe to put into * a URI path and which does not contain '/' so it can be correctly parsed when * embedded as a URI infix component. * * However, you MUST decode the string with * @{function:phutil_unescape_uri_path_component} before it can be used in the * application. * * @param string Some string. * @return string URI encoded string that is safe for infix composition. */ function phutil_escape_uri_path_component($string) { return rawurlencode(rawurlencode($string)); } /** * Unescape text that was escaped by * @{function:phutil_escape_uri_path_component}. See * @{function:phutil_escape_uri} for discussion. * * Note that this function is NOT the inverse of * @{function:phutil_escape_uri_path_component}! It undoes additional escaping * which is added to survive the implied unescaping performed by the webserver * when interpreting the request. * * @param string Some string emitted * from @{function:phutil_escape_uri_path_component} and * then accessed via a web server. * @return string Original string. */ function phutil_unescape_uri_path_component($string) { return rawurldecode($string); } diff --git a/src/moduleutils/PhutilBootloader.php b/src/moduleutils/PhutilBootloader.php index f802493..83aad25 100644 --- a/src/moduleutils/PhutilBootloader.php +++ b/src/moduleutils/PhutilBootloader.php @@ -1,310 +1,328 @@ classTree; } public function registerInMemoryLibrary($name, $map) { $this->registeredLibraries[$name] = "memory:$name"; $this->inMemoryMaps[$name] = $map; $this->getLibraryMap($name); } public function registerLibrary($name, $path) { if (basename($path) != '__phutil_library_init__.php') { throw new PhutilBootloaderException( 'Only directories with a __phutil_library_init__.php file may be '. 'registered as libphutil libraries.'); } $path = dirname($path); // Detect attempts to load the same library multiple times from different // locations. This might mean you're doing something silly like trying to // include two different versions of something, or it might mean you're // doing something subtle like running a different version of 'arc' on a // working copy of Arcanist. if (isset($this->registeredLibraries[$name])) { $old_path = $this->registeredLibraries[$name]; if ($old_path != $path) { throw new PhutilLibraryConflictException($name, $old_path, $path); } } $this->registeredLibraries[$name] = $path; // For libphutil v2 libraries, load all functions when we load the library. if (!class_exists('PhutilSymbolLoader', false)) { $root = $this->getLibraryRoot('phutil'); $this->executeInclude($root.'/symbols/PhutilSymbolLoader.php'); } $loader = new PhutilSymbolLoader(); $loader ->setLibrary($name) ->setType('function'); try { $loader->selectAndLoadSymbols(); } catch (PhutilBootloaderException $ex) { // Ignore this, it happens if a global function's file is removed or // similar. Worst case is that we fatal when calling the function, which // is no worse than fataling here. } catch (PhutilMissingSymbolException $ex) { // Ignore this, it happens if a global function is removed. Everything // else loaded so proceed forward: worst case is a fatal when we // hit a function call to a function which no longer exists, which is // no worse than fataling here. } if (empty($_SERVER['PHUTIL_DISABLE_RUNTIME_EXTENSIONS'])) { $extdir = $path.DIRECTORY_SEPARATOR.'extensions'; if (Filesystem::pathExists($extdir)) { $extensions = id(new FileFinder($extdir)) ->withSuffix('php') ->withType('f') ->withFollowSymlinks(true) ->setForceMode('php') ->find(); foreach ($extensions as $extension) { $this->loadExtension( $name, $path, $extdir.DIRECTORY_SEPARATOR.$extension); } } } return $this; } public function registerLibraryMap(array $map) { $this->libraryMaps[$this->currentLibrary] = $map; return $this; } public function getLibraryMap($name) { if (isset($this->extendedMaps[$name])) { return $this->extendedMaps[$name]; } if (empty($this->libraryMaps[$name])) { $root = $this->getLibraryRoot($name); $this->currentLibrary = $name; if (isset($this->inMemoryMaps[$name])) { $this->libraryMaps[$name] = $this->inMemoryMaps[$name]; } else { $okay = include $root.'/__phutil_library_map__.php'; if (!$okay) { throw new PhutilBootloaderException( "Include of '{$root}/__phutil_library_map__.php' failed!"); } } $map = $this->libraryMaps[$name]; $version = isset($map['__library_version__']) ? $map['__library_version__'] : 1; switch ($version) { case 1: throw new Exception( 'libphutil v1 libraries are no longer supported.'); case 2: // NOTE: In version 2 of the library format, all parents (both // classes and interfaces) are stored in the 'xmap'. The value is // either a string for a single parent (the common case) or an array // for multiple parents. foreach ($map['xmap'] as $child => $parents) { foreach ((array)$parents as $parent) { $this->classTree[$parent][] = $child; } } break; default: throw new Exception("Unsupported library version '{$version}'!"); } } $map = $this->libraryMaps[$name]; // If there's an extension map for this library, merge the maps. if (isset($this->extensionMaps[$name])) { $emap = $this->extensionMaps[$name]; foreach (array('function', 'class', 'xmap') as $dict_key) { if (!isset($emap[$dict_key])) { continue; } $map[$dict_key] += $emap[$dict_key]; } } $this->extendedMaps[$name] = $map; return $map; } public function getLibraryMapWithoutExtensions($name) { // This just does all the checks to make sure the library is valid, then // we throw away the result. $this->getLibraryMap($name); return $this->libraryMaps[$name]; } public function getLibraryRoot($name) { if (empty($this->registeredLibraries[$name])) { throw new PhutilBootloaderException( "The phutil library '{$name}' has not been loaded!"); } return $this->registeredLibraries[$name]; } public function getAllLibraries() { return array_keys($this->registeredLibraries); } public function loadLibrary($path) { $root = null; if (!empty($_SERVER['PHUTIL_LIBRARY_ROOT'])) { if ($path[0] != '/') { $root = $_SERVER['PHUTIL_LIBRARY_ROOT']; } } $this->executeInclude($root.$path.'/__phutil_library_init__.php'); } public function loadLibrarySource($library, $source) { $path = $this->getLibraryRoot($library).'/'.$source; $this->executeInclude($path); } private function executeInclude($path) { // Include the source using `include_once`, but convert any warnings or // errors into exceptions. // Some messages, including "Declaration of X should be compatible with Y", // do not cause `include_once` to return an error code. Use // error_get_last() to make sure we're catching everything in every PHP // version. // (Also, the severity of some messages changed between versions of PHP.) // Note that we may enter this method after some earlier, unrelated error. // In this case, error_get_last() will return information for that error. // In PHP7 and later we could use error_clear_last() to clear that error, // but the function does not exist in earlier versions of PHP. Instead, // check if the value has changed. // See also T12190. $old_last = error_get_last(); - $old = error_reporting(0); - $okay = include_once $path; - error_reporting($old); + try { + $old = error_reporting(0); + $okay = include_once $path; + error_reporting($old); + } catch (Exception $ex) { + throw $ex; + } catch (ParseError $throwable) { + // NOTE: As of PHP7, syntax errors may raise a ParseError (which is a + // Throwable, not an Exception) with a useless message (like "syntax + // error, unexpected ':'") and a trace which ends a level above this. + + // Treating this object normally results in an unusable message which + // does not identify where the syntax error occurred. Converting it to + // a string and taking the first line gives us something reasonable, + // however. + $message = (string)$throwable; + $message = preg_split("/\n/", $message); + $message = reset($message); + + throw new Exception($message); + } if (!$okay) { throw new Exception("Source file \"{$path}\" failed to load."); } $new_last = error_get_last(); if ($new_last !== null) { if ($new_last !== $old_last) { $message = $new_last['message']; throw new Exception( "Error while loading file \"{$path}\": {$message}"); } } } private function loadExtension($library, $root, $path) { $old_functions = get_defined_functions(); $old_functions = array_fill_keys($old_functions['user'], true); $old_classes = array_fill_keys(get_declared_classes(), true); $old_interfaces = array_fill_keys(get_declared_interfaces(), true); $this->executeInclude($path); $new_functions = get_defined_functions(); $new_functions = array_fill_keys($new_functions['user'], true); $new_classes = array_fill_keys(get_declared_classes(), true); $new_interfaces = array_fill_keys(get_declared_interfaces(), true); $add_functions = array_diff_key($new_functions, $old_functions); $add_classes = array_diff_key($new_classes, $old_classes); $add_interfaces = array_diff_key($new_interfaces, $old_interfaces); // NOTE: We can't trust the path we loaded to be the location of these // symbols, because it might have loaded other paths. foreach ($add_functions as $func => $ignored) { $rfunc = new ReflectionFunction($func); $fpath = Filesystem::resolvePath($rfunc->getFileName(), $root); $this->extensionMaps[$library]['function'][$func] = $fpath; } foreach ($add_classes + $add_interfaces as $class => $ignored) { $rclass = new ReflectionClass($class); $cpath = Filesystem::resolvePath($rclass->getFileName(), $root); $this->extensionMaps[$library]['class'][$class] = $cpath; $xmap = $rclass->getInterfaceNames(); $parent = $rclass->getParentClass(); if ($parent) { $xmap[] = $parent->getName(); } if ($xmap) { foreach ($xmap as $parent_class) { $this->classTree[$parent_class][] = $class; } if (count($xmap) == 1) { $xmap = head($xmap); } $this->extensionMaps[$library]['xmap'][$class] = $xmap; } } // Clear the extended library cache (should one exist) so we know that // we need to rebuild it. unset($this->extendedMaps[$library]); } } diff --git a/src/parser/xhpast/__tests__/data/optional-parameter.php.test b/src/parser/xhpast/__tests__/data/optional-parameter.php.test new file mode 100644 index 0000000..5d032b7 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/optional-parameter.php.test @@ -0,0 +1,282 @@ +write($data); return $future; } /** * Returns the path to the XHPAST binary. * * @return string */ public static function getPath() { if (phutil_is_windows()) { return dirname(__FILE__).'\\xhpast.exe'; } return dirname(__FILE__).'/xhpast'; } /** * Returns the XHPAST version. * * @return string */ public static function getVersion() { if (self::$version === null) { $bin = self::getPath(); if (Filesystem::pathExists($bin)) { list($err, $stdout) = exec_manual('%s --version', $bin); if (!$err) { self::$version = trim($stdout); } } } return self::$version; } /** * Checks if XHPAST is built and up-to-date. * * @return bool */ public static function isAvailable() { return self::getVersion() == self::EXPECTED_VERSION; } } diff --git a/src/parser/xhpast/parser_nodes.php b/src/parser/xhpast/parser_nodes.php index 6418235..b2b1b83 100644 --- a/src/parser/xhpast/parser_nodes.php +++ b/src/parser/xhpast/parser_nodes.php @@ -1,126 +1,127 @@ 'n_PROGRAM', 9001 => 'n_SYMBOL_NAME', 9002 => 'n_HALT_COMPILER', 9003 => 'n_NAMESPACE', 9004 => 'n_STATEMENT', 9005 => 'n_EMPTY', 9006 => 'n_STATEMENT_LIST', 9007 => 'n_OPEN_TAG', 9008 => 'n_CLOSE_TAG', 9009 => 'n_USE_LIST', 9010 => 'n_USE', 9011 => 'n_CONSTANT_DECLARATION_LIST', 9012 => 'n_CONSTANT_DECLARATION', 9013 => 'n_STRING', 9014 => 'n_LABEL', 9015 => 'n_CONDITION_LIST', 9016 => 'n_CONTROL_CONDITION', 9017 => 'n_IF', 9018 => 'n_ELSEIF', 9019 => 'n_ELSE', 9020 => 'n_WHILE', 9021 => 'n_DO_WHILE', 9022 => 'n_FOR', 9023 => 'n_FOR_EXPRESSION', 9024 => 'n_SWITCH', 9025 => 'n_BREAK', 9026 => 'n_CONTINUE', 9027 => 'n_RETURN', 9028 => 'n_GLOBAL_DECLARATION_LIST', 9029 => 'n_GLOBAL_DECLARATION', 9030 => 'n_STATIC_DECLARATION_LIST', 9031 => 'n_STATIC_DECLARATION', 9032 => 'n_ECHO_LIST', 9033 => 'n_ECHO', 9034 => 'n_INLINE_HTML', 9035 => 'n_UNSET_LIST', 9036 => 'n_UNSET', 9037 => 'n_FOREACH', 9038 => 'n_FOREACH_EXPRESSION', 9039 => 'n_THROW', 9040 => 'n_GOTO', 9041 => 'n_TRY', 9042 => 'n_CATCH_LIST', 9043 => 'n_CATCH', 9044 => 'n_DECLARE', 9045 => 'n_DECLARE_DECLARATION_LIST', 9046 => 'n_DECLARE_DECLARATION', 9047 => 'n_VARIABLE', 9048 => 'n_REFERENCE', 9049 => 'n_VARIABLE_REFERENCE', 9050 => 'n_FUNCTION_DECLARATION', 9051 => 'n_CLASS_DECLARATION', 9052 => 'n_CLASS_ATTRIBUTES', 9053 => 'n_EXTENDS', 9054 => 'n_EXTENDS_LIST', 9055 => 'n_IMPLEMENTS_LIST', 9056 => 'n_INTERFACE_DECLARATION', 9057 => 'n_CASE', 9058 => 'n_DEFAULT', 9059 => 'n_DECLARATION_PARAMETER_LIST', 9060 => 'n_DECLARATION_PARAMETER', 9061 => 'n_TYPE_NAME', 9062 => 'n_VARIABLE_VARIABLE', 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', 9064 => 'n_CLASS_MEMBER_DECLARATION', 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', 9066 => 'n_CLASS_CONSTANT_DECLARATION', 9067 => 'n_METHOD_DECLARATION', 9068 => 'n_METHOD_MODIFIER_LIST', 9069 => 'n_FUNCTION_MODIFIER_LIST', 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', 9071 => 'n_EXPRESSION_LIST', 9072 => 'n_LIST', 9073 => 'n_ASSIGNMENT', 9074 => 'n_NEW', 9075 => 'n_UNARY_PREFIX_EXPRESSION', 9076 => 'n_UNARY_POSTFIX_EXPRESSION', 9077 => 'n_BINARY_EXPRESSION', 9078 => 'n_TERNARY_EXPRESSION', 9079 => 'n_CAST_EXPRESSION', 9080 => 'n_CAST', 9081 => 'n_OPERATOR', 9082 => 'n_ARRAY_LITERAL', 9083 => 'n_EXIT_EXPRESSION', 9084 => 'n_BACKTICKS_EXPRESSION', 9085 => 'n_LEXICAL_VARIABLE_LIST', 9086 => 'n_NUMERIC_SCALAR', 9087 => 'n_STRING_SCALAR', 9088 => 'n_MAGIC_SCALAR', 9089 => 'n_CLASS_STATIC_ACCESS', 9090 => 'n_CLASS_NAME', 9091 => 'n_MAGIC_CLASS_KEYWORD', 9092 => 'n_OBJECT_PROPERTY_ACCESS', 9093 => 'n_ARRAY_VALUE_LIST', 9094 => 'n_ARRAY_VALUE', 9095 => 'n_CALL_PARAMETER_LIST', 9096 => 'n_VARIABLE_EXPRESSION', 9097 => 'n_INCLUDE_FILE', 9098 => 'n_HEREDOC', 9099 => 'n_FUNCTION_CALL', 9100 => 'n_INDEX_ACCESS', 9101 => 'n_ASSIGNMENT_LIST', 9102 => 'n_METHOD_CALL', 9103 => 'n_CONCATENATION_LIST', 9104 => 'n_PARENTHETICAL_EXPRESSION', 9105 => 'n_TRAIT_USE', 9106 => 'n_TRAIT_USE_LIST', 9107 => 'n_TRAIT_ADAPTATION_LIST', 9108 => 'n_TRAIT_INSTEADOF', 9109 => 'n_TRAIT_REFERENCE_LIST', 9110 => 'n_TRAIT_METHOD_REFERENCE', 9111 => 'n_TRAIT_AS', 9112 => 'n_YIELD', 9113 => 'n_FINALLY', 9114 => 'n_UNPACK', 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', ); } diff --git a/src/search/__tests__/PhutilSearchQueryCompilerTestCase.php b/src/search/__tests__/PhutilSearchQueryCompilerTestCase.php index 0dba0c1..647386f 100644 --- a/src/search/__tests__/PhutilSearchQueryCompilerTestCase.php +++ b/src/search/__tests__/PhutilSearchQueryCompilerTestCase.php @@ -1,221 +1,220 @@ null, 'cat dog' => '+"cat" +"dog"', 'cat -dog' => '+"cat" -"dog"', 'cat-dog' => '+"cat-dog"', // If there are spaces after an operator, the operator applies to the // next search term. 'cat - dog' => '+"cat" -"dog"', // Double quotes serve as delimiters even if there is no whitespace // between terms. '"cat"dog' => '+"cat" +"dog"', // This query is too long. str_repeat('x', 2048) => false, // Multiple operators are not permitted. '++cat' => false, '+-cat' => false, '--cat' => false, // Stray operators are not permitted. '+' => false, 'cat +' => false, // Double quotes must be paired. '"' => false, 'cat "' => false, '"cat' => false, 'A"' => false, 'A"B"' => '+"A" +"B"', ); $this->assertCompileQueries($tests); // Test that we compile queries correctly if the operators have been // swapped to use "AND" by default. $operator_tests = array( 'cat dog' => '"cat" "dog"', 'cat -dog' => '"cat" -"dog"', ); $this->assertCompileQueries($operator_tests, ' |-><()~*:""&\''); // Test that we compile queries correctly if the quote operators have // been swapped to differ. $quote_tests = array( 'cat dog' => '+[cat] +[dog]', 'cat -dog' => '+[cat] -[dog]', ); $this->assertCompileQueries($quote_tests, '+ -><()~*:[]&|'); } public function testCompileQueriesWithStemming() { $stemming_tests = array( 'cat dog' => array( null, '+"cat" +"dog"', ), 'cats dogs' => array( null, '+"cat" +"dog"', ), 'cats "dogs"' => array( '+"dogs"', '+"cat"', ), '"blessed blade" of the windseeker' => array( '+"blessed blade"', '+"of" +"the" +"windseek"', ), 'mailing users for mentions on tasks' => array( null, '+"mail" +"user" +"for" +"mention" +"on" +"task"', ), ); $stemmer = new PhutilSearchStemmer(); $this->assertCompileQueries($stemming_tests, null, $stemmer); } public function testCompileQueriesWithFunctions() { $op_and = PhutilSearchQueryCompiler::OPERATOR_AND; $op_sub = PhutilSearchQueryCompiler::OPERATOR_SUBSTRING; $op_exact = PhutilSearchQueryCompiler::OPERATOR_EXACT; $mao = "\xE7\x8C\xAB"; $function_tests = array( 'cat' => array( array(null, $op_and, 'cat'), ), ':cat' => array( array(null, $op_and, 'cat'), ), 'title:cat' => array( array('title', $op_and, 'cat'), ), 'title:cat:dog' => array( array('title', $op_and, 'cat:dog'), ), 'title:~cat' => array( array('title', $op_sub, 'cat'), ), 'cat title:="Meow Meow"' => array( array(null, $op_and, 'cat'), array('title', $op_exact, 'Meow Meow'), ), 'title:cat title:dog' => array( array('title', $op_and, 'cat'), array('title', $op_and, 'dog'), ), '~"core and seven years ag"' => array( array(null, $op_sub, 'core and seven years ag'), ), $mao => array( array(null, $op_sub, $mao), ), '+'.$mao => array( array(null, $op_and, $mao), ), '~'.$mao => array( array(null, $op_sub, $mao), ), '"'.$mao.'"' => array( array(null, $op_and, $mao), ), ->>>>>>> upstream/stable ); $this->assertCompileFunctionQueries($function_tests); } private function assertCompileQueries( array $tests, $operators = null, PhutilSearchStemmer $stemmer = null) { foreach ($tests as $input => $expect) { $caught = null; $query = null; $literal_query = null; $stemmed_query = null; try { $compiler = new PhutilSearchQueryCompiler(); if ($operators !== null) { $compiler->setOperators($operators); } if ($stemmer !== null) { $compiler->setStemmer($stemmer); } $tokens = $compiler->newTokens($input); if ($stemmer) { $literal_query = $compiler->compileLiteralQuery($tokens); $stemmed_query = $compiler->compileStemmedQuery($tokens); } else { $query = $compiler->compileQuery($tokens); } } catch (PhutilSearchQueryCompilerSyntaxException $ex) { $caught = $ex; } if ($caught !== null) { $query = false; $literal_query = false; $stemmed_query = false; } if (!$stemmer) { $this->assertEqual( $expect, $query, pht('Compilation of query: %s', $input)); } else { $this->assertEqual( $expect, ($literal_query === false) ? false : array($literal_query, $stemmed_query), pht('Stemmed compilation of query: %s', $input)); } } } private function assertCompileFunctionQueries(array $tests) { foreach ($tests as $input => $expect) { $compiler = id(new PhutilSearchQueryCompiler()) ->setEnableFunctions(true); $tokens = $compiler->newTokens($input); $result = array(); foreach ($tokens as $token) { $result[] = array( $token->getFunction(), $token->getOperator(), $token->getValue(), ); } $this->assertEqual( $expect, $result, pht('Function compilation of query: %s', $input)); } } } diff --git a/support/xhpast/generate_nodes.php b/support/xhpast/generate_nodes.php index ec7c642..22ea26c 100755 --- a/support/xhpast/generate_nodes.php +++ b/support/xhpast/generate_nodes.php @@ -1,163 +1,164 @@ #!/usr/bin/env php $value) { $hpp .= "#define {$node} {$value}\n"; } Filesystem::writeFile( Filesystem::resolvePath('node_names.hpp', dirname(__FILE__)), $hpp); echo pht('Wrote C++ definition.')."\n"; $at = '@'; $php = << $value) { $php .= " {$value} => '{$node}',\n"; } $php .= <<(xhpastget_extra(yyscanner)) #undef yylineno #define yylineno yyextra->first_lineno #define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) #define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) #define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) #define NNEW(t) \ (new xhpast::Node(t)) #define NTYPE(n, type) \ ((n)->setType(type)) #define NMORE(n, end) \ ((n)->expandRange(end)) #define NSPAN(n, type, end) \ (NMORE(NTYPE((n), type), end)) #define NEXPAND(l, n, r) \ ((n)->expandRange(l)->expandRange(r)) using namespace std; static void yyerror(void* yyscanner, void* _, const char* error) { if (yyextra->terminated) { return; } yyextra->terminated = true; yyextra->error = error; } %} %expect 5 // 2: PHP's if/else grammar // 7: expr '[' dim_offset ']' -- shift will default to first grammar %name-prefix "xhpast" %pure-parser %parse-param { void* yyscanner } %parse-param { xhpast::Node** root } %lex-param { void* yyscanner } %error-verbose %precedence T_INCLUDE T_INCLUDE_ONCE %token T_EVAL %precedence T_REQUIRE T_REQUIRE_ONCE %token ',' %left T_LOGICAL_OR %left T_LOGICAL_XOR %left T_LOGICAL_AND %precedence T_PRINT %precedence '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL %left '?' ':' %right T_COALESCE %left T_BOOLEAN_OR %left T_BOOLEAN_AND %left '|' %left '^' %left '&' %nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL %left T_SL T_SR %left '+' '-' '.' %left '*' '/' '%' %precedence '!' %precedence T_INSTANCEOF %precedence '~' T_INC %token T_DEC %precedence T_INT_CAST T_DOUBLE_CAST T_STRING_CAST %token T_UNICODE_CAST %token T_BINARY_CAST %precedence T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' %token '[' %token T_NEW %precedence T_CLONE %token T_EXIT %token T_IF %token T_ELSEIF %token T_ELSE %token T_ENDIF %token T_LNUMBER %token T_DNUMBER %token T_STRING %token T_STRING_VARNAME /* unused in XHP: `foo` in `"$foo"` */ %token T_VARIABLE %token T_NUM_STRING /* unused in XHP: `0` in `"$foo[0]"` */ %token T_INLINE_HTML %token T_CHARACTER /* unused in vanilla PHP */ %token T_BAD_CHARACTER /* unused in vanilla PHP */ %token T_ENCAPSED_AND_WHITESPACE /* unused in XHP: ` ` in `" "` */ %token T_CONSTANT_ENCAPSED_STRING /* overloaded in XHP; replaces '"' encaps_list '"' */ %token T_BACKTICKS_EXPR /* new in XHP; replaces '`' backticks_expr '`' */ %token T_ECHO %token T_DO %token T_WHILE %token T_ENDWHILE %token T_FOR %token T_ENDFOR %token T_FOREACH %token T_ENDFOREACH %token T_DECLARE %token T_ENDDECLARE %token T_AS %token T_SWITCH %token T_ENDSWITCH %token T_CASE %token T_DEFAULT %token T_BREAK %token T_CONTINUE %token T_GOTO %token T_FUNCTION %token T_CONST %token T_RETURN %token T_TRY %token T_CATCH %token T_THROW %token T_USE %token T_GLOBAL %token T_STATIC %token T_ABSTRACT %token T_FINAL %token T_PRIVATE %token T_PROTECTED %token T_PUBLIC %token T_VAR %token T_UNSET %token T_ISSET %token T_EMPTY %token T_HALT_COMPILER %token T_CLASS %token T_INTERFACE %token T_EXTENDS %token T_IMPLEMENTS %token T_OBJECT_OPERATOR %token T_DOUBLE_ARROW %token T_LIST %token T_ARRAY %token T_CLASS_C %token T_METHOD_C %token T_FUNC_C %token T_LINE %token T_FILE %token T_COMMENT %token T_DOC_COMMENT %token T_OPEN_TAG %token T_OPEN_TAG_WITH_ECHO %token T_OPEN_TAG_FAKE %token T_CLOSE_TAG %token T_WHITESPACE %token T_START_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ %token T_END_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ %token T_HEREDOC /* new in XHP; replaces start_heredoc encaps_list T_END_HEREDOC */ %token T_DOLLAR_OPEN_CURLY_BRACES /* unused in XHP: `${` in `"${foo}"` */ %token T_CURLY_OPEN /* unused in XHP: `{$` in `"{$foo}"` */ %token T_PAAMAYIM_NEKUDOTAYIM %token T_BINARY_DOUBLE /* unsused in XHP: `b"` in `b"foo"` */ %token T_BINARY_HEREDOC /* unsused in XHP: `b<<<` in `b<<appendChild($1); } ; top_statement_list: top_statement_list top_statement { $$ = $1->appendChild($2); } | %empty { $$ = NNEW(n_STATEMENT_LIST); } ; namespace_name: T_STRING { $$ = NTYPE($1, n_SYMBOL_NAME); } | namespace_name T_NS_SEPARATOR T_STRING { $$ = NMORE($1, $3); } ; top_statement: statement | function_declaration_statement | class_declaration_statement | T_HALT_COMPILER '(' ')' ';' { $1 = NSPAN($1, n_HALT_COMPILER, $3); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $4); } | T_NAMESPACE namespace_name ';' { NSPAN($1, n_NAMESPACE, $2); $1->appendChild($2); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_NAMESPACE namespace_name '{' top_statement_list '}' { NSPAN($1, n_NAMESPACE, $5); $1->appendChild($2); $1->appendChild(NEXPAND($3, $4, $5)); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_NAMESPACE '{' top_statement_list '}' { NSPAN($1, n_NAMESPACE, $4); $1->appendChild(NNEW(n_EMPTY)); NMORE($3, $4); NMORE($3, $2); $1->appendChild($3); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_USE use_declarations ';' { NMORE($2, $1); $$ = NNEW(n_STATEMENT)->appendChild($2); NMORE($$, $3); } | constant_declaration ';' { $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } ; use_declarations: use_declarations ',' use_declaration { $$ = $1->appendChild($3); } | use_declaration { $$ = NNEW(n_USE_LIST); $$->appendChild($1); } ; use_declaration: namespace_name { $$ = NNEW(n_USE); $$->appendChild($1); $$->appendChild(NNEW(n_EMPTY)); } | namespace_name T_AS T_STRING { $$ = NNEW(n_USE); $$->appendChild($1); NTYPE($3, n_STRING); $$->appendChild($3); } | T_NS_SEPARATOR namespace_name { $$ = NNEW(n_USE); NMORE($2, $1); $$->appendChild($2); $$->appendChild(NNEW(n_EMPTY)); } | T_NS_SEPARATOR namespace_name T_AS T_STRING { $$ = NNEW(n_USE); NMORE($2, $1); $$->appendChild($2); NTYPE($4, n_STRING); $$->appendChild($4); } ; constant_declaration: constant_declaration ',' T_STRING '=' static_scalar { NMORE($$, $5); $$->appendChild( NNEW(n_CONSTANT_DECLARATION) ->appendChild(NTYPE($3, n_STRING)) ->appendChild($5)); } | T_CONST T_STRING '=' static_scalar { NSPAN($$, n_CONSTANT_DECLARATION_LIST, $4); $$->appendChild( NNEW(n_CONSTANT_DECLARATION) ->appendChild(NTYPE($2, n_STRING)) ->appendChild($4)); } ; inner_statement_list: inner_statement_list inner_statement { $$ = $1->appendChild($2); } | %empty { $$ = NNEW(n_STATEMENT_LIST); } ; inner_statement: statement | function_declaration_statement | class_declaration_statement | T_HALT_COMPILER '(' ')' ';' { $1 = NSPAN($1, n_HALT_COMPILER, $3); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $4); } ; statement: unticked_statement | T_STRING ':' { NTYPE($1, n_STRING); $$ = NNEW(n_LABEL); $$->appendChild($1); NMORE($$, $2); } | T_OPEN_TAG { $$ = NTYPE($1, n_OPEN_TAG); } | T_OPEN_TAG_WITH_ECHO { $$ = NTYPE($1, n_OPEN_TAG); } | T_CLOSE_TAG { $$ = NTYPE($1, n_CLOSE_TAG); } ; unticked_statement: '{' inner_statement_list '}' { $$ = NEXPAND($1, $2, $3); } | T_IF '(' expr ')' statement elseif_list else_single { $$ = NNEW(n_CONDITION_LIST); $1 = NTYPE($1, n_IF); $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); $1->appendChild($5); $$->appendChild($1); $$->appendChildren($6); // Hacks: merge a list of if (x) { } else if (y) { } into a single condition // list instead of a condition tree. if ($7->type == n_EMPTY) { // Ignore. } else if ($7->type == n_ELSE) { xhpast::Node *stype = $7->firstChild()->firstChild(); if (stype && stype->type == n_CONDITION_LIST) { NTYPE(stype->firstChild(), n_ELSEIF); stype->firstChild()->l_tok = $7->l_tok; $$->appendChildren(stype); } else { $$->appendChild($7); } } else { $$->appendChild($7); } $$ = NNEW(n_STATEMENT)->appendChild($$); } | T_IF '(' expr ')' ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' { $$ = NNEW(n_CONDITION_LIST); NTYPE($1, n_IF); $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); $1->appendChild($6); $$->appendChild($1); $$->appendChildren($7); $$->appendChild($8); NMORE($$, $9); $$ = NNEW(n_STATEMENT)->appendChild($$); NMORE($$, $10); } | T_WHILE '(' expr ')' while_statement { NTYPE($1, n_WHILE); $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); $1->appendChild($5); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_DO statement T_WHILE '(' expr ')' ';' { NTYPE($1, n_DO_WHILE); $1->appendChild($2); $1->appendChild(NSPAN($4, n_CONTROL_CONDITION, $6)->appendChild($5)); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $7); } | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { NTYPE($1, n_FOR); NSPAN($2, n_FOR_EXPRESSION, $8) ->appendChild($3) ->appendChild($5) ->appendChild($7); $1->appendChild($2); $1->appendChild($9); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_SWITCH '(' expr ')' switch_case_list { NTYPE($1, n_SWITCH); $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); $1->appendChild($5); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_BREAK ';' { NTYPE($1, n_BREAK); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | T_BREAK expr ';' { NTYPE($1, n_BREAK); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_CONTINUE ';' { NTYPE($1, n_CONTINUE); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | T_CONTINUE expr ';' { NTYPE($1, n_CONTINUE); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_RETURN ';' { NTYPE($1, n_RETURN); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | T_RETURN expr_without_variable ';' { NTYPE($1, n_RETURN); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_RETURN variable ';' { NTYPE($1, n_RETURN); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_GLOBAL global_var_list ';' { NMORE($2, $1); $$ = NNEW(n_STATEMENT)->appendChild($2); NMORE($$, $3); } | T_STATIC static_var_list ';' { NMORE($2, $1); $$ = NNEW(n_STATEMENT)->appendChild($2); NMORE($$, $3); } | T_ECHO echo_expr_list ';' { NMORE($2, $1); $$ = NNEW(n_STATEMENT)->appendChild($2); NMORE($$, $3); } | T_INLINE_HTML { NTYPE($1, n_INLINE_HTML); $$ = $1; } | expr ';' { $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | yield_expr ';' { $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | T_UNSET '(' unset_variables ')' ';' { NMORE($3, $4); NMORE($3, $1); $$ = NNEW(n_STATEMENT)->appendChild($3); NMORE($$, $5); } | T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' foreach_statement { NTYPE($1, n_FOREACH); NSPAN($2, n_FOREACH_EXPRESSION, $7); $2->appendChild($3); if ($6->type == n_EMPTY) { $2->appendChild($6); $2->appendChild($5); } else { $2->appendChild($5); $2->appendChild($6); } $1->appendChild($2); $1->appendChild($8); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_FOREACH '(' expr_without_variable T_AS variable foreach_optional_arg ')' foreach_statement { NTYPE($1, n_FOREACH); NSPAN($2, n_FOREACH_EXPRESSION, $7); $2->appendChild($3); if ($6->type == n_EMPTY) { $2->appendChild($6); $2->appendChild($5); } else { $2->appendChild($5); $2->appendChild($6); } $1->appendChild($2); $1->appendChild($8); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_DECLARE '(' declare_list ')' declare_statement { NTYPE($1, n_DECLARE); $1->appendChild($3); $1->appendChild($5); $$ = NNEW(n_STATEMENT)->appendChild($1); } | ';' /* empty statement */ { $$ = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); NMORE($$, $1); } | T_TRY '{' inner_statement_list '}' catch_list finally_statement { NTYPE($1, n_TRY); $1->appendChild(NEXPAND($2, $3, $4)); $1->appendChild($5); $1->appendChild($6); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_TRY '{' inner_statement_list '}' non_empty_finally_statement { NTYPE($1, n_TRY); $1->appendChild(NEXPAND($2, $3, $4)); $1->appendChild(NNEW(n_CATCH_LIST)); $1->appendChild($5); $$ = NNEW(n_STATEMENT)->appendChild($1); } | T_THROW expr ';' { NTYPE($1, n_THROW); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } | T_GOTO T_STRING ';' { NTYPE($1, n_GOTO); NTYPE($2, n_STRING); $1->appendChild($2); $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $3); } ; catch_list: catch_list catch { $1->appendChild($2); $$ = $1; } | catch { $$ = NNEW(n_CATCH_LIST); $$->appendChild($1); } catch: T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' '{' inner_statement_list '}' { NTYPE($1, n_CATCH); $1->appendChild($3); $1->appendChild(NTYPE($4, n_VARIABLE)); $1->appendChild(NEXPAND($6, $7, $8)); NMORE($1, $8); $$ = $1; } ; finally_statement: %empty { $$ = NNEW(n_EMPTY); } | non_empty_finally_statement ; non_empty_finally_statement: T_FINALLY '{' inner_statement_list '}' { NTYPE($1, n_FINALLY); $1->appendChild($3); NMORE($1, $4); $$ = $1; } ; unset_variables: unset_variable { $$ = NNEW(n_UNSET_LIST); $$->appendChild($1); } | unset_variables ',' unset_variable { $1->appendChild($3); $$ = $1; } ; unset_variable: variable ; function_declaration_statement: unticked_function_declaration_statement ; class_declaration_statement: unticked_class_declaration_statement ; is_reference: %empty { $$ = NNEW(n_EMPTY); } | '&' { $$ = NTYPE($1, n_REFERENCE); } ; unticked_function_declaration_statement: function is_reference T_STRING '(' parameter_list ')' return_type '{' inner_statement_list '}' { NSPAN($1, n_FUNCTION_DECLARATION, $9); $1->appendChild(NNEW(n_EMPTY)); $1->appendChild($2); $1->appendChild(NTYPE($3, n_STRING)); $1->appendChild(NEXPAND($4, $5, $6)); $1->appendChild(NNEW(n_EMPTY)); $1->appendChild($7); $1->appendChild(NEXPAND($8, $9, $10)); $$ = NNEW(n_STATEMENT)->appendChild($1); } ; unticked_class_declaration_statement: class_entry_type T_STRING extends_from implements_list '{' class_statement_list '}' { $$ = NNEW(n_CLASS_DECLARATION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_CLASS_NAME)); $$->appendChild($3); $$->appendChild($4); $$->appendChild(NEXPAND($5, $6, $7)); NMORE($$, $7); $$ = NNEW(n_STATEMENT)->appendChild($$); } | interface_entry T_STRING interface_extends_list '{' class_statement_list '}' { $$ = NNEW(n_INTERFACE_DECLARATION); $$->appendChild(NNEW(n_CLASS_ATTRIBUTES)); NMORE($$, $1); $$->appendChild(NTYPE($2, n_CLASS_NAME)); $$->appendChild($3); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild(NEXPAND($4, $5, $6)); NMORE($$, $6); $$ = NNEW(n_STATEMENT)->appendChild($$); } ; class_entry_type: T_CLASS { NTYPE($1, n_CLASS_ATTRIBUTES); $$ = $1; } | T_ABSTRACT T_CLASS { NTYPE($2, n_CLASS_ATTRIBUTES); NMORE($2, $1); $2->appendChild(NTYPE($1, n_STRING)); $$ = $2; } | T_FINAL T_CLASS { NTYPE($2, n_CLASS_ATTRIBUTES); NMORE($2, $1); $2->appendChild(NTYPE($1, n_STRING)); $$ = $2; } | T_TRAIT { $$ = NNEW(n_CLASS_ATTRIBUTES); $$->appendChild(NTYPE($1, n_STRING)); } ; extends_from: %empty { $$ = NNEW(n_EMPTY); } | T_EXTENDS fully_qualified_class_name { $$ = NTYPE($1, n_EXTENDS_LIST)->appendChild($2); } ; interface_entry: T_INTERFACE ; interface_extends_list: %empty { $$ = NNEW(n_EMPTY); } | T_EXTENDS interface_list { NTYPE($1, n_EXTENDS_LIST); $1->appendChildren($2); $$ = $1; } ; implements_list: %empty { $$ = NNEW(n_EMPTY); } | T_IMPLEMENTS interface_list { NTYPE($1, n_IMPLEMENTS_LIST); $1->appendChildren($2); $$ = $1; } ; interface_list: fully_qualified_class_name { $$ = NNEW(n_IMPLEMENTS_LIST)->appendChild($1); } | interface_list ',' fully_qualified_class_name { $$ = $1->appendChild($3); } ; foreach_optional_arg: %empty { $$ = NNEW(n_EMPTY); } | T_DOUBLE_ARROW foreach_variable { $$ = $2; } ; foreach_variable: variable | '&' variable { NTYPE($1, n_VARIABLE_REFERENCE); $1->appendChild($2); $$ = $1; } ; for_statement: statement | ':' inner_statement_list T_ENDFOR ';' { NMORE($2, $1); NMORE($2, $4); $$ = $2; } ; foreach_statement: statement | ':' inner_statement_list T_ENDFOREACH ';' { NMORE($2, $1); NMORE($2, $4); $$ = $2; } ; declare_statement: statement | ':' inner_statement_list T_ENDDECLARE ';' { NMORE($2, $1); NMORE($2, $4); $$ = $2; } ; declare_list: T_STRING '=' static_scalar { $$ = NNEW(n_DECLARE_DECLARATION); $$->appendChild(NTYPE($1, n_STRING)); $$->appendChild($3); $$ = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild($$); } | declare_list ',' T_STRING '=' static_scalar { $$ = NNEW(n_DECLARE_DECLARATION); $$->appendChild(NTYPE($3, n_STRING)); $$->appendChild($5); $1->appendChild($$); $$ = $1; } ; switch_case_list: '{' case_list '}' { $$ = NEXPAND($1, $2, $3); } | '{' ';' case_list '}' { // ...why does this rule exist? NTYPE($2, n_STATEMENT); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); $$->appendChildren($3); NEXPAND($1, $$, $4); } | ':' case_list T_ENDSWITCH ';' { NMORE($2, $4); NMORE($2, $1); $$ = $2; } | ':' ';' case_list T_ENDSWITCH ';' { NTYPE($2, n_STATEMENT); $1->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); $$->appendChildren($3); NMORE($$, $5); NMORE($$, $1); } ; case_list: %empty { $$ = NNEW(n_STATEMENT_LIST); } | case_list T_CASE expr case_separator inner_statement_list { NTYPE($2, n_CASE); $2->appendChild($3); $2->appendChild($5); $1->appendChild($2); $$ = $1; } | case_list T_DEFAULT case_separator inner_statement_list { NTYPE($2, n_DEFAULT); $2->appendChild($4); $1->appendChild($2); $$ = $1; } ; case_separator: ':' | ';' ; while_statement: statement | ':' inner_statement_list T_ENDWHILE ';' { NMORE($2, $4); NMORE($2, $1); $$ = $2; } ; elseif_list: %empty { $$ = NNEW(n_CONDITION_LIST); } | elseif_list T_ELSEIF '(' expr ')' statement { NTYPE($2, n_ELSEIF); $2->appendChild(NSPAN($3, n_CONTROL_CONDITION, $5)->appendChild($4)); $2->appendChild($6); $$ = $1->appendChild($2); } ; new_elseif_list: %empty { $$ = NNEW(n_CONDITION_LIST); } | new_elseif_list T_ELSEIF '(' expr ')' ':' inner_statement_list { NTYPE($2, n_ELSEIF); $2->appendChild($4); $2->appendChild($7); $$ = $1->appendChild($2); } ; else_single: %empty { $$ = NNEW(n_EMPTY); } | T_ELSE statement { NTYPE($1, n_ELSE); $1->appendChild($2); $$ = $1; } ; new_else_single: %empty { $$ = NNEW(n_EMPTY); } | T_ELSE ':' inner_statement_list { NTYPE($1, n_ELSE); $1->appendChild($3); $$ = $1; } ; parameter_list: non_empty_parameter_list | %empty { $$ = NNEW(n_DECLARATION_PARAMETER_LIST); } ; non_empty_parameter_list: optional_type parameter { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($1); $$->appendChild($2); $$->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); } | optional_type '&' parameter { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($1); $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); $2->appendChild($3); $$->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); } | optional_type '&' parameter '=' static_scalar { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($1); $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); $2->appendChild($3); $$->appendChild($5); $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); } | optional_type parameter '=' static_scalar { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($1); $$->appendChild($2); $$->appendChild($4); $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); } | non_empty_parameter_list ',' optional_type parameter { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($3); $$->appendChild($4); $$->appendChild(NNEW(n_EMPTY)); $$ = $1->appendChild($$); } | non_empty_parameter_list ',' optional_type '&' parameter { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($3); $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); $4->appendChild($5); $$->appendChild(NNEW(n_EMPTY)); $$ = $1->appendChild($$); } | non_empty_parameter_list ',' optional_type '&' parameter '=' static_scalar { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($3); $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); $4->appendChild($5); $$->appendChild($7); $$ = $1->appendChild($$); } | non_empty_parameter_list ',' optional_type parameter '=' static_scalar { $$ = NNEW(n_DECLARATION_PARAMETER); $$->appendChild($3); $$->appendChild($4); $$->appendChild($6); $$ = $1->appendChild($$); } ; parameter: T_ELLIPSIS T_VARIABLE { $$ = NTYPE($1, n_UNPACK); $$->appendChild(NTYPE($2, n_VARIABLE)); } | T_VARIABLE { $$ = NTYPE($1, n_VARIABLE); } ; optional_type: %empty { $$ = NNEW(n_EMPTY); } | type +| '?' type { + $$ = NNEW(n_NULLABLE_TYPE); + $$->appendChild($2); + } ; type: fully_qualified_class_name { $$ = $1; } | T_ARRAY { $$ = NTYPE($1, n_TYPE_NAME); } | T_CALLABLE { $$ = NTYPE($1, n_TYPE_NAME); } ; return_type: %empty { $$ = NNEW(n_EMPTY); } -| ':' '?' type { +| ':' optional_type { $$ = NNEW(n_DECLARATION_RETURN); $$->appendChild($2); - $$->appendChild($3); - } -| ':' type { - $$ = NNEW(n_DECLARATION_RETURN); - $$->appendChild(NNEW(n_EMPTY)); - $$->appendChild($2); } ; function_call_parameter_list: non_empty_function_call_parameter_list | %empty { $$ = NNEW(n_CALL_PARAMETER_LIST); } ; non_empty_function_call_parameter_list: argument { $$ = NNEW(n_CALL_PARAMETER_LIST)->appendChild($1); } | non_empty_function_call_parameter_list ',' argument { $$ = $1->appendChild($3); } ; argument: expr | T_ELLIPSIS expr { $$ = NNEW(n_UNPACK)->appendChild($1); } | '&' w_variable { NTYPE($1, n_VARIABLE_REFERENCE); $$ = $1->appendChild($2); } ; global_var_list: global_var_list ',' global_var { $1->appendChild($3); $$ = $1; } | global_var { $$ = NNEW(n_GLOBAL_DECLARATION_LIST); $$->appendChild($1); } ; global_var: T_VARIABLE { $$ = NTYPE($1, n_VARIABLE); } | '$' r_variable { $$ = NTYPE($1, n_VARIABLE_VARIABLE); $$->appendChild($2); } | '$' '{' expr '}' { $$ = NTYPE($1, n_VARIABLE_VARIABLE); $$->appendChild($3); } ; static_var_list: static_var_list ',' T_VARIABLE { NTYPE($3, n_VARIABLE); $$ = NNEW(n_STATIC_DECLARATION); $$->appendChild($3); $$->appendChild(NNEW(n_EMPTY)); $$ = $1->appendChild($$); } | static_var_list ',' T_VARIABLE '=' static_scalar { NTYPE($3, n_VARIABLE); $$ = NNEW(n_STATIC_DECLARATION); $$->appendChild($3); $$->appendChild($5); $$ = $1->appendChild($$); } | T_VARIABLE { NTYPE($1, n_VARIABLE); $$ = NNEW(n_STATIC_DECLARATION); $$->appendChild($1); $$->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); } | T_VARIABLE '=' static_scalar { NTYPE($1, n_VARIABLE); $$ = NNEW(n_STATIC_DECLARATION); $$->appendChild($1); $$->appendChild($3); $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); } ; class_statement_list: class_statement_list class_statement { $$ = $1->appendChild($2); } | %empty { $$ = NNEW(n_STATEMENT_LIST); } ; class_statement: variable_modifiers class_variable_declaration ';' { $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); $$->appendChild($1); $$->appendChildren($2); $$ = NNEW(n_STATEMENT)->appendChild($$); NMORE($$, $3); } | class_constant_declaration ';' { $$ = NNEW(n_STATEMENT)->appendChild($1); NMORE($$, $2); } | trait_use_statement { $$ = $1; } | method_modifiers function { /* empty */ } is_reference T_STRING '(' parameter_list ')' return_type method_body { $$ = NNEW(n_METHOD_DECLARATION); NMORE($$, $2); $$->appendChild($1); $$->appendChild($4); $$->appendChild(NTYPE($5, n_STRING)); $$->appendChild(NEXPAND($6, $7, $8)); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild($9); $$->appendChild($10); $$ = NNEW(n_STATEMENT)->appendChild($$); } ; trait_use_statement: T_USE trait_list trait_adaptations { $$ = NTYPE($1, n_TRAIT_USE); $$->appendChildren($2); $$->appendChild($3); } ; trait_list: fully_qualified_class_name { $$ = NNEW(n_TRAIT_USE_LIST)->appendChild($1); } | trait_list ',' fully_qualified_class_name { $$ = $1->appendChild($3); } ; trait_adaptations: ';' { $$ = NNEW(n_EMPTY); } | '{' trait_adaptation_list '}' { $$ = NEXPAND($1, $2, $3); } ; trait_adaptation_list: %empty { $$ = NNEW(n_TRAIT_ADAPTATION_LIST); } | non_empty_trait_adaptation_list { $$ = $1; } ; non_empty_trait_adaptation_list: trait_adaptation_statement { $$ = NNEW(n_TRAIT_ADAPTATION_LIST); $$->appendChild($1); } | non_empty_trait_adaptation_list trait_adaptation_statement { $1->appendChild($2); $$ = $1; } ; trait_adaptation_statement: trait_precedence ';' { $$ = NMORE($1, $2); } | trait_alias ';' { $$ = NMORE($1, $2); } ; trait_precedence: trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list { $$ = NNEW(n_TRAIT_INSTEADOF); $$->appendChild($1); $$->appendChild($3); } ; trait_reference_list: fully_qualified_class_name { $$ = NNEW(n_TRAIT_REFERENCE_LIST); $$->appendChild($1); } | trait_reference_list ',' fully_qualified_class_name { $1->appendChild($3); $$ = $1; } ; trait_method_reference: T_STRING { $$ = NNEW(n_TRAIT_METHOD_REFERENCE); $$->appendChild(NTYPE($1, n_STRING)); } | trait_method_reference_fully_qualified { $$ = $1; } ; trait_method_reference_fully_qualified: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { NTYPE($2, n_TRAIT_METHOD_REFERENCE); NEXPAND($1, $2, NTYPE($3, n_STRING)); $$ = $2; } ; trait_alias: trait_method_reference T_AS trait_modifiers T_STRING { $$ = NNEW(n_TRAIT_AS); $$->appendChild($1); $$->appendChild($3); $$->appendChild(NTYPE($4, n_STRING)); } | trait_method_reference T_AS member_modifier { $$ = NNEW(n_TRAIT_AS); $$->appendChild($1); $$->appendChild($3); $$->appendChild(NNEW(n_EMPTY)); } ; trait_modifiers: %empty { $$ = NNEW(n_EMPTY); } | member_modifier { $$ = NNEW(n_METHOD_MODIFIER_LIST); $$->appendChild(NTYPE($1, n_STRING)); } ; method_body: ';' /* abstract method */ { $$ = NNEW(n_EMPTY); } | '{' inner_statement_list '}' { $$ = NEXPAND($1, $2, $3); } ; variable_modifiers: non_empty_member_modifiers | T_VAR { $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); $$->appendChild(NTYPE($1, n_STRING)); } ; method_modifiers: %empty { $$ = NNEW(n_METHOD_MODIFIER_LIST); } | non_empty_member_modifiers { NTYPE($1, n_METHOD_MODIFIER_LIST); $$ = $1; } ; non_empty_member_modifiers: member_modifier { $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); $$->appendChild(NTYPE($1, n_STRING)); } | non_empty_member_modifiers member_modifier { $$ = $1->appendChild(NTYPE($2, n_STRING)); } ; member_modifier: T_PUBLIC | T_PROTECTED | T_PRIVATE | T_STATIC | T_ABSTRACT | T_FINAL ; class_variable_declaration: class_variable_declaration ',' T_VARIABLE { $$ = NNEW(n_CLASS_MEMBER_DECLARATION); $$->appendChild(NTYPE($3, n_VARIABLE)); $$->appendChild(NNEW(n_EMPTY)); $$ = $1->appendChild($$); } | class_variable_declaration ',' T_VARIABLE '=' static_scalar { $$ = NNEW(n_CLASS_MEMBER_DECLARATION); $$->appendChild(NTYPE($3, n_VARIABLE)); $$->appendChild($5); $$ = $1->appendChild($$); } | T_VARIABLE { $$ = NNEW(n_CLASS_MEMBER_DECLARATION); $$->appendChild(NTYPE($1, n_VARIABLE)); $$->appendChild(NNEW(n_EMPTY)); $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); } | T_VARIABLE '=' static_scalar { $$ = NNEW(n_CLASS_MEMBER_DECLARATION); $$->appendChild(NTYPE($1, n_VARIABLE)); $$->appendChild($3); $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); } ; class_constant_declaration: class_constant_declaration ',' T_STRING '=' static_scalar { $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); $$->appendChild(NTYPE($3, n_STRING)); $$->appendChild($5); $1->appendChild($$); $$ = $1; } | T_CONST T_STRING '=' static_scalar { NTYPE($1, n_CLASS_CONSTANT_DECLARATION_LIST); $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); $$->appendChild(NTYPE($2, n_STRING)); $$->appendChild($4); $1->appendChild($$); $$ = $1; } ; echo_expr_list: echo_expr_list ',' expr { $1->appendChild($3); } | expr { $$ = NNEW(n_ECHO_LIST); $$->appendChild($1); } ; for_expr: %empty { $$ = NNEW(n_EMPTY); } | non_empty_for_expr ; non_empty_for_expr: non_empty_for_expr ',' expr { $1->appendChild($3); } | expr { $$ = NNEW(n_EXPRESSION_LIST); $$->appendChild($1); } ; expr_without_variable: T_LIST '(' assignment_list ')' '=' expr { NTYPE($1, n_LIST); $1->appendChild(NEXPAND($2, $3, $4)); $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($5, n_OPERATOR)); $$->appendChild($6); } | variable '=' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable '=' '&' variable { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); NTYPE($3, n_VARIABLE_REFERENCE); $3->appendChild($4); $$->appendChild($3); } | variable '=' '&' T_NEW class_name_reference ctor_arguments { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); NTYPE($4, n_NEW); $4->appendChild($5); $4->appendChild($6); NTYPE($3, n_VARIABLE_REFERENCE); $3->appendChild($4); $$->appendChild($3); } | T_CLONE expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | variable T_PLUS_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_MINUS_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_MUL_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_DIV_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_CONCAT_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_MOD_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_AND_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_OR_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_XOR_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_SL_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | variable T_SR_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | rw_variable T_INC { $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); } | T_INC rw_variable { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | rw_variable T_DEC { $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); } | T_DEC rw_variable { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | expr T_BOOLEAN_OR expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_BOOLEAN_AND expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_LOGICAL_OR expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_LOGICAL_AND expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_LOGICAL_XOR expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '|' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '&' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '^' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '.' expr { /* The concatenation operator generates n_CONCATENATION_LIST instead of n_BINARY_EXPRESSION because we tend to run into stack depth issues in a lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ if ($1->type == n_CONCATENATION_LIST && $3->type == n_CONCATENATION_LIST) { $1->appendChild(NTYPE($2, n_OPERATOR)); $1->appendChildren($3); $$ = $1; } else if ($1->type == n_CONCATENATION_LIST) { $1->appendChild(NTYPE($2, n_OPERATOR)); $1->appendChild($3); $$ = $1; } else if ($3->type == n_CONCATENATION_LIST) { $$ = NNEW(n_CONCATENATION_LIST); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChildren($3); } else { $$ = NNEW(n_CONCATENATION_LIST); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } } | expr '+' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '-' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '*' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '/' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '%' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_SL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_SR expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | '+' expr %prec T_INC { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | '-' expr %prec T_INC { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | '!' expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | '~' expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | expr T_IS_IDENTICAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_IS_NOT_IDENTICAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_IS_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_IS_NOT_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '<' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_IS_SMALLER_OR_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr '>' expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_IS_GREATER_OR_EQUAL expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_SPACESHIP expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | expr T_INSTANCEOF class_name_reference { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | parenthesis_expr | new_expr | expr '?' expr ':' expr { $$ = NNEW(n_TERNARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); $$->appendChild(NTYPE($4, n_OPERATOR)); $$->appendChild($5); } | expr '?' ':' expr { $$ = NNEW(n_TERNARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild(NTYPE($3, n_OPERATOR)); $$->appendChild($4); } | expr T_COALESCE expr { $$ = NNEW(n_BINARY_EXPRESSION); $$->appendChild($1); $$->appendChild(NTYPE($2, n_OPERATOR)); $$->appendChild($3); } | internal_functions_in_yacc | T_INT_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_DOUBLE_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_STRING_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_ARRAY_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_OBJECT_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_BOOL_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_UNSET_CAST expr { $$ = NNEW(n_CAST_EXPRESSION); $$->appendChild(NTYPE($1, n_CAST)); $$->appendChild($2); } | T_EXIT exit_expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | '@' expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | T_BACKTICKS_EXPR { NTYPE($1, n_BACKTICKS_EXPRESSION); $$ = $1; } | scalar | combined_scalar_offset | combined_scalar | T_PRINT expr { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | T_YIELD { NTYPE($1, n_YIELD); $1->appendChild(NNEW(n_EMPTY)); $1->appendChild(NNEW(n_EMPTY)); $$ = $1; } | function is_reference '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { NSPAN($1, n_FUNCTION_DECLARATION, $9); $1->appendChild(NNEW(n_EMPTY)); $1->appendChild($2); $1->appendChild(NNEW(n_EMPTY)); $1->appendChild(NEXPAND($3, $4, $5)); $1->appendChild($6); $1->appendChild($7); $1->appendChild(NEXPAND($8, $9, $10)); $$ = $1; } | T_STATIC function is_reference '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { NSPAN($2, n_FUNCTION_DECLARATION, $10); NMORE($2, $1); $$ = NNEW(n_FUNCTION_MODIFIER_LIST); $$->appendChild(NTYPE($1, n_STRING)); $2->appendChild($1); $2->appendChild(NNEW(n_EMPTY)); $2->appendChild($3); $2->appendChild(NNEW(n_EMPTY)); $2->appendChild(NEXPAND($4, $5, $6)); $2->appendChild($7); $2->appendChild($8); $2->appendChild(NEXPAND($9, $10, $11)); $$ = $2; } ; yield_expr: T_YIELD expr_without_variable { NTYPE($1, n_YIELD); $2->appendChild(NNEW(n_EMPTY)); $1->appendChild($2); $$ = $1; } | T_YIELD variable { NTYPE($1, n_YIELD); $2->appendChild(NNEW(n_EMPTY)); $1->appendChild($2); $$ = $1; } | T_YIELD expr T_DOUBLE_ARROW expr_without_variable { NTYPE($1, n_YIELD); $1->appendChild($2); $1->appendChild($4); $$ = $1; } | T_YIELD expr T_DOUBLE_ARROW variable { NTYPE($1, n_YIELD); $1->appendChild($2); $1->appendChild($4); $$ = $1; } ; function: T_FUNCTION ; lexical_vars: %empty { $$ = NNEW(n_EMPTY); } | T_USE '(' lexical_var_list ')' { NTYPE($1, n_LEXICAL_VARIABLE_LIST); $1->appendChildren($3); $$ = $1; } ; lexical_var_list: lexical_var_list ',' T_VARIABLE { $$ = $1->appendChild(NTYPE($3, n_VARIABLE)); } | lexical_var_list ',' '&' T_VARIABLE { NTYPE($3, n_VARIABLE_REFERENCE); $3->appendChild(NTYPE($4, n_VARIABLE)); $$ = $1->appendChild($3); } | T_VARIABLE { $$ = NNEW(n_LEXICAL_VARIABLE_LIST); $$->appendChild(NTYPE($1, n_VARIABLE)); } | '&' T_VARIABLE { NTYPE($1, n_VARIABLE_REFERENCE); $1->appendChild(NTYPE($2, n_VARIABLE)); $$ = NNEW(n_LEXICAL_VARIABLE_LIST); $$->appendChild($1); } ; function_call: namespace_name '(' function_call_parameter_list ')' { $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($1); $$->appendChild(NEXPAND($2, $3, $4)); } | T_NAMESPACE T_NS_SEPARATOR namespace_name '(' function_call_parameter_list ')' { NMORE($3, $1); $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($3); $$->appendChild(NEXPAND($4, $5, $6)); } | T_NS_SEPARATOR namespace_name '(' function_call_parameter_list ')' { NMORE($2, $1); $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($2); $$->appendChild(NEXPAND($3, $4, $5)); } | class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' function_call_parameter_list ')' { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); $$->appendChild(NEXPAND($4, $5, $6)); } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' function_call_parameter_list ')' { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); $$->appendChild(NEXPAND($4, $5, $6)); } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' function_call_parameter_list ')' { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); $$->appendChild(NEXPAND($4, $5, $6)); } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' function_call_parameter_list ')' { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); $$->appendChild(NEXPAND($4, $5, $6)); } | variable_without_objects '(' function_call_parameter_list ')' { $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($1); $$->appendChild(NEXPAND($2, $3, $4)); } ; class_name: T_STATIC { $$ = NTYPE($1, n_CLASS_NAME); } | namespace_name { $$ = NTYPE($1, n_CLASS_NAME); } | T_NAMESPACE T_NS_SEPARATOR namespace_name { NMORE($3, $1); $$ = NTYPE($3, n_CLASS_NAME); } | T_NS_SEPARATOR namespace_name { NMORE($2, $1); $$ = NTYPE($2, n_CLASS_NAME); } ; fully_qualified_class_name: namespace_name { $$ = NTYPE($1, n_CLASS_NAME); } | T_NAMESPACE T_NS_SEPARATOR namespace_name { NMORE($3, $1); $$ = NTYPE($3, n_CLASS_NAME); } | T_NS_SEPARATOR namespace_name { NMORE($2, $1); $$ = NTYPE($2, n_CLASS_NAME); } ; class_name_reference: class_name | dynamic_class_name_reference ; dynamic_class_name_reference: base_variable T_OBJECT_OPERATOR object_property dynamic_class_name_variable_properties { $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); $$->appendChild($1); $$->appendChild($3); for (xhpast::node_list_t::iterator ii = $4->children.begin(); ii != $4->children.end(); ++ii) { $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); $$->appendChild(*ii); } } | base_variable ; dynamic_class_name_variable_properties: dynamic_class_name_variable_properties dynamic_class_name_variable_property { $$ = $1->appendChild($2); } | %empty { $$ = NNEW(n_EMPTY); } ; dynamic_class_name_variable_property: T_OBJECT_OPERATOR object_property { $$ = $2; } ; exit_expr: %empty { $$ = NNEW(n_EMPTY); } | '(' ')' { NSPAN($1, n_EMPTY, $2); $$ = $1; } | '(' expr ')' { NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); $1->appendChild($2); $$ = $1; } ; ctor_arguments: %empty { $$ = NNEW(n_EMPTY); } | '(' function_call_parameter_list ')' { $$ = NEXPAND($1, $2, $3); } ; common_scalar: T_LNUMBER { $$ = NTYPE($1, n_NUMERIC_SCALAR); } | T_DNUMBER { $$ = NTYPE($1, n_NUMERIC_SCALAR); } | T_CONSTANT_ENCAPSED_STRING { $$ = NTYPE($1, n_STRING_SCALAR); } | T_LINE { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_FILE { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_DIR { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_CLASS_C { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_METHOD_C { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_TRAIT_C { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_FUNC_C { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_NS_C { $$ = NTYPE($1, n_MAGIC_SCALAR); } | T_HEREDOC { $$ = NTYPE($1, n_HEREDOC); } ; static_scalar: /* compile-time evaluated scalars */ common_scalar | namespace_name | T_NAMESPACE T_NS_SEPARATOR namespace_name { NMORE($3, $1); $$ = $3; } | T_NS_SEPARATOR namespace_name { NMORE($2, $1); $$ = $2; } | '+' static_scalar { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | '-' static_scalar { $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); $$->appendChild(NTYPE($1, n_OPERATOR)); $$->appendChild($2); } | T_ARRAY '(' static_array_pair_list ')' { NTYPE($1, n_ARRAY_LITERAL); $1->appendChild(NEXPAND($2, $3, $4)); $$ = $1; } | '[' static_array_pair_list ']' { NTYPE($1, n_ARRAY_LITERAL); $1->appendChild(NEXPAND($1, $2, $3)); $$ = $1; } | static_class_constant ; static_class_constant: class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); } ; scalar: T_STRING_VARNAME | class_constant | namespace_name | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = NMORE($3, $1); } | T_NS_SEPARATOR namespace_name { $$ = NMORE($2, $1); } | common_scalar ; static_array_pair_list: %empty { $$ = NNEW(n_ARRAY_VALUE_LIST); } | non_empty_static_array_pair_list possible_comma { $$ = NMORE($1, $2); } ; possible_comma: %empty { $$ = NNEW(n_EMPTY); } | ',' ; non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($3); $$->appendChild($5); $$ = $1->appendChild($$); } | non_empty_static_array_pair_list ',' static_scalar { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild($3); $$ = $1->appendChild($$); } | static_scalar T_DOUBLE_ARROW static_scalar { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($1); $$->appendChild($3); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } | static_scalar { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild($1); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } ; expr: r_variable | expr_without_variable ; r_variable: variable ; w_variable: variable ; rw_variable: variable ; variable: base_variable_with_function_calls T_OBJECT_OPERATOR object_property method_or_not variable_properties { $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); $$->appendChild($1); $$->appendChild($3); if ($4->type != n_EMPTY) { $$ = NNEW(n_METHOD_CALL)->appendChild($$); $$->appendChild($4); } for (xhpast::node_list_t::iterator ii = $5->children.begin(); ii != $5->children.end(); ++ii) { if ((*ii)->type == n_CALL_PARAMETER_LIST) { $$ = NNEW(n_METHOD_CALL)->appendChild($$); $$->appendChild((*ii)); } else { $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); $$->appendChild((*ii)); } } } | base_variable_with_function_calls ; variable_properties: variable_properties variable_property { $$ = $1->appendChildren($2); } | %empty { $$ = NNEW(n_EMPTY); } ; variable_property: T_OBJECT_OPERATOR object_property method_or_not { $$ = NNEW(n_EMPTY); $$->appendChild($2); if ($3->type != n_EMPTY) { $$->appendChild($3); } } ; array_method_dereference: array_method_dereference '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | method '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } ; method: '(' function_call_parameter_list ')' { $$ = NEXPAND($1, $2, $3); } ; method_or_not: method | array_method_dereference | %empty { $$ = NNEW(n_EMPTY); } ; variable_without_objects: reference_variable | simple_indirect_reference reference_variable { xhpast::Node *last = $1; NMORE($1, $2); while (last->firstChild() && last->firstChild()->type == n_VARIABLE_VARIABLE) { NMORE(last, $2); last = last->firstChild(); } last->appendChild($2); $$ = $1; } ; static_member: class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild($3); } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild($3); } ; variable_class_name: reference_variable ; array_function_dereference: array_function_dereference '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | function_call '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } ; base_variable_with_function_calls: base_variable | array_function_dereference | function_call ; base_variable: reference_variable | '(' new_expr ')' { $$ = NEXPAND($1, $2, $3); } | simple_indirect_reference reference_variable { xhpast::Node *last = $1; NMORE($1, $2); while (last->firstChild() && last->firstChild()->type == n_VARIABLE_VARIABLE) { NMORE(last, $2); last = last->firstChild(); } last->appendChild($2); $$ = $1; } | static_member ; reference_variable: reference_variable '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | reference_variable '{' expr '}' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | compound_variable ; compound_variable: T_VARIABLE { NTYPE($1, n_VARIABLE); } | '$' '{' expr '}' { NSPAN($1, n_VARIABLE_EXPRESSION, $4); $1->appendChild($3); $$ = $1; } ; dim_offset: %empty { $$ = NNEW(n_EMPTY); } | expr { $$ = $1; } ; object_property: object_dim_list | variable_without_objects ; object_dim_list: object_dim_list '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | object_dim_list '{' expr '}' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | variable_name ; variable_name: T_STRING { NTYPE($1, n_STRING); $$ = $1; } | '{' expr '}' { $$ = NEXPAND($1, $2, $3); } ; simple_indirect_reference: '$' { $$ = NTYPE($1, n_VARIABLE_VARIABLE); } | simple_indirect_reference '$' { $2 = NTYPE($2, n_VARIABLE_VARIABLE); xhpast::Node *last = $1; while (last->firstChild() && last->firstChild()->type == n_VARIABLE_VARIABLE) { last = last->firstChild(); } last->appendChild($2); $$ = $1; } ; assignment_list: assignment_list ',' assignment_list_element { $$ = $1->appendChild($3); } | assignment_list_element { $$ = NNEW(n_ASSIGNMENT_LIST); $$->appendChild($1); } ; assignment_list_element: variable | T_LIST '(' assignment_list ')' { $$ = NNEW(n_LIST); $$->appendChild(NEXPAND($2, $3, $4)); } | %empty { $$ = NNEW(n_EMPTY); } ; array_pair_list: %empty { $$ = NNEW(n_ARRAY_VALUE_LIST); } | non_empty_array_pair_list possible_comma { $$ = NMORE($1, $2); } ; non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($3); $$->appendChild($5); $$ = $1->appendChild($$); } | non_empty_array_pair_list ',' expr { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild($3); $$ = $1->appendChild($$); } | expr T_DOUBLE_ARROW expr { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($1); $$->appendChild($3); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } | expr { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild($1); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($3); $$->appendChild(NTYPE($5, n_VARIABLE_REFERENCE)->appendChild($6)); $$ = $1->appendChild($$); } | non_empty_array_pair_list ',' '&' w_variable { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); $$ = $1->appendChild($$); } | expr T_DOUBLE_ARROW '&' w_variable { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild($1); $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } | '&' w_variable { $$ = NNEW(n_ARRAY_VALUE); $$->appendChild(NNEW(n_EMPTY)); $$->appendChild(NTYPE($1, n_VARIABLE_REFERENCE)->appendChild($2)); $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); } ; internal_functions_in_yacc: T_ISSET '(' isset_variables ')' { NTYPE($1, n_SYMBOL_NAME); NSPAN($2, n_CALL_PARAMETER_LIST, $4); $2->appendChildren($3); $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($1); $$->appendChild($2); } | T_EMPTY '(' variable ')' { NTYPE($1, n_SYMBOL_NAME); NSPAN($2, n_CALL_PARAMETER_LIST, $4); $2->appendChild($3); $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($1); $$->appendChild($2); } | T_INCLUDE expr { $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); } | T_INCLUDE_ONCE expr { $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); } | T_EVAL '(' expr ')' { NTYPE($1, n_SYMBOL_NAME); NSPAN($2, n_CALL_PARAMETER_LIST, $4); $2->appendChild($3); $$ = NNEW(n_FUNCTION_CALL); $$->appendChild($1); $$->appendChild($2); } | T_REQUIRE expr { $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); } | T_REQUIRE_ONCE expr { $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); } ; isset_variables: variable { $$ = NNEW(n_EMPTY); $$->appendChild($1); } | isset_variables ',' variable { $$ = $1->appendChild($3); } ; parenthesis_expr: '(' expr ')' { NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); $1->appendChild($2); $$ = $1; } | '(' yield_expr ')' { $$ = NEXPAND($1, $2, $3); } ; combined_scalar_offset: combined_scalar '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | combined_scalar_offset '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild(NTYPE($1, n_STRING_SCALAR)); $$->appendChild($3); NMORE($$, $4); } | class_constant '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild($1); $$->appendChild($3); NMORE($$, $4); } | T_STRING '[' dim_offset ']' { $$ = NNEW(n_INDEX_ACCESS); $$->appendChild(NTYPE($1, n_STRING)); $$->appendChild($3); NMORE($$, $4); } ; combined_scalar: T_ARRAY '(' array_pair_list ')' { NTYPE($1, n_ARRAY_LITERAL); $1->appendChild(NEXPAND($2, $3, $4)); $$ = $1; } | '[' array_pair_list ']' { NTYPE($1, n_ARRAY_LITERAL); $1->appendChild(NEXPAND($1, $2, $3)); $$ = $1; } ; new_expr: T_NEW class_name_reference ctor_arguments { NTYPE($1, n_NEW); $1->appendChild($2); $1->appendChild($3); $$ = $1; } ; class_constant: class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { $$ = NNEW(n_CLASS_STATIC_ACCESS); $$->appendChild($1); $$->appendChild(NTYPE($3, n_STRING)); } ; %% const char* yytokname(int tok) { if (tok < 255) { return NULL; } return yytname[YYTRANSLATE(tok)]; } diff --git a/support/xhpast/parser.yacc.cpp b/support/xhpast/parser.yacc.cpp deleted file mode 100644 index 6d985bb..0000000 --- a/support/xhpast/parser.yacc.cpp +++ /dev/null @@ -1,7578 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "3.0.4" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - -/* Substitute the variable and function names. */ -#define yyparse xhpastparse -#define yylex xhpastlex -#define yyerror xhpasterror -#define yydebug xhpastdebug -#define yynerrs xhpastnerrs - - -/* Copy the first part of user declarations. */ -#line 1 "parser.y" /* yacc.c:339 */ - -/* - * If you modify this grammar, please update the version number in - * ./xhpast.cpp and libphutil/src/parser/xhpast/bin/xhpast_parse.php - */ - -#include "ast.hpp" -#include "node_names.hpp" -// PHP's if/else rules use right reduction rather than left reduction which -// means while parsing nested if/else's the stack grows until it the last -// statement is read. This is annoying, particularly because of a quirk in -// bison. -// http://www.gnu.org/software/bison/manual/html_node/Memory-Management.html -// Apparently if you compile a bison parser with g++ it can no longer grow -// the stack. The work around is to just make your initial stack ridiculously -// large. Unfortunately that increases memory usage while parsing which is -// dumb. Anyway, putting a TODO here to fix PHP's if/else grammar. -#define YYINITDEPTH 500 -#line 21 "parser.y" /* yacc.c:339 */ - -#undef yyextra -#define yyextra static_cast(xhpastget_extra(yyscanner)) -#undef yylineno -#define yylineno yyextra->first_lineno -#define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) -#define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) -#define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) - -#define NNEW(t) \ - (new xhpast::Node(t)) - -#define NTYPE(n, type) \ - ((n)->setType(type)) - -#define NMORE(n, end) \ - ((n)->expandRange(end)) - -#define NSPAN(n, type, end) \ - (NMORE(NTYPE((n), type), end)) - -#define NEXPAND(l, n, r) \ - ((n)->expandRange(l)->expandRange(r)) - -using namespace std; - -static void yyerror(void* yyscanner, void* _, const char* error) { - if (yyextra->terminated) { - return; - } - yyextra->terminated = true; - yyextra->error = error; -} - - -#line 127 "parser.yacc.cpp" /* yacc.c:339 */ - -# ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 1 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "parser.yacc.hpp". */ -#ifndef YY_XHPAST_PARSER_YACC_HPP_INCLUDED -# define YY_XHPAST_PARSER_YACC_HPP_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int xhpastdebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - T_INCLUDE = 258, - T_INCLUDE_ONCE = 259, - T_EVAL = 260, - T_REQUIRE = 261, - T_REQUIRE_ONCE = 262, - T_LOGICAL_OR = 263, - T_LOGICAL_XOR = 264, - T_LOGICAL_AND = 265, - T_PRINT = 266, - T_PLUS_EQUAL = 267, - T_MINUS_EQUAL = 268, - T_MUL_EQUAL = 269, - T_DIV_EQUAL = 270, - T_CONCAT_EQUAL = 271, - T_MOD_EQUAL = 272, - T_AND_EQUAL = 273, - T_OR_EQUAL = 274, - T_XOR_EQUAL = 275, - T_SL_EQUAL = 276, - T_SR_EQUAL = 277, - T_COALESCE = 278, - T_BOOLEAN_OR = 279, - T_BOOLEAN_AND = 280, - T_IS_EQUAL = 281, - T_IS_NOT_EQUAL = 282, - T_IS_IDENTICAL = 283, - T_IS_NOT_IDENTICAL = 284, - T_SPACESHIP = 285, - T_IS_SMALLER_OR_EQUAL = 286, - T_IS_GREATER_OR_EQUAL = 287, - T_SL = 288, - T_SR = 289, - T_INSTANCEOF = 290, - T_INC = 291, - T_DEC = 292, - T_INT_CAST = 293, - T_DOUBLE_CAST = 294, - T_STRING_CAST = 295, - T_UNICODE_CAST = 296, - T_BINARY_CAST = 297, - T_ARRAY_CAST = 298, - T_OBJECT_CAST = 299, - T_BOOL_CAST = 300, - T_UNSET_CAST = 301, - T_NEW = 302, - T_CLONE = 303, - T_EXIT = 304, - T_IF = 305, - T_ELSEIF = 306, - T_ELSE = 307, - T_ENDIF = 308, - T_LNUMBER = 309, - T_DNUMBER = 310, - T_STRING = 311, - T_STRING_VARNAME = 312, - T_VARIABLE = 313, - T_NUM_STRING = 314, - T_INLINE_HTML = 315, - T_CHARACTER = 316, - T_BAD_CHARACTER = 317, - T_ENCAPSED_AND_WHITESPACE = 318, - T_CONSTANT_ENCAPSED_STRING = 319, - T_BACKTICKS_EXPR = 320, - T_ECHO = 321, - T_DO = 322, - T_WHILE = 323, - T_ENDWHILE = 324, - T_FOR = 325, - T_ENDFOR = 326, - T_FOREACH = 327, - T_ENDFOREACH = 328, - T_DECLARE = 329, - T_ENDDECLARE = 330, - T_AS = 331, - T_SWITCH = 332, - T_ENDSWITCH = 333, - T_CASE = 334, - T_DEFAULT = 335, - T_BREAK = 336, - T_CONTINUE = 337, - T_GOTO = 338, - T_FUNCTION = 339, - T_CONST = 340, - T_RETURN = 341, - T_TRY = 342, - T_CATCH = 343, - T_THROW = 344, - T_USE = 345, - T_GLOBAL = 346, - T_STATIC = 347, - T_ABSTRACT = 348, - T_FINAL = 349, - T_PRIVATE = 350, - T_PROTECTED = 351, - T_PUBLIC = 352, - T_VAR = 353, - T_UNSET = 354, - T_ISSET = 355, - T_EMPTY = 356, - T_HALT_COMPILER = 357, - T_CLASS = 358, - T_INTERFACE = 359, - T_EXTENDS = 360, - T_IMPLEMENTS = 361, - T_OBJECT_OPERATOR = 362, - T_DOUBLE_ARROW = 363, - T_LIST = 364, - T_ARRAY = 365, - T_CLASS_C = 366, - T_METHOD_C = 367, - T_FUNC_C = 368, - T_LINE = 369, - T_FILE = 370, - T_COMMENT = 371, - T_DOC_COMMENT = 372, - T_OPEN_TAG = 373, - T_OPEN_TAG_WITH_ECHO = 374, - T_OPEN_TAG_FAKE = 375, - T_CLOSE_TAG = 376, - T_WHITESPACE = 377, - T_START_HEREDOC = 378, - T_END_HEREDOC = 379, - T_HEREDOC = 380, - T_DOLLAR_OPEN_CURLY_BRACES = 381, - T_CURLY_OPEN = 382, - T_PAAMAYIM_NEKUDOTAYIM = 383, - T_BINARY_DOUBLE = 384, - T_BINARY_HEREDOC = 385, - T_NAMESPACE = 386, - T_NS_C = 387, - T_DIR = 388, - T_NS_SEPARATOR = 389, - T_INSTEADOF = 390, - T_CALLABLE = 391, - T_TRAIT = 392, - T_TRAIT_C = 393, - T_YIELD = 394, - T_FINALLY = 395, - T_ELLIPSIS = 396 - }; -#endif - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - - - -int xhpastparse (void* yyscanner, xhpast::Node** root); - -#endif /* !YY_XHPAST_PARSER_YACC_HPP_INCLUDED */ - -/* Copy the second part of user declarations. */ - -#line 319 "parser.yacc.cpp" /* yacc.c:358 */ - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 7500 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 168 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 135 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 442 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 908 - -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 396 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 50, 2, 2, 166, 49, 32, 2, - 161, 162, 47, 44, 8, 45, 46, 48, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 26, 163, - 38, 13, 40, 25, 64, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 65, 2, 167, 31, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 164, 30, 165, 52, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 27, 28, - 29, 33, 34, 35, 36, 37, 39, 41, 42, 43, - 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160 -}; - -#if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 210, 210, 216, 219, 225, 228, 234, 235, 236, - 237, 242, 249, 255, 263, 268, 275, 278, 285, 290, - 296, 302, 312, 319, 329, 332, 338, 339, 340, 341, - 349, 350, 356, 359, 362, 368, 371, 401, 420, 427, - 435, 448, 455, 462, 469, 476, 483, 490, 497, 504, - 509, 514, 519, 523, 527, 531, 537, 555, 572, 578, - 582, 591, 600, 608, 619, 623, 629, 641, 644, 648, - 657, 661, 668, 672, 676, 680, 683, 689, 705, 717, - 732, 736, 743, 750, 757, 760, 766, 770, 773, 781, - 784, 792, 795, 801, 804, 810, 811, 819, 820, 828, - 829, 837, 838, 846, 852, 863, 866, 876, 881, 893, - 896, 904, 914, 915, 919, 920, 928, 931, 941, 944, - 954, 957, 965, 968, 976, 977, 983, 991, 1000, 1009, - 1017, 1025, 1034, 1044, 1056, 1060, 1066, 1069, 1073, 1076, - 1079, 1085, 1088, 1093, 1101, 1102, 1108, 1111, 1117, 1118, - 1121, 1128, 1132, 1139, 1142, 1146, 1153, 1161, 1169, 1177, - 1188, 1191, 1197, 1205, 1209, 1212, 1212, 1230, 1238, 1241, - 1247, 1250, 1256, 1259, 1265, 1269, 1276, 1279, 1285, 1293, - 1297, 1304, 1308, 1314, 1322, 1328, 1337, 1340, 1348, 1351, - 1357, 1358, 1365, 1368, 1375, 1379, 1385, 1386, 1387, 1388, - 1389, 1390, 1394, 1401, 1408, 1415, 1425, 1434, 1446, 1449, - 1456, 1459, 1464, 1467, 1474, 1482, 1488, 1498, 1512, 1517, - 1523, 1529, 1535, 1541, 1547, 1553, 1559, 1565, 1571, 1577, - 1583, 1588, 1593, 1598, 1603, 1609, 1615, 1621, 1627, 1633, - 1639, 1645, 1651, 1677, 1683, 1689, 1695, 1701, 1707, 1713, - 1719, 1724, 1729, 1734, 1739, 1745, 1751, 1757, 1763, 1769, - 1775, 1781, 1787, 1793, 1799, 1800, 1801, 1809, 1817, 1823, - 1824, 1829, 1834, 1839, 1844, 1849, 1854, 1859, 1864, 1869, - 1873, 1874, 1875, 1876, 1881, 1887, 1902, 1926, 1932, 1938, - 1944, 1953, 1957, 1960, 1968, 1971, 1976, 1980, 1989, 1994, - 2001, 2007, 2016, 2025, 2034, 2043, 2051, 2054, 2057, 2061, - 2068, 2071, 2075, 2082, 2083, 2087, 2102, 2106, 2109, 2115, - 2121, 2124, 2128, 2136, 2139, 2145, 2148, 2151, 2154, 2157, - 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2184, 2185, 2186, - 2190, 2194, 2199, 2204, 2209, 2214, 2218, 2226, 2227, 2228, - 2229, 2232, 2235, 2239, 2242, 2248, 2251, 2255, 2266, 2273, - 2280, 2290, 2291, 2295, 2299, 2303, 2307, 2333, 2337, 2340, - 2346, 2356, 2362, 2371, 2377, 2378, 2379, 2385, 2386, 2401, - 2406, 2414, 2418, 2424, 2433, 2434, 2435, 2439, 2440, 2443, - 2455, 2459, 2465, 2471, 2475, 2478, 2486, 2489, 2495, 2496, - 2500, 2506, 2512, 2516, 2520, 2526, 2529, 2544, 2547, 2554, - 2555, 2559, 2565, 2568, 2574, 2581, 2588, 2595, 2602, 2609, - 2616, 2623, 2633, 2643, 2653, 2656, 2659, 2669, 2672, 2678, - 2682, 2688, 2693, 2699, 2705, 2711, 2717, 2723, 2732, 2737, - 2745, 2754, 2759 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 1 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", - "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", - "T_LOGICAL_AND", "T_PRINT", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", - "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", - "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", - "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", - "'^'", "'&'", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", - "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", - "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", - "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", - "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_UNICODE_CAST", - "T_BINARY_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", - "T_UNSET_CAST", "'@'", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", - "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", - "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", - "T_CHARACTER", "T_BAD_CHARACTER", "T_ENCAPSED_AND_WHITESPACE", - "T_CONSTANT_ENCAPSED_STRING", "T_BACKTICKS_EXPR", "T_ECHO", "T_DO", - "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", - "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", - "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", - "T_FUNCTION", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_THROW", - "T_USE", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", - "T_PROTECTED", "T_PUBLIC", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", - "T_HALT_COMPILER", "T_CLASS", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", - "T_OBJECT_OPERATOR", "T_DOUBLE_ARROW", "T_LIST", "T_ARRAY", "T_CLASS_C", - "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_COMMENT", - "T_DOC_COMMENT", "T_OPEN_TAG", "T_OPEN_TAG_WITH_ECHO", "T_OPEN_TAG_FAKE", - "T_CLOSE_TAG", "T_WHITESPACE", "T_START_HEREDOC", "T_END_HEREDOC", - "T_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", - "T_PAAMAYIM_NEKUDOTAYIM", "T_BINARY_DOUBLE", "T_BINARY_HEREDOC", - "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_INSTEADOF", - "T_CALLABLE", "T_TRAIT", "T_TRAIT_C", "T_YIELD", "T_FINALLY", - "T_ELLIPSIS", "'('", "')'", "';'", "'{'", "'}'", "'$'", "']'", "$accept", - "start", "top_statement_list", "namespace_name", "top_statement", - "use_declarations", "use_declaration", "constant_declaration", - "inner_statement_list", "inner_statement", "statement", - "unticked_statement", "catch_list", "catch", "finally_statement", - "non_empty_finally_statement", "unset_variables", "unset_variable", - "function_declaration_statement", "class_declaration_statement", - "is_reference", "unticked_function_declaration_statement", - "unticked_class_declaration_statement", "class_entry_type", - "extends_from", "interface_entry", "interface_extends_list", - "implements_list", "interface_list", "foreach_optional_arg", - "foreach_variable", "for_statement", "foreach_statement", - "declare_statement", "declare_list", "switch_case_list", "case_list", - "case_separator", "while_statement", "elseif_list", "new_elseif_list", - "else_single", "new_else_single", "parameter_list", - "non_empty_parameter_list", "parameter", "optional_type", "type", - "return_type", "function_call_parameter_list", - "non_empty_function_call_parameter_list", "argument", "global_var_list", - "global_var", "static_var_list", "class_statement_list", - "class_statement", "$@1", "trait_use_statement", "trait_list", - "trait_adaptations", "trait_adaptation_list", - "non_empty_trait_adaptation_list", "trait_adaptation_statement", - "trait_precedence", "trait_reference_list", "trait_method_reference", - "trait_method_reference_fully_qualified", "trait_alias", - "trait_modifiers", "method_body", "variable_modifiers", - "method_modifiers", "non_empty_member_modifiers", "member_modifier", - "class_variable_declaration", "class_constant_declaration", - "echo_expr_list", "for_expr", "non_empty_for_expr", - "expr_without_variable", "yield_expr", "function", "lexical_vars", - "lexical_var_list", "function_call", "class_name", - "fully_qualified_class_name", "class_name_reference", - "dynamic_class_name_reference", "dynamic_class_name_variable_properties", - "dynamic_class_name_variable_property", "exit_expr", "ctor_arguments", - "common_scalar", "static_scalar", "static_class_constant", "scalar", - "static_array_pair_list", "possible_comma", - "non_empty_static_array_pair_list", "expr", "r_variable", "w_variable", - "rw_variable", "variable", "variable_properties", "variable_property", - "array_method_dereference", "method", "method_or_not", - "variable_without_objects", "static_member", "variable_class_name", - "array_function_dereference", "base_variable_with_function_calls", - "base_variable", "reference_variable", "compound_variable", "dim_offset", - "object_property", "object_dim_list", "variable_name", - "simple_indirect_reference", "assignment_list", - "assignment_list_element", "array_pair_list", - "non_empty_array_pair_list", "internal_functions_in_yacc", - "isset_variables", "parenthesis_expr", "combined_scalar_offset", - "combined_scalar", "new_expr", "class_constant", YY_NULLPTR -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 44, 263, - 264, 265, 266, 61, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 63, 58, 278, 279, 280, - 124, 94, 38, 281, 282, 283, 284, 285, 60, 286, - 62, 287, 288, 289, 43, 45, 46, 42, 47, 37, - 33, 290, 126, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 64, 91, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 40, 41, 59, 123, 125, 36, 93 -}; -# endif - -#define YYPACT_NINF -694 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-694))) - -#define YYTABLE_NINF -382 - -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-382))) - - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -694, 81, 1776, -694, 5946, 5946, -75, 5946, 5946, 5946, - 5946, 5946, 5946, 5946, 395, 395, 5946, 5946, 5946, 5946, - 5946, 5946, 5946, 5946, 4616, 466, 5946, -73, -71, -694, - -694, 65, -694, -694, -694, 49, -694, 5946, 4474, -68, - -59, -45, -35, -18, 4749, 4882, 129, -694, 147, 5015, - -11, 5946, -13, -19, -4, 110, 113, 88, 92, 112, - 116, -694, -694, 124, 137, -694, -694, -694, -694, -694, - -694, -694, -694, -694, 153, -694, -694, 208, -694, -694, - 5946, 6079, -694, -694, 141, -50, -694, 11, -694, -694, - -694, -694, -694, -694, 245, 253, -694, 176, 313, 284, - 222, -694, -694, 6451, -694, 227, 1240, 191, -694, 224, - 316, 257, -694, 80, -694, -6, -694, -694, 320, 323, - -694, 325, 333, 297, 249, -694, 313, 7252, 7252, 5946, - 7252, 7252, 7358, -694, -694, 357, -694, -694, -694, 251, - 208, 343, 64, 267, -694, -694, 273, -694, -694, -694, - -694, -694, -694, -694, -694, -694, 395, 7047, 255, 415, - 272, 208, 274, 281, 269, -694, 285, 311, -22, -6, - -694, 5148, -694, 5946, -694, 5946, 5946, 13, 7252, 351, - 5946, 5946, 5946, 382, 5946, -694, 6502, -694, 6545, 296, - 447, -694, 298, 7252, 1217, -694, 6588, 208, -30, 19, - -694, -694, 212, 20, -694, 449, 21, 313, -694, -694, - 395, 395, 395, 326, 402, 4616, 208, -694, -57, 98, - 131, 7090, 148, 328, 6639, 334, 1918, 5946, 398, 1272, - 422, -694, 378, 380, -694, -694, -33, 5946, -39, 5946, - 5946, 5946, 5281, 5946, 5946, 5946, 5946, 5946, 5946, 5946, - 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, - 5946, 5946, 5946, 5946, 5946, 5946, 466, -694, -694, -694, - 5414, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, - 5946, 5946, 1272, -7, 5946, 57, 5946, 5946, 141, -9, - 5946, 5946, 5946, 344, 6682, 208, 73, 334, 12, 23, - -694, -694, 5547, -694, 5680, -694, 208, 274, 47, 1272, - -694, 47, 57, -16, -694, 6725, 6775, 7252, 345, 347, - 5946, -694, 350, 6818, 352, 519, 7252, 440, 758, 523, - 29, 6861, -694, -694, -694, 895, -694, -694, 2060, -694, - -12, 462, -13, -694, 5946, -694, -694, -19, -694, 895, - 465, -694, 385, 31, -694, -694, -694, 32, 387, 388, - 389, -694, 33, -694, 396, 109, 1492, -694, -694, 1272, - 5946, -694, -694, -694, 399, -694, -694, -694, -694, -694, - 1062, -694, 395, 5946, 397, 549, -694, 7252, 551, 185, - 442, 185, 401, 408, 241, 403, 411, 412, -16, -6, - 7294, 7333, 7358, 5946, 7194, 7383, 7406, 7428, 7449, 4669, - 1472, 1626, 1626, 1626, 1626, 1626, 970, 970, 970, 970, - 649, 649, 306, 306, 306, 357, 357, 357, -694, 165, - 7358, 7358, 7358, 7358, 7358, 7358, 7358, 7358, 7358, 7358, - 7358, 7358, 414, 413, 417, 416, -694, 5946, -694, 419, - -10, -694, 418, 6224, 421, 423, 424, -694, 105, 411, - 413, 395, 7252, 395, 7151, 274, -694, 427, -694, -694, - -694, 3764, -694, -694, 7252, 5946, 3906, 5946, 5946, 395, - 197, 895, 506, 4048, 22, 895, 895, 895, -694, 425, - 439, 208, -38, 450, -694, -694, -694, 78, 524, -694, - -694, 6267, -694, -694, 589, 241, 395, 441, 395, -694, - -694, -694, 402, 402, 590, -694, 1272, -694, 1634, 443, - 170, 431, 445, -694, -694, 7252, -694, 1272, 895, 464, - 208, 274, -694, 185, 454, 613, -694, -694, 241, -694, - -694, 461, 617, 28, -694, -694, -694, 1272, 1272, -16, - 7383, 5946, 466, -694, -694, 1272, 1272, -694, 6310, 1272, - 564, 566, -694, 5946, 5946, -694, -694, -694, -694, -694, - -694, -694, 5813, -694, 509, -694, -694, 6911, -694, -694, - -694, 474, 7252, 511, 395, 511, -694, -694, 628, -694, - -694, -694, 479, 480, -694, -694, -694, 518, 482, 639, - 895, 208, -3, 575, 490, 488, 78, -694, -694, -694, - -694, 895, 495, -694, -694, -694, 37, -694, 5946, 496, - -694, -694, 497, -694, -694, 208, 274, 613, -694, 185, - 626, 499, 553, 276, -14, -694, 587, 656, 508, 512, - 7383, 269, 513, 514, -694, 516, 5946, 5946, 545, 515, - 6363, 395, 7252, 57, -694, 3622, 271, 510, 2202, 5946, - 197, 521, -694, 526, 895, 2344, -694, 314, -694, 14, - 895, -694, 895, -694, 537, 122, -694, 185, -694, -694, - -694, -694, -694, 553, -694, 7358, -694, -694, 274, 723, - -694, 606, 185, -694, -694, -694, -694, -694, -694, -694, - -694, -694, -694, 624, 297, 498, -694, 24, 678, 544, - 678, 43, 693, -694, 895, -694, -694, -694, -694, -694, - -694, 540, 541, 57, -694, -694, -694, -694, -694, 289, - 554, 4474, -694, -694, 556, 550, -694, 4190, 4190, -694, - 557, 337, 559, 5946, 35, 149, -694, -694, 596, -694, - 637, 2486, 678, -694, 703, 17, -694, 712, 27, -694, - -694, 651, -694, 83, 563, 42, 565, -14, 715, 895, - -694, -694, -694, 419, 570, 706, 662, 5946, -694, -694, - 4332, -694, -694, -694, -694, -694, 581, -694, 6408, -694, - -694, -694, -694, 895, 583, -694, 582, 895, 185, -694, - 193, -694, 895, 671, -694, 313, 737, 276, -694, -694, - 674, -694, 38, -694, 739, 895, -694, -694, 5946, -694, - 592, 6954, -694, -694, -694, 2628, -694, -694, 3622, -694, - 595, -694, -694, -694, 661, 597, 193, -694, 598, 665, - 609, 602, 619, -694, 754, 694, 895, -694, 2770, -694, - 45, -694, 2912, 895, -694, 6997, 3622, -694, 4474, 3054, - 620, 3622, -694, 3196, -694, -694, -694, 353, 185, -694, - 709, 895, 629, -694, -694, 708, -694, -694, -694, 768, - -694, 635, -694, 3338, -694, 724, 725, 793, -694, -694, - -694, 241, -694, -694, -694, -694, -694, 185, 644, 3622, - -694, 678, 203, -694, -694, -694, 3480, -694 -}; - - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_uint16 yydefact[] = -{ - 4, 0, 2, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 412, 0, 0, 320, 0, 325, - 326, 5, 347, 394, 52, 327, 279, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, - 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, - 0, 80, 86, 0, 0, 331, 332, 334, 328, 329, - 32, 33, 34, 336, 0, 335, 330, 0, 83, 333, - 284, 0, 59, 25, 405, 349, 3, 0, 7, 30, - 8, 9, 73, 74, 0, 0, 362, 0, 75, 386, - 0, 352, 280, 0, 361, 0, 363, 0, 390, 0, - 385, 367, 384, 387, 393, 0, 269, 264, 281, 282, - 265, 348, 5, 306, 0, 284, 75, 424, 425, 0, - 427, 428, 283, 250, 251, 252, 253, 5, 306, 0, - 0, 0, 307, 0, 231, 365, 0, 233, 270, 271, - 272, 273, 274, 275, 276, 278, 0, 417, 0, 355, - 0, 0, 307, 313, 323, 314, 0, 316, 387, 0, - 218, 0, 277, 0, 31, 396, 396, 0, 209, 0, - 0, 210, 0, 0, 0, 42, 0, 44, 0, 0, - 0, 46, 362, 0, 363, 25, 0, 0, 18, 0, - 17, 153, 0, 0, 152, 158, 0, 75, 81, 82, - 0, 0, 0, 0, 411, 412, 0, 4, 0, 351, - 362, 0, 363, 0, 0, 265, 0, 0, 0, 145, - 0, 15, 84, 87, 54, 76, 0, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 230, 232, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 396, 0, 396, 0, 406, 389, - 396, 396, 396, 0, 0, 0, 309, 0, 0, 0, - 421, 364, 0, 439, 356, 413, 0, 309, 0, 145, - 440, 0, 0, 389, 321, 0, 0, 397, 0, 0, - 0, 51, 0, 0, 0, 211, 213, 362, 363, 0, - 0, 0, 43, 45, 63, 0, 47, 48, 0, 62, - 20, 0, 0, 14, 0, 154, 363, 0, 49, 0, - 0, 50, 0, 0, 70, 72, 429, 0, 0, 0, - 0, 409, 0, 408, 0, 350, 0, 11, 4, 145, - 0, 432, 431, 388, 0, 35, 24, 26, 27, 28, - 0, 6, 0, 0, 0, 144, 146, 148, 0, 0, - 89, 0, 0, 0, 136, 0, 441, 379, 377, 0, - 236, 238, 237, 0, 0, 268, 234, 235, 239, 241, - 240, 256, 257, 254, 255, 262, 258, 259, 260, 261, - 248, 249, 243, 244, 242, 245, 246, 247, 263, 0, - 215, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 0, 442, 380, 0, 403, 0, 399, 376, - 398, 402, 0, 0, 0, 0, 0, 426, 308, 0, - 0, 0, 416, 0, 415, 308, 379, 0, 380, 318, - 322, 0, 437, 435, 208, 0, 0, 210, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 353, 327, 0, - 0, 0, 338, 0, 337, 23, 345, 0, 0, 19, - 16, 0, 151, 159, 156, 136, 0, 0, 0, 422, - 423, 10, 411, 411, 0, 438, 145, 13, 0, 0, - 362, 363, 0, 395, 150, 149, 298, 0, 0, 0, - 0, 310, 85, 0, 0, 88, 91, 161, 136, 139, - 140, 0, 124, 0, 137, 138, 383, 145, 145, 378, - 267, 0, 0, 216, 305, 145, 145, 382, 0, 145, - 375, 374, 369, 396, 0, 391, 392, 434, 433, 436, - 420, 419, 0, 324, 315, 25, 116, 0, 25, 114, - 38, 0, 212, 93, 0, 93, 95, 103, 0, 25, - 101, 58, 109, 109, 41, 341, 342, 360, 0, 355, - 353, 0, 340, 0, 0, 0, 67, 65, 61, 21, - 155, 0, 0, 71, 55, 430, 0, 407, 0, 0, - 12, 300, 0, 147, 22, 0, 312, 90, 161, 0, - 192, 0, 292, 136, 0, 135, 0, 126, 0, 0, - 266, 323, 0, 0, 404, 0, 396, 396, 366, 0, - 0, 0, 414, 0, 317, 118, 120, 0, 0, 210, - 0, 0, 96, 0, 0, 0, 109, 0, 109, 0, - 0, 344, 356, 354, 0, 339, 346, 0, 25, 64, - 60, 68, 157, 292, 410, 214, 299, 29, 311, 192, - 92, 0, 0, 199, 200, 201, 198, 197, 196, 191, - 79, 160, 164, 0, 0, 190, 194, 0, 141, 0, - 141, 0, 127, 134, 0, 301, 304, 217, 302, 303, - 373, 0, 0, 0, 368, 400, 401, 418, 319, 122, - 0, 0, 36, 39, 0, 0, 94, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 105, 359, 358, 343, - 0, 0, 141, 78, 0, 0, 168, 204, 0, 165, - 195, 0, 163, 0, 0, 0, 0, 0, 130, 0, - 129, 371, 372, 376, 0, 0, 0, 0, 121, 115, - 0, 25, 99, 57, 56, 102, 0, 107, 0, 112, - 113, 25, 106, 0, 0, 69, 0, 0, 0, 170, - 172, 167, 0, 0, 162, 75, 0, 0, 143, 25, - 0, 296, 0, 25, 131, 0, 128, 370, 0, 25, - 0, 0, 25, 97, 40, 0, 108, 25, 111, 357, - 0, 25, 207, 169, 5, 0, 173, 174, 0, 0, - 182, 0, 0, 205, 202, 0, 0, 142, 0, 297, - 0, 293, 0, 0, 133, 0, 123, 37, 0, 0, - 0, 110, 25, 0, 171, 175, 176, 186, 0, 177, - 0, 0, 0, 206, 77, 0, 294, 285, 132, 0, - 117, 0, 100, 0, 286, 0, 185, 178, 179, 183, - 203, 136, 295, 25, 98, 66, 184, 0, 0, 119, - 180, 141, 0, 188, 25, 166, 0, 189 -}; - - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -694, -694, -195, -5, -694, -694, 467, -694, -183, -694, - 16, -694, -694, 201, -694, 202, -694, 312, 2, 6, - -125, -694, -694, -694, -694, -694, -694, -694, 288, 232, - 162, -694, 86, -694, -694, -694, -341, 40, -694, -694, - -694, -694, -694, -494, -694, -610, 192, -678, -693, -252, - -694, 302, -694, 483, -694, 214, -694, -694, -694, -694, - -694, -694, -694, 7, -694, -694, -694, -694, -694, -694, - -694, -694, -694, -694, -690, -694, -694, -694, -463, -694, - -46, 752, -2, 161, -694, -694, 205, -358, -250, -694, - -694, -694, -694, 204, -271, -231, -694, -694, 247, 250, - -694, 904, 650, -369, 360, 307, -694, -694, -694, -694, - 82, -232, -694, 789, -694, -694, -23, -20, -694, -153, - -305, -694, -694, 1, 339, 349, 643, -694, -694, -694, - -694, -694, -694, -31, -694 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 2, 85, 86, 199, 200, 87, 226, 376, - 377, 89, 606, 607, 680, 608, 353, 354, 378, 379, - 236, 92, 93, 94, 390, 95, 392, 534, 535, 661, - 585, 824, 783, 591, 330, 594, 667, 791, 580, 656, - 729, 732, 776, 541, 542, 637, 543, 544, 764, 384, - 385, 386, 203, 204, 206, 630, 701, 805, 702, 755, - 801, 835, 836, 837, 838, 887, 839, 840, 841, 885, - 905, 703, 704, 705, 706, 758, 707, 177, 324, 325, - 96, 97, 126, 710, 812, 99, 100, 545, 164, 165, - 574, 654, 172, 310, 101, 597, 496, 102, 598, 305, - 599, 103, 104, 300, 105, 106, 648, 724, 560, 561, - 562, 107, 108, 109, 110, 111, 112, 113, 114, 318, - 449, 450, 451, 115, 362, 363, 158, 159, 116, 357, - 117, 118, 119, 120, 121 -}; - - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = -{ - 98, 293, 167, 192, 90, 168, 397, 469, 91, 142, - 142, 612, 338, 524, 581, 760, 428, 766, 88, 230, - 162, 320, 366, 319, 712, 798, 169, 342, 347, 350, - 442, 532, 761, 536, 220, 803, 396, 482, 33, 506, - 508, 513, 393, 286, 631, 513, 850, 198, 592, 286, - 225, 444, 207, 448, 179, 563, 286, 467, 201, 796, - 634, 789, 137, 635, 494, 341, 397, 444, 443, 218, - 33, 33, 219, 205, 810, 767, 466, 875, 494, 468, - 448, 3, 352, 498, 395, 808, 129, 459, 171, 33, - 173, 174, 570, 180, 571, 289, 228, -307, 460, 47, - 33, 768, 181, 228, 495, 635, 367, 368, 807, -307, - 297, 229, 743, 744, 176, 228, 182, 519, 503, 811, - 635, 207, 876, 228, 33, -381, 183, 84, 394, 847, - 175, 445, 446, 452, 33, 296, 327, 454, 455, 456, - 197, 228, 287, 184, -309, 286, 636, 202, 287, 313, - 228, 142, -378, 195, 564, 287, 307, 814, 137, 84, - 288, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 518, 231, 536, 321, 886, 84, 746, - 799, 800, 343, 348, 351, 604, 593, 762, 636, 84, - 804, 483, 340, 507, 509, 514, 735, 142, 790, 684, - 851, -365, -365, 636, 189, 142, 142, 142, 902, 142, - 494, 365, 539, 84, 494, 494, 494, 228, 398, 143, - 143, 447, 190, 84, 98, 229, 228, -381, 137, 584, - 163, 552, 208, 529, 369, 209, 530, 605, 540, 399, - 137, -377, 33, 167, 287, -309, 168, 743, 744, 210, - 587, 228, 669, 211, 595, 596, -308, 494, 228, 369, - 137, 162, 228, 398, 619, 398, 516, 169, 834, -308, - 516, 690, 137, 212, 33, 228, 138, 213, 398, 398, - 268, 269, 727, 137, 399, 214, 399, 137, 398, 33, - 458, 398, 398, -287, -287, 638, 639, 624, 215, 399, - 399, 465, 641, 642, 643, 227, 216, 645, 138, 399, - -288, -288, 399, 399, 792, 139, 137, 217, 140, 750, - 232, 145, 145, 138, 520, 741, 141, 745, 233, 494, - 492, 84, -289, -289, 756, 529, 98, 198, 530, 234, - 494, 730, 731, 529, 492, 235, 530, 139, 728, 237, - 140, 137, 282, 263, 264, 265, 194, 266, 141, 774, - 775, 143, 139, 84, 98, 140, 903, 904, 90, 238, - 539, 283, 91, 141, 144, 147, 344, 142, 84, 549, - 682, 284, 88, 285, 531, 290, 531, 222, 291, 531, - 292, 529, 655, 494, 530, 658, 540, 898, 175, 494, - 47, 494, 216, -125, 295, 539, 665, 143, 266, 25, - 649, 742, 743, 744, 298, 143, 143, 143, 773, 143, - 299, 448, 303, 304, 142, 306, 529, 228, 308, 530, - 309, 540, 311, 739, 786, 743, 744, 312, 322, 747, - 833, 748, 842, 494, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 142, 329, 142, 334, - 335, 336, 349, 301, 693, 694, 695, 696, 697, 698, - 137, 163, 33, 381, 142, 142, 492, 137, 842, 33, - 492, 492, 492, 770, -365, -365, 602, 576, 359, 328, - 371, 448, 579, 721, 722, 751, 373, 388, 494, 590, - 531, 142, 389, 142, 391, 394, 138, 142, 142, 346, - 888, 475, 472, 138, 473, 477, 98, 355, 356, 358, - 90, 361, 494, 492, 91, 626, 494, 478, 531, 167, - 360, 494, 168, 531, 88, 479, 481, 499, 816, 900, - 493, 137, 504, 33, 494, 139, 505, 162, 140, 510, - 512, 511, 139, 169, 493, 140, 141, 527, 515, 526, - 522, 84, 829, 141, 528, 537, 832, 533, 84, 538, - 546, 843, 547, 548, 555, 494, 554, 138, 556, 142, - 559, 588, 494, 557, 854, 565, 600, 143, 567, 573, - 568, 569, 601, -290, -290, 492, 675, 603, 825, 609, - 494, -193, 611, 618, 614, 621, 492, 622, 828, 693, - 694, 695, 696, 697, 698, 873, 160, 625, 628, 161, - 688, 629, 878, 632, 531, 633, 848, 141, 531, 646, - 852, 647, 84, 398, 143, 653, 856, 659, 660, 859, - 890, 664, 666, 668, 861, 670, 142, 672, 863, 671, - 676, 677, 678, 98, 399, 142, 98, 683, 686, 492, - 687, 708, 709, 98, 713, 492, 143, 492, 143, 714, - 715, 723, 531, 733, 716, 718, 719, 521, 720, 883, - 845, 754, 725, 737, 143, 143, 493, 531, 738, 301, - 493, 493, 493, 260, 261, 262, 263, 264, 265, 749, - 266, 757, 759, 398, 763, 765, 769, 771, 772, 492, - 899, 143, 780, 143, 794, 777, 797, 143, 143, 779, - 785, 906, 787, 793, 399, 802, 806, 809, 815, 813, - 691, 818, 819, 493, 820, 692, 553, 693, 694, 695, - 696, 697, 698, 699, 826, 830, 831, 778, 844, 98, - 846, 849, 853, 782, 782, 857, -181, 163, 531, 862, - 867, 866, 864, 868, 492, 869, 870, 871, 301, 872, - 301, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 882, 889, 892, 583, 586, 492, 143, - 891, 700, 492, 531, 893, 531, 823, 492, 894, 896, - -187, 897, 531, 146, 146, 493, 901, 679, 681, 500, - 492, -365, -365, 355, 166, 615, 493, 663, 613, 361, - 361, 627, 736, 98, 784, 711, 98, 691, 827, 623, - 502, 531, 692, 223, 693, 694, 695, 696, 697, 698, - 699, 492, 689, 865, 752, 717, 98, 674, 492, 673, - 98, 616, 345, 480, 98, 817, 143, 98, 364, 98, - 0, 98, 617, 531, 0, 143, 492, 0, 0, 493, - 0, 0, 0, 0, 880, 493, 0, 493, 0, 0, - 0, 98, 0, 0, 0, 0, 531, 0, 753, 0, - 0, 662, 531, 0, 0, 0, 0, 98, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 127, 128, - 0, 130, 131, 132, 133, 134, 135, 136, 0, 493, - 148, 149, 150, 151, 152, 153, 154, 155, 157, 0, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 485, - 486, 178, 0, 0, 0, 146, 0, 0, 186, 188, - 0, 0, 0, 193, 0, 196, 0, 0, 301, 0, - 487, 0, 0, 0, 0, 0, 0, 586, 29, 30, - 137, 0, 0, 0, 493, 0, 0, 0, 488, 0, - 0, 0, 0, 0, 221, 224, 0, 0, 0, 0, - 0, 146, 0, 0, 0, 0, 0, 0, 493, 146, - 146, 146, 493, 146, 0, 0, 138, 493, -382, -382, - -382, -382, 258, 259, 260, 261, 262, 263, 264, 265, - 493, 266, 0, 0, 489, 65, 66, 67, 68, 69, - 0, 0, 0, 294, 0, 0, 0, 0, 0, 73, - 0, 0, 0, 0, 0, 490, 75, 76, 491, 0, - 0, 493, 79, 0, 0, 166, 0, 0, 493, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 240, 241, 0, 315, 493, 316, 0, 317, - 317, 0, 0, 0, 323, 326, 193, 242, 331, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 0, 266, 0, 0, 0, 0, 0, 157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 380, 0, 387, 0, 0, 0, 0, 0, 0, - 0, 317, 0, 400, 401, 402, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 0, 146, 0, 0, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 387, 0, 317, 0, - 317, 453, 0, 0, 317, 317, 317, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 462, 0, 464, 0, - 0, 0, 0, 387, 0, 0, 0, 0, 146, 0, - 0, 0, 0, 0, 474, 0, 0, 523, 0, 0, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 0, 0, 0, 0, 0, 0, 501, 0, - 146, 0, 146, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 0, 0, 0, 146, 146, - -365, -365, 0, 387, 193, 4, 5, 6, 7, 8, - 0, 0, 0, 0, 9, 0, 0, 525, 0, 0, - 0, 0, 0, -365, -365, 146, 0, 146, 0, 0, - 0, 146, 146, 0, 382, 0, 0, 550, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 166, 0, 0, 0, 29, 30, 122, 32, 33, - 0, 558, 0, 0, 0, 35, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 146, 0, 47, 0, 0, 0, 577, - 337, 326, 582, 123, 0, 0, 0, 0, 0, 0, - 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, - 387, 0, 124, 75, 76, 77, 0, 0, 0, 79, - 125, 387, 383, 81, 0, 0, 0, 0, 84, 0, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 146, - 0, 387, 387, 0, 0, 640, 0, 0, 0, 387, - 387, 0, 0, 387, 0, 0, 0, 317, 650, 0, - 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, - 0, 0, 0, 0, 9, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 685, 266, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 317, 317, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 0, 326, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 39, - 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 50, 0, - 51, 52, 53, 54, 55, 56, 0, 0, 0, 0, - 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 70, - 71, 0, 72, 0, 0, 0, 73, 4, 5, 6, - 7, 8, 74, 75, 76, 77, 9, 788, 78, 79, - 80, 0, 0, 81, 0, 82, 83, 517, 84, -382, - -382, -382, -382, -382, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 0, 266, 10, 11, - 0, 821, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 34, 0, 0, 0, 35, 36, 37, - 38, 39, 855, 40, 0, 41, 0, 42, 0, 0, - 43, 0, 0, 0, 44, 45, 46, 47, 48, 49, - 50, 0, 51, 52, 53, 54, 55, 56, 0, 0, - 0, 0, 57, 58, 59, 60, 61, 62, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 0, 70, 71, 0, 72, 0, 0, 0, 73, 4, - 5, 6, 7, 8, 74, 75, 76, 77, 9, 0, - 78, 79, 80, 0, 0, 81, 0, 82, 83, 620, - 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 0, 0, 0, 29, - 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, - 36, 37, 38, 39, 0, 40, 0, 41, 0, 42, - 0, 0, 43, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 50, 0, 51, 52, 53, 54, 55, 56, - 0, 0, 0, 0, 57, 58, 59, 60, 61, 62, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 0, 70, 71, 0, 72, 0, 0, 0, - 73, 4, 5, 6, 7, 8, 74, 75, 76, 77, - 9, 0, 78, 79, 80, 0, 0, 81, 0, 82, - 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, - 0, 29, 30, 31, 32, 33, 0, 34, 0, 0, - 0, 35, 36, 37, 38, 39, 0, 40, 0, 41, - 0, 42, 0, 0, 43, 0, 0, 0, 44, 45, - 46, 47, 0, 49, 50, 0, 51, 0, 53, 54, - 55, 56, 0, 0, 0, 0, 57, 58, 59, 374, - 61, 62, 0, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 70, 71, 0, 72, 0, - 0, 0, 73, 4, 5, 6, 7, 8, 124, 75, - 76, 77, 9, 0, 78, 79, 80, 0, 0, 81, - 0, 82, 83, 375, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, - 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, - 0, 0, 0, 35, 36, 37, 38, 39, 0, 40, - 0, 41, 0, 42, 0, 0, 43, 0, 0, 0, - 44, 45, 46, 47, 0, 49, 50, 0, 51, 0, - 53, 54, 55, 56, 0, 0, 0, 0, 57, 58, - 59, 374, 61, 62, 0, 0, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 0, 0, 70, 71, 0, - 72, 0, 0, 0, 73, 4, 5, 6, 7, 8, - 124, 75, 76, 77, 9, 0, 78, 79, 80, 0, - 0, 81, 0, 82, 83, 497, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 39, - 734, 40, 0, 41, 0, 42, 0, 0, 43, 0, - 0, 0, 44, 45, 46, 47, 0, 49, 50, 0, - 51, 0, 53, 54, 55, 56, 0, 0, 0, 0, - 57, 58, 59, 374, 61, 62, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 70, - 71, 0, 72, 0, 0, 0, 73, 4, 5, 6, - 7, 8, 124, 75, 76, 77, 9, 0, 78, 79, - 80, 0, 0, 81, 0, 82, 83, 0, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, - 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 34, 0, 0, 0, 35, 36, 37, - 38, 39, 0, 40, 0, 41, 0, 42, 740, 0, - 43, 0, 0, 0, 44, 45, 46, 47, 0, 49, - 50, 0, 51, 0, 53, 54, 55, 56, 0, 0, - 0, 0, 57, 58, 59, 374, 61, 62, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 0, 70, 71, 0, 72, 0, 0, 0, 73, 4, - 5, 6, 7, 8, 124, 75, 76, 77, 9, 0, - 78, 79, 80, 0, 0, 81, 0, 82, 83, 0, - 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 0, 0, 0, 29, - 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, - 36, 37, 38, 39, 0, 40, 0, 41, 0, 42, - 0, 0, 43, 0, 0, 0, 44, 45, 46, 47, - 0, 49, 50, 0, 51, 0, 53, 54, 55, 56, - 0, 0, 0, 0, 57, 58, 59, 374, 61, 62, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 0, 70, 71, 0, 72, 0, 0, 0, - 73, 4, 5, 6, 7, 8, 124, 75, 76, 77, - 9, 0, 78, 79, 80, 0, 0, 81, 0, 82, - 83, 795, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, - 0, 29, 30, 31, 32, 33, 0, 34, 0, 0, - 0, 35, 36, 37, 38, 39, 0, 40, 0, 41, - 860, 42, 0, 0, 43, 0, 0, 0, 44, 45, - 46, 47, 0, 49, 50, 0, 51, 0, 53, 54, - 55, 56, 0, 0, 0, 0, 57, 58, 59, 374, - 61, 62, 0, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 70, 71, 0, 72, 0, - 0, 0, 73, 4, 5, 6, 7, 8, 124, 75, - 76, 77, 9, 0, 78, 79, 80, 0, 0, 81, - 0, 82, 83, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, - 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, - 0, 0, 0, 35, 36, 37, 38, 39, 0, 40, - 0, 41, 0, 42, 0, 0, 43, 0, 0, 0, - 44, 45, 46, 47, 0, 49, 50, 0, 51, 0, - 53, 54, 55, 56, 0, 0, 0, 0, 57, 58, - 59, 374, 61, 62, 0, 0, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 0, 0, 70, 71, 0, - 72, 0, 0, 0, 73, 4, 5, 6, 7, 8, - 124, 75, 76, 77, 9, 0, 78, 79, 80, 0, - 0, 81, 0, 82, 83, 874, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 39, - 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, - 0, 0, 44, 45, 46, 47, 0, 49, 50, 0, - 51, 0, 53, 54, 55, 56, 0, 0, 0, 0, - 57, 58, 59, 374, 61, 62, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 70, - 71, 0, 72, 0, 0, 0, 73, 4, 5, 6, - 7, 8, 124, 75, 76, 77, 9, 0, 78, 79, - 80, 0, 0, 81, 0, 82, 83, 877, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, - 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 34, 0, 0, 0, 35, 36, 37, - 38, 39, 0, 40, 881, 41, 0, 42, 0, 0, - 43, 0, 0, 0, 44, 45, 46, 47, 0, 49, - 50, 0, 51, 0, 53, 54, 55, 56, 0, 0, - 0, 0, 57, 58, 59, 374, 61, 62, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 0, 70, 71, 0, 72, 0, 0, 0, 73, 4, - 5, 6, 7, 8, 124, 75, 76, 77, 9, 0, - 78, 79, 80, 0, 0, 81, 0, 82, 83, 0, - 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 0, 0, 0, 29, - 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, - 36, 37, 38, 39, 0, 40, 0, 41, 0, 42, - 0, 0, 43, 0, 0, 0, 44, 45, 46, 47, - 0, 49, 50, 0, 51, 0, 53, 54, 55, 56, - 0, 0, 0, 0, 57, 58, 59, 374, 61, 62, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 0, 70, 71, 0, 72, 0, 0, 0, - 73, 4, 5, 6, 7, 8, 124, 75, 76, 77, - 9, 0, 78, 79, 80, 0, 0, 81, 0, 82, - 83, 884, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, - 0, 29, 30, 31, 32, 33, 0, 34, 0, 0, - 0, 35, 36, 37, 38, 39, 0, 40, 0, 41, - 0, 42, 0, 0, 43, 0, 0, 0, 44, 45, - 46, 47, 0, 49, 50, 0, 51, 0, 53, 54, - 55, 56, 0, 0, 0, 0, 57, 58, 59, 374, - 61, 62, 0, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 70, 71, 0, 72, 0, - 0, 0, 73, 4, 5, 6, 7, 8, 124, 75, - 76, 77, 9, 0, 78, 79, 80, 0, 0, 81, - 0, 82, 83, 895, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, - 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, - 0, 0, 0, 35, 36, 37, 38, 39, 0, 40, - 0, 41, 0, 42, 0, 0, 43, 0, 0, 0, - 44, 45, 46, 47, 0, 49, 50, 0, 51, 0, - 53, 54, 55, 56, 0, 0, 0, 0, 57, 58, - 59, 374, 61, 62, 0, 0, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 0, 0, 70, 71, 0, - 72, 0, 0, 0, 73, 4, 5, 6, 7, 8, - 124, 75, 76, 77, 9, 0, 78, 79, 80, 0, - 0, 81, 0, 82, 83, 907, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 39, - 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, - 0, 0, 44, 45, 46, 47, 0, 49, 50, 0, - 51, 0, 53, 54, 55, 56, 0, 0, 0, 0, - 57, 58, 59, 374, 61, 62, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 70, - 71, 0, 72, 0, 0, 0, 73, 4, 5, 6, - 7, 8, 124, 75, 76, 77, 9, 0, 78, 79, - 80, 0, 0, 81, 0, 82, 83, 0, 84, 0, - 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, - 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 34, 0, 0, 0, 35, 36, 37, - 38, 39, 0, 40, 0, 41, 0, 42, 0, 0, - 43, 0, 0, 0, 44, 45, 46, 47, 0, 49, - 50, 0, 51, 0, 53, 54, 0, 0, 0, 0, - 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 0, 70, 71, 0, 72, 0, 0, 0, 73, 4, - 5, 6, 7, 8, 124, 75, 76, 77, 9, 0, - 0, 79, 80, 0, 0, 81, 0, 82, 83, 0, - 84, 0, 578, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 0, 0, 0, 29, - 30, 31, 32, 33, 0, 34, 0, 0, 0, 35, - 36, 37, 38, 39, 0, 40, 0, 41, 0, 42, - 0, 0, 43, 0, 0, 0, 44, 45, 46, 47, - 0, 49, 50, 0, 51, 0, 53, 54, 0, 0, - 0, 0, 0, 0, 57, 58, 59, 0, 0, 0, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 0, 70, 71, 0, 72, 0, 0, 0, - 73, 4, 5, 6, 7, 8, 124, 75, 76, 77, - 9, 0, 0, 79, 80, 0, 0, 81, 0, 82, - 83, 0, 84, 0, 589, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, - 0, 29, 30, 31, 32, 33, 0, 34, 0, 0, - 0, 35, 36, 37, 38, 39, 0, 40, 0, 41, - 0, 42, 0, 0, 43, 0, 0, 0, 44, 45, - 46, 47, 0, 49, 50, 0, 51, 0, 53, 54, - 0, 0, 0, 0, 0, 0, 57, 58, 59, 0, - 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 70, 71, 0, 72, 0, - 0, 0, 73, 4, 5, 6, 7, 8, 124, 75, - 76, 77, 9, 0, 0, 79, 80, 0, 0, 81, - 0, 82, 83, 0, 84, 0, 781, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, - 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 0, 0, 0, 29, 30, 31, 32, 33, 0, 34, - 0, 0, 0, 35, 36, 37, 38, 39, 0, 40, - 0, 41, 0, 42, 0, 0, 43, 0, 0, 0, - 44, 45, 46, 47, 0, 49, 50, 0, 51, 0, - 53, 54, 0, 0, 0, 0, 0, 0, 57, 58, - 59, 0, 0, 0, 0, 0, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 0, 0, 70, 71, 0, - 72, 0, 0, 0, 73, 4, 5, 6, 7, 8, - 124, 75, 76, 77, 9, 0, 0, 79, 80, 0, - 0, 81, 0, 82, 83, 0, 84, 0, 822, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, - 0, 34, 0, 0, 0, 35, 36, 37, 38, 39, - 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, - 0, 0, 44, 45, 46, 47, 0, 49, 50, 0, - 51, 0, 53, 54, 0, 0, 0, 0, 0, 0, - 57, 58, 59, 0, 0, 0, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 0, 70, - 71, 0, 72, 0, 0, 0, 73, 4, 5, 6, - 7, 8, 124, 75, 76, 77, 9, 0, 0, 79, - 80, 0, 0, 81, 0, 82, 83, 0, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, - 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 0, 0, 0, 29, 30, 31, - 32, 33, 0, 34, 0, 0, 0, 35, 36, 37, - 38, 39, 0, 40, 0, 41, 0, 42, 0, 0, - 43, 0, 0, 0, 44, 45, 46, 47, 0, 49, - 50, 0, 51, 0, 53, 54, 0, 0, 0, 0, - 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 0, 70, 71, 0, 72, 0, 0, 0, 73, 4, - 5, 6, 7, 8, 124, 75, 76, 77, 9, 0, - 0, 79, 80, 0, 0, 81, 0, 82, 83, 0, - 84, 0, 0, 0, 0, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 0, 0, 0, 0, 29, - 30, 122, 32, 33, 0, 0, 0, 0, 0, 35, - 36, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 47, - 266, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 0, 0, 58, 59, 0, 0, 0, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 4, 5, 6, 7, 8, 0, 0, 0, - 73, 9, 0, 0, 0, 0, 124, 75, 76, 77, - 0, 0, 0, 79, 125, 0, 0, 81, 0, 0, - 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, - 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, - 0, 0, 29, 30, 122, 32, 33, 0, 0, 0, - 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 0, 0, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, - 66, 67, 68, 69, 0, 4, 5, 6, 7, 8, - 0, 0, 0, 73, 9, 0, 0, 0, 0, 124, - 75, 76, 77, 0, 0, 0, 79, 125, 0, 0, - 81, 0, 185, 0, 0, 84, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, - 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 0, 0, 0, 0, 29, 30, 122, 32, 33, - 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, - 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, - 63, 64, 65, 66, 67, 68, 69, 0, 4, 5, - 6, 7, 8, 0, 0, 0, 73, 9, 0, 0, - 0, 0, 124, 75, 76, 77, 0, 0, 0, 79, - 125, 0, 0, 81, 0, 187, 0, 0, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, - 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 0, 0, 0, 0, 29, 30, - 122, 32, 33, 0, 0, 0, 0, 0, 35, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 0, 0, 0, 0, 58, 59, 0, 0, 0, 0, - 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, - 0, 4, 5, 6, 7, 8, 0, 0, 0, 73, - 9, 0, 0, 0, 0, 124, 75, 76, 77, 0, - 0, 0, 79, 125, 0, 0, 81, 0, 191, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, - 0, 29, 30, 122, 32, 33, 0, 0, 0, 0, - 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 0, 0, 58, 59, 0, - 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, - 67, 68, 69, 0, 4, 5, 6, 7, 8, 0, - 0, 0, 73, 9, 0, 0, 0, 0, 124, 75, - 76, 77, 0, 0, 0, 79, 125, 403, 0, 81, - 314, 0, 0, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, - 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, - 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 0, 0, 0, 0, 29, 30, 122, 32, 33, 0, - 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, - 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, - 64, 65, 66, 67, 68, 69, 0, 4, 5, 6, - 7, 8, 0, 0, 0, 73, 9, 0, 0, 0, - 0, 124, 75, 76, 77, 0, 0, 0, 79, 125, - 0, 0, 81, 0, 0, 0, 429, 84, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, - 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, - 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 0, 0, 0, 0, 29, 30, 122, - 32, 33, 0, 0, 0, 0, 0, 35, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, - 4, 5, 6, 7, 8, 0, 0, 0, 73, 9, - 0, 0, 0, 0, 124, 75, 76, 77, 0, 0, - 0, 79, 125, 0, 0, 81, 0, 0, 0, 461, - 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, - 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, - 29, 30, 122, 32, 33, 0, 0, 0, 0, 0, - 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, - 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, - 68, 69, 0, 4, 5, 6, 7, 8, 0, 0, - 0, 73, 9, 0, 0, 0, 0, 124, 75, 76, - 77, 0, 0, 0, 79, 125, 0, 0, 81, 0, - 0, 0, 463, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, - 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, - 0, 0, 0, 29, 30, 122, 32, 33, 0, 0, - 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, - 0, 123, 0, 0, 0, 0, 0, 0, 0, 58, - 59, 0, 0, 0, 0, 0, 0, 0, 63, 64, - 65, 66, 67, 68, 69, 0, 4, 5, 6, 7, - 8, 0, 0, 0, 73, 9, 0, 0, 0, 0, - 124, 75, 76, 77, 0, 0, 0, 79, 125, 0, - 0, 81, 0, 0, 0, 651, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, - 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, - 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 0, 0, 0, 0, 29, 30, 122, 32, - 33, 0, 0, 0, 0, 0, 35, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, - 0, 63, 64, 65, 66, 67, 68, 69, 0, 4, - 5, 6, 7, 8, 0, 0, 0, 73, 9, 0, - 0, 0, 0, 124, 75, 76, 77, 0, 0, 0, - 79, 125, 0, 0, 81, 0, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, - 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 0, 0, 0, 0, 29, - 30, 122, 32, 33, 0, 0, 0, 0, 0, 35, - 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 0, 0, 58, 59, 0, 0, 0, - 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, - 69, 0, 4, 5, 6, 7, 8, 0, 0, 0, - 73, 9, 0, 0, 0, 0, 124, 75, 76, 77, - 0, 0, 0, 79, 125, 0, 0, 81, 0, 0, - 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, - 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, - 0, 0, 29, 30, 122, 32, 33, 0, 0, 0, - 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 0, 0, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, - 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 124, - 75, 76, 77, 239, 240, 241, 79, 80, 0, 0, - 81, 0, 0, 0, 0, 84, 0, 0, 0, 242, - 0, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 0, 266, 239, 240, 241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 0, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 0, 266, 239, - 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 0, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 566, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 0, 266, 0, 0, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 242, 789, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, 266, - 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 644, 242, 0, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 240, 241, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 242, 726, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 0, 266, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 242, 790, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 0, 266, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 242, 267, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, 266, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 240, - 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 242, 332, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 0, - 266, 239, 240, 241, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 242, 333, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 0, 266, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 242, 339, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 0, 266, 0, 0, 0, - 0, 0, 0, 0, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 242, 372, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 0, 266, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 242, 457, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, 266, - 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 242, 470, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, - 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 242, 471, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 0, 266, 239, 240, 241, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, - 476, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 0, 266, 239, 240, 241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 484, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 0, 266, 0, - 0, 0, 0, 0, 0, 0, 239, 240, 241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 657, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 0, 266, 239, - 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 858, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, - 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 302, 0, 242, 0, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 0, 266, 239, 240, 241, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 242, - 551, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 0, 266, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 240, 241, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 242, 572, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 0, 266, 240, 241, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, - 0, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 241, 266, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 242, 266, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, 266, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 0, 266, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 0, 266, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, 266, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 0, - 266 -}; - -static const yytype_int16 yycheck[] = -{ - 2, 126, 25, 49, 2, 25, 238, 312, 2, 14, - 15, 505, 195, 382, 477, 705, 266, 710, 2, 8, - 25, 8, 217, 176, 634, 8, 25, 8, 8, 8, - 282, 389, 8, 391, 80, 8, 75, 8, 77, 8, - 8, 8, 75, 65, 538, 8, 8, 52, 26, 65, - 81, 283, 54, 285, 38, 65, 65, 309, 77, 752, - 32, 26, 75, 77, 335, 95, 298, 299, 75, 74, - 77, 77, 77, 77, 32, 32, 308, 32, 349, 311, - 312, 0, 207, 95, 237, 763, 161, 75, 161, 77, - 161, 26, 461, 161, 463, 115, 153, 147, 75, 103, - 77, 711, 161, 153, 335, 77, 163, 164, 25, 147, - 141, 161, 98, 99, 65, 153, 161, 369, 349, 77, - 77, 123, 77, 153, 77, 147, 161, 166, 161, 807, - 65, 284, 75, 286, 77, 140, 182, 290, 291, 292, - 153, 153, 164, 161, 147, 65, 160, 166, 164, 169, - 153, 156, 161, 164, 164, 164, 161, 767, 75, 166, - 166, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 368, 163, 533, 163, 867, 166, 165, - 163, 164, 163, 163, 163, 107, 164, 163, 160, 166, - 163, 162, 197, 162, 162, 162, 659, 202, 163, 162, - 162, 53, 54, 160, 75, 210, 211, 212, 901, 214, - 481, 216, 129, 166, 485, 486, 487, 153, 238, 14, - 15, 164, 75, 166, 226, 161, 153, 147, 75, 32, - 25, 66, 122, 150, 161, 122, 153, 159, 155, 238, - 75, 161, 77, 266, 164, 147, 266, 98, 99, 161, - 481, 153, 593, 161, 485, 486, 147, 528, 153, 161, - 75, 266, 153, 283, 516, 285, 161, 266, 75, 147, - 161, 629, 75, 161, 77, 153, 111, 161, 298, 299, - 53, 54, 651, 75, 283, 161, 285, 75, 308, 77, - 295, 311, 312, 162, 163, 547, 548, 528, 161, 298, - 299, 306, 552, 555, 556, 164, 153, 559, 111, 308, - 162, 163, 311, 312, 165, 150, 75, 164, 153, 677, - 75, 14, 15, 111, 370, 666, 161, 668, 75, 600, - 335, 166, 162, 163, 692, 150, 338, 342, 153, 163, - 611, 70, 71, 150, 349, 32, 153, 150, 653, 65, - 153, 75, 161, 47, 48, 49, 49, 51, 161, 70, - 71, 156, 150, 166, 366, 153, 163, 164, 366, 147, - 129, 147, 366, 161, 14, 15, 164, 382, 166, 399, - 611, 65, 366, 126, 389, 65, 391, 80, 65, 394, - 65, 150, 575, 664, 153, 578, 155, 891, 65, 670, - 103, 672, 153, 162, 153, 129, 589, 202, 51, 66, - 563, 97, 98, 99, 147, 210, 211, 212, 723, 214, - 147, 653, 167, 8, 429, 153, 150, 153, 147, 153, - 161, 155, 147, 664, 97, 98, 99, 126, 87, 670, - 798, 672, 800, 714, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 461, 75, 463, 163, - 13, 163, 13, 156, 111, 112, 113, 114, 115, 116, - 75, 266, 77, 75, 479, 480, 481, 75, 836, 77, - 485, 486, 487, 714, 53, 54, 491, 471, 162, 182, - 162, 723, 476, 646, 647, 678, 162, 75, 769, 483, - 505, 506, 124, 508, 124, 161, 111, 512, 513, 202, - 868, 161, 167, 111, 167, 163, 518, 210, 211, 212, - 518, 214, 793, 528, 518, 530, 797, 8, 533, 552, - 128, 802, 552, 538, 518, 95, 13, 75, 769, 897, - 335, 75, 77, 77, 815, 150, 161, 552, 153, 162, - 161, 163, 150, 552, 349, 153, 161, 8, 162, 162, - 161, 166, 793, 161, 13, 164, 797, 125, 166, 161, - 167, 802, 161, 161, 161, 846, 162, 111, 161, 584, - 161, 75, 853, 167, 815, 167, 161, 382, 167, 162, - 167, 167, 153, 162, 163, 600, 601, 147, 781, 75, - 871, 103, 13, 13, 163, 162, 611, 162, 791, 111, - 112, 113, 114, 115, 116, 846, 150, 153, 164, 153, - 625, 8, 853, 162, 629, 8, 809, 161, 633, 65, - 813, 65, 166, 653, 429, 126, 819, 163, 127, 822, - 871, 13, 163, 163, 827, 127, 651, 8, 831, 167, - 75, 161, 164, 655, 653, 660, 658, 162, 162, 664, - 163, 162, 109, 665, 77, 670, 461, 672, 463, 13, - 162, 126, 677, 163, 162, 162, 162, 370, 162, 862, - 805, 75, 167, 162, 479, 480, 481, 692, 162, 382, - 485, 486, 487, 44, 45, 46, 47, 48, 49, 162, - 51, 77, 704, 723, 26, 161, 13, 167, 167, 714, - 893, 506, 162, 508, 77, 161, 13, 512, 513, 163, - 163, 904, 163, 127, 723, 13, 75, 164, 13, 164, - 104, 161, 26, 528, 72, 109, 429, 111, 112, 113, - 114, 115, 116, 117, 163, 162, 164, 731, 77, 751, - 13, 77, 13, 737, 738, 163, 95, 552, 763, 164, - 95, 163, 165, 154, 769, 163, 147, 13, 461, 75, - 463, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 163, 75, 77, 479, 480, 793, 584, - 161, 165, 797, 798, 26, 800, 780, 802, 163, 75, - 75, 8, 807, 14, 15, 600, 162, 606, 606, 342, - 815, 53, 54, 506, 25, 508, 611, 585, 506, 512, - 513, 533, 660, 825, 738, 633, 828, 104, 788, 527, - 347, 836, 109, 81, 111, 112, 113, 114, 115, 116, - 117, 846, 628, 836, 683, 641, 848, 600, 853, 599, - 852, 512, 202, 95, 856, 773, 651, 859, 215, 861, - -1, 863, 513, 868, -1, 660, 871, -1, -1, 664, - -1, -1, -1, -1, 858, 670, -1, 672, -1, -1, - -1, 883, -1, -1, -1, -1, 891, -1, 165, -1, - -1, 584, 897, -1, -1, -1, -1, 899, -1, -1, - -1, -1, -1, -1, 906, -1, -1, -1, 4, 5, - -1, 7, 8, 9, 10, 11, 12, 13, -1, 714, - 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, - 26, -1, -1, -1, -1, -1, -1, -1, -1, 44, - 45, 37, -1, -1, -1, 156, -1, -1, 44, 45, - -1, -1, -1, 49, -1, 51, -1, -1, 651, -1, - 65, -1, -1, -1, -1, -1, -1, 660, 73, 74, - 75, -1, -1, -1, 769, -1, -1, -1, 83, -1, - -1, -1, -1, -1, 80, 81, -1, -1, -1, -1, - -1, 202, -1, -1, -1, -1, -1, -1, 793, 210, - 211, 212, 797, 214, -1, -1, 111, 802, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 815, 51, -1, -1, 129, 130, 131, 132, 133, 134, - -1, -1, -1, 129, -1, -1, -1, -1, -1, 144, - -1, -1, -1, -1, -1, 150, 151, 152, 153, -1, - -1, 846, 157, -1, -1, 266, -1, -1, 853, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 9, 10, 11, -1, 171, 871, 173, -1, 175, - 176, -1, -1, -1, 180, 181, 182, 25, 184, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, -1, 51, -1, -1, -1, -1, -1, 215, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 227, -1, 229, -1, -1, -1, -1, -1, -1, - -1, 237, -1, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - -1, 382, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, -1, 284, -1, - 286, 287, -1, -1, 290, 291, 292, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 302, -1, 304, -1, - -1, -1, -1, 309, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, 320, -1, -1, 165, -1, -1, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, -1, -1, -1, -1, -1, -1, 344, -1, - 461, -1, 463, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, -1, -1, -1, 479, 480, - 53, 54, -1, 369, 370, 3, 4, 5, 6, 7, - -1, -1, -1, -1, 12, -1, -1, 383, -1, -1, - -1, -1, -1, 53, 54, 506, -1, 508, -1, -1, - -1, 512, 513, -1, 32, -1, -1, 403, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 552, -1, -1, -1, 73, 74, 75, 76, 77, - -1, 447, -1, -1, -1, 83, 84, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 584, -1, 103, -1, -1, -1, 475, - 163, 477, 478, 111, -1, -1, -1, -1, -1, -1, - -1, 119, 120, -1, -1, -1, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 144, -1, -1, -1, - 516, -1, 150, 151, 152, 153, -1, -1, -1, 157, - 158, 527, 160, 161, -1, -1, -1, -1, 166, -1, - 651, -1, -1, -1, -1, -1, -1, -1, -1, 660, - -1, 547, 548, -1, -1, 551, -1, -1, -1, 555, - 556, -1, -1, 559, -1, -1, -1, 563, 564, -1, - -1, -1, -1, -1, -1, -1, 572, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - -1, -1, -1, -1, 12, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 618, 51, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - 646, 647, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, 659, -1, 73, 74, 75, 76, 77, - -1, 79, -1, -1, -1, 83, 84, 85, 86, 87, - -1, 89, -1, 91, -1, 93, -1, -1, 96, -1, - -1, -1, 100, 101, 102, 103, 104, 105, 106, -1, - 108, 109, 110, 111, 112, 113, -1, -1, -1, -1, - 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, 137, - 138, -1, 140, -1, -1, -1, 144, 3, 4, 5, - 6, 7, 150, 151, 152, 153, 12, 743, 156, 157, - 158, -1, -1, 161, -1, 163, 164, 165, 166, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, -1, 51, 44, 45, - -1, 777, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 73, 74, 75, - 76, 77, -1, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 818, 89, -1, 91, -1, 93, -1, -1, - 96, -1, -1, -1, 100, 101, 102, 103, 104, 105, - 106, -1, 108, 109, 110, 111, 112, 113, -1, -1, - -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - -1, 137, 138, -1, 140, -1, -1, -1, 144, 3, - 4, 5, 6, 7, 150, 151, 152, 153, 12, -1, - 156, 157, 158, -1, -1, 161, -1, 163, 164, 165, - 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, 73, - 74, 75, 76, 77, -1, 79, -1, -1, -1, 83, - 84, 85, 86, 87, -1, 89, -1, 91, -1, 93, - -1, -1, 96, -1, -1, -1, 100, 101, 102, 103, - 104, 105, 106, -1, 108, 109, 110, 111, 112, 113, - -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, -1, 137, 138, -1, 140, -1, -1, -1, - 144, 3, 4, 5, 6, 7, 150, 151, 152, 153, - 12, -1, 156, 157, 158, -1, -1, 161, -1, 163, - 164, -1, 166, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, 73, 74, 75, 76, 77, -1, 79, -1, -1, - -1, 83, 84, 85, 86, 87, -1, 89, -1, 91, - -1, 93, -1, -1, 96, -1, -1, -1, 100, 101, - 102, 103, -1, 105, 106, -1, 108, -1, 110, 111, - 112, 113, -1, -1, -1, -1, 118, 119, 120, 121, - 122, 123, -1, -1, -1, -1, 128, 129, 130, 131, - 132, 133, 134, -1, -1, 137, 138, -1, 140, -1, - -1, -1, 144, 3, 4, 5, 6, 7, 150, 151, - 152, 153, 12, -1, 156, 157, 158, -1, -1, 161, - -1, 163, 164, 165, 166, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, 73, 74, 75, 76, 77, -1, 79, - -1, -1, -1, 83, 84, 85, 86, 87, -1, 89, - -1, 91, -1, 93, -1, -1, 96, -1, -1, -1, - 100, 101, 102, 103, -1, 105, 106, -1, 108, -1, - 110, 111, 112, 113, -1, -1, -1, -1, 118, 119, - 120, 121, 122, 123, -1, -1, -1, -1, 128, 129, - 130, 131, 132, 133, 134, -1, -1, 137, 138, -1, - 140, -1, -1, -1, 144, 3, 4, 5, 6, 7, - 150, 151, 152, 153, 12, -1, 156, 157, 158, -1, - -1, 161, -1, 163, 164, 165, 166, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, 73, 74, 75, 76, 77, - -1, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, 89, -1, 91, -1, 93, -1, -1, 96, -1, - -1, -1, 100, 101, 102, 103, -1, 105, 106, -1, - 108, -1, 110, 111, 112, 113, -1, -1, -1, -1, - 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, 137, - 138, -1, 140, -1, -1, -1, 144, 3, 4, 5, - 6, 7, 150, 151, 152, 153, 12, -1, 156, 157, - 158, -1, -1, 161, -1, 163, 164, -1, 166, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 73, 74, 75, - 76, 77, -1, 79, -1, -1, -1, 83, 84, 85, - 86, 87, -1, 89, -1, 91, -1, 93, 94, -1, - 96, -1, -1, -1, 100, 101, 102, 103, -1, 105, - 106, -1, 108, -1, 110, 111, 112, 113, -1, -1, - -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - -1, 137, 138, -1, 140, -1, -1, -1, 144, 3, - 4, 5, 6, 7, 150, 151, 152, 153, 12, -1, - 156, 157, 158, -1, -1, 161, -1, 163, 164, -1, - 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, 73, - 74, 75, 76, 77, -1, 79, -1, -1, -1, 83, - 84, 85, 86, 87, -1, 89, -1, 91, -1, 93, - -1, -1, 96, -1, -1, -1, 100, 101, 102, 103, - -1, 105, 106, -1, 108, -1, 110, 111, 112, 113, - -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, -1, 137, 138, -1, 140, -1, -1, -1, - 144, 3, 4, 5, 6, 7, 150, 151, 152, 153, - 12, -1, 156, 157, 158, -1, -1, 161, -1, 163, - 164, 165, 166, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, 73, 74, 75, 76, 77, -1, 79, -1, -1, - -1, 83, 84, 85, 86, 87, -1, 89, -1, 91, - 92, 93, -1, -1, 96, -1, -1, -1, 100, 101, - 102, 103, -1, 105, 106, -1, 108, -1, 110, 111, - 112, 113, -1, -1, -1, -1, 118, 119, 120, 121, - 122, 123, -1, -1, -1, -1, 128, 129, 130, 131, - 132, 133, 134, -1, -1, 137, 138, -1, 140, -1, - -1, -1, 144, 3, 4, 5, 6, 7, 150, 151, - 152, 153, 12, -1, 156, 157, 158, -1, -1, 161, - -1, 163, 164, -1, 166, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, 73, 74, 75, 76, 77, -1, 79, - -1, -1, -1, 83, 84, 85, 86, 87, -1, 89, - -1, 91, -1, 93, -1, -1, 96, -1, -1, -1, - 100, 101, 102, 103, -1, 105, 106, -1, 108, -1, - 110, 111, 112, 113, -1, -1, -1, -1, 118, 119, - 120, 121, 122, 123, -1, -1, -1, -1, 128, 129, - 130, 131, 132, 133, 134, -1, -1, 137, 138, -1, - 140, -1, -1, -1, 144, 3, 4, 5, 6, 7, - 150, 151, 152, 153, 12, -1, 156, 157, 158, -1, - -1, 161, -1, 163, 164, 165, 166, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, 73, 74, 75, 76, 77, - -1, 79, -1, -1, -1, 83, 84, 85, 86, 87, - -1, 89, -1, 91, -1, 93, -1, -1, 96, -1, - -1, -1, 100, 101, 102, 103, -1, 105, 106, -1, - 108, -1, 110, 111, 112, 113, -1, -1, -1, -1, - 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, 137, - 138, -1, 140, -1, -1, -1, 144, 3, 4, 5, - 6, 7, 150, 151, 152, 153, 12, -1, 156, 157, - 158, -1, -1, 161, -1, 163, 164, 165, 166, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 73, 74, 75, - 76, 77, -1, 79, -1, -1, -1, 83, 84, 85, - 86, 87, -1, 89, 90, 91, -1, 93, -1, -1, - 96, -1, -1, -1, 100, 101, 102, 103, -1, 105, - 106, -1, 108, -1, 110, 111, 112, 113, -1, -1, - -1, -1, 118, 119, 120, 121, 122, 123, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - -1, 137, 138, -1, 140, -1, -1, -1, 144, 3, - 4, 5, 6, 7, 150, 151, 152, 153, 12, -1, - 156, 157, 158, -1, -1, 161, -1, 163, 164, -1, - 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, 73, - 74, 75, 76, 77, -1, 79, -1, -1, -1, 83, - 84, 85, 86, 87, -1, 89, -1, 91, -1, 93, - -1, -1, 96, -1, -1, -1, 100, 101, 102, 103, - -1, 105, 106, -1, 108, -1, 110, 111, 112, 113, - -1, -1, -1, -1, 118, 119, 120, 121, 122, 123, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, -1, 137, 138, -1, 140, -1, -1, -1, - 144, 3, 4, 5, 6, 7, 150, 151, 152, 153, - 12, -1, 156, 157, 158, -1, -1, 161, -1, 163, - 164, 165, 166, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, 73, 74, 75, 76, 77, -1, 79, -1, -1, - -1, 83, 84, 85, 86, 87, -1, 89, -1, 91, - -1, 93, -1, -1, 96, -1, -1, -1, 100, 101, - 102, 103, -1, 105, 106, -1, 108, -1, 110, 111, - 112, 113, -1, -1, -1, -1, 118, 119, 120, 121, - 122, 123, -1, -1, -1, -1, 128, 129, 130, 131, - 132, 133, 134, -1, -1, 137, 138, -1, 140, -1, - -1, -1, 144, 3, 4, 5, 6, 7, 150, 151, - 152, 153, 12, -1, 156, 157, 158, -1, -1, 161, - -1, 163, 164, 165, 166, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, 73, 74, 75, 76, 77, -1, 79, - -1, -1, -1, 83, 84, 85, 86, 87, -1, 89, - -1, 91, -1, 93, -1, -1, 96, -1, -1, -1, - 100, 101, 102, 103, -1, 105, 106, -1, 108, -1, - 110, 111, 112, 113, -1, -1, -1, -1, 118, 119, - 120, 121, 122, 123, -1, -1, -1, -1, 128, 129, - 130, 131, 132, 133, 134, -1, -1, 137, 138, -1, - 140, -1, -1, -1, 144, 3, 4, 5, 6, 7, - 150, 151, 152, 153, 12, -1, 156, 157, 158, -1, - -1, 161, -1, 163, 164, 165, 166, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, 73, 74, 75, 76, 77, - -1, 79, -1, -1, -1, 83, 84, 85, 86, 87, - -1, 89, -1, 91, -1, 93, -1, -1, 96, -1, - -1, -1, 100, 101, 102, 103, -1, 105, 106, -1, - 108, -1, 110, 111, 112, 113, -1, -1, -1, -1, - 118, 119, 120, 121, 122, 123, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, 137, - 138, -1, 140, -1, -1, -1, 144, 3, 4, 5, - 6, 7, 150, 151, 152, 153, 12, -1, 156, 157, - 158, -1, -1, 161, -1, 163, 164, -1, 166, -1, - 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 73, 74, 75, - 76, 77, -1, 79, -1, -1, -1, 83, 84, 85, - 86, 87, -1, 89, -1, 91, -1, 93, -1, -1, - 96, -1, -1, -1, 100, 101, 102, 103, -1, 105, - 106, -1, 108, -1, 110, 111, -1, -1, -1, -1, - -1, -1, 118, 119, 120, -1, -1, -1, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - -1, 137, 138, -1, 140, -1, -1, -1, 144, 3, - 4, 5, 6, 7, 150, 151, 152, 153, 12, -1, - -1, 157, 158, -1, -1, 161, -1, 163, 164, -1, - 166, -1, 26, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, 73, - 74, 75, 76, 77, -1, 79, -1, -1, -1, 83, - 84, 85, 86, 87, -1, 89, -1, 91, -1, 93, - -1, -1, 96, -1, -1, -1, 100, 101, 102, 103, - -1, 105, 106, -1, 108, -1, 110, 111, -1, -1, - -1, -1, -1, -1, 118, 119, 120, -1, -1, -1, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, -1, 137, 138, -1, 140, -1, -1, -1, - 144, 3, 4, 5, 6, 7, 150, 151, 152, 153, - 12, -1, -1, 157, 158, -1, -1, 161, -1, 163, - 164, -1, 166, -1, 26, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, 73, 74, 75, 76, 77, -1, 79, -1, -1, - -1, 83, 84, 85, 86, 87, -1, 89, -1, 91, - -1, 93, -1, -1, 96, -1, -1, -1, 100, 101, - 102, 103, -1, 105, 106, -1, 108, -1, 110, 111, - -1, -1, -1, -1, -1, -1, 118, 119, 120, -1, - -1, -1, -1, -1, -1, -1, 128, 129, 130, 131, - 132, 133, 134, -1, -1, 137, 138, -1, 140, -1, - -1, -1, 144, 3, 4, 5, 6, 7, 150, 151, - 152, 153, 12, -1, -1, 157, 158, -1, -1, 161, - -1, 163, 164, -1, 166, -1, 26, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, 73, 74, 75, 76, 77, -1, 79, - -1, -1, -1, 83, 84, 85, 86, 87, -1, 89, - -1, 91, -1, 93, -1, -1, 96, -1, -1, -1, - 100, 101, 102, 103, -1, 105, 106, -1, 108, -1, - 110, 111, -1, -1, -1, -1, -1, -1, 118, 119, - 120, -1, -1, -1, -1, -1, -1, -1, 128, 129, - 130, 131, 132, 133, 134, -1, -1, 137, 138, -1, - 140, -1, -1, -1, 144, 3, 4, 5, 6, 7, - 150, 151, 152, 153, 12, -1, -1, 157, 158, -1, - -1, 161, -1, 163, 164, -1, 166, -1, 26, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, 73, 74, 75, 76, 77, - -1, 79, -1, -1, -1, 83, 84, 85, 86, 87, - -1, 89, -1, 91, -1, 93, -1, -1, 96, -1, - -1, -1, 100, 101, 102, 103, -1, 105, 106, -1, - 108, -1, 110, 111, -1, -1, -1, -1, -1, -1, - 118, 119, 120, -1, -1, -1, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, -1, 137, - 138, -1, 140, -1, -1, -1, 144, 3, 4, 5, - 6, 7, 150, 151, 152, 153, 12, -1, -1, 157, - 158, -1, -1, 161, -1, 163, 164, -1, 166, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 73, 74, 75, - 76, 77, -1, 79, -1, -1, -1, 83, 84, 85, - 86, 87, -1, 89, -1, 91, -1, 93, -1, -1, - 96, -1, -1, -1, 100, 101, 102, 103, -1, 105, - 106, -1, 108, -1, 110, 111, -1, -1, -1, -1, - -1, -1, 118, 119, 120, -1, -1, -1, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - -1, 137, 138, -1, 140, -1, -1, -1, 144, 3, - 4, 5, 6, 7, 150, 151, 152, 153, 12, -1, - -1, 157, 158, -1, -1, 161, -1, 163, 164, -1, - 166, -1, -1, -1, -1, -1, -1, -1, 32, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, - 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, - 84, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 103, - 51, -1, -1, -1, -1, -1, -1, 111, -1, -1, - -1, -1, -1, -1, -1, 119, 120, -1, -1, -1, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, 3, 4, 5, 6, 7, -1, -1, -1, - 144, 12, -1, -1, -1, -1, 150, 151, 152, 153, - -1, -1, -1, 157, 158, -1, -1, 161, -1, -1, - -1, -1, 166, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, - -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, - 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, - -1, -1, 73, 74, 75, 76, 77, -1, -1, -1, - -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, 119, 120, - -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, - 131, 132, 133, 134, -1, 3, 4, 5, 6, 7, - -1, -1, -1, 144, 12, -1, -1, -1, -1, 150, - 151, 152, 153, -1, -1, -1, 157, 158, -1, -1, - 161, -1, 163, -1, -1, 166, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, -1, -1, -1, -1, 73, 74, 75, 76, 77, - -1, -1, -1, -1, -1, 83, 84, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 103, -1, -1, -1, -1, - -1, -1, -1, 111, -1, -1, -1, -1, -1, -1, - -1, 119, 120, -1, -1, -1, -1, -1, -1, -1, - 128, 129, 130, 131, 132, 133, 134, -1, 3, 4, - 5, 6, 7, -1, -1, -1, 144, 12, -1, -1, - -1, -1, 150, 151, 152, 153, -1, -1, -1, 157, - 158, -1, -1, 161, -1, 163, -1, -1, 166, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, - 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, - 65, 66, 67, 68, -1, -1, -1, -1, 73, 74, - 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 103, -1, - -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, - -1, -1, -1, -1, 119, 120, -1, -1, -1, -1, - -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, - -1, 3, 4, 5, 6, 7, -1, -1, -1, 144, - 12, -1, -1, -1, -1, 150, 151, 152, 153, -1, - -1, -1, 157, 158, -1, -1, 161, -1, 163, -1, - -1, 166, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, - -1, 73, 74, 75, 76, 77, -1, -1, -1, -1, - -1, 83, 84, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 103, -1, -1, -1, -1, -1, -1, -1, 111, - -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, - -1, -1, -1, -1, -1, -1, 128, 129, 130, 131, - 132, 133, 134, -1, 3, 4, 5, 6, 7, -1, - -1, -1, 144, 12, -1, -1, -1, -1, 150, 151, - 152, 153, -1, -1, -1, 157, 158, 26, -1, 161, - 162, -1, -1, -1, 166, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, - -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, - -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, - -1, -1, -1, -1, 73, 74, 75, 76, 77, -1, - -1, -1, -1, -1, 83, 84, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, - -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, - 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, - 129, 130, 131, 132, 133, 134, -1, 3, 4, 5, - 6, 7, -1, -1, -1, 144, 12, -1, -1, -1, - -1, 150, 151, 152, 153, -1, -1, -1, 157, 158, - -1, -1, 161, -1, -1, -1, 32, 166, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, - 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, - -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, - -1, -1, -1, 119, 120, -1, -1, -1, -1, -1, - -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, - 3, 4, 5, 6, 7, -1, -1, -1, 144, 12, - -1, -1, -1, -1, 150, 151, 152, 153, -1, -1, - -1, 157, 158, -1, -1, 161, -1, -1, -1, 32, - 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, - 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, - 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, - 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 103, -1, -1, -1, -1, -1, -1, -1, 111, -1, - -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, - -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, - 133, 134, -1, 3, 4, 5, 6, 7, -1, -1, - -1, 144, 12, -1, -1, -1, -1, 150, 151, 152, - 153, -1, -1, -1, 157, 158, -1, -1, 161, -1, - -1, -1, 32, 166, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, - -1, -1, -1, 73, 74, 75, 76, 77, -1, -1, - -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, - -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, - 120, -1, -1, -1, -1, -1, -1, -1, 128, 129, - 130, 131, 132, 133, 134, -1, 3, 4, 5, 6, - 7, -1, -1, -1, 144, 12, -1, -1, -1, -1, - 150, 151, 152, 153, -1, -1, -1, 157, 158, -1, - -1, 161, -1, -1, -1, 32, 166, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, - -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, - 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, - 67, 68, -1, -1, -1, -1, 73, 74, 75, 76, - 77, -1, -1, -1, -1, -1, 83, 84, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 103, -1, -1, -1, - -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, - -1, -1, 119, 120, -1, -1, -1, -1, -1, -1, - -1, 128, 129, 130, 131, 132, 133, 134, -1, 3, - 4, 5, 6, 7, -1, -1, -1, 144, 12, -1, - -1, -1, -1, 150, 151, 152, 153, -1, -1, -1, - 157, 158, -1, -1, 161, -1, -1, -1, -1, 166, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, - 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, - 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 103, - -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, - -1, -1, -1, -1, -1, 119, 120, -1, -1, -1, - -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, - 134, -1, 3, 4, 5, 6, 7, -1, -1, -1, - 144, 12, -1, -1, -1, -1, 150, 151, 152, 153, - -1, -1, -1, 157, 158, -1, -1, 161, -1, -1, - -1, -1, 166, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, - -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, - 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, - -1, -1, 73, 74, 75, 76, 77, -1, -1, -1, - -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, 119, 120, - -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, - 131, 132, 133, 134, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 144, -1, -1, -1, -1, -1, 150, - 151, 152, 153, 9, 10, 11, 157, 158, -1, -1, - 161, -1, -1, -1, -1, 166, -1, -1, -1, 25, - -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, -1, 51, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 25, -1, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, -1, 51, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 25, -1, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 25, 165, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, -1, 51, -1, -1, 9, 10, 11, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 165, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 165, 25, -1, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, -1, 51, -1, -1, -1, -1, -1, -1, -1, - -1, 9, 10, 11, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 25, 165, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 25, 163, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, -1, 51, 9, 10, 11, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 25, 163, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, - -1, -1, -1, -1, -1, -1, -1, -1, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 25, 163, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, - 51, 9, 10, 11, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 25, 163, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 25, 163, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, -1, 51, -1, -1, -1, - -1, -1, -1, -1, 9, 10, 11, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 25, 162, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, -1, 51, 9, 10, 11, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 25, 162, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 25, 162, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, -1, 51, -1, -1, -1, -1, -1, -1, -1, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 25, 162, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, -1, 51, 9, 10, 11, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, - 162, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, -1, 51, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 25, 162, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, -1, 51, -1, - -1, -1, -1, -1, -1, -1, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 25, 162, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, -1, 51, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 25, 162, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 162, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, 25, -1, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, -1, 51, 9, 10, 11, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 127, -1, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, -1, 51, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 9, 10, 11, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 25, 127, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, -1, 51, 10, 11, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, - -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 11, 51, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 25, -1, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 25, 51, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, -1, 51, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, -1, 51, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, - 51 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = -{ - 0, 169, 170, 0, 3, 4, 5, 6, 7, 12, - 44, 45, 50, 52, 53, 54, 55, 56, 57, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 73, - 74, 75, 76, 77, 79, 83, 84, 85, 86, 87, - 89, 91, 93, 96, 100, 101, 102, 103, 104, 105, - 106, 108, 109, 110, 111, 112, 113, 118, 119, 120, - 121, 122, 123, 128, 129, 130, 131, 132, 133, 134, - 137, 138, 140, 144, 150, 151, 152, 153, 156, 157, - 158, 161, 163, 164, 166, 171, 172, 175, 178, 179, - 186, 187, 189, 190, 191, 193, 248, 249, 250, 253, - 254, 262, 265, 269, 270, 272, 273, 279, 280, 281, - 282, 283, 284, 285, 286, 291, 296, 298, 299, 300, - 301, 302, 75, 111, 150, 158, 250, 269, 269, 161, - 269, 269, 269, 269, 269, 269, 269, 75, 111, 150, - 153, 161, 171, 254, 272, 273, 281, 272, 269, 269, - 269, 269, 269, 269, 269, 269, 32, 269, 294, 295, - 150, 153, 171, 254, 256, 257, 281, 284, 285, 291, - 269, 161, 260, 161, 26, 65, 65, 245, 269, 178, - 161, 161, 161, 161, 161, 163, 269, 163, 269, 75, - 75, 163, 248, 269, 273, 164, 269, 153, 171, 173, - 174, 77, 166, 220, 221, 77, 222, 250, 122, 122, - 161, 161, 161, 161, 161, 161, 153, 164, 171, 171, - 248, 269, 273, 249, 269, 301, 176, 164, 153, 161, - 8, 163, 75, 75, 163, 32, 188, 65, 147, 9, - 10, 11, 25, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 51, 163, 53, 54, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 161, 147, 65, 126, 65, 164, 166, 285, - 65, 65, 65, 188, 269, 153, 171, 301, 147, 147, - 271, 273, 127, 167, 8, 267, 153, 171, 147, 161, - 261, 147, 126, 285, 162, 269, 269, 269, 287, 287, - 8, 163, 87, 269, 246, 247, 269, 248, 273, 75, - 202, 269, 163, 163, 163, 13, 163, 163, 176, 163, - 171, 95, 8, 163, 164, 270, 273, 8, 163, 13, - 8, 163, 188, 184, 185, 273, 273, 297, 273, 162, - 128, 273, 292, 293, 294, 171, 170, 163, 164, 161, - 127, 162, 162, 162, 121, 165, 177, 178, 186, 187, - 269, 75, 32, 160, 217, 218, 219, 269, 75, 124, - 192, 124, 194, 75, 161, 287, 75, 279, 285, 291, - 269, 269, 269, 26, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 256, 32, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 217, 75, 279, 287, 75, 164, 279, 288, - 289, 290, 287, 269, 287, 287, 287, 162, 171, 75, - 75, 32, 269, 32, 269, 171, 279, 217, 279, 288, - 162, 162, 167, 167, 269, 161, 162, 163, 8, 95, - 95, 13, 8, 162, 162, 44, 45, 65, 83, 129, - 150, 153, 171, 254, 262, 263, 264, 165, 95, 75, - 174, 269, 221, 263, 77, 161, 8, 162, 8, 162, - 162, 163, 161, 8, 162, 162, 161, 165, 170, 217, - 248, 273, 161, 165, 271, 269, 162, 8, 13, 150, - 153, 171, 255, 125, 195, 196, 255, 164, 161, 129, - 155, 211, 212, 214, 215, 255, 167, 161, 161, 285, - 269, 26, 66, 273, 162, 161, 161, 167, 269, 161, - 276, 277, 278, 65, 164, 167, 165, 167, 167, 167, - 271, 271, 127, 162, 258, 26, 178, 269, 26, 178, - 206, 246, 269, 273, 32, 198, 273, 263, 75, 26, - 178, 201, 26, 164, 203, 263, 263, 263, 266, 268, - 161, 153, 171, 147, 107, 159, 180, 181, 183, 75, - 165, 13, 211, 185, 163, 273, 292, 293, 13, 217, - 165, 162, 162, 219, 263, 153, 171, 196, 164, 8, - 223, 211, 162, 8, 32, 77, 160, 213, 217, 217, - 269, 256, 217, 217, 165, 217, 65, 65, 274, 287, - 269, 32, 269, 126, 259, 176, 207, 162, 176, 163, - 127, 197, 273, 197, 13, 176, 163, 204, 163, 204, - 127, 167, 8, 267, 266, 171, 75, 161, 164, 181, - 182, 183, 263, 162, 162, 269, 162, 163, 171, 223, - 255, 104, 109, 111, 112, 113, 114, 115, 116, 117, - 165, 224, 226, 239, 240, 241, 242, 244, 162, 109, - 251, 214, 213, 77, 13, 162, 162, 261, 162, 162, - 162, 287, 287, 126, 275, 167, 165, 271, 288, 208, - 70, 71, 209, 163, 88, 246, 198, 162, 162, 263, - 94, 204, 97, 98, 99, 204, 165, 263, 263, 162, - 255, 176, 251, 165, 75, 227, 255, 77, 243, 250, - 242, 8, 163, 26, 216, 161, 216, 32, 213, 13, - 263, 167, 167, 288, 70, 71, 210, 161, 178, 163, - 162, 26, 178, 200, 200, 163, 97, 163, 269, 26, - 163, 205, 165, 127, 77, 165, 216, 13, 8, 163, - 164, 228, 13, 8, 163, 225, 75, 25, 215, 164, - 32, 77, 252, 164, 213, 13, 263, 278, 161, 26, - 72, 269, 26, 178, 199, 176, 163, 205, 176, 263, - 162, 164, 263, 255, 75, 229, 230, 231, 232, 234, - 235, 236, 255, 263, 77, 188, 13, 215, 176, 77, - 8, 162, 176, 13, 263, 269, 176, 163, 162, 176, - 92, 176, 164, 176, 165, 231, 163, 95, 154, 163, - 147, 13, 75, 263, 165, 32, 77, 165, 263, 162, - 178, 90, 163, 176, 165, 237, 242, 233, 255, 75, - 263, 161, 77, 26, 163, 165, 75, 8, 211, 176, - 255, 162, 216, 163, 164, 238, 176, 165 -}; - - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = -{ - 0, 168, 169, 170, 170, 171, 171, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 173, 173, 174, 174, - 174, 174, 175, 175, 176, 176, 177, 177, 177, 177, - 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 180, 180, 181, 182, 182, 183, - 184, 184, 185, 186, 187, 188, 188, 189, 190, 190, - 191, 191, 191, 191, 192, 192, 193, 194, 194, 195, - 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, - 200, 201, 201, 202, 202, 203, 203, 203, 203, 204, - 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, - 209, 209, 210, 210, 211, 211, 212, 212, 212, 212, - 212, 212, 212, 212, 213, 213, 214, 214, 215, 215, - 215, 216, 216, 216, 217, 217, 218, 218, 219, 219, - 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, - 223, 223, 224, 224, 224, 225, 224, 226, 227, 227, - 228, 228, 229, 229, 230, 230, 231, 231, 232, 233, - 233, 234, 234, 235, 236, 236, 237, 237, 238, 238, - 239, 239, 240, 240, 241, 241, 242, 242, 242, 242, - 242, 242, 243, 243, 243, 243, 244, 244, 245, 245, - 246, 246, 247, 247, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, - 249, 250, 251, 251, 252, 252, 252, 252, 253, 253, - 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, - 255, 255, 255, 256, 256, 257, 257, 258, 258, 259, - 260, 260, 260, 261, 261, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 264, 265, 265, 265, - 265, 265, 265, 266, 266, 267, 267, 268, 268, 268, - 268, 269, 269, 270, 271, 272, 273, 273, 274, 274, - 275, 276, 276, 277, 278, 278, 278, 279, 279, 280, - 280, 281, 282, 282, 283, 283, 283, 284, 284, 284, - 284, 285, 285, 285, 286, 286, 287, 287, 288, 288, - 289, 289, 289, 290, 290, 291, 291, 292, 292, 293, - 293, 293, 294, 294, 295, 295, 295, 295, 295, 295, - 295, 295, 296, 296, 296, 296, 296, 296, 296, 297, - 297, 298, 298, 299, 299, 299, 299, 299, 300, 300, - 301, 302, 302 -}; - - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 1, 2, 0, 1, 3, 1, 1, 1, - 4, 3, 5, 4, 3, 2, 3, 1, 1, 3, - 2, 4, 5, 4, 2, 0, 1, 1, 1, 4, - 1, 2, 1, 1, 1, 3, 7, 10, 5, 7, - 9, 5, 2, 3, 2, 3, 2, 3, 3, 3, - 3, 3, 1, 2, 2, 5, 8, 8, 5, 1, - 6, 5, 3, 3, 2, 1, 8, 0, 1, 4, - 1, 3, 1, 1, 1, 0, 1, 10, 7, 6, - 1, 2, 2, 1, 0, 2, 1, 0, 2, 0, - 2, 1, 3, 0, 2, 1, 2, 1, 4, 1, - 4, 1, 4, 3, 5, 3, 4, 4, 5, 0, - 5, 4, 1, 1, 1, 4, 0, 6, 0, 7, - 0, 2, 0, 3, 1, 0, 2, 3, 5, 4, - 4, 5, 7, 6, 2, 1, 0, 1, 1, 1, - 1, 0, 3, 2, 1, 0, 1, 3, 1, 2, - 2, 3, 1, 1, 2, 4, 3, 5, 1, 3, - 2, 0, 3, 2, 1, 0, 10, 3, 1, 3, - 1, 3, 0, 1, 1, 2, 2, 2, 3, 1, - 3, 1, 1, 3, 4, 3, 0, 1, 1, 3, - 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, - 1, 1, 3, 5, 1, 3, 5, 4, 3, 1, - 0, 1, 3, 1, 6, 3, 4, 6, 2, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 1, 1, 5, 4, 3, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 2, 1, 10, 11, 2, 2, 4, - 4, 1, 0, 4, 3, 4, 1, 2, 4, 6, - 5, 6, 6, 6, 6, 4, 1, 1, 3, 2, - 1, 3, 2, 1, 1, 4, 1, 2, 0, 2, - 0, 2, 3, 0, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 2, 2, 2, 4, 3, 1, 3, 1, 1, 1, - 3, 2, 1, 0, 2, 0, 1, 5, 3, 3, - 1, 1, 1, 1, 1, 1, 5, 1, 2, 0, - 3, 4, 4, 3, 1, 1, 0, 1, 2, 3, - 3, 1, 4, 4, 1, 1, 1, 1, 3, 2, - 1, 4, 4, 1, 1, 4, 0, 1, 1, 1, - 4, 4, 1, 1, 3, 1, 2, 3, 1, 1, - 4, 0, 0, 2, 5, 3, 3, 1, 6, 4, - 4, 2, 4, 4, 2, 2, 4, 2, 2, 1, - 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, - 3, 3, 3 -}; - - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (yyscanner, root, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value, yyscanner, root); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - YYUSE (yyscanner); - YYUSE (root); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - YYUSE (yytype); -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) -{ - YYFPRINTF (yyoutput, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep, yyscanner, root); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, void* yyscanner, xhpast::Node** root) -{ - unsigned long int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , yyscanner, root); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule, yyscanner, root); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void* yyscanner, xhpast::Node** root) -{ - YYUSE (yyvaluep); - YYUSE (yyscanner); - YYUSE (root); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (void* yyscanner, xhpast::Node** root) -{ -/* The lookahead symbol. */ -int yychar; - - -/* The semantic value of the lookahead symbol. */ -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); - - /* Number of syntax errors so far. */ - int yynerrs; - - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (&yylval, yyscanner); - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 210 "parser.y" /* yacc.c:1646 */ - { - *root = NNEW(n_PROGRAM)->appendChild((yyvsp[0])); - } -#line 3429 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 3: -#line 216 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); - } -#line 3437 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 4: -#line 219 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT_LIST); - } -#line 3445 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 5: -#line 225 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_SYMBOL_NAME); - } -#line 3453 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 6: -#line 228 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[-2]), (yyvsp[0])); - } -#line 3461 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 10: -#line 237 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); - NMORE((yyval), (yyvsp[0])); - } -#line 3471 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 11: -#line 242 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-2]), n_NAMESPACE, (yyvsp[-1])); - (yyvsp[-2])->appendChild((yyvsp[-1])); - (yyvsp[-2])->appendChild(NNEW(n_EMPTY)); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3483 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 12: -#line 249 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-4]), n_NAMESPACE, (yyvsp[0])); - (yyvsp[-4])->appendChild((yyvsp[-3])); - (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); - } -#line 3494 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 13: -#line 255 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-3]), n_NAMESPACE, (yyvsp[0])); - (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); - NMORE((yyvsp[-1]), (yyvsp[0])); - NMORE((yyvsp[-1]), (yyvsp[-2])); - (yyvsp[-3])->appendChild((yyvsp[-1])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); - } -#line 3507 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 14: -#line 263 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-1]), (yyvsp[-2])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3517 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 15: -#line 268 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3526 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 16: -#line 275 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 3534 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 17: -#line 278 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_USE_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 3543 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 18: -#line 285 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_USE); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - } -#line 3553 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 19: -#line 290 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_USE); - (yyval)->appendChild((yyvsp[-2])); - NTYPE((yyvsp[0]), n_STRING); - (yyval)->appendChild((yyvsp[0])); - } -#line 3564 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 20: -#line 296 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_USE); - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - } -#line 3575 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 21: -#line 302 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_USE); - NMORE((yyvsp[-2]), (yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - NTYPE((yyvsp[0]), n_STRING); - (yyval)->appendChild((yyvsp[0])); - } -#line 3587 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 22: -#line 312 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyval), (yyvsp[0])); - (yyval)->appendChild( - NNEW(n_CONSTANT_DECLARATION) - ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) - ->appendChild((yyvsp[0]))); - } -#line 3599 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 23: -#line 319 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyval), n_CONSTANT_DECLARATION_LIST, (yyvsp[0])); - (yyval)->appendChild( - NNEW(n_CONSTANT_DECLARATION) - ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) - ->appendChild((yyvsp[0]))); - } -#line 3611 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 24: -#line 329 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); - } -#line 3619 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 25: -#line 332 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT_LIST); - } -#line 3627 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 29: -#line 341 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); - NMORE((yyval), (yyvsp[0])); - } -#line 3637 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 31: -#line 350 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_STRING); - (yyval) = NNEW(n_LABEL); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3648 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 32: -#line 356 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); - } -#line 3656 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 33: -#line 359 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); - } -#line 3664 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 34: -#line 362 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_CLOSE_TAG); - } -#line 3672 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 35: -#line 368 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 3680 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 36: -#line 371 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CONDITION_LIST); - - (yyvsp[-6]) = NTYPE((yyvsp[-6]), n_IF); - (yyvsp[-6])->appendChild(NSPAN((yyvsp[-5]), n_CONTROL_CONDITION, (yyvsp[-3]))->appendChild((yyvsp[-4]))); - (yyvsp[-6])->appendChild((yyvsp[-2])); - - (yyval)->appendChild((yyvsp[-6])); - (yyval)->appendChildren((yyvsp[-1])); - - // Hacks: merge a list of if (x) { } else if (y) { } into a single condition - // list instead of a condition tree. - - if ((yyvsp[0])->type == n_EMPTY) { - // Ignore. - } else if ((yyvsp[0])->type == n_ELSE) { - xhpast::Node *stype = (yyvsp[0])->firstChild()->firstChild(); - if (stype && stype->type == n_CONDITION_LIST) { - NTYPE(stype->firstChild(), n_ELSEIF); - stype->firstChild()->l_tok = (yyvsp[0])->l_tok; - (yyval)->appendChildren(stype); - } else { - (yyval)->appendChild((yyvsp[0])); - } - } else { - (yyval)->appendChild((yyvsp[0])); - } - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - } -#line 3715 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 37: -#line 405 "parser.y" /* yacc.c:1646 */ - { - - (yyval) = NNEW(n_CONDITION_LIST); - NTYPE((yyvsp[-9]), n_IF); - (yyvsp[-9])->appendChild(NSPAN((yyvsp[-8]), n_CONTROL_CONDITION, (yyvsp[-6]))->appendChild((yyvsp[-7]))); - (yyvsp[-9])->appendChild((yyvsp[-4])); - - (yyval)->appendChild((yyvsp[-9])); - (yyval)->appendChildren((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - NMORE((yyval), (yyvsp[0])); - } -#line 3735 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 38: -#line 420 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-4]), n_WHILE); - (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); - (yyvsp[-4])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); - } -#line 3747 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 39: -#line 427 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-6]), n_DO_WHILE); - (yyvsp[-6])->appendChild((yyvsp[-5])); - (yyvsp[-6])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-6])); - NMORE((yyval), (yyvsp[0])); - } -#line 3760 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 40: -#line 435 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-8]), n_FOR); - - NSPAN((yyvsp[-7]), n_FOR_EXPRESSION, (yyvsp[-1])) - ->appendChild((yyvsp[-6])) - ->appendChild((yyvsp[-4])) - ->appendChild((yyvsp[-2])); - - (yyvsp[-8])->appendChild((yyvsp[-7])); - (yyvsp[-8])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-8])); - } -#line 3778 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 41: -#line 448 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-4]), n_SWITCH); - (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); - (yyvsp[-4])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); - } -#line 3790 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 42: -#line 455 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_BREAK); - (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3802 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 43: -#line 462 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_BREAK); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3814 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 44: -#line 469 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_CONTINUE); - (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3826 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 45: -#line 476 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_CONTINUE); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3838 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 46: -#line 483 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_RETURN); - (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3850 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 47: -#line 490 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_RETURN); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3862 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 48: -#line 497 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_RETURN); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3874 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 49: -#line 504 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-1]), (yyvsp[-2])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3884 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 50: -#line 509 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-1]), (yyvsp[-2])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3894 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 51: -#line 514 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-1]), (yyvsp[-2])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3904 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 52: -#line 519 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_INLINE_HTML); - (yyval) = (yyvsp[0]); - } -#line 3913 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 53: -#line 523 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3922 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 54: -#line 527 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 3931 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 55: -#line 531 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[-1])); - NMORE((yyvsp[-2]), (yyvsp[-4])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 3942 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 56: -#line 538 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-7]), n_FOREACH); - NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); - (yyvsp[-6])->appendChild((yyvsp[-5])); - if ((yyvsp[-2])->type == n_EMPTY) { - (yyvsp[-6])->appendChild((yyvsp[-2])); - (yyvsp[-6])->appendChild((yyvsp[-3])); - } else { - (yyvsp[-6])->appendChild((yyvsp[-3])); - (yyvsp[-6])->appendChild((yyvsp[-2])); - } - (yyvsp[-7])->appendChild((yyvsp[-6])); - - (yyvsp[-7])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); - } -#line 3964 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 57: -#line 556 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-7]), n_FOREACH); - NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); - (yyvsp[-6])->appendChild((yyvsp[-5])); - if ((yyvsp[-2])->type == n_EMPTY) { - (yyvsp[-6])->appendChild((yyvsp[-2])); - (yyvsp[-6])->appendChild((yyvsp[-3])); - } else { - (yyvsp[-6])->appendChild((yyvsp[-3])); - (yyvsp[-6])->appendChild((yyvsp[-2])); - } - (yyvsp[-7])->appendChild((yyvsp[-6])); - (yyvsp[-7])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); - } -#line 3985 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 58: -#line 572 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-4]), n_DECLARE); - (yyvsp[-4])->appendChild((yyvsp[-2])); - (yyvsp[-4])->appendChild((yyvsp[0])); - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); - } -#line 3996 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 59: -#line 578 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); - NMORE((yyval), (yyvsp[0])); - } -#line 4005 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 60: -#line 582 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-5]), n_TRY); - (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); - - (yyvsp[-5])->appendChild((yyvsp[-1])); - (yyvsp[-5])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-5])); - } -#line 4019 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 61: -#line 591 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-4]), n_TRY); - (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]))); - - (yyvsp[-4])->appendChild(NNEW(n_CATCH_LIST)); - (yyvsp[-4])->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); - } -#line 4033 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 62: -#line 600 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_THROW); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - - } -#line 4046 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 63: -#line 608 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_GOTO); - NTYPE((yyvsp[-1]), n_STRING); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - } -#line 4059 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 64: -#line 619 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 4068 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 65: -#line 623 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CATCH_LIST); - (yyval)->appendChild((yyvsp[0])); -} -#line 4077 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 66: -#line 630 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-7]), n_CATCH); - (yyvsp[-7])->appendChild((yyvsp[-5])); - (yyvsp[-7])->appendChild(NTYPE((yyvsp[-4]), n_VARIABLE)); - (yyvsp[-7])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - NMORE((yyvsp[-7]), (yyvsp[0])); - (yyval) = (yyvsp[-7]); - } -#line 4090 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 67: -#line 641 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4098 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 69: -#line 648 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_FINALLY); - (yyvsp[-3])->appendChild((yyvsp[-1])); - NMORE((yyvsp[-3]), (yyvsp[0])); - (yyval) = (yyvsp[-3]); - } -#line 4109 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 70: -#line 657 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNSET_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 4118 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 71: -#line 661 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4127 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 75: -#line 680 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4135 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 76: -#line 683 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_REFERENCE); - } -#line 4143 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 77: -#line 690 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild((yyvsp[-8])); - (yyvsp[-9])->appendChild(NTYPE((yyvsp[-7]), n_STRING)); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-6]), (yyvsp[-5]), (yyvsp[-4]))); - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild((yyvsp[-3])); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-9])); - } -#line 4160 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 78: -#line 706 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_DECLARATION); - (yyval)->appendChild((yyvsp[-6])); - (yyval)->appendChild(NTYPE((yyvsp[-5]), n_CLASS_NAME)); - (yyval)->appendChild((yyvsp[-4])); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - NMORE((yyval), (yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - } -#line 4176 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 79: -#line 717 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INTERFACE_DECLARATION); - (yyval)->appendChild(NNEW(n_CLASS_ATTRIBUTES)); - NMORE((yyval), (yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-4]), n_CLASS_NAME)); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - NMORE((yyval), (yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - } -#line 4193 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 80: -#line 732 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); - (yyval) = (yyvsp[0]); - } -#line 4202 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 81: -#line 736 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); - - (yyval) = (yyvsp[0]); - } -#line 4214 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 82: -#line 743 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); - - (yyval) = (yyvsp[0]); - } -#line 4226 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 83: -#line 750 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_ATTRIBUTES); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 4235 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 84: -#line 757 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4243 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 85: -#line 760 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_EXTENDS_LIST)->appendChild((yyvsp[0])); - } -#line 4251 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 87: -#line 770 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4259 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 88: -#line 773 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_EXTENDS_LIST); - (yyvsp[-1])->appendChildren((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 4269 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 89: -#line 781 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4277 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 90: -#line 784 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_IMPLEMENTS_LIST); - (yyvsp[-1])->appendChildren((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 4287 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 91: -#line 792 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_IMPLEMENTS_LIST)->appendChild((yyvsp[0])); - } -#line 4295 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 92: -#line 795 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 4303 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 93: -#line 801 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4311 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 94: -#line 804 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 4319 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 96: -#line 811 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 4329 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 98: -#line 820 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[-3])); - NMORE((yyvsp[-2]), (yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4339 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 100: -#line 829 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[-3])); - NMORE((yyvsp[-2]), (yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4349 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 102: -#line 838 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[-3])); - NMORE((yyvsp[-2]), (yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4359 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 103: -#line 846 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARE_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); - (yyval)->appendChild((yyvsp[0])); - (yyval) = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild((yyval)); - } -#line 4370 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 104: -#line 852 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARE_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); - (yyval)->appendChild((yyvsp[0])); - - (yyvsp[-4])->appendChild((yyval)); - (yyval) = (yyvsp[-4]); - } -#line 4383 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 105: -#line 863 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 4391 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 106: -#line 866 "parser.y" /* yacc.c:1646 */ - { - // ...why does this rule exist? - - NTYPE((yyvsp[-2]), n_STATEMENT); - (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-2])); - (yyval)->appendChildren((yyvsp[-1])); - NEXPAND((yyvsp[-3]), (yyval), (yyvsp[0])); - } -#line 4406 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 107: -#line 876 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[0])); - NMORE((yyvsp[-2]), (yyvsp[-3])); - (yyval) = (yyvsp[-2]); - } -#line 4416 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 108: -#line 881 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_STATEMENT); - (yyvsp[-4])->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-3])); - (yyval)->appendChildren((yyvsp[-2])); - NMORE((yyval), (yyvsp[0])); - NMORE((yyval), (yyvsp[-4])); - } -#line 4430 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 109: -#line 893 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT_LIST); - } -#line 4438 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 110: -#line 896 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_CASE); - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyvsp[-3])->appendChild((yyvsp[0])); - - (yyvsp[-4])->appendChild((yyvsp[-3])); - (yyval) = (yyvsp[-4]); - } -#line 4451 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 111: -#line 904 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_DEFAULT); - (yyvsp[-2])->appendChild((yyvsp[0])); - - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyval) = (yyvsp[-3]); - } -#line 4463 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 115: -#line 920 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-2]), (yyvsp[0])); - NMORE((yyvsp[-2]), (yyvsp[-3])); - (yyval) = (yyvsp[-2]); - } -#line 4473 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 116: -#line 928 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CONDITION_LIST); - } -#line 4481 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 117: -#line 931 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-4]), n_ELSEIF); - (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); - (yyvsp[-4])->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-5])->appendChild((yyvsp[-4])); - } -#line 4493 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 118: -#line 941 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CONDITION_LIST); - } -#line 4501 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 119: -#line 944 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-5]), n_ELSEIF); - (yyvsp[-5])->appendChild((yyvsp[-3])); - (yyvsp[-5])->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-6])->appendChild((yyvsp[-5])); - } -#line 4513 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 120: -#line 954 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4521 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 121: -#line 957 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_ELSE); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 4531 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 122: -#line 965 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4539 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 123: -#line 968 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_ELSE); - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4549 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 125: -#line 977 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST); - } -#line 4557 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 126: -#line 983 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); - } -#line 4570 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 127: -#line 991 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); - } -#line 4584 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 128: -#line 1000 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-4])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); - } -#line 4598 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 129: -#line 1009 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); - } -#line 4611 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 130: -#line 1017 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = (yyvsp[-3])->appendChild((yyval)); - } -#line 4624 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 131: -#line 1025 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = (yyvsp[-4])->appendChild((yyval)); - } -#line 4638 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 132: -#line 1035 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-4])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-6])->appendChild((yyval)); - } -#line 4652 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 133: -#line 1045 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_PARAMETER); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-5])->appendChild((yyval)); - } -#line 4665 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 134: -#line 1056 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_UNPACK); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - } -#line 4674 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 135: -#line 1060 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); - } -#line 4682 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 136: -#line 1066 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4690 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 138: -#line 1073 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 4698 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 139: -#line 1076 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); - } -#line 4706 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 140: -#line 1079 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); - } -#line 4714 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 141: -#line 1085 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4722 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 142: -#line 1088 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_RETURN); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - } -#line 4732 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 143: -#line 1093 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_DECLARATION_RETURN); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[0])); - } -#line 4742 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 145: -#line 1102 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CALL_PARAMETER_LIST); - } -#line 4750 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 146: -#line 1108 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CALL_PARAMETER_LIST)->appendChild((yyvsp[0])); - } -#line 4758 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 147: -#line 1111 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 4766 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 149: -#line 1118 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNPACK)->appendChild((yyvsp[-1])); - } -#line 4774 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 150: -#line 1121 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); - (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); - } -#line 4783 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 151: -#line 1128 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 4792 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 152: -#line 1132 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_GLOBAL_DECLARATION_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 4801 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 153: -#line 1139 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); - } -#line 4809 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 154: -#line 1142 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_VARIABLE_VARIABLE); - (yyval)->appendChild((yyvsp[0])); - } -#line 4818 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 155: -#line 1146 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-3]), n_VARIABLE_VARIABLE); - (yyval)->appendChild((yyvsp[-1])); - } -#line 4827 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 156: -#line 1153 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_VARIABLE); - (yyval) = NNEW(n_STATIC_DECLARATION); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = (yyvsp[-2])->appendChild((yyval)); - } -#line 4840 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 157: -#line 1161 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_VARIABLE); - (yyval) = NNEW(n_STATIC_DECLARATION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-4])->appendChild((yyval)); - } -#line 4853 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 158: -#line 1169 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_VARIABLE); - (yyval) = NNEW(n_STATIC_DECLARATION); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); - } -#line 4866 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 159: -#line 1177 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_VARIABLE); - (yyval) = NNEW(n_STATIC_DECLARATION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); - } -#line 4879 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 160: -#line 1188 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); - } -#line 4887 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 161: -#line 1191 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT_LIST); - } -#line 4895 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 162: -#line 1197 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChildren((yyvsp[-1])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - NMORE((yyval), (yyvsp[0])); - } -#line 4908 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 163: -#line 1205 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 4917 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 164: -#line 1209 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 4925 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 165: -#line 1212 "parser.y" /* yacc.c:1646 */ - { - /* empty */ - } -#line 4933 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 166: -#line 1214 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_METHOD_DECLARATION); - NMORE((yyval), (yyvsp[-8])); - (yyval)->appendChild((yyvsp[-9])); - (yyval)->appendChild((yyvsp[-6])); - (yyval)->appendChild(NTYPE((yyvsp[-5]), n_STRING)); - (yyval)->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); - } -#line 4951 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 167: -#line 1230 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-2]), n_TRAIT_USE); - (yyval)->appendChildren((yyvsp[-1])); - (yyval)->appendChild((yyvsp[0])); - } -#line 4961 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 168: -#line 1238 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_USE_LIST)->appendChild((yyvsp[0])); - } -#line 4969 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 169: -#line 1241 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 4977 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 170: -#line 1247 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 4985 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 171: -#line 1250 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 4993 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 172: -#line 1256 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); - } -#line 5001 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 173: -#line 1259 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 5009 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 174: -#line 1265 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 5018 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 175: -#line 1269 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 5027 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 176: -#line 1276 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); - } -#line 5035 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 177: -#line 1279 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); - } -#line 5043 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 178: -#line 1285 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_INSTEADOF); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - } -#line 5053 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 179: -#line 1293 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_REFERENCE_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 5062 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 180: -#line 1297 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 5071 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 181: -#line 1304 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_METHOD_REFERENCE); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5080 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 182: -#line 1308 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 5088 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 183: -#line 1314 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_TRAIT_METHOD_REFERENCE); - NEXPAND((yyvsp[-2]), (yyvsp[-1]), NTYPE((yyvsp[0]), n_STRING)); - (yyval) = (yyvsp[-1]); - } -#line 5098 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 184: -#line 1322 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_AS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5109 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 185: -#line 1328 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TRAIT_AS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - (yyval)->appendChild(NNEW(n_EMPTY)); - } -#line 5120 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 186: -#line 1337 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 5128 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 187: -#line 1340 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_METHOD_MODIFIER_LIST); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5137 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 188: -#line 1348 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 5145 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 189: -#line 1351 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 5153 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 191: -#line 1358 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5162 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 192: -#line 1365 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_METHOD_MODIFIER_LIST); - } -#line 5170 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 193: -#line 1368 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_METHOD_MODIFIER_LIST); - (yyval) = (yyvsp[0]); - } -#line 5179 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 194: -#line 1375 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5188 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 195: -#line 1379 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 5196 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 202: -#line 1394 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = (yyvsp[-2])->appendChild((yyval)); - } -#line 5208 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 203: -#line 1401 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-4])->appendChild((yyval)); - } -#line 5220 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 204: -#line 1408 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - (yyval)->appendChild(NNEW(n_EMPTY)); - - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); - } -#line 5232 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 205: -#line 1415 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); - } -#line 5244 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 206: -#line 1425 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); - (yyval)->appendChild((yyvsp[0])); - - (yyvsp[-4])->appendChild((yyval)); - - (yyval) = (yyvsp[-4]); - } -#line 5258 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 207: -#line 1434 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_CLASS_CONSTANT_DECLARATION_LIST); - (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); - (yyval)->appendChild((yyvsp[0])); - (yyvsp[-3])->appendChild((yyval)); - - (yyval) = (yyvsp[-3]); - } -#line 5272 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 208: -#line 1446 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 5280 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 209: -#line 1449 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ECHO_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 5289 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 210: -#line 1456 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 5297 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 212: -#line 1464 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 5305 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 213: -#line 1467 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EXPRESSION_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 5314 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 214: -#line 1474 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-5]), n_LIST); - (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5327 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 215: -#line 1482 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5338 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 216: -#line 1488 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); - - NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); - (yyvsp[-1])->appendChild((yyvsp[0])); - - (yyval)->appendChild((yyvsp[-1])); - } -#line 5353 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 217: -#line 1498 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-4]), n_OPERATOR)); - - NTYPE((yyvsp[-2]), n_NEW); - (yyvsp[-2])->appendChild((yyvsp[-1])); - (yyvsp[-2])->appendChild((yyvsp[0])); - - NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE); - (yyvsp[-3])->appendChild((yyvsp[-2])); - - (yyval)->appendChild((yyvsp[-3])); - } -#line 5372 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 218: -#line 1512 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5382 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 219: -#line 1517 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5393 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 220: -#line 1523 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5404 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 221: -#line 1529 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5415 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 222: -#line 1535 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5426 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 223: -#line 1541 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5437 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 224: -#line 1547 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5448 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 225: -#line 1553 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5459 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 226: -#line 1559 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5470 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 227: -#line 1565 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5481 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 228: -#line 1571 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5492 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 229: -#line 1577 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5503 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 230: -#line 1583 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); - } -#line 5513 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 231: -#line 1588 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5523 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 232: -#line 1593 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); - (yyval)->appendChild((yyvsp[-1])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); - } -#line 5533 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 233: -#line 1598 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5543 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 234: -#line 1603 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5554 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 235: -#line 1609 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5565 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 236: -#line 1615 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5576 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 237: -#line 1621 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5587 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 238: -#line 1627 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5598 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 239: -#line 1633 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5609 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 240: -#line 1639 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5620 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 241: -#line 1645 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5631 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 242: -#line 1651 "parser.y" /* yacc.c:1646 */ - { - - /* The concatenation operator generates n_CONCATENATION_LIST instead of - n_BINARY_EXPRESSION because we tend to run into stack depth issues in a - lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ - - if ((yyvsp[-2])->type == n_CONCATENATION_LIST && (yyvsp[0])->type == n_CONCATENATION_LIST) { - (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyvsp[-2])->appendChildren((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } else if ((yyvsp[-2])->type == n_CONCATENATION_LIST) { - (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } else if ((yyvsp[0])->type == n_CONCATENATION_LIST) { - (yyval) = NNEW(n_CONCATENATION_LIST); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChildren((yyvsp[0])); - } else { - (yyval) = NNEW(n_CONCATENATION_LIST); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } - } -#line 5662 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 243: -#line 1677 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5673 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 244: -#line 1683 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5684 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 245: -#line 1689 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5695 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 246: -#line 1695 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5706 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 247: -#line 1701 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5717 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 248: -#line 1707 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5728 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 249: -#line 1713 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5739 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 250: -#line 1719 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5749 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 251: -#line 1724 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5759 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 252: -#line 1729 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5769 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 253: -#line 1734 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5779 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 254: -#line 1739 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5790 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 255: -#line 1745 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5801 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 256: -#line 1751 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5812 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 257: -#line 1757 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5823 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 258: -#line 1763 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5834 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 259: -#line 1769 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5845 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 260: -#line 1775 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5856 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 261: -#line 1781 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5867 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 262: -#line 1787 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5878 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 263: -#line 1793 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5889 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 266: -#line 1801 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TERNARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-4])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5902 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 267: -#line 1809 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_TERNARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5915 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 268: -#line 1817 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_BINARY_EXPRESSION); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5926 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 270: -#line 1824 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5936 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 271: -#line 1829 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5946 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 272: -#line 1834 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5956 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 273: -#line 1839 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5966 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 274: -#line 1844 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5976 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 275: -#line 1849 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5986 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 276: -#line 1854 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CAST_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); - (yyval)->appendChild((yyvsp[0])); - } -#line 5996 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 277: -#line 1859 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 6006 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 278: -#line 1864 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 6016 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 279: -#line 1869 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_BACKTICKS_EXPRESSION); - (yyval) = (yyvsp[0]); - } -#line 6025 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 283: -#line 1876 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 6035 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 284: -#line 1881 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_YIELD); - (yyvsp[0])->appendChild(NNEW(n_EMPTY)); - (yyvsp[0])->appendChild(NNEW(n_EMPTY)); - (yyval) = (yyvsp[0]); - } -#line 6046 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 285: -#line 1890 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild((yyvsp[-8])); - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); - (yyvsp[-9])->appendChild((yyvsp[-4])); - (yyvsp[-9])->appendChild((yyvsp[-3])); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - - (yyval) = (yyvsp[-9]); - } -#line 6063 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 286: -#line 1905 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); - NMORE((yyvsp[-9]), (yyvsp[-10])); - - (yyval) = NNEW(n_FUNCTION_MODIFIER_LIST); - (yyval)->appendChild(NTYPE((yyvsp[-10]), n_STRING)); - (yyvsp[-9])->appendChild((yyvsp[-10])); - - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild((yyvsp[-8])); - (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); - (yyvsp[-9])->appendChild((yyvsp[-4])); - (yyvsp[-9])->appendChild((yyvsp[-3])); - (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - - (yyval) = (yyvsp[-9]); - } -#line 6086 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 287: -#line 1926 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_YIELD); - (yyvsp[0])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 6097 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 288: -#line 1932 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_YIELD); - (yyvsp[0])->appendChild(NNEW(n_EMPTY)); - (yyvsp[-1])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 6108 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 289: -#line 1938 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_YIELD); - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyvsp[-3])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-3]); - } -#line 6119 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 290: -#line 1944 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_YIELD); - (yyvsp[-3])->appendChild((yyvsp[-2])); - (yyvsp[-3])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-3]); - } -#line 6130 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 292: -#line 1957 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6138 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 293: -#line 1960 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_LEXICAL_VARIABLE_LIST); - (yyvsp[-3])->appendChildren((yyvsp[-1])); - (yyval) = (yyvsp[-3]); - } -#line 6148 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 294: -#line 1968 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - } -#line 6156 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 295: -#line 1971 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); - (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - (yyval) = (yyvsp[-3])->appendChild((yyvsp[-1])); - } -#line 6166 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 296: -#line 1976 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - } -#line 6175 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 297: -#line 1980 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); - (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); - (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); - (yyval)->appendChild((yyvsp[-1])); - } -#line 6186 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 298: -#line 1989 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6196 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 299: -#line 1995 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-3]), (yyvsp[-5])); - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6207 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 300: -#line 2001 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[-3]), (yyvsp[-4])); - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6218 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 301: -#line 2008 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); - - (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6231 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 302: -#line 2017 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); - - (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6244 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 303: -#line 2026 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); - - (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6257 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 304: -#line 2035 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-5])); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); - - (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6270 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 305: -#line 2043 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 6280 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 306: -#line 2051 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6288 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 307: -#line 2054 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6296 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 308: -#line 2057 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-2])); - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6305 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 309: -#line 2061 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6314 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 310: -#line 2068 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6322 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 311: -#line 2071 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-2])); - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6331 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 312: -#line 2075 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); - } -#line 6340 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 315: -#line 2090 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); - ii != (yyvsp[0])->children.end(); - ++ii) { - - (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); - (yyval)->appendChild(*ii); - } - } -#line 6357 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 317: -#line 2106 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); - } -#line 6365 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 318: -#line 2109 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6373 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 319: -#line 2115 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 6381 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 320: -#line 2121 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6389 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 321: -#line 2124 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-1]), n_EMPTY, (yyvsp[0])); - (yyval) = (yyvsp[-1]); - } -#line 6398 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 322: -#line 2128 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); - (yyvsp[-2])->appendChild((yyvsp[-1])); - (yyval) = (yyvsp[-2]); - } -#line 6408 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 323: -#line 2136 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6416 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 324: -#line 2139 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 6424 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 325: -#line 2145 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); - } -#line 6432 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 326: -#line 2148 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); - } -#line 6440 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 327: -#line 2151 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_STRING_SCALAR); - } -#line 6448 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 328: -#line 2154 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6456 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 329: -#line 2157 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6464 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 330: -#line 2160 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6472 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 331: -#line 2163 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6480 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 332: -#line 2166 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6488 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 333: -#line 2169 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6496 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 334: -#line 2172 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6504 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 335: -#line 2175 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); - } -#line 6512 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 336: -#line 2178 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_HEREDOC); - } -#line 6520 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 339: -#line 2186 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-2])); - (yyval) = (yyvsp[0]); - } -#line 6529 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 340: -#line 2190 "parser.y" /* yacc.c:1646 */ - { - NMORE((yyvsp[0]), (yyvsp[-1])); - (yyval) = (yyvsp[0]); - } -#line 6538 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 341: -#line 2194 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 6548 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 342: -#line 2199 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); - (yyval)->appendChild((yyvsp[0])); - } -#line 6558 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 343: -#line 2204 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); - (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - (yyval) = (yyvsp[-3]); - } -#line 6568 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 344: -#line 2209 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); - (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - (yyval) = (yyvsp[-2]); - } -#line 6578 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 346: -#line 2218 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 6588 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 350: -#line 2229 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[0]), (yyvsp[-2])); - } -#line 6596 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 351: -#line 2232 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[0]), (yyvsp[-1])); - } -#line 6604 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 353: -#line 2239 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE_LIST); - } -#line 6612 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 354: -#line 2242 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); - } -#line 6620 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 355: -#line 2248 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6628 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 357: -#line 2259 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-4])->appendChild((yyval)); - } -#line 6640 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 358: -#line 2266 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-2])->appendChild((yyval)); - } -#line 6652 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 359: -#line 2273 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 6664 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 360: -#line 2280 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 6676 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 366: -#line 2310 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); - (yyval)->appendChild((yyvsp[-4])); - (yyval)->appendChild((yyvsp[-2])); - - if ((yyvsp[-1])->type != n_EMPTY) { - (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); - (yyval)->appendChild((yyvsp[-1])); - } - - for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); - ii != (yyvsp[0])->children.end(); - ++ii) { - - if ((*ii)->type == n_CALL_PARAMETER_LIST) { - (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); - (yyval)->appendChild((*ii)); - } else { - (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); - (yyval)->appendChild((*ii)); - } - } - } -#line 6704 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 368: -#line 2337 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-1])->appendChildren((yyvsp[0])); - } -#line 6712 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 369: -#line 2340 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6720 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 370: -#line 2346 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - (yyval)->appendChild((yyvsp[-1])); - if ((yyvsp[0])->type != n_EMPTY) { - (yyval)->appendChild((yyvsp[0])); - } - } -#line 6732 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 371: -#line 2356 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6743 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 372: -#line 2362 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6754 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 373: -#line 2371 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 6762 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 376: -#line 2379 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6770 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 378: -#line 2386 "parser.y" /* yacc.c:1646 */ - { - xhpast::Node *last = (yyvsp[-1]); - NMORE((yyvsp[-1]), (yyvsp[0])); - while (last->firstChild() && - last->firstChild()->type == n_VARIABLE_VARIABLE) { - NMORE(last, (yyvsp[0])); - last = last->firstChild(); - } - last->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-1]); - } -#line 6787 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 379: -#line 2401 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - } -#line 6797 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 380: -#line 2406 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - } -#line 6807 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 382: -#line 2418 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6818 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 383: -#line 2424 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6829 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 388: -#line 2440 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 6837 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 389: -#line 2443 "parser.y" /* yacc.c:1646 */ - { - xhpast::Node *last = (yyvsp[-1]); - NMORE((yyvsp[-1]), (yyvsp[0])); - while (last->firstChild() && - last->firstChild()->type == n_VARIABLE_VARIABLE) { - NMORE(last, (yyvsp[0])); - last = last->firstChild(); - } - last->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-1]); - } -#line 6854 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 391: -#line 2459 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6865 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 392: -#line 2465 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6876 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 394: -#line 2475 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_VARIABLE); - } -#line 6884 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 395: -#line 2478 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-3]), n_VARIABLE_EXPRESSION, (yyvsp[0])); - (yyvsp[-3])->appendChild((yyvsp[-1])); - (yyval) = (yyvsp[-3]); - } -#line 6894 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 396: -#line 2486 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 6902 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 397: -#line 2489 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[0]); - } -#line 6910 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 400: -#line 2500 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6921 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 401: -#line 2506 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 6932 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 403: -#line 2516 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[0]), n_STRING); - (yyval) = (yyvsp[0]); - } -#line 6941 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 404: -#line 2520 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 6949 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 405: -#line 2526 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); - } -#line 6957 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 406: -#line 2529 "parser.y" /* yacc.c:1646 */ - { - (yyvsp[0]) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); - - xhpast::Node *last = (yyvsp[-1]); - while (last->firstChild() && - last->firstChild()->type == n_VARIABLE_VARIABLE) { - last = last->firstChild(); - } - last->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-1]); - } -#line 6974 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 407: -#line 2544 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 6982 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 408: -#line 2547 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ASSIGNMENT_LIST); - (yyval)->appendChild((yyvsp[0])); - } -#line 6991 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 410: -#line 2555 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_LIST); - (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - } -#line 7000 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 411: -#line 2559 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - } -#line 7008 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 412: -#line 2565 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE_LIST); - } -#line 7016 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 413: -#line 2568 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); - } -#line 7024 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 414: -#line 2574 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-4])->appendChild((yyval)); - } -#line 7036 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 415: -#line 2581 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = (yyvsp[-2])->appendChild((yyval)); - } -#line 7048 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 416: -#line 2588 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 7060 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 417: -#line 2595 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild((yyvsp[0])); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 7072 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 418: -#line 2602 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); - - (yyval) = (yyvsp[-5])->appendChild((yyval)); - } -#line 7084 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 419: -#line 2609 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); - - (yyval) = (yyvsp[-3])->appendChild((yyval)); - } -#line 7096 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 420: -#line 2616 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 7108 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 421: -#line 2623 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_ARRAY_VALUE); - (yyval)->appendChild(NNEW(n_EMPTY)); - (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); - - (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); - } -#line 7120 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 422: -#line 2633 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_SYMBOL_NAME); - - NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); - (yyvsp[-2])->appendChildren((yyvsp[-1])); - - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - } -#line 7135 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 423: -#line 2643 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_SYMBOL_NAME); - - NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - } -#line 7150 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 424: -#line 2653 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); - } -#line 7158 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 425: -#line 2656 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); - } -#line 7166 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 426: -#line 2659 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_SYMBOL_NAME); - - NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); - (yyvsp[-2])->appendChild((yyvsp[-1])); - - (yyval) = NNEW(n_FUNCTION_CALL); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-2])); - } -#line 7181 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 427: -#line 2669 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); - } -#line 7189 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 428: -#line 2672 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); - } -#line 7197 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 429: -#line 2678 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_EMPTY); - (yyval)->appendChild((yyvsp[0])); - } -#line 7206 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 430: -#line 2682 "parser.y" /* yacc.c:1646 */ - { - (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); - } -#line 7214 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 431: -#line 2688 "parser.y" /* yacc.c:1646 */ - { - NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); - (yyvsp[-2])->appendChild((yyvsp[-1])); - (yyval) = (yyvsp[-2]); - } -#line 7224 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 432: -#line 2693 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); - } -#line 7232 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 433: -#line 2699 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 7243 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 434: -#line 2705 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 7254 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 435: -#line 2711 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING_SCALAR)); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 7265 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 436: -#line 2717 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild((yyvsp[-3])); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 7276 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 437: -#line 2723 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_INDEX_ACCESS); - (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); - (yyval)->appendChild((yyvsp[-1])); - NMORE((yyval), (yyvsp[0])); - } -#line 7287 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 438: -#line 2732 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); - (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - (yyval) = (yyvsp[-3]); - } -#line 7297 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 439: -#line 2737 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); - (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); - (yyval) = (yyvsp[-2]); - } -#line 7307 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 440: -#line 2745 "parser.y" /* yacc.c:1646 */ - { - NTYPE((yyvsp[-2]), n_NEW); - (yyvsp[-2])->appendChild((yyvsp[-1])); - (yyvsp[-2])->appendChild((yyvsp[0])); - (yyval) = (yyvsp[-2]); - } -#line 7318 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 441: -#line 2754 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 7328 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - case 442: -#line 2759 "parser.y" /* yacc.c:1646 */ - { - (yyval) = NNEW(n_CLASS_STATIC_ACCESS); - (yyval)->appendChild((yyvsp[-2])); - (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); - } -#line 7338 "parser.yacc.cpp" /* yacc.c:1646 */ - break; - - -#line 7342 "parser.yacc.cpp" /* yacc.c:1646 */ - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (yyscanner, root, YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yyscanner, root, yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval, yyscanner, root); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp, yyscanner, root); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (yyscanner, root, YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, yyscanner, root); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, yyscanner, root); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - return yyresult; -} -#line 2766 "parser.y" /* yacc.c:1906 */ - - -const char* yytokname(int tok) { - if (tok < 255) { - return NULL; - } - return yytname[YYTRANSLATE(tok)]; -} -/* @generated */ diff --git a/support/xhpast/parser_nodes.php b/support/xhpast/parser_nodes.php index 6418235..b2b1b83 100644 --- a/support/xhpast/parser_nodes.php +++ b/support/xhpast/parser_nodes.php @@ -1,126 +1,127 @@ 'n_PROGRAM', 9001 => 'n_SYMBOL_NAME', 9002 => 'n_HALT_COMPILER', 9003 => 'n_NAMESPACE', 9004 => 'n_STATEMENT', 9005 => 'n_EMPTY', 9006 => 'n_STATEMENT_LIST', 9007 => 'n_OPEN_TAG', 9008 => 'n_CLOSE_TAG', 9009 => 'n_USE_LIST', 9010 => 'n_USE', 9011 => 'n_CONSTANT_DECLARATION_LIST', 9012 => 'n_CONSTANT_DECLARATION', 9013 => 'n_STRING', 9014 => 'n_LABEL', 9015 => 'n_CONDITION_LIST', 9016 => 'n_CONTROL_CONDITION', 9017 => 'n_IF', 9018 => 'n_ELSEIF', 9019 => 'n_ELSE', 9020 => 'n_WHILE', 9021 => 'n_DO_WHILE', 9022 => 'n_FOR', 9023 => 'n_FOR_EXPRESSION', 9024 => 'n_SWITCH', 9025 => 'n_BREAK', 9026 => 'n_CONTINUE', 9027 => 'n_RETURN', 9028 => 'n_GLOBAL_DECLARATION_LIST', 9029 => 'n_GLOBAL_DECLARATION', 9030 => 'n_STATIC_DECLARATION_LIST', 9031 => 'n_STATIC_DECLARATION', 9032 => 'n_ECHO_LIST', 9033 => 'n_ECHO', 9034 => 'n_INLINE_HTML', 9035 => 'n_UNSET_LIST', 9036 => 'n_UNSET', 9037 => 'n_FOREACH', 9038 => 'n_FOREACH_EXPRESSION', 9039 => 'n_THROW', 9040 => 'n_GOTO', 9041 => 'n_TRY', 9042 => 'n_CATCH_LIST', 9043 => 'n_CATCH', 9044 => 'n_DECLARE', 9045 => 'n_DECLARE_DECLARATION_LIST', 9046 => 'n_DECLARE_DECLARATION', 9047 => 'n_VARIABLE', 9048 => 'n_REFERENCE', 9049 => 'n_VARIABLE_REFERENCE', 9050 => 'n_FUNCTION_DECLARATION', 9051 => 'n_CLASS_DECLARATION', 9052 => 'n_CLASS_ATTRIBUTES', 9053 => 'n_EXTENDS', 9054 => 'n_EXTENDS_LIST', 9055 => 'n_IMPLEMENTS_LIST', 9056 => 'n_INTERFACE_DECLARATION', 9057 => 'n_CASE', 9058 => 'n_DEFAULT', 9059 => 'n_DECLARATION_PARAMETER_LIST', 9060 => 'n_DECLARATION_PARAMETER', 9061 => 'n_TYPE_NAME', 9062 => 'n_VARIABLE_VARIABLE', 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', 9064 => 'n_CLASS_MEMBER_DECLARATION', 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', 9066 => 'n_CLASS_CONSTANT_DECLARATION', 9067 => 'n_METHOD_DECLARATION', 9068 => 'n_METHOD_MODIFIER_LIST', 9069 => 'n_FUNCTION_MODIFIER_LIST', 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', 9071 => 'n_EXPRESSION_LIST', 9072 => 'n_LIST', 9073 => 'n_ASSIGNMENT', 9074 => 'n_NEW', 9075 => 'n_UNARY_PREFIX_EXPRESSION', 9076 => 'n_UNARY_POSTFIX_EXPRESSION', 9077 => 'n_BINARY_EXPRESSION', 9078 => 'n_TERNARY_EXPRESSION', 9079 => 'n_CAST_EXPRESSION', 9080 => 'n_CAST', 9081 => 'n_OPERATOR', 9082 => 'n_ARRAY_LITERAL', 9083 => 'n_EXIT_EXPRESSION', 9084 => 'n_BACKTICKS_EXPRESSION', 9085 => 'n_LEXICAL_VARIABLE_LIST', 9086 => 'n_NUMERIC_SCALAR', 9087 => 'n_STRING_SCALAR', 9088 => 'n_MAGIC_SCALAR', 9089 => 'n_CLASS_STATIC_ACCESS', 9090 => 'n_CLASS_NAME', 9091 => 'n_MAGIC_CLASS_KEYWORD', 9092 => 'n_OBJECT_PROPERTY_ACCESS', 9093 => 'n_ARRAY_VALUE_LIST', 9094 => 'n_ARRAY_VALUE', 9095 => 'n_CALL_PARAMETER_LIST', 9096 => 'n_VARIABLE_EXPRESSION', 9097 => 'n_INCLUDE_FILE', 9098 => 'n_HEREDOC', 9099 => 'n_FUNCTION_CALL', 9100 => 'n_INDEX_ACCESS', 9101 => 'n_ASSIGNMENT_LIST', 9102 => 'n_METHOD_CALL', 9103 => 'n_CONCATENATION_LIST', 9104 => 'n_PARENTHETICAL_EXPRESSION', 9105 => 'n_TRAIT_USE', 9106 => 'n_TRAIT_USE_LIST', 9107 => 'n_TRAIT_ADAPTATION_LIST', 9108 => 'n_TRAIT_INSTEADOF', 9109 => 'n_TRAIT_REFERENCE_LIST', 9110 => 'n_TRAIT_METHOD_REFERENCE', 9111 => 'n_TRAIT_AS', 9112 => 'n_YIELD', 9113 => 'n_FINALLY', 9114 => 'n_UNPACK', 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', ); } diff --git a/support/xhpast/xhpast.cpp b/support/xhpast/xhpast.cpp index 8bf79a7..3462ab7 100644 --- a/support/xhpast/xhpast.cpp +++ b/support/xhpast/xhpast.cpp @@ -1,121 +1,121 @@ #include "ast.hpp" #include #include #include using namespace std; int xhpastparse(void*, xhpast::Node **); int xhpast_process(std::string &in); void print_node(xhpast::Node *node); int main(int argc, char* argv[]) { if (argc != 1) { // Coupling: modify also src/parser/xhpast/bin/PhutilXHPASTBinary.php - cout << "7.1.0\n"; + cout << "7.1.2\n"; return 0; } ifstream inputFile; istream *inputStream; inputStream = &cin; std::stringbuf sb; *inputStream >> noskipws >> &sb; std::string buffer = sb.str(); inputFile.close(); return xhpast_process(buffer); } int xhpast_process(std::string &in) { char *buffer; in.reserve(in.size() + 1); buffer = const_cast(in.c_str()); buffer[in.size() + 1] = 0; // need double NULL for scan_buffer void* scanner; yy_extra_type extra; extra.insert_token = 0;//flags.eval ? T_OPEN_TAG_FAKE : 0; xhpast::Node *root = NULL; xhpastlex_init(&scanner); xhpastset_extra(&extra, scanner); xhpast_scan_buffer(buffer, in.size() + 2, scanner); xhpastparse(scanner, &root); xhpastlex_destroy(scanner); if (extra.terminated) { fprintf( stderr, "XHPAST Parse Error: %s on line %d\n", extra.error.c_str(), (int)extra.lineno); return 1; } printf("{"); printf("\"tree\":"); if (root) { // Extend the right token for the root node to the end of the concrete // token stream. This ensure all tokens appear in the tree. If we don't // do this and the file ends in tokens which don't go to the parser (like // comments and whitespace) they won't be represented in the tree. root->r_tok = (extra.token_list.size() - 1); print_node(root); } else { printf("null"); } printf(","); printf("\"stream\":"); printf("["); if (!extra.token_list.empty()) { for (xhpast::token_list_t::iterator ii = extra.token_list.begin();;) { printf("[%d, %d]", (*ii)->type, (int)(*ii)->value.length()); if (++ii != extra.token_list.end()) { printf(","); } else { break; } } } printf("]"); printf("}\n"); return 0; } void print_node(xhpast::Node *node) { int l = -1; if (node->l_tok != -1) { l = node->l_tok; } if (l == -1) { printf("[%u]", node->type); } else { int r = -1; if (node->r_tok != -1) { r = node->r_tok; } printf("[%u, %d, %d", node->type, l, r); if (!node->children.empty()) { printf(", ["); for (xhpast::node_list_t::iterator ii = node->children.begin();;) { print_node(*ii); if (++ii != node->children.end()) { printf(","); } else { break; } } printf("]"); } printf("]"); } }